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:

CampoScope
vps, vpsList, availabilityGroupvps:read
baremetalbaremetal:read
transitnetwork:read
loadBalancerloadbalancer:read
natGatewaynat_gateway:read
kubernetesCluster, kubernetesClusterskubernetes:read
bandwidthResources, bandwidthAggregateel scope de cada producto que incluya

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

CampoQué 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 / bandwidthAggregateTodos 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 }] }
        ]
      }
    }
  }
}
  • ts es un timestamp Unix en segundos, en UTC.
  • unit te dice cómo formatear el valor: RATIO va de 0 a 1 (0.42 es un 42%), BYTES, BYTES_PER_SECOND, PACKETS_PER_SECOND, CONNECTIONS, CELSIUS, RPM, MILLISECONDS, etc.
  • Todas las series de un mismo resultado metrics comparten 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.codeSignificado
UNAUTHENTICATEDFalta el token o no es válido
FORBIDDENEl token no tiene el scope de ese producto, o el servidor está suspendido
NOT_FOUNDEse recurso no existe en tu organización
BAD_USER_INPUTArgumento no válido, como un month mal formado o un campo que no existe
METRICS_UNAVAILABLELas métricas no están disponibles temporalmente. El recurso se resuelve igual y las series vuelven vacías
QUERY_TOO_COMPLEXLa petición pide demasiado de una vez (ver los límites más abajo)

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 429 con Retry-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, kubernetesClusters y cada producto de bandwidthResources devuelven 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.