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 }