ScaledThought

Servidor MCP remoto para una cuenta de ScaledThought (una API compatible con OpenAI para modelos de peso abierto que tu agente de codificación configura por sí mismo): claves de API, presupuestos por clave, uso y recargas prepagadas. Requiere una clave de API: npx -y scaledthought@latest init --region us

Servidor MCP alojado

npx add-mcp 'https://api.us.scaledthought.com/mcp?source=org-mcpsrv'

Se instala en Claude Code, Codex, Cursor y más

Documentación

ScaledThought

Los modelos open-weight más nuevos en una sola API compatible con OpenAI, configurados por tu agente en un solo prompt. Las llamadas se pagan con créditos prepagados que tu humano aprueba. Alojado en EE. UU., con Canadá próximamente. Tu agente se encarga del registro, el pago y la gestión de la cuenta.

Cero retención de datos (ZDR). Los prompts y las completaciones de las solicitudes de API nunca se almacenan ni se registran, y nunca se usan para entrenar modelos (excepto los trabajos de fine-tuning que ejecutes para tu propia cuenta). Cada respuesta de API incluye x-st-data-retention (none; los endpoints de video indican cuánto tiempo conservan el video). Cuando un proveedor externo atiende una solicitud, se menciona en x-st-subprocessor, y recibe solicitudes solo bajo términos de cero retención y sin entrenamiento. El único contenido que se conserva es el que nos pides que conservemos: archivos de entrada y salida de lotes y conjuntos de datos de fine-tuning, en tu región, hasta que los elimines o durante 30 días, y adaptadores de fine-tuning hasta que elimines el modelo.

Estás leyendo la superficie de agente de este sitio. El registro, las claves, los presupuestos, la facturación y la inferencia funcionan a través de la CLI, la API y el servidor MCP descritos a continuación. Tu humano también tiene un panel (facturación, claves, compañeros de equipo, agentes conectados) que abres para ellos con dashboard.

Protocolo de configuración

Si tu humano te pidió que lo configures en ScaledThought, sigue estos pasos en orden. Cada comando es no interactivo. Imprime un objeto JSON en stdout y sale con código 0. En caso de error, imprime {"error":{"code","message","hint"}} en stderr y sale con código distinto de cero; busca el código en Errores.

Si tu humano prefiere hacerlo él mismo, puede crear una cuenta y claves de API en https://app.us.scaledthought.com/sign-up?source=org-mcpsrv (solo cuentas de EE. UU. por ahora; inician sesión con un enlace enviado a su correo electrónico).

Versión corta. Copia cada comando exactamente como está escrito, incluidas las banderas. Los pasos a continuación indican qué imprime cada uno y cuándo preguntar primero a tu humano.

npx -y scaledthought@0.3 models --live --region us   # what's live; no account needed
npx -y scaledthought@0.3 init --region us --source org-mcpsrv   # the account; its key goes to ./.env
npx -y scaledthought@0.3 billing topup --amount-usd 20   # a payment link for your human; charges nothing
npx -y scaledthought@0.3 billing wait   # after they have the link: polls ~90 s, "paid" once they pay; on topup_pending run it again
npx -y scaledthought@0.3 chat -m deepseek-v4-1-flash "Reply with OK"   # verify (or init's suggested_model)

Antes de que tu humano pague, cada completación devuelve 402 insufficient_credits. Eso es esperado: dales el enlace billing topup y continúa, no te detengas ahí. Si ya tienen una cuenta, usa login en lugar de init (paso 2). Si los datos pudieran estar regulados por Canadá, pregunta primero (paso 1).

0. Verifica qué está activo primero (sin cuenta, sin escribir nada)

Antes de crear cualquier cosa, verifica que los modelos y precios activos se adapten a la tarea. Esto no requiere clave ni cuenta, y no escribe nada en el disco:

npx -y scaledthought@0.3 models --live --region us

Éxito: un arreglo JSON, del más reciente al más antiguo, con el id, modality y precios de cada modelo (USD por 1M de tokens). Si nada se adapta a la tarea, detente aquí y dile a tu humano en lugar de registrarte.

Qué hace la CLI en esta máquina. Se ejecuta desde npm como scaledthought@0.3: fijada a este major.minor, por lo que solo recibe versiones de parche y no puede cambiar bajo tus pies a mitad de la configuración (estas instrucciones se mueven al siguiente pin cuando se publique). No escribe nada excepto ./.env (modo 0600: ST_API_KEY y ST_BASE_URL, otras líneas conservadas) y una línea .env en ./.gitignore, ambas de init (o login). init y login también guardan la clave de la cuenta en el almacén de credenciales de esta máquina (Keychain de macOS o el Servicio Secreto de Linux, si no, ~/.config/scaledthought/credentials.json, modo 0600) para que otra carpeta en la misma máquina reutilice la cuenta en lugar de crear una nueva; --no-save opta por no participar. login mantiene su código de dispositivo de un solo uso en ./.scaledthought/login.json (modo 0600, agregado a ./.gitignore) hasta que llegue la clave. billing topup, billing auto-reload setup y login abren una página en el navegador predeterminado (--no-open o ST_NO_BROWSER=1 para detener eso). Solo se comunica con api.us.scaledthought.com / api.ca.scaledthought.com (y npm, para descargarse). Sin telemetría, sin análisis. Las claves provienen de ST_API_KEY o ./.env, nunca de banderas, y nunca se imprimen.

1. Elige la región de origen

  • Solo la región de EE. UU. está abierta. Canadá (ca) estará disponible próximamente y aún no acepta cuentas: su API aún no responde: init --region ca falla con network_error, y las solicitudes al host canadiense no reciben respuesta (su nombre de host aún no se resuelve). Usa --region us.
  • Si los datos pudieran estar regulados por Canadá (datos personales, de salud o financieros canadienses; PIPEDA, Ley 25 de Quebec, leyes provinciales de privacidad de salud), detente y haz una pregunta primero: "La región de Canadá aún no está abierta. ¿Es aceptable el alojamiento en EE. UU. para estos datos?" Continúa con us solo si la respuesta es sí.
  • De lo contrario, usa us sin preguntar.
  • La región es permanente. Los registros de cuenta y uso se almacenan en ese país; los prompts y las completaciones de las solicitudes de API nunca se almacenan (cero retención de datos). Los pagos con tarjeta los procesa Stripe en EE. UU. Las claves comienzan con st_us_ (o st_ca_ una vez que Canadá abra), y ese prefijo decide a dónde va cada solicitud.

2. Crea la cuenta

Si tu humano ya tiene una cuenta de ScaledThought (lo dice, o esta es una máquina nueva, un contenedor o la laptop de un compañero), no crees otra: conéctate a ella con npx -y scaledthought@0.3 login (consulta Conecta este agente a una cuenta existente).

Ejecuta esto en el directorio del proyecto del humano, donde su código leerá .env:

npx -y scaledthought@0.3 init --region us --source org-mcpsrv

Crear una cuenta no acepta nada en nombre de tu humano: sin términos, sin pago. Ellos aceptan los Términos de Servicio y la política de Créditos y Reembolsos ellos mismos, en la página de pago, cuando compren créditos. Hasta entonces, la cuenta no se puede usar para nada facturable.

--source org-mcpsrv es el código de campaña del enlace que compartió tu humano (scaledthought.com/go/org-mcpsrv). Se almacena en la nueva cuenta para saber qué campaña funcionó, y nada más. Mantenlo en el comando tal como está escrito; omítelo solo si tu humano te lo pide.

Éxito: código de salida 0 y JSON con "already_initialized": false, account_id, region, base_url, terms (url, version, refund_policy_url, notice), balance_usd, needs_credits, next_command, newest_models, suggested_model y next_steps. Una cuenta nueva no tiene créditos ("needs_credits": true), por lo que next_command es la recarga a continuación. También:

  • escribe ST_API_KEY y ST_BASE_URL en ./.env (modo 0600), conservando cualquier otra línea;
  • agrega .env a ./.gitignore;
  • nunca imprime la clave. No la imprimas, la pegues en el chat ni la confirmes.

