Cradlepoint NetCloud Manager API v2

RESTful API for the NetCloud Manager (NCM) platform. Programmatic access to accounts, routers, groups, configuration_managers, alerts and alert_rules, alert_push_destinations, activity_logs, locations and historical_locations, net_devices, net_device_signal_samples, net_device_usage_samples, net_device_health, net_device_metrics, router_alerts, router_lans, router_state_samples, users, subscriptions, and firmware. Base URL https://www.cradlepointecm.com/api/v2/. Authentication uses two paired key sets sent as headers on every request — X-CP-API-ID / X-CP-API-KEY (account-level Cradlepoint API keys, for usage tracking) and X-ECM-API-ID / X-ECM-API-KEY (NCM-tenant API keys generated from the NCM Tools tab; carry the Administrator / Full Access / Read-Only / Diagnostic role grants). Supports GET, POST, PUT, PATCH, DELETE; not every method is supported on every resource. Documented with Swagger 1.2.

Cradlepoint NetCloud Manager API v2 is one of 4 APIs that Cradlepoint publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 4 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 2 JSON Schema definitions.

Tagged areas include NetCloud, Routers, Wireless WAN, Edge, and Cellular. The published artifact set on APIs.io includes API documentation, a getting-started guide, an OpenAPI specification, a JSON-LD context, 4 Naftiko capability specs, and 2 JSON Schemas.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

cradlepoint-netcloud-manager-api-v2-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Cradlepoint NetCloud Manager API v2
  description: |
    RESTful API to the Cradlepoint NetCloud Manager (NCM) platform. Lets
    client applications perform programmatically many of the same operations
    available in the NCM user interface: enumerate accounts, manage routers
    and groups, configure them, listen to alerts, ingest device telemetry,
    track location history, and administer users and subscriptions.

    Authentication uses two header pairs sent on every request:
      * X-CP-API-ID / X-CP-API-KEY — Cradlepoint API keys (account-level,
        used for API-usage tracking, available from the Getting Started page
        of developer.cradlepoint.com).
      * X-ECM-API-ID / X-ECM-API-KEY — NetCloud (ECM) API keys generated by
        an NCM administrator from the Tools tab in NCM. These keys carry the
        NCM role assignment (Administrator, Full Access User, Read Only User,
        Diagnostic User) and authorize what the request can do.
  version: '2.0'
  contact:
    name: Ericsson Enterprise Wireless / Cradlepoint Support
    url: https://customer.cradlepoint.com/
  termsOfService: https://cradlepoint.com/about-us/legal/

servers:
  - url: https://www.cradlepointecm.com/api/v2
    description: NetCloud Manager Production

security:
  - CradlepointApiKey: []
    NetCloudApiKey: []

tags:
  - name: Accounts
    description: Account and subaccount management
  - name: ActivityLogs
    description: Audit / activity logs across accounts
  - name: Alerts
    description: Generated alerts
  - name: AlertRules
    description: Alert monitoring rule configuration
  - name: AlertPushDestinations
    description: Outbound webhook destinations for alert delivery
  - name: Groups
    description: Logical device groupings
  - name: Routers
    description: Router (edge device) management
  - name: NetDevices
    description: Modems, WAN devices, and network interfaces on routers
  - name: Locations
    description: Current and historical router location

