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": "Deploying needs about 1h of credit up front",
"balance_micro": 1500000,
"required_micro": 2305000
}
}
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
402El saldo de la organización no cubre la acción, o los pagos están congelados
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
410Ya no existe: una invitación que se usó, venció o fue revocada
413El cuerpo de la solicitud es mayor de lo que acepta el endpoint
422Los valores son incorrectos: un campo fuera de rango, un disco mayor que el de la máquina, un valor de enumeración desconocido
429Demasiadas solicitudes: espere a Retry-After
503No disponible temporalmente: un inicio que el host no pudo completar, o comprobaciones de inicio de sesión que no pueden ejecutarse ahora. Reintente en breve

Qué encuentra realmente quien alquila​

CondiciónEstadoCódigoQué hacer
Desplegar o iniciar cuando el saldo no cubre una hora del consumo de la organización con esa instancia en marcha (su GPU y su disco, más la GPU y el disco de las instancias en ejecución, iniciándose o en creación, y el disco de las detenidas): un saldo positivo no basta402INSUFFICIENT_BALANCEUn administrador agrega créditos en la consola. El cuerpo lleva balance_micro y required_micro. Las claves de API no pueden recargar.
La oferta se alquiló entre su llamada de listado y su despliegue, o mientras se reservaba su despliegue409OFFER_UNAVAILABLETome la siguiente oferta de su lista filtrada y reintente. No reintente con el mismo offer_id. No se creó nada.
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 la credencial no puede adjuntar: no es suyo o, con una clave team, no es de un miembro actual404SSH_KEY_NOT_FOUNDListe GET /v1/ssh-keys con un token de sesión y use uno de esos ids
La organización ya tiene 25 instancias sin destruir409INSTANCE_LIMIT_REACHEDEl cuerpo lleva limit. Destruya una primero: las instancias detenidas y en error cuentan, así que detener no libera nada.
Hay una disputa de pago abierta en la organización402PAYMENTS_FROZENLos despliegues y los inicios quedan en pausa hasta que se cierre la disputa.
Una plantilla aún no publicada, que fija un CUDA más antiguo que el de la máquina o que necesita hardware que no es x86_64422TEMPLATE_COMING_SOON, TEMPLATE_CUDA_TOO_NEW, TEMPLATE_ARCH_UNSUPPORTEDAntes de desplegar, compare coming_soon y constraints.cuda_max y constraints.arch de la plantilla con el cuda_version de la oferta.
Una plantilla de otra organización que descarga de un registro privado, o una oferta cuya máquina el plano de control no conoce422, 409TEMPLATE_REQUIRES_OWNER, OFFER_NOT_PINNABLENo se creó nada. Duplique la plantilla con sus propias credenciales de registro, o vuelva a listar las ofertas.
Iniciar una instancia cuyo host no puede aceptarlo409, 503HOST_UNREACHABLE, START_REFUSED, START_UNAVAILABLELa instancia sigue stopped. Reintente más tarde; con START_UNAVAILABLE, en breve. Un START_REFUSED cuyo mensaje dice que el host ya no conserva la carga de trabajo no va a funcionar: destruya y vuelva a desplegar.
Iniciar una instancia cuyas GPU se liberaron (gpus_released) mientras otro cliente usa una de ellas409CAPACITY_UNAVAILABLELa instancia sigue stopped, con su disco. Reintente más tarde; un inicio tiene que recuperar las mismas GPU, así que ninguna otra máquina u oferta sirve.
Demasiadas solicitudes de un mismo llamante429RATE_LIMITEDEspere los segundos del encabezado Retry-After (también en el cuerpo como retry_after_s) y luego reintente.
Un cuerpo de solicitud por encima del límite de tamaño413PAYLOAD_TOO_LARGEEl cuerpo lleva limit_bytes. Envíe menos: 1 MiB en la mayoría de los endpoints, 4 MiB en las plantillas.
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 o, con PAYMENTS_FROZEN, hasta que se cierre la disputa.
409 INSTANCE_LIMIT_REACHEDSolo después de destruir una instancia.
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; allowed_actions indica cuáles lo son.
409 HOST_UNREACHABLE, START_REFUSED, CAPACITY_UNAVAILABLEMás tarde, con espera creciente. Mientras tanto la instancia sigue stopped.
429 RATE_LIMITEDSí, después de los segundos de Retry-After.
503Sí, tras una breve espera.
422No. Corrija primero la solicitud. Ante INVALID_CURSOR, empiece el listado de nuevo sin cursor.
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.