Volver a ejecutarlo es seguro. Si ST_API_KEY ya está configurado (en el entorno o ./.env), init no crea nada y devuelve la cuenta existente con "already_initialized": true. Usa esa cuenta. Si sale con region_mismatch, ya existe una clave de la otra región: pregunta al humano antes de hacer cualquier otra cosa.

En una máquina donde ya hay una cuenta guardada (un init o login anterior), init no crea una nueva. Con una cuenta guardada, escribe una nueva clave de proyecto para esta carpeta y devuelve "reused_account": true con account_name. Con varias, devuelve choose_account (nombres, saldos, último uso) y una pregunta message_for_human, y no crea nada: pregúntalo, luego ejecuta init --account "<name or id>". init --new-account crea una cuenta separada de todos modos (para facturación separada).

Conecta este agente a una cuenta existente

Cuando tu humano ya tiene una cuenta (una máquina nueva, una segunda herramienta, un contenedor), conéctate a ella en lugar de ejecutar init:

npx -y scaledthought@0.3 login --region us

Imprime user_code (como WDJB-MJHT), verification_url (la página de conexión del panel, abierta en su navegador; el código nunca está en la URL) y message_for_human. Diles el mensaje: inician sesión por correo electrónico y escriben el código. En el mismo turno, ejecuta:

npx -y scaledthought@0.3 login --wait

Devuelve "status": "connected" con account_id, account_name, key_name y scopes una vez que aprueben, y escribe una nueva clave en ./.env (nunca impresa). La clave puede hacer lo que el aprobador puede: la aprobación de un propietario otorga todos los alcances, la de un miembro solo inference y read. En authorization_pending, ejecútalo de nuevo, hasta 10 minutos. Si tu humano te da una línea del panel como Connect to my ScaledThought account: npx -y scaledthought@0.3 login --code stl_…, pasa el código por stdin para que no quede en el historial de tu shell: echo '<the stl_ code>' | npx -y scaledthought@0.3 login --code -. Ya está aprobado y funciona una vez, durante 15 minutos. Para apuntar esta carpeta a otra cuenta guardada en esta máquina: use "<name>".

El init de una cuenta nueva también imprime existing_account_code, y billing topup lo agrega a message_for_human: si el humano ya tiene una cuenta, hace clic en Úsala en su lugar en la página de financiación, la elige y escribe ese código. Luego, billing wait devuelve "status": "connected_existing" con el account_name y balance_usd de esa cuenta: la cuenta nueva y vacía que init creó se cierra (no se cobra nada) y la clave en ./.env ahora pertenece a su cuenta existente. Continúa con ella.

3. Elige un modelo que esté activo en la región

Elige entre lo que está activo en la región en este momento:

npx -y scaledthought@0.3 models --live

Éxito: un arreglo JSON, del más reciente al más antiguo. Cada elemento tiene id, category, modality, live: true y precios. Usa el primer elemento cuyo modality sea chat (el suggested_model de init es la misma elección). Sin la CLI, GET $ST_BASE_URL/models devuelve los IDs de modelos activos en formato de lista de OpenAI (sin autenticación). La misma lista con precios, para un humano: https://scaledthought.com/pricing

Antes del paso 4: obtén créditos (tu humano paga)

La inferencia es prepagada y una cuenta nueva no tiene créditos: hasta que tu humano pague, cada completación devuelve 402 insufficient_credits. Eso es esperado, no es una configuración rota. No te detengas en el 402, no reintentes la llamada ni crees otra cuenta: crea el enlace de recarga de inmediato y dáselo a tu humano. Crear un enlace no cobra nada (solo el humano puede pagar, en la página que abre), por lo que no necesitas preguntar antes de crear uno. Omite este paso si billing status ya muestra balance_usd por encima de 0.

npx -y scaledthought@0.3 billing topup --amount-usd 20

Abre la página de financiación en el navegador de tu humano (opened_in_browser: true; --no-open omite eso). Allí confirman el monto ($20, u otro de $20 a $2,000), pueden activar la recarga automática (recomendado: por debajo de $5, agrega $20, para que no te detengas más tarde), luego aceptan los Términos y la política de Créditos y Reembolsos y pagan con tarjeta en el checkout de Stripe. No se cobra nada hasta que aprueben, y les enviamos un recibo por correo electrónico. Los créditos comprados no utilizados pueden reembolsarse dentro de la ventana de reembolso de la política. Éxito: JSON con topup_id, approval_url, expires_at, opened_in_browser y message_for_human (dice todo eso y recomienda la recarga automática; agrega --auto-reload-below 5 --auto-reload-amount 20 para preseleccionarla en su lugar).

Si opened_in_browser es true (el caso habitual), la página de financiación ya está frente a tu humano, así que no les hagas decirte cuándo han pagado:

  1. Diles con message_for_human (tiene el approval_url en caso de que la página no se abriera; si usas tus propias palabras, copia el enlace exactamente: es un enlace de pago de un solo uso).
  2. En el mismo turno, ejecuta:
npx -y scaledthought@0.3 billing wait   # {"status":"paid", ...} with the balance, as soon as they pay

Sondea durante unos 90 segundos (bajo el límite habitual de 2 minutos de una herramienta de shell). En topup_pending, ejecútalo de nuevo, hasta 15 minutos en total. Luego ve al paso 4. 3. Si sigue sin pagar después de 15 minutos, termina tu turno con message_for_human y ejecuta billing wait de nuevo cuando regresen.

Si opened_in_browser es false (una máquina sin cabeza, un contenedor, --no-open), aún no tienen la página: termina tu turno con message_for_human, porque muchas herramientas de agente muestran tus mensajes solo cuando tu turno termina y una espera iniciada primero retendría el enlace. Cuando regresen, ejecuta billing wait, luego ve al paso 4. No crees un enlace nuevo mientras haya uno pendiente (topup_pending repite su approval_url). Si el enlace expiró o falló (topup_expired, topup_failed), ejecuta billing topup de nuevo. Para activar la recarga automática más tarde sin comprar nada: billing auto-reload setup (mismo flujo; el humano guarda una tarjeta). Sin la CLI: POST /v1/billing/topup {"amount_usd": 20} (o POST /v1/billing/auto-reload/setup), abre el approval_url en su navegador tú mismo (macOS open, Linux xdg-open, Windows start) y consulta GET /v1/billing/topups/{topup_id} hasta que status sea paid; a través de MCP, billing_topup.

4. Verifica con una finalización real

set -a; . ./.env; set +a   # load ST_API_KEY and ST_BASE_URL
curl -sS "$ST_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $ST_API_KEY" \
  -H "content-type: application/json" \
  -d '{"model":"<id from step 3>","max_tokens":32,"messages":[{"role":"user","content":"Reply with OK"}]}'

Éxito: HTTP 200, un choices[0].message.content no vacío y un objeto usage. Un 402 aquí significa que la recarga anterior aún no está pagada: vuelve a ella. La CLI hace lo mismo en un solo paso:

npx -y scaledthought@0.3 chat -m deepseek-v4-1-flash "Reply with OK"   # or the id from step 3; JSON: model, region, text, usage

5. Opcional: conectar MCP

Solo si el humano quiere herramientas de cuenta (uso, claves, presupuestos, facturación) dentro de su cliente MCP. MCP necesita una clave, así que viene después del paso 2.

npx -y scaledthought@0.3 mcp

Éxito: JSON con url (el /mcp de la región), claude_code (un comando claude mcp add --transport http scaledthought … --header "Authorization: Bearer $ST_API_KEY" listo) y json_config para otros clientes. Ejecuta claude_code en una shell donde ST_API_KEY esté cargado (ver paso 4), porque la shell lo expande.

