Códigos de error
Cuando algo se rechaza, el motivo llega como un código corto legible por máquina. La consola convierte la mayoría en una notificación emergente; la API los devuelve como JSON.
{
"detail": {
"code": "OFFER_UNAVAILABLE",
"message": "This offer is no longer available"
}
}
Algunos códigos llevan campos adicionales junto a code y message: DISK_TOO_LARGE devuelve max_disk_gb y MACHINE_DISK_EXHAUSTED devuelve available_disk_gb, de modo que un cliente puede limitar el control deslizante y reintentar sin una segunda ida y vuelta.
Esos dos no son intercambiables, y limitar al equivocado produce un bucle infinito. max_disk_gb es el disco total de la máquina; available_disk_gb es lo que queda después de los demás inquilinos y de una reserva de 50 GB para el anfitrión. Por eso una máquina puede pasar DISK_TOO_LARGE y aun así responder MACHINE_DISK_EXHAUSTED — incluso una vacía, porque la reserva nunca se vende. Limite a available_disk_gb cuando lo reciba.
Autenticación y alcance de la organización
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 401 | TOKEN_INVALID | Falta el encabezado Authorization, el token está mal formado, la clave de API es desconocida o fue revocada, o se envió una clave de API a un endpoint de cuenta | Envíe un token bearer válido. Los endpoints de cuenta como /v1/me y /v1/ssh-keys necesitan una sesión iniciada, no una clave shk_ |
| 401 | TOKEN_EXPIRED | El token de sesión pasó su fecha de expiración | Inicie sesión de nuevo. Para scripts desatendidos, use una clave de API en su lugar |
| 403 | NOT_A_MEMBER | X-Org-Id nombra una organización a la que usted no pertenece | Quite el encabezado para usar su organización personal, o pida una invitación a un administrador |
| 403 | ORG_MISMATCH | X-Org-Id no coincide con la organización en la que se creó la clave de API | Quite el encabezado, o use una clave que pertenezca a esa organización |
| 403 | ADMIN_REQUIRED | Una acción reservada a administradores —el pago, las invitaciones, la gestión de miembros, las claves de API del equipo— intentada como miembro o con una clave de API | Pídaselo a un administrador, o repita la acción desde una sesión iniciada de administrador |
| 400 | INVALID_ORG_ID | X-Org-Id no es un id válido | Copie el id de GET /v1/orgs |
Despliegue
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 402 | INSUFFICIENT_BALANCE | Su saldo no cubre una hora de la instancia —GPU más disco— cuando la despliega o la inicia. Estar por encima de cero no basta | Agregue créditos. Solo un administrador puede recargar |
| 409 | OFFER_UNAVAILABLE | La última unidad libre de esa forma fue tomada entre el momento en que usted la abrió y el momento en que desplegó | Vuelva al mercado y elija otra oferta. El recuento de una tarjeta es una instantánea; el despliegue es lo que decide |
| 404 | OFFER_NOT_FOUND | A GET /v1/offers/{id} se le pasó un id que no existe o que fue retirado del catálogo. Un despliegue contra una oferta desconocida devuelve OFFER_UNAVAILABLE en su lugar | Vuelva a listar las ofertas y use un id vigente |
| 422 | DISK_TOO_LARGE | El disk_gb solicitado es mayor que el total de la máquina. La respuesta incluye max_disk_gb | Solicite como máximo max_disk_gb, o elija una máquina con un disco más grande |
| 409 | MACHINE_IN_MAINTENANCE | La máquina está reservada para desconectarse demasiado pronto como para arrancar una instancia en ella. La respuesta incluye next_maintenance | Elija otra máquina, o vuelva después de la ventana. Una ventana más lejana no bloquea el despliegue: se muestra en la oferta |
| 409 | MACHINE_DISK_EXHAUSTED | El disco de la máquina ya está comprometido con otros inquilinos. Lleva varios a la vez, y el disco se vende contra lo que queda, no contra el total — así que esto puede seguir a un disk_gb que superó DISK_TOO_LARGE. La respuesta incluye available_disk_gb y requested_disk_gb | Reintente en available_disk_gb o por debajo, o elija otra máquina. available_disk_gb puede ser 0 |
| 422 | OFFER_NOT_VM_CAPABLE | Una plantilla con modo de lanzamiento vm se dirigió a una máquina que no puede ejecutar máquinas virtuales | Despliegue la plantilla en una oferta con capacidad de VM, o elija una plantilla en otro modo de lanzamiento |
| 404 | TEMPLATE_NOT_FOUND | El id de la plantilla no existe, o la plantilla fue eliminada | Use una plantilla de la galería, o un hash_id que le hayan dado |
| 404 | SSH_KEY_NOT_FOUND | El ssh_key_id no es una de sus claves | Liste GET /v1/ssh-keys y use un id de su propia cuenta. Las claves pertenecen a un usuario, no a una organización |
Acciones sobre la instancia
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 404 | INSTANCE_NOT_FOUND | El id de la instancia no existe en la organización a la que está dirigida la solicitud | Revise el id, y revise que esté en la organización correcta |
| 409 | INVALID_STATE | La acción no es válida desde el estado actual de la instancia: detener algo que ya se está deteniendo, destruir algo a mitad de la creación | Espere a que la instancia llegue a running o stopped y luego reintente. Consulte Estados de la instancia |
Plantillas
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 403 | TEMPLATE_IMMUTABLE | Intentó editar o eliminar una plantilla del sistema curada por Superheat | Duplíquela primero y luego edite su copia |
| 409 | TEMPLATE_NAME_TAKEN | Su organización ya tiene una plantilla con ese nombre, sin distinguir mayúsculas y minúsculas | Elija otro nombre |
| 404 | TEMPLATE_NOT_FOUND | El id o el hash_id no resuelve a una plantilla que usted pueda ver | Confirme que el enlace compartido esté completo y vigente: el hash_id cambia cuando cambia la receta de lanzamiento |
| 422 | INVALID_TAB | El parámetro de consulta tab del listado de plantillas no es una de las pestañas de la galería | Use un valor de pestaña admitido |
Claves SSH
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 422 | INVALID_SSH_KEY | El valor no es una línea de clave pública OpenSSH, el material de la clave no es base64 válido, o el tipo no está admitido | Pegue todo el contenido del archivo .pub, en una sola línea, empezando por el tipo de clave. Consulte Tipos de clave admitidos |
| 409 | DUPLICATE_SSH_KEY | Ya agregó una clave con la misma huella digital | Use la clave que ya tiene, o elimine primero la entrada anterior |
| 404 | SSH_KEY_NOT_FOUND | El id de la clave no es suyo | Las claves son por usuario. La clave de otro miembro nunca es visible para usted |
Equipo e invitaciones
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 400 | PERSONAL_ORG | Intentó invitar a alguien a una organización personal | Cree primero una organización real y luego invite desde ahí |
| 404 | INVITE_NOT_FOUND | El token de la invitación es incorrecto o la invitación fue retirada | Pida a un administrador un enlace nuevo |
| 410 | INVITE_USED | La invitación ya fue aceptada | Pida un enlace de invitación nuevo |
| 410 | INVITE_EXPIRED | La invitación pasó su fecha de expiración | Pida un enlace de invitación nuevo |
| 404 | MEMBER_NOT_FOUND | El usuario no es miembro de esta organización | Actualice la página del equipo: puede que ya lo hayan quitado |
| 400 | LAST_ADMIN | Quitar a ese miembro, o bajarle el rol, dejaría a la organización sin ningún administrador | Ascienda primero a otro miembro a administrador |
Créditos
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 422 | INVALID_AMOUNT | Falta el monto personalizado de la recarga o está fuera del rango aceptado | Elija un paquete de $10, $25 o $100, o un monto personalizado entre $5 y $1,000 |
| 403 | ADMIN_REQUIRED | El pago se intentó desde una cuenta de miembro o con una clave de API | Pida a un administrador de la organización que agregue créditos |
Claves de API
| Estado | Código | Causa | Qué hacer |
|---|---|---|---|
| 404 | API_KEY_NOT_FOUND | El id de la clave no existe en esta organización | Vuelva a listar sus claves y use un id vigente |
| 403 | ADMIN_REQUIRED | Una clave de API intentó crear o revocar otra clave de API, o un miembro intentó gestionar una clave de nivel de equipo | Cree y revoque las claves desde una sesión iniciada |
Solicitudes que no pasan la validación
Una solicitud cuyo cuerpo o cadena de consulta no coincide con el esquema se rechaza antes de llegar a cualquiera de las comprobaciones anteriores. Devuelve 422 con una lista de errores de campo bajo detail en lugar de un code:
{
"detail": [
{
"type": "less_than_equal",
"loc": ["body", "disk_gb"],
"msg": "Input should be less than or equal to 20000"
}
]
}
La entrada loc nombra el campo problemático. Los límites que conviene recordar son disk_gb entre 10 y 20,000, un label de 64 caracteres como máximo, y tail en el endpoint de logs entre 1 y 1,000.