Saltar al contenido principal

Errores

Toda respuesta fuera del rango 2xx lleva un cuerpo JSON. Ramifique según code, nunca según message: los mensajes están escritos para personas y se pueden reformular.

El sobre

{
"detail": {
"code": "INSUFFICIENT_BALANCE",
"message": "Add credits before deploying an instance",
"balance_microusd": 0,
"required_microusd": 2290000
}
}
ClaveTipoSignificado
detail.codecadenaEstable, en mayúsculas, seguro para ramificar
detail.messagecadenaExplicación de una línea para personas
Claves adicionalesvaríaContexto de ese fallo concreto

Dos fallos usan una forma distinta. Los errores de validación de la solicitud que produce el framework colocan una lista bajo detail, con una entrada por cada campo incorrecto:

{"detail": [{"type": "greater_than_equal", "loc": ["body", "disk_gb"], "msg": "Input should be greater than or equal to 10"}]}

Y un fallo inesperado del lado del servidor coloca ahí una cadena simple, como {"detail": "Internal Server Error"}. Maneje las tres formas si está escribiendo una biblioteca cliente.

Estados HTTP

EstadoSignificado
200La solicitud se completó correctamente
201Se creó algo: una instancia, una copia de una plantilla, una clave de API
204Se completó sin cuerpo: revocar una clave, eliminar una clave SSH
400La solicitud está mal formada, por ejemplo un X-Org-Id que no es un id
401El bearer token falta, no es válido, caducó, fue revocado, o es una clave de API en un endpoint de cuenta
402A la organización no le queda crédito
403Está autenticado pero no tiene permiso: acción exclusiva de administradores, organización equivocada, u objeto inmutable
404No se encontró, o no es visible para su organización — ambos casos son deliberadamente indistinguibles
409El estado entra en conflicto: la oferta ya está tomada, la instancia está en el estado equivocado, el nombre ya se usa
422Los valores son incorrectos: un campo fuera de rango, un disco mayor que el de la máquina, un valor de enumeración desconocido

Qué encuentra realmente quien alquila

CondiciónEstadoCódigoQué hacer
Desplegar o iniciar con el saldo vacío402INSUFFICIENT_BALANCEUn administrador agrega créditos en la consola. El cuerpo lleva balance_microusd y required_microusd. Las claves de API no pueden recargar.
La oferta se alquiló entre su llamada de listado y su despliegue409OFFER_UNAVAILABLETome la siguiente oferta de su lista filtrada y reintente. No reintente con el mismo offer_id.
La máquina está reservada para desconectarse antes de lo que tarda en arrancar una instancia409MACHINE_IN_MAINTENANCEEl cuerpo lleva next_maintenance. Despliegue en otra parte, o espere a que pase la ventana. No es un problema de capacidad —la máquina tiene GPU libres—, así que reintentar la misma oferta funciona una vez terminada la ventana.
disk_gb fuera de 10–20000422lista de validaciónEnvíe un valor dentro del rango
disk_gb mayor que el disco del host422DISK_TOO_LARGEEl cuerpo lleva max_disk_gb. Reintente con ese valor o uno menor, o elija una máquina más grande.
Acción exclusiva de administradores, o cualquier acción de administrador intentada con una clave de API403ADMIN_REQUIREDUse un token de sesión que pertenezca a un administrador. El proceso de pago, las invitaciones y la gestión de miembros nunca están disponibles para las claves. Consulte Roles y permisos.
Revocar una clave desconocida, ya revocada o de otra organización404API_KEY_NOT_FOUNDVuelva a listar GET /v1/api-keys y use un id vigente
Detener, iniciar o destruir desde un estado que no lo permite409INVALID_STATELea primero status. El mensaje nombra el estado actual, por ejemplo Cannot start an instance while it is running.
Una plantilla vm en una máquina que no admite VM422OFFER_NOT_VM_CAPABLEFiltre por ofertas cuyo vm_capable sea true
Un ssh_key_id que no está en su cuenta404SSH_KEY_NOT_FOUNDListe GET /v1/ssh-keys con un token de sesión y use uno de esos ids
Una instancia, oferta o plantilla que su organización no puede ver404INSTANCE_NOT_FOUND, OFFER_NOT_FOUND, TEMPLATE_NOT_FOUNDCompruebe el X-Org-Id que envió, y que el objeto siga existiendo

Los fallos de autenticación y de organización —TOKEN_INVALID, TOKEN_EXPIRED, NOT_A_MEMBER, ORG_MISMATCH, INVALID_ORG_ID— se tratan en Autenticación. La lista completa de códigos está en Códigos de error.

Reintentos

Respuesta¿Reintentar?
402No. Nada cambia hasta que lleguen créditos.
409 OFFER_UNAVAILABLESí, con otra oferta.
409 MACHINE_IN_MAINTENANCESí, con otra máquina, o con la misma después de next_maintenance.
409 INVALID_STATESolo después de volver a leer la instancia y confirmar que la transición ya es válida.
422No. Corrija primero la solicitud.
401 TOKEN_EXPIREDSí, una vez, con un token de sesión nuevo. Una clave shk_ no caduca, así que un 401 en una clave significa que fue revocada.

POST /v1/instances no acepta clave de idempotencia, así que un tiempo de espera agotado lo deja sin saber si el alquiler ocurrió. Resuélvalo mirando, no reintentando: GET /v1/instances y busque su label.

Reintentar con el mismo offer_id no es seguro. Una oferta es una forma, no una única ranura: una máquina a la que le quedan GPU responde otra vez a la misma oferta y usted obtiene una segunda instancia, facturada aparte, a partir de un solo despliegue pretendido. Solo devuelve 409 cuando ya no quedan unidades en esa máquina, que es exactamente el caso en el que tampoco se le habría cobrado dos veces.