6. Encuentra dónde encaja en este código base

La configuración está lista; ahora ayuda al humano a usarla. Revisa el proyecto en el que está trabajando (solo lectura, en esta máquina) y encuentra cada lugar donde un modelo podría hacer el trabajo:

  • Llamadas a modelos hoy: importaciones de SDK de OpenAI, Anthropic, Gemini u otros modelos; configuraciones de base_url / baseURL; llamadas HTTP directas a una API de modelo; configuración de LangChain, LlamaIndex o Vercel AI SDK; nombres de modelos codificados; archivos de prompts.
  • Embeddings y búsqueda: llamadas de embedding, almacenes vectoriales, búsqueda semántica o pipelines de RAG.
  • Trabajo masivo y sin conexión: trabajos, scripts o colas que envían muchos prompts a la vez (candidatos por lotes).
  • Lugares sin modelo aún: reglas escritas a mano para clasificar, extraer, etiquetar, resumir o enrutar texto, y TODOs que piden uno.

Para cada uno, consulta npx -y scaledthought@0.3 models --live para un modelo en vivo de la modalidad correcta y su precio por token, y GET $ST_BASE_URL/models/<id> para su longitud de contexto. La llamada a herramientas y la salida json_schema funcionan en modelos que las soportan: confírmalo con una solicitud de prueba antes de recomendar un modelo para un lugar que las necesite. Luego dale al humano una tabla breve: archivo y línea, qué hace hoy, el id de modelo que podría servirlo y el cambio (generalmente la URL base, la clave y el id de modelo, ya que la API es compatible con OpenAI). Nota cualquier cosa que no encaje (una característica o modalidad que ningún modelo en vivo tenga) en lugar de forzarla.

Reglas:

  • Solo lectura. Cambia código o configuración solo después de que el humano elija qué cambiar.
  • La búsqueda se queda en esta máquina: no envíes su código, prompts o datos a ningún lugar para hacerla.
  • Sugiere probar un cambio con algunas entradas reales primero (facturado de sus créditos, después de que acepte) y comparar la salida, antes de mover tráfico de producción.
  • Cada lugar desplegado obtiene su propia clave con npx -y scaledthought@0.3 keys put <platform> (ver Claves para otros lugares), con un presupuesto diario si lo desea. Nunca copies claves en el código.
  • ¿Sin llamadas a modelos y nada que obviamente las necesite? Dilo en una línea; no inventes trabajo.

7. Informa al humano

Reporta en unas pocas líneas:

  • Región: us. Los prompts, las finalizaciones y los registros de cuenta permanecen en EE. UU.; los pagos con tarjeta los procesa Stripe en EE. UU. Canadá llegará pronto.
  • Créditos: el saldo de npx -y scaledthought@0.3 billing status (balance_usd), y que la inferencia se paga de él por token. Hasta la primera compra de créditos, la cuenta tiene 60 solicitudes/min por clave y hasta 5 claves.
  • Clave: en ./.env como ST_API_KEY (ignorado por git), con ST_BASE_URL. Cualquier SDK de OpenAI funciona con esos dos valores.
  • Verificado: qué modelo respondió, del paso 4.
  • Dónde encaja: la tabla del paso 6 (o que no encontraste llamadas a modelos), y pregunta cuáles cambiar.
  • Más créditos: npx -y scaledthought@0.3 billing topup --amount-usd <n> ($20 a $2,000 por recarga, como máximo $2,000 por 24 horas y 2 enlaces de aprobación abiertos a la vez) devuelve un approval_url para ellos; no se cobra nada sin su aprobación. Recarga automática opcional: ver Precios.
  • Panel: npx -y scaledthought@0.3 dashboard lo abre en su navegador (facturación, claves, compañeros de equipo). La persona que pagó es su propietario y recibió un correo de inicio de sesión; si no ha iniciado sesión, un clic envía un enlace por correo (sin contraseña). Solo cuentas de EE. UU. por ahora: los enlaces de inicio de sesión se envían solo en la región de EE. UU.
  • Términos: aceptaron los Términos de servicio y la Política de créditos y reembolsos ellos mismos al pagar; nada se aceptó en su nombre. Los créditos comprados no utilizados pueden reembolsarse dentro de la ventana de reembolso de la política.

Úsalo desde el código

Compatible con OpenAI. Lee la URL base de ST_BASE_URL; no codifiques el host de una región.

import os
from openai import OpenAI  # pip install openai; load .env first, e.g. python-dotenv's load_dotenv()

