Hubble Network Platform Metrics API

The Platform Metrics API from Hubble Network — 4 operation(s) for platform metrics.

Operations 4

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /v1/org/{org_id}/api_metrics View API request metrics · Get Organization API Metrics #
Ask an LLM
“How many API requests has my organization made, and what's the success rate?”
“Can I break down my API call volume by hour or day?”
Tell an agent
Show API request metrics for organization {org_id} over the last {days} days.
Break down org {org_id}'s API call success rate by {time_interval}.
GET /v1/org/{org_id}/packet_metrics View packet volume metrics · Get Organization Packet Metrics #
Ask an LLM
“How many packets have my devices delivered over the past week?”
“Can I see packet totals for production devices only?”
Tell an agent
Show packet metrics for organization {org_id} over the last {days} days.
Chart packet counts for org {org_id} by {time_interval} for devices tagged {filter_tags}.
GET /v1/org/{org_id}/webhook_metrics View webhook delivery metrics · Get Organization Webhook Metrics #
Ask an LLM
“What's the success rate of webhook deliveries to my endpoints?”
“How many webhook requests went out to us each day recently?”
Tell an agent
Show webhook delivery metrics for organization {org_id} over the last {days} days.
Break down org {org_id}'s webhook success rate by {time_interval}.
GET /v1/org/{org_id}/device_metrics Track active and registered device counts · Get Organization Device Metrics #
Ask an LLM
“How many of my registered devices have never been active?”
“How has the number of active devices changed over time?”
Tell an agent
Show active, never-active and registered device counts for org {org_id} over {days} days.
Trend active device counts for org {org_id} by {time_interval} for platform tag {filter_tags}.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hubble-network:hubble-network-platform-metrics-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hubble-network-platform-metrics-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hubble Platform Platform Metrics API
  description: 'The Hubble platform is built API-first. Use our Cloud API to manage your devices

    and access device data programmatically. We''ve designed our API following RESTful principles. Each endpoint returns standard HTTP status codes and may include JSON payloads. ---


    ## API Access

    Use API Keys to authenticate with the Hubble Cloud API for your organization. ### Generate an API Key

    Log in to your Hubble dashboard. Navigate to **Developer Tools > API Tokens** to create a new API Key. Provide a name for the token, and set an appropriate expiration date for temporary access. ### Organization ID

    You will need `org_id` to make API requests. From your Hubble dashboard, navigate to

    **Developer Tooks > API Tokens**, or **Organization Settings**, to find your Organization ID. ### Authorization Scopes

    API endpoints require specific authorization scopes to perform the intended operation. **Required Scope** is always provided in the API documentation. API Keys can be created with specific authorization scopes that control what operations the key can perform. If no scopes are specified, the key will be created with all available scopes (admin-level access). | **Scope** | **Access** |

    |------------------------------|-------------------------------------------------|

    | **read-api-keys** | View API keys and their metadata |

    | **write-api-keys** | Create, update, and delete API keys |

    | **read-users** | View user information and roles |

    | **write-users** | Add, update, and remove users from the organization |

    | **read-organization-metadata** | View organization details and settings |

    | **write-organization-metadata** | Update organization information |

    | **read-devices** | View device information and status |

    | **write-devices** | Register and manage devices |

    | **read-invitations** | View pending invitations |

    | **write-invitations** | Create and revoke user invitations |

    | **read-packets** | Access packet data and retrieval endpoints |

    | **read-platform-metrics** | View platform metrics and analytics |

    | **read-billing-usage** | View billing usage information |

    | **read-billing-invoices** | View billing invoices |

    | **read-webhooks** | View webhook configurations |

    | **write-webhooks** | Create and manage webhook endpoints |

    | **read-satellites** | View satellite ephemeris and pass data |


    **Example Scope Combinations**

    - Create a key with read-only access: `["read-api-keys", "read-users", "read-devices"]`

    - Create a key for device management: `["read-devices", "write-devices"]`

    - Create a key for user management: `["read-users", "write-users", "read-invitations", "write-invitations"]`


    **Best Practices for Data Security**

    - Create keys with the minimum required scopes for your use case

    - Regularly review and rotate API keys

    - Use descriptive names for your keys to track their purpose

    - Set appropriate expiration dates for temporary access


    ---


    ## Import API Definition

    You can quickly import the Hubble Cloud API into your preferred developer environment (such as Postman or Insomnia) using our **public OpenAPI definition**. Simply download or import the YAML file directly:


    https://hubble.com/docs/openapi.yaml


    ---


    ## Pagination

    When the number of objects requested exceeds the maximum page size for an endpoint, the API response will be paginated. This means you will receive a subset of the total results, along with a `Continuation-Token` in the Response Header that can be used to fetch subsequent subsets. To retrieve the next set of data, you must use the provided `Continuation-Token` in the Request Header of your next API call to the same endpoint. Continue using the provided token in each successive request until no `Continuation-Token` is returned, which indicates you have retrieved all available data. ---


    ## Rate Limits

    The Hubble Cloud API follows a leaky bucket approach to rate limiting. Endpoints are rate limited to three (3) requests per second. Your organization is limited to a total of 15 requests per second.'
  version: 1.0.0