paths:
  /accounts/:
    get:
      summary: List Accounts
      description: List accounts and subaccounts visible to the authenticated NCM keys.
      operationId: listAccounts
      tags: [Accounts]
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Paginated list of accounts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountList'
  /accounts/{id}/:
    get:
      summary: Get An Account
      description: Retrieve a single account by ID.
      operationId: getAccount
      tags: [Accounts]
      parameters:
        - $ref: '#/components/parameters/IdPath'
      responses:
        '200':
          description: Account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'

  /activity_logs/:
    get:
      summary: List Activity Logs
      description: View activities and changes within the authenticated account.
      operationId: listActivityLogs
      tags: [ActivityLogs]
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Paginated list of activity-log entries.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityLogList'

  /alerts/:
    get:
      summary: List Alerts
      description: View alerts that have been generated in the account.
      operationId: listAlerts
      tags: [Alerts]
      parameters:
        - name: type
          in: query
          schema: { type: string }
        - name: created_at__gt
          in: query
          schema: { type: string, format: date-time }
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Paginated list of alerts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertList'

  /alert_rules/:
    get:
      summary: List Alert Rules
      description: Alert-rule definitions monitoring health and status of the account.
      operationId: listAlertRules
      tags: [AlertRules]
      responses:
        '200':
          description: Alert rules.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertRuleList'
    post:
      summary: Create An Alert Rule
      description: Configure a new alert rule.
      operationId: createAlertRule
      tags: [AlertRules]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlertRule'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertRule'

  /alert_push_destinations/:
    get:
      summary: List Alert Push Destinations
      description: Configured outbound HTTP destinations (webhooks) for alert delivery.
      operationId: listAlertPushDestinations
      tags: [AlertPushDestinations]
      responses:
        '200':
          description: Push destinations
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertPushDestinationList'
    post:
      summary: Create An Alert Push Destination
      description: Register a webhook URL that should receive alert JSON payloads.
      operationId: createAlertPushDestination
      tags: [AlertPushDestinations]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlertPushDestination'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AlertPushDestination'

  /groups/:
    get:
      summary: List Groups
      description: Logical device groupings used to share configuration.
      operationId: listGroups
      tags: [Groups]
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Paginated list of groups.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupList'

  /routers/:
    get:
      summary: List Routers
      description: List routers visible to the authenticated NCM keys.
      operationId: listRouters
      tags: [Routers]
      parameters:
        - name: state
          in: query
          schema: { type: string, enum: [online, offline, unknown] }
        - name: group
          in: query
          schema: { type: string }
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Paginated list of routers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RouterList'
  /routers/{id}/:
    get:
      summary: Get A Router
      description: Retrieve a single router by ID.
      operationId: getRouter
      tags: [Routers]
      parameters:
        - $ref: '#/components/parameters/IdPath'
      responses:
        '200':
          description: Router
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Router'
    patch:
      summary: Update A Router
      description: Update editable router fields such as `name`, `description`, `group`.
      operationId: updateRouter
      tags: [Routers]
      parameters:
        - $ref: '#/components/parameters/IdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Router'
      responses:
        '200':
          description: Updated router
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Router'

  /net_devices/:
    get:
      summary: List Net Devices
      description: Modems and network interfaces (WAN, LAN, modem, ethernet) on routers.
      operationId: listNetDevices
      tags: [NetDevices]
      parameters:
        - name: router
          in: query
          schema: { type: string }
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Paginated list of net devices.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetDeviceList'

  /historical_locations/:
    get:
      summary: List Historical Locations
      description: Time-stamped GPS / location samples for routers (vehicle / mobile fleet use case).
      operationId: listHistoricalLocations
      tags: [Locations]
      parameters:
        - name: router
          in: query
          schema: { type: string }
        - name: created_at__gt
          in: query
          schema: { type: string, format: date-time }
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Paginated list of historical location samples.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HistoricalLocationList'

