Todas las métricas que ves en my.cubepath.com salen de la API GraphQL de CubePath. Es el mismo endpoint que usa el panel, y puedes consultarlo tú mismo para montar tus propios dashboards, informes y comprobaciones de salud.
POST https://api.cubepath.com/graphql
Es de solo lectura y cubre métricas y tráfico: VPS, availability groups, baremetal (tráfico, ancho de banda y sensores BMC), tránsito IP, load balancers, NAT gateways y clusters de Kubernetes. Para crear o modificar recursos, usa la API REST o el servidor MCP.
Autenticación
Usa un token de API en cualquiera de las dos cabeceras:
curl https://api.cubepath.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TU_TOKEN_DE_API" \
-d '{"query":"{ vpsList { id name } }"}'
X-API-Key: TU_TOKEN_DE_API también funciona. Una petición con token no necesita la cabecera X-Requested-With, aunque sea un POST.
Cada campo comprueba el scope de lectura de su producto, así que a un token de monitorización le bastan los scopes de lectura:
| Campo | Scope |
|---|---|
vps, vpsList, availabilityGroup | vps:read |
baremetal | baremetal:read |
transit | network:read |
loadBalancer | loadbalancer:read |
natGateway | nat_gateway:read |
kubernetesCluster, kubernetesClusters | kubernetes:read |
bandwidthResources, bandwidthAggregate | el scope de cada producto que incluya |
ConsejoCrea un token dedicado solo con los scopes de lectura de arriba y fíjalo a la IP de la máquina que consulta. Si se filtra una copia, solo sirve para leer gráficas.
Tu primera consulta
Una sola petición puede pedir varios recursos a la vez, cada uno con exactamente los campos que necesitas:
query Resumen($id: ID!) {
vps(id: $id) {
name
metrics(range: H6, metrics: [CPU_USAGE, MEMORY_USAGE]) {
step
series { name unit points { ts value } }
}
bandwidthUsage { inBytes outBytes totalBytes }
}
kubernetesClusters {
name
health { up nodesReady nodesTotal podsPending }
}
}
Envíala como JSON con query y variables:
curl https://api.cubepath.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TU_TOKEN_DE_API" \
-d '{"query":"query($id: ID!){ vps(id:$id){ name metrics(range: H6, metrics:[CPU_USAGE]){ step series{ name unit points{ ts value } } } } }","variables":{"id":"1234"}}'
Qué puedes consultar
| Campo | Qué devuelve |
|---|---|
vps(id) / vpsList(projectId) | Series de CPU, memoria, E/S de disco y red, más el ancho de banda del mes. vpsList devuelve hasta 200 servidores |
availabilityGroup(uuid) | CPU media y memoria total del grupo, y cuántos servidores tiene |
baremetal(id) | Tráfico y paquetes por segundo, el ancho de banda del mes, el tráfico de los últimos 30 días y los sensores BMC (temperaturas, ventiladores, estado de energía) |
transit(id) | Tráfico y paquetes por segundo de tu puerto de tránsito IP |
loadBalancer(uuid) | Conexiones activas, conexiones nuevas por segundo, tráfico de entrada y salida, y el ancho de banda del mes |
natGateway(uuid) | Tráfico de entrada y salida, y el ancho de banda del mes |
kubernetesCluster(uuid) / kubernetesClusters(projectId) | Salud del API server, cada nodo con sus condiciones y recursos, y las series del cluster (nodos listos, pods pendientes y fallidos, latencia de la API) |
bandwidthResources / bandwidthAggregate | Todos los servicios que mueven tráfico público y su tráfico sumado por ubicación, producto, proyecto o servicio. Es lo que alimenta la página de Ancho de banda |
Rangos de tiempo
metrics(range:) acepta los mismos rangos que el panel: H1, H3, H6, H12, H24, D3, D7 y D30. Por defecto, H1.
Los rangos largos vuelven con un step mayor (el tamaño de cada intervalo, en segundos), así que una gráfica de 30 días tiene unos 300 puntos y no decenas de miles.
Cómo leer un resultado
{
"data": {
"vps": {
"name": "web-1",
"metrics": {
"step": 30,
"series": [
{ "name": "cpu_usage", "unit": "RATIO", "points": [{ "ts": 1759406400, "value": 0.42 }] }
]
}
}
}
}
tses un timestamp Unix en segundos, en UTC.unitte dice cómo formatear el valor:RATIOva de 0 a 1 (0.42es un 42%),BYTES,BYTES_PER_SECOND,PACKETS_PER_SECOND,CONNECTIONS,CELSIUS,RPM,MILLISECONDS, etc.- Todas las series de un mismo resultado
metricscomparten los mismos timestamps, así que puedes pintarlas en una sola gráfica sin alinearlas tú.
Ancho de banda mensual
bandwidthUsage(month: "2026-09") devuelve el tráfico de ese mes natural (UTC). Si omites month, devuelve el mes en curso hasta ahora. El formato es estrictamente YYYY-MM.
En los campos de Ancho de banda, inBytes es siempre el tráfico que entra en tu servicio y outBytes el que sale, sea cual sea el producto.
Errores
Una petición que GraphQL acepta siempre responde HTTP 200. Cuando falla un campo, ese campo vale null y errors explica el motivo, mientras el resto de la petición se resuelve igualmente:
extensions.code | Significado |
|---|---|
UNAUTHENTICATED | Falta el token o no es válido |
FORBIDDEN | El token no tiene el scope de ese producto, o el servidor está suspendido |
NOT_FOUND | Ese recurso no existe en tu organización |
BAD_USER_INPUT | Argumento no válido, como un month mal formado o un campo que no existe |
METRICS_UNAVAILABLE | Las métricas no están disponibles temporalmente. El recurso se resuelve igual y las series vuelven vacías |
QUERY_TOO_COMPLEX | La petición pide demasiado de una vez (ver los límites más abajo) |
NotaLos recursos de otras organizaciones responden
NOT_FOUND, exactamente igual que un ID que no existe.
Límites
- 600 peticiones por minuto por token. Cada petición cuenta una vez, pida lo que pida. Por encima del límite recibes un
429conRetry-After. - Una sola petición puede devolver hasta unos 24.000 puntos: por ejemplo 200 series de una hora, u 80 series de 30 días. Si necesitas más, divídela en dos.
- Consultas de hasta 6 niveles de profundidad, 15 alias y 2.000 tokens. No se aceptan arrays de operaciones en lote.
vpsList,kubernetesClustersy cada producto debandwidthResourcesdevuelven hasta 200 elementos.
Esquema y herramientas
El esquema está abierto a llamadas autenticadas mediante introspección estándar, así que herramientas como GraphQL Code Generator, Postman o Insomnia pueden cargarlo con tu token. La introspección anónima se rechaza.
Consejo¿Consultas para un dashboard? Pide todos los recursos en una sola petición con las
metricsque pintas y reutiliza el mismorangeen todos. Cuenta como una petición contra tu límite en lugar de una por gráfica.