servers:
- url: https://api.hubble.com
  description: Production
security:
- BearerAuth: []
tags:
- name: Platform Metrics
paths:
  /v1/org/{org_id}/api_metrics:
    get:
      tags:
      - Platform Metrics
      operationId: get-api-metrics
      x-criticality: medium
      summary: Get Organization API Metrics
      description: 'Retrieves API request metrics including total requests, success rate, and time interval-based breakdowns.


        **Required Scope:** `read-platform-metrics`'
      parameters:
      - $ref: '#/components/parameters/orgIdPathParam'
      - $ref: '#/components/parameters/metricsDaysBackQueryParam'
      - $ref: '#/components/parameters/metricsTimeIntervalQueryParam'
      responses:
        '200':
          description: Successfully retrieved API metrics
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_requests:
                    type: integer
                    description: Total number of API requests in the time period
                  success_rate:
                    $ref: '#/components/schemas/metricsSuccessRate'
                  buckets:
                    type: array
                    description: A breakdown of metrics per time_interval
                    items:
                      type: object
                      properties:
                        timestamp:
                          type: string
                          format: date-time
                          description: Start of the interval in ISO 8601 format
                        total_requests:
                          type: integer
                          description: Number of requests in this time_interval
                        success_rate:
                          $ref: '#/components/schemas/metricsSuccessRate'
        '400':
          $ref: '#/components/responses/ErrorBadRequest'
        '500':
          $ref: '#/components/responses/ErrorInternalServer'
  /v1/org/{org_id}/packet_metrics:
    get:
      tags:
      - Platform Metrics
      operationId: get-packet-metrics
      x-criticality: medium
      summary: Get Organization Packet Metrics
      description: 'Retrieves packet metrics across a time range providing totals and time interval-based breakdowns.


        **Required Scope:** `read-platform-metrics`'
      parameters:
      - $ref: '#/components/parameters/orgIdPathParam'
      - $ref: '#/components/parameters/metricsDaysBackQueryParam'
      - $ref: '#/components/parameters/metricsTimeIntervalQueryParam'
      responses:
        '200':
          description: Successfully retrieved packet metrics
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_packets:
                    type: integer
                    description: Total number of packets in the time period
                  buckets:
                    type: array
                    description: A breakdown of packet metrics per time_interval
                    items:
                      type: object
                      properties:
                        timestamp:
                          $ref: '#/components/schemas/formattedTimestamp'
                        total_packets:
                          type: integer
                          description: Number of packets in this time_interval
        '400':
          $ref: '#/components/responses/ErrorBadRequest'
        '500':
          $ref: '#/components/responses/ErrorInternalServer'
  /v1/org/{org_id}/webhook_metrics:
    get:
      tags:
      - Platform Metrics
      operationId: get-webhook-metrics
      x-criticality: medium
      summary: Get Organization Webhook Metrics
      description: 'Retrieves webhook metrics including total requests, success rate, and time interval-based breakdowns for webhook events.


        **Required Scope:** `read-platform-metrics`'
      parameters:
      - $ref: '#/components/parameters/orgIdPathParam'
      - $ref: '#/components/parameters/metricsDaysBackQueryParam'
      - $ref: '#/components/parameters/metricsTimeIntervalQueryParam'
      responses:
        '200':
          description: Successfully retrieved webhook metrics
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_requests:
                    type: integer
                    description: Total number of webhook requests in the time period
                  success_rate:
                    $ref: '#/components/schemas/metricsSuccessRate'
                  buckets:
                    type: array
                    description: A breakdown of webhook metrics per time_interval
                    items:
                      type: object
                      properties:
                        timestamp:
                          $ref: '#/components/schemas/formattedTimestamp'
                        total_requests:
                          type: integer
                          description: Number of webhook requests in this time_interval
                        success_rate:
                          $ref: '#/components/schemas/metricsSuccessRate'
        '400':
          $ref: '#/components/responses/ErrorBadRequest'
        '500':
          $ref: '#/components/responses/ErrorInternalServer'
  /v1/org/{org_id}/device_metrics:
    get:
      tags:
      - Platform Metrics
      operationId: get-device-metrics
      x-criticality: medium
      summary: Get Organization Device Metrics
      description: 'Retrieves metrics for active, never active, and total registered devices over time.


        ### Most Recent/Partial Bucket

        The most recent bucket, the partial bucket, is not calculated on this endpoint except for when using the hourly time interval.

        For parsing/syntax consistency, this bucket is still returned with a timestamp and empty values for the active, registered, and never active devices values.


        **Required Scope:** `read-platform-metrics`'
      parameters:
      - $ref: '#/components/parameters/orgIdPathParam'
      - $ref: '#/components/parameters/metricsDaysBackQueryParam'
      - $ref: '#/components/parameters/metricsTimeIntervalQueryParam'
      responses:
        '200':
          description: Successfully retrieved device metrics
          content:
            application/json:
              schema:
                type: object
                properties:
                  buckets:
                    type: array
                    description: A breakdown of device metrics per time_interval
                    items:
                      type: object
                      properties:
                        timestamp:
                          $ref: '#/components/schemas/formattedTimestamp'
                        registered_devices:
                          type: integer
                          description: 'The total number of registered devices at the end of this interval.

                            '
                        active_devices:
                          type: number
                          description: 'The number of active devices during this interval.

                            Active devices are those that have successfully transmitted a packet.

                            Because of the ingestion delays, recent windows metrics may still be accumulating new active devices.

                            '
                        never_active_devices:
                          type: number
                          description: 'The number of never active devices during this interval.

                            Never active devices are devices registered to your organization awaiting first transmission.

                            '
                  total_active_devices:
                    type: number
                    description: 'The total number of active devices across the queried time range.

                      Active devices are those that have successfully transmitted a packet.

                      '
                  total_registered_devices:
                    type: number
                    description: 'The total number of devices registered for the organization.

                      '
                  total_never_active_devices:
                    type: number
                    description: 'The total number of never active devices across the queried time range.

                      Never active devices are devices registered to your organization awaiting first transmission.

                      '
        '400':
          $ref: '#/components/responses/ErrorBadRequest'
        '500':
          $ref: '#/components/responses/ErrorInternalServer'