components:
  securitySchemes:
    CradlepointApiKey:
      type: apiKey
      in: header
      name: X-CP-API-ID
      description: Cradlepoint account API ID (paired with X-CP-API-KEY).
    NetCloudApiKey:
      type: apiKey
      in: header
      name: X-ECM-API-ID
      description: NCM tenant API ID (paired with X-ECM-API-KEY), carries the NCM role.

  parameters:
    Limit:
      name: limit
      in: query
      description: Maximum number of records to return per page.
      schema:
        type: integer
        default: 20
        maximum: 500
    Offset:
      name: offset
      in: query
      description: Number of records to skip for pagination.
      schema:
        type: integer
        default: 0
    IdPath:
      name: id
      in: path
      required: true
      schema:
        type: string

  schemas:
    Account:
      type: object
      properties:
        id: { type: string }
        name: { type: string }
        parent_account: { type: string, nullable: true }
        created_at: { type: string, format: date-time }
        is_active: { type: boolean }
    AccountList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/Account' }
        meta:
          $ref: '#/components/schemas/Meta'

    ActivityLog:
      type: object
      properties:
        id: { type: string }
        account: { type: string }
        actor: { type: string }
        action: { type: string }
        target: { type: string }
        created_at: { type: string, format: date-time }
    ActivityLogList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/ActivityLog' }
        meta: { $ref: '#/components/schemas/Meta' }

    Alert:
      type: object
      properties:
        id: { type: string }
        account: { type: string }
        router: { type: string }
        type: { type: string, description: 'e.g. router_offline, signal_degraded, config_changed' }
        message: { type: string }
        severity: { type: string, enum: [info, warning, error, critical] }
        created_at: { type: string, format: date-time }
        acknowledged_at: { type: string, format: date-time, nullable: true }
    AlertList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/Alert' }
        meta: { $ref: '#/components/schemas/Meta' }

    AlertRule:
      type: object
      properties:
        id: { type: string }
        name: { type: string }
        type: { type: string }
        enabled: { type: boolean }
        scope: { type: string, description: 'account, group, or router' }
        target: { type: string }
        push_destinations:
          type: array
          items: { type: string }
        created_at: { type: string, format: date-time }
    AlertRuleList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/AlertRule' }
        meta: { $ref: '#/components/schemas/Meta' }

    AlertPushDestination:
      type: object
      properties:
        id: { type: string }
        name: { type: string }
        url: { type: string, format: uri }
        method: { type: string, enum: [POST, PUT], default: POST }
        headers:
          type: object
          additionalProperties: { type: string }
        enabled: { type: boolean }
    AlertPushDestinationList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/AlertPushDestination' }
        meta: { $ref: '#/components/schemas/Meta' }

    Group:
      type: object
      properties:
        id: { type: string }
        account: { type: string }
        name: { type: string }
        product: { type: string, description: 'router product line, e.g. IBR1700, E300, E3000' }
        target_firmware: { type: string }
        config:
          type: object
          additionalProperties: true
    GroupList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/Group' }
        meta: { $ref: '#/components/schemas/Meta' }

    Router:
      type: object
      properties:
        id: { type: string }
        account: { type: string }
        group: { type: string, nullable: true }
        name: { type: string }
        description: { type: string }
        mac: { type: string }
        serial_number: { type: string }
        product: { type: string }
        actual_firmware: { type: string }
        state: { type: string, enum: [online, offline, unknown] }
        last_seen_at: { type: string, format: date-time }
        created_at: { type: string, format: date-time }
    RouterList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/Router' }
        meta: { $ref: '#/components/schemas/Meta' }

    NetDevice:
      type: object
      properties:
        id: { type: string }
        router: { type: string }
        type: { type: string, description: 'modem, ethernet, lan, wan' }
        connection_state: { type: string }
        carrier: { type: string }
        homecarrier: { type: string }
        signal_strength: { type: integer }
        rsrp: { type: integer }
        rsrq: { type: integer }
        iccid: { type: string }
        imei: { type: string }
        ipv4_address: { type: string }
    NetDeviceList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/NetDevice' }
        meta: { $ref: '#/components/schemas/Meta' }

    HistoricalLocation:
      type: object
      properties:
        id: { type: string }
        router: { type: string }
        latitude: { type: number, format: float }
        longitude: { type: number, format: float }
        accuracy: { type: number, format: float }
        speed: { type: number, format: float }
        heading: { type: number, format: float }
        created_at: { type: string, format: date-time }
    HistoricalLocationList:
      type: object
      properties:
        data:
          type: array
          items: { $ref: '#/components/schemas/HistoricalLocation' }
        meta: { $ref: '#/components/schemas/Meta' }

    Meta:
      type: object
      properties:
        limit: { type: integer }
        offset: { type: integer }
        total_count: { type: integer }
        next: { type: string, nullable: true }
        previous: { type: string, nullable: true }