client = OpenAI(base_url=os.environ["ST_BASE_URL"], api_key=os.environ["ST_API_KEY"])
resp = client.chat.completions.create(
    model="deepseek-v4-1-flash",  # or a model id from `npx -y scaledthought@0.3 models --live`
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
import OpenAI from "openai"; // npm i openai

process.loadEnvFile(); // Node 20.12+: reads ./.env
const client = new OpenAI({ baseURL: process.env.ST_BASE_URL, apiKey: process.env.ST_API_KEY });
const resp = await client.chat.completions.create({
  model: "deepseek-v4-1-flash", // or a model id from `npx -y scaledthought@0.3 models --live`
  messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);
curl -sS "$ST_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $ST_API_KEY" \
  -H "content-type: application/json" \
  -d '{"model":"deepseek-v4-1-flash","messages":[{"role":"user","content":"hi"}]}'

Streaming (stream: true), herramientas, response_format y embeddings (POST $ST_BASE_URL/embeddings con un modelo de embedding) usan las formas de solicitud de OpenAI. La llamada a herramientas y la salida json_schema funcionan en modelos que las soportan; valida la salida estructurada antes de confiar en ella. Las solicitudes sin max_tokens obtienen un límite predeterminado. Cada respuesta de inferencia lleva x-st-region y x-st-request-id.

API de Responses y Codex

POST $ST_BASE_URL/responses habla la API de Responses de OpenAI, por lo que los clientes que usan solo ese protocolo, como Codex, pueden usar ScaledThought como su proveedor de modelos. Acepta input (una cadena, o mensajes, elementos function_call y function_call_output), instructions, herramientas de función y personalizadas (de formato libre), tool_choice, max_output_tokens, text.format para salida JSON y stream: true (eventos de Responses, que terminan con response.completed o response.incomplete con su usage, o response.failed con un error).

Es sin estado. No almacenamos respuestas, así que envía toda la conversación en input cada turno (Codex lo hace) y omite previous_response_id, que devuelve 400 invalid_request; store siempre es falso. Las herramientas alojadas como la búsqueda de archivos devuelven 400; una herramienta de búsqueda web se ignora. Las solicitudes sin max_output_tokens obtienen un límite de lo que el contexto del modelo deja después de tu prompt, como máximo 32,768 tokens.

La facturación es la misma que para los chat completions: por token, del uso que reporta el servidor de modelos, pagado de tus créditos.

# ~/.codex/config.toml
model = "deepseek-v4-1-flash"  # or a model id from `npx -y scaledthought@0.3 models --live`
model_provider = "scaledthought"

[model_providers.scaledthought]
name = "ScaledThought"
base_url = "https://api.us.scaledthought.com/v1"  # your ST_BASE_URL
env_key = "ST_API_KEY"
wire_api = "responses"
model_catalog_url = "https://api.us.scaledthought.com/v1/codex/models"  # same host (and region) as base_url
set -a; . ./.env; set +a  # puts ST_API_KEY in the environment
codex
  • Codex lee ST_API_KEY del entorno, así que carga ./.env en la shell primero. wire_api = "responses" es obligatorio: ScaledThought sirve a Codex a través de la API de Responses.
  • model_catalog_url le dice a Codex las ventanas de contexto de los modelos en vivo en tu región, para que compacte sesiones largas a tiempo, y le da su herramienta de edición apply_patch. Se construye a partir de los modelos en vivo en cada solicitud; Codex envía tu clave con ella, así que mantenla en el mismo host que base_url (el de tu región).

Errores

Los errores de API son {"error":{"message","type","code"}} con el estado HTTP a continuación. Los errores de CLI son {"error":{"code","message","hint"}} en stderr; para fallos de API, la CLI pasa el code de la API y agrega status (y retry_after o base_url cuando estén presentes).

estadocódigodequé hacer
400invalid_requestAPICorrige el campo indicado en el mensaje. No reintentes sin cambios.
400invalid_bodyAPICorrige el campo indicado en el mensaje. No reintentes sin cambios.
400invalid_jsonAPIEnvía JSON válido con content-type: application/json.
401invalid_api_keyAPIClave faltante, mal escrita o revocada. Carga ST_API_KEY desde .env; no crees una cuenta nueva.
401missing_api_keyAPIEnvía Authorization: Bearer $ST_API_KEY.
401key_expiredAPIEl expires_at de la clave ha pasado. Usa otra clave o crea una nueva con una clave que tenga el alcance de claves.
400invalid_expiryAPIexpires_in o expires_at deben estar en el futuro y como máximo 365 días adelante. Envía uno, no ambos.
400expiry_exceeds_parentAPIUna clave no puede sobrevivir a la clave que la crea. Solicita como máximo max_expires_at del cuerpo.
403scope_not_allowedAPISolicita solo los alcances que tu propia clave tiene (allowed_scopes en el cuerpo).
400budget_exceeds_parentAPIEl presupuesto diario de una clave de subagente debe caber en lo que su padre tiene restante hoy (max_daily_budget_usd en el cuerpo).
400limit_exceeds_parentAPILos límites de tasa y el presupuesto de una clave de subagente no pueden exceder los de su padre (o, cuando se cambia a sí misma, los propios).
400key_depth_exceededAPILas claves de subagente se anidan como máximo 16 niveles. Crea la clave desde una clave más arriba.
404key_not_foundAPINo existe tal clave en esta cuenta, o (para una clave de subagente) está fuera de las claves que creaste.
409key_not_activeAPISolo una clave activa puede rotarse. Crea una clave nueva en su lugar.
402budget_exceededAPIEl presupuesto diario de esta clave está agotado. Se restablece a las 00:00 UTC. Informa a tu humano; no reintentes ahora.
402insufficient_creditsAPIEl saldo de créditos no puede cubrir la solicitud (el cuerpo tiene balance_usd y required_usd). Ejecuta billing topup --amount-usd 20 y envía a tu humano el approval_url.
402daily_cap_exceededAPISe alcanzó un límite diario establecido por el operador en esta cuenta. Se restablece a las 00:00 UTC. Informa a tu humano.
402credits_required_for_batchesAPILos lotes se pagan con créditos prepagados. Ejecuta billing topup --amount-usd 20, luego reintenta una vez que tu humano apruebe.
402credits_required_for_fine_tuningAPIEl ajuste fino se paga con créditos prepagados. Ejecuta billing topup --amount-usd 20, luego reintenta una vez que tu humano apruebe.
409too_many_pending_topupsAPILa cuenta ya tiene 2 enlaces de aprobación impagos. Pide a tu humano que pague uno (billing status los lista), o espera a que expiren.
409daily_topup_limitAPILas recargas están limitadas a $2,000 por cuenta por 24 horas móviles, incluidos enlaces abiertos y recargas automáticas. Reintenta con como máximo available_usd del cuerpo, o espera.
403approval_requiredAPIActivar la recarga automática o aumentarla requiere a tu humano. Ejecuta billing auto-reload setup --below <usd> --amount <usd> (un enlace que tu humano aprueba; no se compra nada) y dale el approval_url. Desactivarla o reducirla no requiere aprobación.
402free_tier_key_limitAPILas cuentas que no han comprado créditos tienen 5 claves activas. Revoca una (keys revoke <id>) o compra créditos.
402free_tier_limitAPILas cuentas que no han comprado créditos no pueden aumentar presupuestos o límites de tasa. Compra créditos primero (billing topup --amount-usd 20).
409fine_tuning_requires_self_hostedAPIEste modelo base no se sirve en nuestras propias GPU en tu región, por lo que no se puede ajustar finamente aquí. Elige otro modelo base.
409model_not_liveAPIEse modelo aún no se sirve en tu región. Elige uno de models --live.
400invalid_video_urlAPIvideo_url debe ser una URL https pública o una URL data:video/mp4 (webm, mov) dentro del límite de tamaño.
403insufficient_scopeAPIEsta clave carece del alcance. Usa la clave predeterminada de init.
403account_suspendedAPIDetente. Dile a tu humano que envíe un correo a hello@scaledthought.com.
404model_not_foundAPINo está disponible aquí. Elige un id de models --live o GET $ST_BASE_URL/models.
404not_foundAPIRuta incorrecta. ST_BASE_URL ya termina en /v1; agrega /chat/completions.
421wrong_regionAPILa clave pertenece a la otra región. Usa el base_url en el cuerpo del error; elimina cualquier host codificado.
429rate_limit_exceededAPIEspera Retry-After segundos y luego reintenta.
429capacity_exhaustedAPICanadá: cada réplica del modelo está ocupada y las solicitudes canadienses nunca se desbordan a otro país. Espera Retry-After segundos y reintenta con retroceso, o usa otro modelo.
400invalid_webhook_urlAPILas URL de webhook deben ser endpoints https públicos en el puerto 443 (sin otro puerto, sin hosts privados, de bucle local o internos). Corrige la URL.
409too_many_webhooksAPIUna cuenta tiene como máximo 5 endpoints de webhook. Elimina uno (webhooks remove <id>) primero.
404webhook_not_foundAPINo existe tal webhook en esta cuenta. Lístalos con webhooks list.
503webhooks_unavailableAPILos webhooks aún no están habilitados en esta región. Consulta GET /v1/account para notices en su lugar.
502upstream_errorAPITransitorio. Reintenta con retroceso, o usa otro modelo de models --live.
503region_not_openAPILa región de Canadá aún no está abierta. Verifica con tu humano que el alojamiento en EE. UU. sea aceptable, luego usa init --region us y el host de EE. UU.
503service_unavailableAPITransitorio. Reintenta en unos segundos.
salida 1no_keyCLINo hay ST_API_KEY en el entorno o en ./.env. Para una cuenta existente ejecuta login; para una nueva, init --region us.
salida 1key_existsCLIlogin: esta carpeta ya tiene una clave. Úsala, o pasa --force para reemplazarla.
428authorization_pendingAPIlogin --wait: tu humano aún no ha escrito el código. Ejecútalo de nuevo (los códigos duran 10 minutos).
410expired_tokenAPIEl código de conexión expiró. Ejecuta login de nuevo para obtener uno nuevo.
409already_claimedAPIUn código de conexión funciona una sola vez. Ejecuta login de nuevo (o pide una nueva línea de conexión).
403access_deniedAPITu humano denegó la conexión. Pregúntale antes de intentar de nuevo.
salida 1region_mismatchCLIYa existe aquí una clave de la otra región. Úsala, o pregunta a tu humano antes de crear una segunda cuenta en otro lugar.
salida 1wrong_region_endpointCLIST_BASE_URL / ST_API_URL apunta a la otra región. Desactívalo. No se envió nada.
salida 1network_errorCLINo se pudo alcanzar la API. Verifica la red y luego reintenta.
salida 1bad_regionCLIUsa --region us. Canadá (ca) estará disponible pronto.
salida 2usage_errorCLIComando, bandera o argumento faltante desconocido. Ejecuta el comando con --help.

Compra de créditos: billing topup --amount-usd <n> (CLI), POST /v1/billing/topup {"amount_usd": n} (API) o billing_topup (MCP) devuelve un approval_url, la página de pago. El CLI lo abre en el navegador del humano por sí mismo; desde MCP o la API, ábrelo tú mismo (macOS open <url>, Linux xdg-open <url>, Windows start "" <url>), y también dale el enlace al humano en caso de que no se abra. Los créditos se acreditan tan pronto como pagan. billing topup --wait consulta hasta que la recarga se pague, expire o falle.

Modelos

Agregamos nuevos modelos de peso abierto tan pronto como podemos servirlos bien. npx -y scaledthought@0.3 models --live lista cada modelo disponible en tu región, del más nuevo al más antiguo, con sus precios (USD por 1M de tokens, o por unidad para modelos facturados por minuto, carácter o segundo); --modality <chat|embedding|...> lo filtra. Sin el CLI: GET $ST_BASE_URL/models (ids disponibles, formato de lista de OpenAI) y GET /v1/models/<id> (precios de un modelo, longitud de contexto, fecha de lanzamiento, puntos de referencia y estado de disponibilidad); a través de MCP, models_search. Por ejemplo GET $ST_BASE_URL/models/deepseek-v4-1-flash. https://scaledthought.com/pricing tiene la misma lista para humanos: cada modelo disponible en la región de EE. UU. con su precio, actualizado como máximo cada 5 minutos. Cada modelo se usa bajo la licencia de su editor, que debes seguir: https://scaledthought.com/legal/acceptable-use#model-licences

Precios

Créditos prepagados desde $20; tu humano aprueba cada compra a través de un enlace, y nada se sirve antes de que se pague. Recarga automática opcional en montos que tu humano apruebe. Cuando los créditos se agotan, las solicitudes devuelven 402 insufficient_credits.

  • Las cuentas que no han comprado créditos obtienen 60 solicitudes/min por clave y hasta 5 claves.
  • Recargas: $20 a $2,000 por recarga, como máximo $2,000 por 24 horas y 2 enlaces de aprobación abiertos a la vez. Los créditos nunca expiran. El uso se cobra al precio por token de cada modelo (USD por 1M de tokens): models --live, o https://scaledthought.com/pricing para cada modelo disponible en EE. UU. La entrada en caché se factura a la tasa de caché del modelo, o a la tasa de entrada cuando el modelo no tiene ninguna.
  • Los lotes y el ajuste fino se pagan con créditos: sin créditos devuelven credits_required_for_batches o credits_required_for_fine_tuning.
  • Recarga automática (recomendada): tu humano puede activarla en la página de financiación de cualquier recarga, o sin comprar nada con npx -y scaledthought@0.3 billing auto-reload setup --below 5 --amount 20 (un enlace donde guardan una tarjeta; billing wait devuelve una vez que está activada). Agrega $20 cada vez que el saldo baja de $5 (el umbral es de al menos $5; en la página de financiación, el monto de recarga predeterminado es el monto comprado); las cargas están limitadas a $2,000 por 24 horas móviles, y no hay límite mensual a menos que establezcas uno (--auto-reload-monthly-max, o más tarde con PATCH /v1/billing/auto-reload). Activarla o aumentarla requiere la aprobación de tu humano; npx -y scaledthought@0.3 billing auto-reload off no requiere ninguna. Si una recarga se rechaza, la recarga automática se desactiva y el siguiente 402 dice que obtengas un nuevo enlace de aprobación.

Servidor MCP

MCP remoto en https://api.{us|ca}.scaledthought.com/mcp (Streamable HTTP, 2026-07-28), autenticado con tu clave de API como token de portador. MCP no puede crear cuentas: regístrate primero con npx -y scaledthought@0.3 init o POST /v1/accounts, luego ejecuta npx -y scaledthought@0.3 mcp para la configuración exacta. La inferencia permanece en la API compatible con OpenAI. Herramientas:

  • account_status: Región, gasto, saldo de créditos, recarga automática, número de claves y avisos (informa a tu humano sobre cada uno). Llámala primero.
  • account_settings: Lee o cambia la configuración de la cuenta. ad_measurement: false excluye la cuenta de la medición de anuncios; cualquier clave puede hacerlo.
  • keys_manage: Lista, crea, rota o revoca claves (acción: list | create | rotate | revoke | revoke_self). create y rotate devuelven la clave completa una vez; create toma scopes, expires_in, child (una clave de subagente) y lives_in (dónde se almacenará); rotate toma grace. revoke_self revoca la clave en uso.
  • budget_manage: Establece o borra el presupuesto diario duro de una clave (USD) y los límites de tasa.
  • webhooks: Callbacks HTTPS firmados para balance.low, key.expiring y budget.exhausted (acción: add | list | remove). add devuelve signing_secret una vez.
  • models_search: Modelos con precios, contexto, puntos de referencia y estado de disponibilidad en tu región (live_only, category, search).
  • benchmarks_get: Nuestras propias puntuaciones por tarea y velocidad para un modelo.
  • usage_query: Solicitudes, tokens y costo en los últimos N días, por modelo, día o clave.
  • billing_topup: Con amount_usd (y auto_reload opcional): un approval_url para que tu humano compre créditos. acción: status | transactions | auto_reload_off.
  • fine_tuning: Lista, obtiene, cancela trabajos de ajuste fino y sus eventos; lista tus modelos ajustados finamente.
  • docs_search: Dónde están los documentos, llms.txt y tu URL base.

Lotes, ajuste fino, facturación

  • Inferencia por lotes: Files + Batches compatibles con OpenAI (POST /v1/files purpose=batch, POST /v1/batches). 50% del precio normal. Una ventana de finalización de 24 h: los lotes suelen terminar en 24 horas, pero no se promete que terminen a tiempo. Se paga con créditos prepagados. CLI: npx -y scaledthought@0.3 batches create requests.jsonl.
  • Ajuste fino (LoRA): POST /v1/files purpose=fine-tune (chat JSONL, al menos 10 ejemplos), luego POST /v1/fine_tuning/jobs. Un modelo base solo se puede entrenar mientras se ejecuta en nuestras propias GPU en tu región (de lo contrario, 409 fine_tuning_requires_self_hosted); la respuesta del trabajo tiene estimated_cost_usd, retenido de los créditos hasta que se liquide. El modelo resultante es privado para tu cuenta y se factura al precio de su modelo base. Los adaptadores no se pueden descargar. Se paga con créditos prepagados. CLI: npx -y scaledthought@0.3 fine-tune create examples.jsonl --model <base-id>.
  • Facturación: prepagada. GET /v1/billing devuelve balance_usd, auto_reload, pending_topups (cada uno con su approval_url) y recent_transactions. POST /v1/billing/topup {"amount_usd": n, "auto_reload"?: {"threshold_usd", "amount_usd", "monthly_limit_usd"}} devuelve un approval_url para tu humano; consulta GET /v1/billing/topups/{id} o GET /v1/billing. PATCH /v1/billing/auto-reload desactiva o reduce la recarga automática sin aprobación. GET /v1/billing/transactions es el libro mayor completo de créditos.
  • Entrada de video: los modelos de chat cuyas modalidades incluyen video aceptan partes {"type": "video_url", "video_url": {"url": "https://..."}} (o una URL data:video/mp4;base64,), un video por solicitud a menos que el modelo indique lo contrario. El video se factura como tokens de prompt según el recuento del motor. Otros modelos responden 400.
  • OpenAPI: la especificación del plano de control está en /openapi.json en el host de API de tu región.

Avisos, webhooks y encabezados de solicitud

  • Avisos: informa a tu humano. Las respuestas de la API pueden incluir x-st-notice con códigos separados por comas: low_balance (una cuenta cuyo saldo de crédito es inferior a $5). Cuando veas uno, informa a tu humano qué significa y qué aprobar (una recarga o recarga automática); no sigas hasta que las solicitudes fallen. GET /v1/account (notices, notice_text), MCP account_status, status y doctor en la CLI muestran los mismos códigos.
  • Webhooks en lugar de sondeos: webhooks add https://hooks.example.com/st (CLI), POST /v1/webhooks {"url", "events"} (API) o MCP webhooks (acción agregar). Eventos: balance.low, key.expiring (3 días antes de que expire una clave) y budget.exhausted (se ha gastado el presupuesto diario de una clave o el límite diario de la cuenta). Solo URL públicas https en el puerto 443; como máximo 5 por cuenta; necesita el alcance billing. La respuesta tiene signing_secret, que se muestra una vez: guárdalo como una clave.
  • Cada entrega es un POST a tu URL, dondequiera que esté alojada (incluso fuera de la región de tu cuenta), con JSON {id, type, created_at, region, account_id, data} y nada más. data por evento: balance.low {balance_micros, threshold_micros}; key.expiring {key_id, expires_at}; budget.exhausted {scope, key_id, budget_micros, spent_today_micros, resets_at}. Solo IDs, montos enteros en microdólares, recuentos y marcas de tiempo, nunca prompts, nombres o correos electrónicos. Verifica x-st-signature: t=<unix seconds>,v1=<hex>, donde v1 es HMAC-SHA256 de <t>.<raw body> con la clave secreta de firma, rechaza t mayor de 5 minutos y deduplica en id. Responde 2xx dentro de 10 segundos; los fallos se reintentan con retroceso durante unos dos días, y un endpoint que sigue fallando se desactiva (elimínalo y vuelve a agregarlo). Las entregas se conservan 30 días.
import hashlib, hmac, time

def verify(secret: str, header: str, body: bytes) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    if abs(time.time() - int(parts["t"])) > 300:
        return False
    mac = hmac.new(secret.encode(), parts["t"].encode() + b"." + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(mac, parts["v1"])
  • Encabezados de solicitud opcionales en inferencia: x-st-app: <slug> (letras minúsculas, dígitos, ., _ y -, hasta 64 caracteres) nombra tu aplicación en los registros de uso; no se publica en ningún lugar. x-st-session: <id> (hasta 128 caracteres, por ejemplo, uno por conversación) mantiene una conversación en la misma réplica para que se reutilice su prefijo de prompt en caché; se mantiene solo en memoria, nunca se almacena ni se registra.
  • Capacidad en Canadá: las solicitudes canadienses nunca se desbordan a otro país. Cuando cada réplica que sirve un modelo está ocupada, una solicitud espera brevemente y luego recibe 429 capacity_exhausted con Retry-After. Reintenta con retroceso o usa otro modelo.

Alojamiento y datos

  • La región de EE. UU. está abierta: https://api.us.scaledthought.com/v1. Canadá (https://api.ca.scaledthought.com/v1) estará disponible próximamente; su API no responde hasta que se abra. ST_BASE_URL en .env ya es el correcto.
  • Cada clave está vinculada a su región. Las solicitudes se atienden y registran, y los registros de cuenta y uso se almacenan, solo en ese país. Una clave enviada al host de la otra región recibe 421 wrong_region y el cuerpo nunca se lee. Los pagos con tarjeta los procesa Stripe en EE. UU. para ambas regiones; los prompts y las completaciones nunca van a Stripe.
  • Medición de anuncios: nada sobre una cuenta se envía a una plataforma de anuncios a menos que el humano haya elegido un prompt de medición de anuncios de aceptación en una campaña de EE. UU.; entonces solo el ID de clic del anuncio, el registro y la primera compra van a esa única plataforma, nunca desde o sobre cuentas ca. Puedes optar por no participar en cualquier momento con account ad-measurement off (PATCH /v1/account con {"ad_measurement": false}).
  • Retención de datos cero: los prompts y las completaciones de las solicitudes de API no se registran ni almacenan, y no se usan para entrenar modelos (excepto los trabajos de ajuste fino que ejecutas para tu propia cuenta). Los archivos de entrada y salida de lotes y los conjuntos de datos de ajuste fino se almacenan en tu región hasta que los elimines o durante 30 días; los adaptadores de ajuste fino hasta que elimines el modelo. Detalles: https://scaledthought.com/legal/privacy
  • Estado: https://scaledthought.com/status muestra si la API de cuenta de cada región (GET /healthz) y la API de modelo (GET /v1/models) respondieron cuando el sitio las verificó por última vez (como máximo una vez por minuto; no se envía ninguna solicitud de modelo), y cada incidente que hemos informado. Verifica la API de cuenta tú mismo: GET https://api.us.scaledthought.com/healthz responde {"ok":true,"region":"us"}.

Seguridad

Hechos legibles por máquina: https://scaledthought.com/security.json (los mismos hechos que https://scaledthought.com/security). Informes de vulnerabilidad: security@scaledthought.com.

  • x-st-region: us: La región que atendió la solicitud. En cada respuesta, incluidos los errores.
  • x-st-data-retention: none: Los prompts y las completaciones de esta solicitud no se almacenan. En cada respuesta, incluidos los errores.
  • x-st-request-id: 01K5Z3T8R2V9Q4M6N1P7B0C8XD: El ID de la solicitud, para registros de uso y soporte. En respuestas de inferencia.
  • Las claves se almacenan solo como hashes y se muestran una vez. Alcances: inference, read, keys, billing; una clave solo puede otorgar alcances que ella misma tenga (403 scope_not_allowed).
  • Caducidad: keys create --expires-in 30d (o expires_in / expires_at en POST /v1/keys), como máximo 365 días; luego 401 key_expired. Una clave nunca sobrevive a la clave que la creó.
  • Claves de subagente: keys create --name <name> --child --budget-usd 2 ("child": true). Los alcances, el presupuesto diario (dentro de lo que el padre tenga restante hoy), los límites de velocidad y la caducidad permanecen dentro de los del padre; revocar una clave revoca cada clave debajo de ella.
  • Rotación: keys rotate <id> --grace 24h (POST /v1/keys/{id}/rotate) imprime un reemplazo una vez; la clave anterior sigue funcionando durante el período de gracia (predeterminado 24 h, 0 a 7 días).
  • Si crees que la clave en .env se filtró: si tiene el alcance keys, keys rotate <id> --grace 0 te da un reemplazo y detiene la clave anterior de inmediato; escribe la nueva clave en .env como ST_API_KEY sin imprimirla. De lo contrario, ejecuta keys revoke-self (DELETE /v1/keys/self, no se necesita alcance; también revoca las claves de subagente de la clave) e informa a tu humano. De cualquier manera, cuéntales qué pasó.
  • Una lista actual de las empresas que procesan datos para nosotros, con lo que cada una recibe y dónde, está disponible a pedido. Envía un correo a privacy@scaledthought.com.
  • Nunca: almacenamos contenido de solicitudes (los prompts y las completaciones de las solicitudes de API se procesan en memoria y se descartan. Los archivos de lotes y ajuste fino, incluidos los resultados de lotes, se eliminan dentro de los 30 días.); registramos contenido (los prompts y las completaciones nunca van a registros, trazas, métricas, análisis o mensajes de error. Los registros de uso contienen recuentos, costos y tiempos.); entrenamos con tus datos (no usamos tus prompts, completaciones o archivos para entrenar modelos, excepto un ajuste fino que inicies para tu propio modelo privado.); hacemos conmutación por error a la otra región (cuando una región está ocupada o caída, sus solicitudes nunca se envían a la otra región.); vemos tu número de tarjeta (lo ingresas en la página de pago de Stripe; nunca llega a nuestros servidores.); vendemos información personal (no la vendemos. La Política de Privacidad dice qué compartimos, con quién y por qué.)
  • Cierre de una cuenta: cierra la cuenta con DELETE /v1/account (una clave con el alcance de claves o facturación). Cada clave se revoca de inmediato, los lotes en ejecución y los trabajos de ajuste fino se cancelan, los modelos de ajuste fino se eliminan y los datos personales (nombre, correo electrónico, nombres de claves, archivos) se borran, a menos que una retención legal requiera que los conservemos. El crédito comprado no utilizado se reembolsa automáticamente una vez que el uso se ha liquidado; los pagos en disputa o retenidos los maneja nuestro equipo. Los registros de facturación y uso, que no contienen nombres, correos electrónicos ni contenido, se conservan durante 6 años, como exige la ley fiscal y contable.

Claves para otros lugares

Dale a cada lugar que ejecuta código su propia clave de subagente nombrada, colocada directamente en el almacén de secretos de esa plataforma. La clave va al CLI propio de la plataforma en stdin: nunca se imprime, nunca en argv o historial de shell.

  • npx -y scaledthought@0.3 keys put vercel --env production (en el directorio de la aplicación vinculada), keys put github --repo acme/app --budget-usd 2, keys put cloudflare --worker summariser; también fly, gcp, aws, k8s, doppler. Almacena ST_API_KEY, nombra la clave según el lugar y la registra en lives_in (GET /v1/keys), para que un humano sepa qué rompe al revocarla. El CLI de la plataforma debe estar instalado y con sesión iniciada; si el almacenamiento falla, la nueva clave se revoca. La URL base no es un secreto: establece ST_BASE_URL como una variable simple si tu código la lee.
  • npx -y scaledthought@0.3 keys rotate --all --push --grace 1h rota cada clave que vive en algún lugar y coloca cada reemplazo en el mismo lugar; las claves anteriores se detienen después del período de gracia. No se imprime nada más que nombres y a dónde fueron.
  • npx -y scaledthought@0.3 connect opencode (o aider) escribe la URL base y una nueva clave en la configuración de esa herramienta (archivos 0600). connect cursor y connect continue imprimen pasos para tu humano en su lugar; no se te muestra ninguna clave.

Legal

Crear una cuenta (CLI init o POST /v1/accounts) no acepta nada en nombre de nadie. El humano u organización para quien actúas es el cliente: aceptan los Términos de Servicio en la página de pago cuando compran créditos por primera vez (o guardan una tarjeta para recarga automática), y cada aprobación de pago es su autorización de ese pago. Son responsables de tu uso de la cuenta a partir de entonces.

Versión actual: 2026-10-12. Último cambio de la Política de Privacidad (12 de octubre de 2026): ahora puedes crear una cuenta tú mismo en el panel (solo región de EE. UU.). Si lo haces, recopilamos tu dirección de correo electrónico en ese momento, antes de cualquier pago, y la usamos para enviarte enlaces de inicio de sesión; se mantiene en la región de la cuenta y se borra cuando te eliminan de la cuenta o la cuenta se cierra. Una cuenta que crea tu agente aún no necesita nombre ni correo electrónico. También se almacena un código de campaña cuando te registras en el panel a través de un enlace que lo lleva.

  • Términos de Servicio: El acuerdo entre ScaledThought y sus clientes. Un agente que crea una cuenta acepta estos términos para el humano u organización para quien actúa, que es el cliente.
  • Política de Privacidad: Qué recopilamos, por qué, dónde se almacena y durante cuánto tiempo. Los prompts y las completaciones no se registran ni almacenan, los datos permanecen en tu región de origen (los pagos con tarjeta pasan por Stripe en EE. UU.), y nunca entrenamos con tu contenido.
  • Política de Uso Aceptable: Qué no debes hacer tú, tus agentes y tus usuarios con ScaledThought, y tus obligaciones bajo la licencia de cada modelo.
  • Política de Créditos y Reembolsos: Cómo funcionan los créditos prepagados y la recarga automática, qué sucede cuando se agotan los créditos y cómo se manejan los reembolsos y disputas.
  • Política de Divulgación de Vulnerabilidades: Cómo informar una vulnerabilidad de seguridad en ScaledThought, qué está en el alcance y qué prometemos a cambio.

Marcas comerciales

No afiliado ni respaldado por Anthropic, OpenAI, Cursor ni ningún editor de modelos. Claude, Claude Code, Codex, Cursor, OpenAI y los nombres de modelos son marcas comerciales de sus propietarios. Las licencias de modelos son de los editores; listar un modelo no implica que su editor respalde a ScaledThought.

Referencia de la CLI

npx -y scaledthought@0.3 <command>. La salida es JSON siempre que stdout no sea una terminal (o con --json). Las claves provienen de ST_API_KEY o ./.env, nunca de las banderas. --help funciona en todos los comandos.

  • init --region us: Cuenta y clave en EE. UU. Escribe ST_API_KEY y ST_BASE_URL en .env. Es seguro volver a ejecutarlo. Canadá (ca) estará disponible pronto.
  • init --account Acme: En una carpeta nueva en una máquina con cuentas guardadas: usa esa cuenta con una nueva clave de proyecto (init pregunta cuál cuando hay varias). --new-account crea una cuenta separada; --no-save mantiene la clave fuera del almacén de credenciales de esta máquina.
  • login --region us: Conectar a una cuenta existente: imprime un código que tu humano escribe en la página de conexión del panel (abierta en su navegador). Luego ejecuta login --wait.
  • login --wait: Espera unos 90 segundos a que tu humano apruebe el código, luego escribe una nueva clave en .env (nunca se imprime). Vuelve a ejecutarlo en authorization_pending.
  • login --code -: Usa una línea de conexión creada en el panel (su código stl_ en stdin, fuera del historial del shell): ya aprobada, funciona una vez durante 15 minutos.
  • use "Side project": Apunta esta carpeta a otra cuenta guardada en esta máquina: una nueva clave de proyecto en .env; la clave de proyecto anterior de la carpeta se revoca.
  • init --region us --source a-rd: Lo mismo, registrando el código de campaña del enlace scaledthought.com/go/ que te trajo (opcional). Un código inválido se descarta con una advertencia.
  • models --live: Modelos disponibles en tu región ahora, los más recientes primero, con precios. Filtra con --category o --search. La lista de EE. UU. también está en /pricing.
  • models <id>: Precios, contexto, benchmarks y estado en vivo de un modelo.
  • chat -m <id> "prompt": Envía un mensaje a un id de modelo de models --live.
  • account: Región, gasto y saldo de crédito.
  • account ad-measurement off: Excluirse de la medición de anuncios: nada sobre la cuenta se envía jamás a una plataforma de anuncios. on lo reactiva.
  • keys create --name <name> --budget-usd 5: Nueva clave con un presupuesto diario fijo en USD. La clave se imprime una vez.
  • keys create --name <name> --expires-in 30d --scopes inference,read: Una clave que expira (máximo 365 días) con un subconjunto de los alcances de tu clave.
  • keys create --name <name> --child --budget-usd 2: Una clave de subagente: alcances, presupuesto, límites de tasa y expiración dentro de los de tu clave; se revoca cuando tu clave se revoca.
  • keys list: Tus claves (solo prefijos).
  • keys rotate <id> --grace 24h: Reemplazar una clave: la nueva clave se imprime una vez; la anterior sigue funcionando durante el período de gracia (0 a 7 días).
  • keys revoke <id>: Revocar una clave y sus claves de subagente. Dejan de funcionar en unos 30 segundos.
  • keys revoke-self: Revocar la clave que estás usando ahora (y sus claves de subagente), por ejemplo, si pudo haberse filtrado. Irreversible.
  • keys put github --repo <owner/repo> --budget-usd 2: Colocar una nueva clave de subagente directamente en el almacén de secretos de una plataforma como ST_API_KEY, a través de su propia CLI con la clave en stdin (nunca impresa). Destinos: github, vercel, fly, cloudflare, gcp, aws, k8s, doppler. La clave se nombra según el lugar y registra dónde vive (lives_in). Si el almacenamiento falla, la nueva clave se revoca.
  • keys rotate --all --push --grace 1h: Rotar cada clave que keys put almacenó en algún lugar y colocar cada reemplazo en el mismo lugar; las claves anteriores dejan de funcionar después del período de gracia. No imprime claves. Una clave: keys rotate --push.
  • connect opencode: Apuntar una herramienta compatible con OpenAI a ScaledThought: opencode y aider obtienen la URL base y su propia clave de subagente en su configuración (archivos 0600, clave nunca impresa); cursor y continue obtienen pasos para tu humano.
  • usage --days 7 --by model: Solicitudes, tokens y costo por modelo, día o clave.
  • billing status: Saldo de crédito, recarga automática, recargas pendientes.
  • billing topup --amount-usd 20: Comprar créditos prepagados ($20 a $2,000 por recarga, máximo $2,000 por 24 horas y 2 enlaces de aprobación abiertos a la vez; predeterminado 20): abre la página de financiamiento en el navegador de tu humano, donde confirman el monto, pueden activar la recarga automática y pagar.
  • billing wait: Regresa tan pronto como tu humano paga la recarga abierta, con el nuevo saldo. Sondea unos 90 segundos por ejecución; vuelve a ejecutarlo en topup_pending.
  • billing topup --amount-usd 20 --auto-reload-below 5 --auto-reload-amount 20: Recargar con recarga automática preseleccionada en la página de financiamiento (tu humano puede desmarcarla).
  • billing auto-reload setup --below 5 --amount 20: Activar la recarga automática sin comprar nada: abre una página donde tu humano guarda una tarjeta. Luego billing wait.
  • billing auto-reload off: Desactivar la recarga automática. No se necesita aprobación.
  • billing transactions: El libro mayor de crédito: compras, recargas automáticas, uso, lotes, ajuste fino, reembolsos.
  • batches create requests.jsonl: Subir un archivo JSONL y comenzar un lote con 50% de descuento. Requiere créditos prepagados.
  • fine-tune create examples.jsonl --model <base-id>: Subir un conjunto de datos y comenzar un trabajo LoRA. Requiere créditos prepagados.
  • webhooks add https://hooks.example.com/st --events balance.low,budget.exhausted: Obtener un POST firmado cuando el saldo es bajo, una clave está por expirar o un presupuesto se agota (predeterminado: cada evento). Imprime signing_secret una vez.
  • webhooks list: Tus endpoints de webhook.
  • webhooks remove <id>: Eliminar un endpoint de webhook.
  • doctor: Verifica la clave en .env, su región, la cuenta y su crédito, y lista avisos para informar a tu humano.
  • mcp: Imprime el comando claude mcp add y la configuración JSON para tu región.
  • dashboard --page billing: Abre el panel de tu humano (resumen, facturación, claves, miembros, conexión) en su navegador. Si no han iniciado sesión, un clic les envía un enlace por correo.
  • members: Quién puede iniciar sesión en el panel de la cuenta: correo, rol (propietario o miembro), estado.
  • status: Salud por modelo en tu región durante la última hora, más los avisos de tu cuenta cuando hay una clave configurada.

Endpoints de la API

En el host de tu región ($ST_BASE_URL es https://api.{us|ca}.scaledthought.com/v1). Autentica con Authorization: Bearer $ST_API_KEY salvo que se indique.

  • POST /v1/accounts: Crear una cuenta en la región de este host. Devuelve api_key (una vez) y base_url. Sin autenticación. Fuente opcional: el código de campaña de un enlace /go/.
  • POST /v1/chat/completions: Chat, herramientas, salida JSON, transmisión. Compatible con OpenAI.
  • POST /v1/responses: La API de Respuestas de OpenAI (Codex): herramientas de función y personalizadas, transmisión. Sin estado: envía toda la conversación en cada turno; previous_response_id no es compatible.
  • POST /v1/completions: Finalización de texto sin procesar.
  • POST /v1/embeddings: Incrustaciones para modelos de incrustación.
  • GET /v1/models: Ids de modelos disponibles en esta región (formato de lista de OpenAI). Sin autenticación.
  • GET /v1/models/{id}: Un modelo: precios, contexto, benchmarks y live_in_region. Sin autenticación.
  • GET /v1/models/{id}/benchmarks: Nuestras propias puntuaciones y velocidad por tarea.
  • GET /v1/account: Plan, región, saldo, gasto, cantidad de claves y avisos (low_balance) con notice_text para transmitir a tu humano.
  • PATCH /v1/account: Configuración de la cuenta: {"ad_measurement": false} excluye de la medición de anuncios (cualquier clave); true necesita el alcance de claves o facturación.
  • GET /v1/keys: Listar claves.
  • POST /v1/keys: Crear una clave: scopes (un subconjunto de los tuyos), daily_budget_usd, límites de tasa, expires_in o expires_at (máximo 365 días), child: true para una clave de subagente, lives_in (dónde se almacenará, solo visualización).
  • POST /v1/keys/{id}/rotate: Reemplazar una clave. La nueva clave se devuelve una vez; la anterior funciona durante el período de gracia (predeterminado 24 h, 0 a 7 días).
  • PATCH /v1/keys/{id}: Cambiar el nombre, presupuesto diario, límites de tasa o lives_in de una clave (null lo borra).
  • DELETE /v1/keys/{id}: Revocar una clave y sus claves de subagente.
  • DELETE /v1/keys/self: La clave que llama se revoca a sí misma y a sus claves de subagente. No se necesita alcance.
  • GET /v1/usage: Solicitudes, tokens y costo (días, group_by).
  • GET /v1/billing: Saldo de crédito, recarga automática, recargas pendientes y transacciones recientes.
  • POST /v1/billing/topup: Comprar créditos: {amount_usd, auto_reload?} devuelve una approval_url para tu humano.
  • GET /v1/billing/topups/{id}: Estado de una recarga (abierta, pagada, expirada, fallida).
  • PATCH /v1/billing/auto-reload: Desactivar o reducir la recarga automática. Aumentarla requiere una nueva aprobación de recarga.
  • GET /v1/billing/transactions: El libro mayor de crédito, los más recientes primero (cursor).
  • POST /v1/webhooks: Agregar un webhook: {url (https público, puerto 443), events}. Devuelve signing_secret una vez. Alcance de facturación; máximo 5.
  • GET /v1/webhooks: Tus endpoints de webhook (estado, último éxito y fallo).
  • DELETE /v1/webhooks/{id}: Eliminar un endpoint de webhook.
  • POST /v1/files: Subir JSONL (purpose=batch o fine-tune).
  • POST /v1/batches: Iniciar un lote. GET /v1/batches/{id} para sondear, POST /v1/batches/{id}/cancel para detener.
  • POST /v1/fine_tuning/jobs: Iniciar un trabajo LoRA desde un archivo subido con purpose=fine-tune.
  • GET /v1/status: Salud por modelo en esta región, última hora.
  • POST /v1/dashboard/link: Una URL para el panel de tu humano (página opcional), los propietarios y un mensaje para transmitir. Alcance de facturación o claves.
  • POST /v1/device/codes: Solicitar conexión a una cuenta existente. Sin clave. Devuelve device_code (secreto), user_code para que tu humano lo escriba en verification_url, expires_in, interval.
  • POST /v1/device/token: Recoger la clave una vez aprobada: {device_code}, o {connect_code} (stl_…) para una línea de conexión del panel. 428 authorization_pending hasta entonces; una clave por código, con los alcances del aprobador.
  • GET /v1/members: Quién puede iniciar sesión en el panel (correo, rol, estado). Alcance de lectura.

Documentación para humanos: https://scaledthought.com/docs