components:
  schemas:
    orgId:
      type: string
      format: uuid
      description: The ID for an organization
    formattedTimestamp:
      type: string
      format: date-time
      description: "Start of the bucket in ISO 8601 format.\nFor example: `2025-04-25T14:01:54Z`. \n"
    errorResponse:
      type: object
      properties:
        code:
          type: integer
          description: The HTTP status code
        description:
          type: string
          description: 'A description for the error.

            For user errors, we attempt to be as descriptive as possible to help with diagnosing the issue.

            For internal errors, the error description is only indicates that a retry should occur but we log the full error so that we can diagnose it.

            Error descriptions can change over time and should not be programmed against.

            '
        name:
          type: string
          enum:
          - Bad Request
          - Unauthorized
          - Not Found
          - Request Entity Too Large
          - Too Many Requests
          - Internal Server Error
          description: '`name` is a short name for the error.

            '
    metricsSuccessRate:
      type: number
      format: float
      description: "Success rate of requests (0-1). \nWhen total requests is 0, the success rate defaults to 1.0 or 100%.\n"
  parameters:
    metricsDaysBackQueryParam:
      name: days
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 365
        default: 1
      description: 'The number of days of metrics to include in the request.


        The maximum value is further restricted when small `time_interval` values are used.

        The maximum number of total metric buckets is 365.

        '
    orgIdPathParam:
      name: org_id
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/orgId'
      description: Your organization ID
    metricsTimeIntervalQueryParam:
      name: time_interval
      in: query
      required: false
      schema:
        type: string
        enum:
        - hour
        - day
        - month
      description: "The time interval for the metric buckets.\nIf not provided, a default value is selected based on the `days` parameter:\n\n| days        | time_interval |\n| ----------- | ------------- |\n| [1 => 1)    | hour          |\n| [2 => 31]   | day           |\n| [32 => 365] | month         |\n\n**Partial buckets:** The most recent bucket of metrics is a \"partial\" bucket depending on the interval - partial because it doesn't span a full time_interval yet. \n(e.g. 10:00pm -> 10:36pm for `hour`, June 3rd 12:00am -> June 3rd 10:36pm for `day`, June 1st 12:00am -> June 3rd 10:36pm for `month`).\nThe older buckets are always \"complete\" buckets.\n(e.g. 09:00pm -> 10:00pm for `hour`, June 2nd 12:00am -> June 3rd 12:00am for `day`, May 1st 12:00am -> June 1st 12:00am for `month`).\n\n**Edge cases:** If `days` is not large enough to include a full `month` bucket, days is increased in the backend. \nFor example, querying days=90 with a `month` time_interval on June 13th, 2025 will return \"complete\" March, April, and May buckets and a \"partial\" June bucket.\nSimilarly, when querying for days=7 with a `day` time_interval on June 13th, 2025 at 6:00am will return \"complete\" June 6th, 7th, 8th, 9th, 10th, 11th, and 12th buckets and a \"partial\" June 13th bucket.\n"
  responses:
    ErrorBadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/errorResponse'
          example:
            code: 400
            description: The request could not be understood by the server due to malformed syntax.
            name: Bad Request
    ErrorInternalServer:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/errorResponse'
          example:
            code: 500
            description: An unknown error has occurred.
            name: Unknown
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
x-provenance:
  method: harvested
  publisher: Hubble Network
  source: https://hubble.com/docs/openapi.yaml
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)