Documentation

  • About NetCloud API
  • Introduction
  • API Endpoint Reference
  • Sample Code
  • Webhooks
  • Q&A
  • Configuration

About Cradlepoint NetCloud API

Cradlepoint NetCloud Manager is a SaaS-type server that enables the remote management of network devices, including routers and access points. This specification describes the NetCloud API; a RESTful API used by client applications to access the NetCloud service and programmatically perform many of the same functions as can be performed in the NCM UI.

For more information on getting started with the NetCloud API, see the Cradlepoint Connect article NetCloud API Getting Started Guide.

The base URL for the NetCloud API v2 is:
https://www.cradlepointecm.com/api/v2/

Note on NetCloud SDK Development

The documentation on this site is for the NetCloud API. To find information on using the NetCloud Software Developer's Kit, including how to get started, see Cradlepoint NetCloud OS SDK 3.1 Application Developers Guide.

What is a REST API?

An API, or application programming interface, is a protocol that enables communication between different software systems. APIs provide the building blocks programmers need to create applications that access the data from a software platform – in this case the data from Cradlepoint NetCloud Manager.

REST, or representational state transfer, is a particular architectural style, common for Web APIs, that leverages existing technologies of the Web (e.g. HTTP, XML) to enable information access on a large scale. The REST architecture was first described by Roy Fielding in his 2000 doctoral dissertation.

A REST API is a hypertext-driven API that uses HTTP methods and follows the REST principles. The Cradlepoint NetCloud Manager REST API uses the following HTTP methods: GET, POST, PUT, PATCH, and DELETE. Note that not all endpoints support all of the REST methods. Some endpoints are read-only and only support the GET method while other endpoints support a mix of all the methods.

Security

Access to the NetCloud API v2 is secured via two pairs of API keys; Cradlepoint API keys and NetCloud API keys. Both pairs of keys are required when calling API endpoints.

Your Cradlepoint API keys are assigned to you after your Cradlepoint account is created. These keys are available on the Getting Started page of this API portal (developer.cradlepoint.com) and are named "X-CP-API-ID" and "X-CP-API-KEY". Your Cradlepoint API keys are used for API usage-tracking purposes.

Your NetCloud API keys are created by your NCM account administrator using the TOOLS page in NCM. These keys are named "X-ECM-API-ID" and "X-ECM-API-KEY". Your NetCloud API keys authenticate you to the API and specify the actions you can take in the API. The actions you can take in the API depend on the NCM role assigned to the keys when they are created. These roles are Administrator, Full Access User, Read Only User, or Diagnostic User.

How using invalid API keys in API calls affects account-usage limits

  • If you make an API call and use invalid keys for all four keys, the API call does not count against your account-usage limit.
  • If you make an API call and use invalid keys for both the X-CP-API-ID and X-CP-API-KEY keys, the API call does not count against your account-usage limit.
  • If you make an API call and use invalid keys for either the X-CP-API-ID or the X-CP-API-KEY keys, the API call does not count against your account-usage limit.
  • If you make an API call and both the X-CP-API-ID and X-CP-API-KEY keys are valid, the X-ECM-API-ID & X-ECM-API-KEY keys can be either valid or invalid and the API call will count against your account-usage limit.

Supported TLS Ciphers

In compliance with PCI 3.2, NetCloud API supports TLS v1.2 and 1.3. SSL and earlier versions of TLS are not supported. The following TLS ciphers are supported:

TLS 1.3
          TLS_AES_128_GCM_SHA256
          TLS_AES_256_GCM_SHA384
          TLS_CHACHA20_POLY1305_SHA256
          TLS_AES_128_CCM_SHA256
          TLS_AES_128_CCM_8_SHA256
        

TLS 1.2

          TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
          TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
          TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
          TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
          TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
          TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
          TLS_RSA_WITH_AES_256_GCM_SHA384
          TLS_RSA_WITH_AES_128_GCM_SHA256
          TLS_RSA_WITH_AES_256_CBC_SHA256
          TLS_RSA_WITH_AES_256_CBC_SHA
          TLS_RSA_WITH_AES_128_CBC_SHA256
          TLS_RSA_WITH_AES_128_CBC_SHA
          

NetCloud Manager API v2 Endpoint Quick Reference

Category Related Endpoint(s)
Account Information accounts
User Information users
General Router Information routers
Device Locations locations, historical_locations
Log Information activity_logs, router_logs
Device Online/Offline Status router_state_samples
Firmware firmwares, routers
Alerts and Push Alerts alerts, router_alerts, alert_rules, alert_push_destinations, test_alert_push_destinations
Groups Information groups
SDK Apps device_apps, device_app_bindings, device_app_states, device_app_versions
Device Configurations configuration_managers
E100 Battery Information batteries
NetCloud Perimeter Networks router_lans, forwarding_lan_details, overlay_network_bindings
Network Interfaces net_devices, net_device_health, net_device_metrics, net_device_signal_samples, net_device_usage_samples
Failover Information failovers
General Information about Cradlepoint Products products
Reboot a Device via the API reboot_activity
Run a Speed Test on a Router speed_test

NetCloud Manager API v3 Endpoint Quick Reference beta

Category Related Endpoint(s)
Find information about an account's subscriptions subscriptions
Configure and monitor private cellular networks private_cellular_networks, private_cellular_cores, private_cellular_sims, private_cellular_radios, private_cellular_radio_groups, private_cellular_radio_statuses
View, add, modify and delete information about the users in your account users (v3)

This section describes the general conventions used by the NetCloud API.

Format of Examples

The NetCloud API does not require the use of any particular software tools or libraries. Any software tools that support the use of HTTP request methods will work. However, the syntax of how to express the request varies with the tool or library. The examples focus on the HTTP method, the path, and the request body (when required). These examples don't show authentication headers. The following example shows a GET request to the routers endpoint:

GET https://www.cradlepointecm.com/api/v2/routers/

It's assumed that every request sends an HTTP header with the necessary API keys.

Please note that URLs for endpoints MUST end with a forward slash (trailing slash). If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/accounts/
Incorrect format: https://www.cradlepointecm.com/api/v2/accounts

In cases of PUT or POST the examples show the data being sent as a JSON document below the PUT or POST, like this:

POST https://www.cradlepointecm.com/api/v2/groups/
{"name": "Test Group", "product":"https://www.cradlepointecm.com/api/v2/products/1/"}

PUT and POST must send a Content-Type header. If using JSON like the examples in this doc, the Content-Type must be 'application/json.'

Note: The term "device" is used in this documentation to mean either a router or access point. It is important to note that endpoint parameters and methods named, or containing, the word “router(s)” might also apply to access points.

CRUD & HTTP Methods

The API is RESTful, and uses the following HTTP methods to implement the four basic CRUD (Create, Read, Update, and Delete) operations:

Quick reference:

Create POST https://www.cradlepointecm.com/api/v2/{resource-type}/ The request body should contain a resource descriptor.
Read GET https://www.cradlepointecm.com/api/v2/{resource-type}/{id}/
Update PUT https://www.cradlepointecm.com/api/v2/{resource-type}/{id}/ The request body should contain a partial resource descriptor containing whatever attributes need to be replaced.
Delete DELETE https://www.cradlepointecm.com/api/v2/{resource-type}/{id}/ This process is not reversible.

Create a Resource

Create a resource by sending a POST request to the root path for that resource type. The following example creates a new group, specifying the account, a group name, type of product, and the firmware for the devices in the group:

POST https://www.cradlepointecm.com/api/v2/groups/
{"account": "https://www.cradlepointecm.com/api/v2/accounts/23/", "name": "Group 2", "product": "https://www.cradlepointecm.com/api/v2/products/1/", "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/3771/"}

By default, the resource is added to the requestor's account. If the requestor wants to add a resource to a different account, the request must include an 'account' field in the POST data.

Read Resources

Reading is simple, just issue a GET:

GET https://www.cradlepointecm.com/api/v2/routers/

Or to get a specific object, append the object's ID to the request:

GET https://www.cradlepointecm.com/api/v2/routers/1234/

Update a Resource

Like creating resources, updating resources requires you to provide a request body. The request body needs only list the attributes that are changing.

PUT https://www.cradlepointecm.com/api/v2/groups/23243/
{"name": "Renamed Group"}

Delete a Resource

Deleting a resource removes that specific resource and all the data associated with it. In the case of a router deletion, the router is unregistered from NCM and all of its associated data (e.g. alerts, state samples, signal samples, etc) is removed from the system. The delete process is not reversible.

DELETE https://www.cradlepointecm.com/api/v2/routers/1224/

Request Parameters

Parameters are appended to the path after a '?' and are used to affect result sets. The examples uses a short-hand notation in '{' brackets '}' to show common parameters that are supported.

Quick reference:

{paging} := offset=<int>&limit=<int>
{fields} := fields=<val>.<val>,<val>

Examples:

GET https://www.cradlepointecm.com/api/v2/routers/?offset=100&limit=50
GET https://www.cradlepointecm.com/api/v2/router_alerts/?type=wan_unplugged&time__gte=today
GET https://www.cradlepointecm.com/api/v2/accounts/?fields=name

Paging Parameters

Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

         GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

The limit parameter is supported for all endpoints

The offset parameter is supported for ALL endpoints except the following:

  • alert_push_destinations
  • alert_rules
  • historical_locations
  • net_device_signal_samples
  • net_device_usage_samples
  • router_state_samples
  • router_stream_usage_samples

Limit the Fields Returned in a Result Set

If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled

Format & Extensions

The only officially supported format is JSON, which is the default.

Reply Format

The NetCloud API returns the following HTTP response codes:

GET   : 200 OK
POST  : 201 Created
PUT   : 202 Accepted
DELETE: 204 No Content

301 Moved Permanently (Redirected)
302 Found (Redirected)
307 Temporary Redirect (Redirected)
308 Permanent Redirect (Redirected)
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
409 Conflict
429 Too Many Requests
500 Internal Server Error
502 Bad Gateway
  

Normal response format

{
    "data": [
        {
            "account": "https://www.cradlepointecm.com/api/v2/accounts/1/",
            "id": "3",
            "is_disabled": false,
            "name": "blue",
            "resource_url": "https://www.cradlepointecm.com/api/v2/accounts/3/"
        },
        {
            "account": "https://www.cradlepointecm.com/api/v2/accounts/3/",
            "id": "4",
            "is_disabled": false,
            "name": "blue_sub",
            "resource_url": "https://www.cradlepointecm.com/api/v2/accounts/4/"
        }
    ],
    "meta": {
        "limit": 20,
        "next": null,
        "offset": 0,
        "previous": null
    }
}

Error response format

{
    "errors": [
        {
            "path": "https://www.cradlepointecm.com/api/v2/groups/"
        },
        {
            "method": "POST"
        }
    ],
    "exception": {
        "message": "method not allowed",
        "type": "error"
    }
}

The exception codes are listed below, as well as the fields which appear with them in the error response.

unauthorized

      {
       "status_code": 401,
       "exception": "unauthorized",
       "message": " Invalid Credentials i.e. missing or invalid keys.",
       "success": false
      }
    

forbidden

{
    "exception": {
        "message": "forbidden",
        "type": "error"
    },
    "errors": []
}

server_error

{
    "exception": {
        "message": "Expecting ',' delimiter or '}': line 3 column 2 (char 70)",
        "type": "server_error"
    },
    "errors": []
}

validation

{
  "exception": {
    "type": "validation",
    "message": "bad or missing data"
  },
  "errors": [
    {
      "foo": "no such field"
    }
  ]
}
 

Sign in to your account for quick access to useful values.

Use the accounts endpoint to retrieve information about your account and any nested subaccounts in your account.

Your primary, or "owning" account, is the account your NetCloud Manager (NCM) administrator places you into when giving you access to NCM. Depending on your account role and permissions, you can view or modify this account's information and the information for any subaccounts nested beneath it.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>

The accounts endpoint supports GET, POST, PUT, and DELETE methods.

  • accounts Endpoint Fields and Filters
  • This table lists the fields associated with the accounts endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description Permissions
    account* in: int, out: url =, __in Unique ID of an account Read Only
    id int =, __in ID of the accounts record Read Only
    is_disabled bool True if the account is disabled Read Only
    name* string =, __in Name of the account Read/Write
    resource_url url URL of the accounts record Read Only
    Note: * indicates the attribute is required for PUT and POST requests.
    Permissions: Read/Write means a parameter is returned in responses to GET requests and is editable in PUT/POST requests.
    Read Only; means a parameter is returned in responses to GET requests but is NOT editable in PUT/POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/accounts/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/accounts/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the accounts endpoint without filters applied. This retrieves data about your primary, or "owning" account, and any nested subaccounts beneath your owning account.

    curl -H "X-ECM-API-ID: $X_ECM_API_ID" -H "X-ECM-API-KEY: $X_ECM_API_KEY" -H "X-CP-API-ID: $X_CP_API_ID" -H "X-CP-API-KEY: $X_CP_API_KEY" -H "Content-Type: application/json" -L $URL     
    

    Response body for curl GET example

          {            
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/308/",
                "id": "241",
                "is_disabled": false,
                "name": "cradlepoint",
                "resource_url": "https://www.cradlepointecm.com/api/v2/accounts/241/"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/123/",
                "id": "308",
                "is_disabled": false,
                "name": "root",
                "resource_url": "https://www.cradlepointecm.com/api/v2/accounts/308/"
            },
            { ... }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
             

    The following is an example of the URL to use with a curl GET request to the accounts endpoint using the name filter. Using this URL with the curl example above returns data about an account, and any subaccounts it owns, matching the key/value ?name=name in the query string.

    https://www.cradlepointecm.com/api/v2/accounts/?name=name

  • POST Examples
  • Use POST requests to the accounts endpoint to create new subaccounts in your account. Subaccounts are created as child accounts of the account specified in the "account" field in the body of the request.

    Requirements for POST requests:

    • The path must contain the account number ("account"); an int value
    • The body must contain the "name" field/value for the account/subaccount; a string value

    curl POST example that creates a new subaccount named "Nested_Subaccount" in the account specified in the account field.

      curl -d '{"account" : "https://www.cradlepointecm.com/api/v2/accounts/<account number>/", "name" : "Nested_Subaccount"}' -H "X-ECM-API-ID: $ECM_API_ID" -H "X-ECM-API-KEY: $ECM_API_KEY" -H "X-CP-API-ID: $CP_API_ID" -H "X-CP-API-KEY: $CP_API_KEY" -H "Content-Type: application/json" -L $URL
      

    Response body for curl POST example

      {
       "account" : "https://www.cradlepointecm.com/api/v2/accounts/308/",
       "is_disabled" : false,
       "name" : "Nested_Subaccount",
       "id" : "84954",
       "resource_url" : "https://www.cradlepointecm.com/api/v2/accounts/"
    }
      
  • PUT Examples
  • Use PUT requests to the accounts endpoint to modify subaccounts in your account. Payloads to the PUT method for the accounts endpoint can modify the name field.

    Requirements for PUT requests:

    • The path must contain the account number ("account"); an int value
    • The body must contain the "name" field with a string name for the account/subaccount

    curl PUT request example

    curl -v -X PUT -H "X-ECM-API-ID:40961453-652c-48bc-8445-2cfeb36d2c4a" -H "X-ECM-API-KEY:d02aacae1b4b77967014b7270812e8a465ac3174" -H "X-CP-API-ID:a939a410" -H "X-CP-API-KEY:808163e5193491974cd55eda5120ed9d" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/accounts/36304/" -d '{"name": "New Subaccount Name"}' 
      

    Response body for curl PUT example

    {"account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/", 
     "id": "<id>", 
     "is_disabled": false, 
     "name": "New Subaccount Name", 
     "resource_url": "https://www.cradlepointecm.com/api/v2/accounts/<id>/"}
      
  • DELETE Example
  • Use DELETE requests to the accounts endpoint to delete subaccounts in your account. DELETE requests require the ID of the subaccount to delete, passed in the path of the URL. If a subaccount contains users, they must be removed from the subaccount before the DELETE action can proceed.

    curl DELETE example

    curl -v -X DELETE -H "X-ECM-API-ID:40961453-652c-48bc-8445-2cfeb36d2c4a" -H "X-ECM-API-KEY:d02aacae1b4b77967014b7270812e8a465ac3174" -H "X-CP-API-ID:a939a410" -H "X-CP-API-KEY:808163e5193491974cd55eda5120ed9d" "https://www.cradlepointecm.com/api/v2/accounts/36304/" 
      

    Successful DELETE action return a 204 response code with no response body with no content.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the activity_logs endpoint to view the activities taken in your account.

An activity occurs when an initiator (known as an actor) performs an activity (known as an action) upon a NetCloud entity (known as an object) within an NCM account.

  • actor (actor__type): the initiator of an action (e.g. user, system, etc)
  • action (action__type): something an actor did (updated a device configuration, logged in, created a group, etc)
  • object (object__type): the NCM entity acted upon by an actor (e.g. sso acount, router, net_device, etc)
 

For example, 'user [x] registered a router' where user is the actor, registered is the action and router is the object.

Note: Activity Log data is retained in NetCloud for 30 days.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET
  • Actor/Action/Object Table
  • ActorsActionsObjects
    • system
    • legacy user
    • api key
    • router
    • sso user
    • access point
    • API 3.0 token
    • create
    • delete
    • update
    • request
    • report
    • login
    • logout
    • register
    • unregister
    • activate
    • license
    • share
    • lock to imei
    • change plan
    • suspend
    • deactivate
    • sim activate
    • failed
    • expired
    • login failed
    • passed
    • error
    • enable
    • disable
    • add
    • remove
    • download
    • unshare
    • account locked
    • rome account
    • legacy user
    • group
    • router
    • schedule
    • sso user
    • task
    • api key
    • net device
    • notifier
    • feature binding
    • rome authorization
    • remote connection
    • remote connection profile
    • remote lan management
    • sso account
    • access point
    • sso authorization
    • network
    • data plan
    • location
    • data_pact
    • production_db_entity
    • production_db_txn
    • geofence
    • live stats connection
    • speedtest
    • site
    • insights_report
    • site_group
    • sim
    • resource
    • ncx_policy
    • sync
    • ncx_idp
    • ncx_idp_user_mapping
    • iota_profile
    • pcn_cell
    • pcn_network
    • pcn_simcard
    • pcn_mobility_gateway
    • pcn_certificate
    • pcn_location
    • pcn_cell_ap_log
    • pcn_simgroup
    • job_modem_fw_upgrade
    • api_v3_token
    • noncloud_license_file
    • csi_test
    • ncx_bonded_wan
    • location_service
    • pcn_lan_profile
    • feature
    • ncx_resource_template
    • carrier_account
    • artifact
    • saml_integration
    • idp_certificate
    • custom_role
    • custom_role_authorization
    • pcn_cell_config
    • notification_configuration
    • virtual_device_artifact

    It is important to note that certain activities that are visible in the NCM Activity Logs are not available when calling this endpoint. These activities include the following:

    • Changes to account level settings including Session Length, Forced MFA, Enhanced Login Security, and Company Contacts
    • Creation/deletion and updates of user authorization within a company
    • Creation/deletion and updates of users
    • User logins and logouts
  • activity_logs Endpoint Fields and Filters
  • This table lists the fields associated with the activity_logs endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account int = Account that created the activity_logs record
    action__id string = ID of the object for the activity
    action__timestamp timestamp =, __gt, __gte, __lt, __lte Timestamp for the action taken
    action__type string = Name of the action taken
    actor__id string = ID (exact) of the actor who took the action
    actor__type string = Type of actor who took the action
    created_at timestamp =, __gt, __gte, __lt, __lte Timestamp for the activity that occurred
    object__id string = ID (exact) of the action taken
    object__type string = Type of object the action was taken upon

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/activity_logs/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/activity_logs/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the activity_logs endpoint without filters applied. This retrieves all the Activity Log records in the account.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/activity_logs/?account=<account number>"   

    Response body for curl GET example without filters applied.

    {
        "data": [
            {
                "action": {
                    "after": {
                        "account": {
                            "id": "8432354",
                            "name": "API-created-subaccount"
                        }
                    },
                    "before": {
                        "account": {
                            "id": "36304",
                            "name": "New Subaccount Name"
                        }
                    },
                    "id": "ceac0376-675c-11eb-bf0a-56fa34ed58df3",
                    "timestamp": "2021-02-05T02:49:46.696383Z",
                    "type": 3,
                    "type_name": "update"
                },
                "actor": {
                    "email": "actor@email.address",
                    "id": "045fgBd0s344tzah0g",
                    "type": 5,
                    "type_name": "sso_user"
                },
                "object": {
                    "id": "119012951",
                    "role": {
                        "id": "4",
                        "name": "account_read_only"
                    },
                    "type": 12,
                    "type_name": "authorization",
                    "user": {
                        "email": "user@email.address",
                        "id": "vOAwbBPFbagt12l9"
                    }
                }
            }
        ],
        "meta": {
            "limit": 20,
            "next": "https://www.cradlepointecm.com/api/v2/activity_logs/?action__id__lt=8f9db4d2-6a5d-11eb-a58d-5269e9f352ab"
        }
    }   
                

    Example curl GET request/response to the activity_logs endpoint with the created_at__exact filter applied. This retrieves the Activity Log action record with the matching timestamp.

    curl -v -X GET curl -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"  "https://www.cradlepointecm.com/api/v2/activity_logs/?created_at__exact=2021-02-05T02%3A49%3A46.696383Z"     
         

    Example response:

    {
        "data": [
            {
                "action": {
                    "after": {
                        "account": {
                            "id": "8432354",
                            "name": "API-created-subaccount"
                        }
                    },
                    "before": {
                        "account": {
                            "id": "36304",
                            "name": "New Subaccount Name"
                        }
                    },
                    "id": "ceac0376-675c-11eb-bf0a-56fa34ed58df3",
                    "timestamp": "2021-02-05T02:49:46.696383Z",
                    "type": 3,
                    "type_name": "update"
                },
                "actor": {
                    "email": "actor@email.address",
                    "id": "045fgBd0s344tzah0g",
                    "type": 5,
                    "type_name": "sso_user"
                },
                "object": {
                    "id": "119012951",
                    "role": {
                        "id": "4",
                        "name": "account_read_only"
                    },
                    "type": 12,
                    "type_name": "authorization",
                    "user": {
                        "email": "user@email.address",
                        "id": "vOAwbBPFbagt12l9"
                    }
                }
            }
        ],
        "meta": {
            "limit": 20,
            "next": "https://www.cradlepointecm.com/api/v2/activity_logs/?action__id__lt=8f9db4d2-6a5d-11eb-a58d-5269e9f352ab"
        }
    }           
                

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the alert_push_destinations endpoint to define HTTP destinations that can receive alert notifications. The destination_config_id field in alert_push_destinations records is used in the alert_rules endpoint http_destinations field to link an alert rule configuration to an HTTP destination for notification.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, POST, PATCH, DELETE
  • alert_push_destinations Endpoint Fields and Filters
  • This table lists the fields associated with the alert_push_destinations endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description Permissions
    account url URL of account that created the alert_push_destinations record Read Only
    authentication* JSON See the Field Notes section below for details. Read/Write
    destination_config_id! timeuuid =, __in, __gt, __lt Unique ID of an Alert Push Destination. A timeuuid type. Read Only
    enabled boolean Indicates whether this configuration is enabled. Defaults to true. Read/Write
    endpoint* JSON See the Field Notes section below for details. Read/Write
    last_error_at timestamp Timestamp last_error_text was produced. Read Only
    last_error_text string If this configuration has generated any push errors, this is the text of the last error. Read Only
    name* string Friendly name for destination. Read/Write
    suspended boolean Indicates whether a destination is suspended. See the Field Notes section below for details. Read/Write
    updated_at timestamp Last time this alert_push_destinations record was updated. Read only, generated by server. Read Only
    Note: ! indicates the attribute is required for PATCH and DELETE requests.
    Note: * indicates the attribute is required for POST requests.
    Permissions: Read/Write means a parameter is returned in responses to GET requests and is editable in PATCH/POST requests.
    Read Only means a parameter is returned in responses to GET requests but is NOT editable in PATCH/POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/alert_push_destinations/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Push Alert States
  • The following list contains the potential states push alerts can be in during the push process to your destination URL.
    • active: the push process to the destination url is successful and alerts continue to stream to the destination URL as they are generated.
    • unreachable: pushing to the destination url fails and the server is making automatic retry attempts.
    • suspended: pushing to the destination URL is turned off by the server when it could not re-establish a connection to the destination URL.
    • disabled: push alerts have been disabled manually by a user via NetCloud Manager or the API.
  • Outbound IP Addresses
  • Push alert notifications originate from any of the following IP addresses used by NetCloud in AWS. Note that these notifications are sent from NetCloud using HTTPS POST.

    us0 NAT GW IPs
    • 54.68.111.210
    • 35.167.132.236
    • 54.71.14.40
    us2 NAT GW IPs
    • 3.221.235.88
    • 23.23.36.130
    • 44.194.143.163
    eu4 NAT GW IPs
    • 18.198.46.227
    • 18.195.131.70
    • 3.67.129.67
    au5 NAT GW IPs
    • 3.104.136.156
    • 13.238.12.132
    • 13.55.130.228

    Whitelisting these IP addresses can help ensure that you receive Push alerts only from valid Cradlepoint IP addresses.

  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/alert_push_destinations/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • Field Notes
  • Endpoint field

    The endpoint field is a flat JSON dictionary. It supports only a single key, “url”. The url field is a string containing the push destination URL. This field is required for POST and may be updated with PATCH. For example: {“url“: “https://pushdestinationserver.somecustomer.com”}

    Note: You are not allowed to save two different push configurations for your account that both have the same endpoint URL. An error is thrown on POST/PATCH if this is attempted.

    Authentication field

    The authentication field is a flat JSON dictionary. It supports only a single key, “secret”. TThe authentication field is an arbitrary string containing a shared secret, such as a UUID. This field is required for POST and may be updated with PATCH. On GET, the value will always be returned as “*” for security. For example:

    POST or PATCH:
    {“secret“: “thisIsAUniqueValueNoOneWillBeAble2Guess”}

    GET:
    {“secret“: “*”} A SHA256 hash of this secret + the body is sent in the “X-CP-Signature” HTTP header of each pushed alert message. This allows the customer to authenticate the source of the push message.

    Customers authenticate the source of the push message using webhooks on their destination server. Webhooks are an increasingly popular method for communication between applications. The following pattern is a Python webhook example for authentication of a push message's secret.

    Note: The following webhook code is for example purposes only and isn't intended for production use. It is designed to provide a general approach to follow in your language of choice. See the Sample Code page (link in the menu on the left) for detailed information on webhooks and using the NetCloud Alert Push API.

        import hmac
        def lambda_handler(event, context):
            body = event["body"] or " "
            headers = event["headers"]
            ret = 200
            secret = "__super secret__"
            h = hmac.new(secret.encode("utf-8"), body.encode("utf-8"), "sha256")
            signature = h.hexdigest()
            if signature != headers["x-cp-signature"]:
                ret = 403
            else:
                ret = 200   
            return {
                'statusCode': ret
            }
        

    Suspended field

    The suspended field in the alert_push_destinations endpoint represents the current connectivity state of a push destination defined in the endpoint field. The value of the suspended field can be either “True” indicating the push destination endpoint is suspended, or “False” indicating that the push destination endpoint is not suspended. The suspended field’s value can be patched from “True” to “False” {“suspended”: “False”}. Since the push destination might have become reachable after the suspended field was set to “True”, patching {“suspended”: “False”} allows you to try to reach it again.

    Note: The suspended field can’t be patched from “False” to “True.”

  • GET Examples
  • To get all the Alert Push Destinations configured in your account:

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/alert_push_destinations/"
    

    To retrieve a single Alert Push Destination, pass the destination_config_id as a query param in the URL.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/alert_push_destinations/?destination_config_id=4d75218a-665a-11eb-9aa9-42edcb7bf284"
    

    Example response body of a GET request for a single alert_push_notification record.

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "authentication": {
                    "secret": "*"
                },
                "destination_config_id": "4d75218a-665a-11eb-9aa9-42edcb7bf284",
                "enabled": true,
                "endpoint": {
                    "url": "https://example.com.com"
                },
                "last_error_at": null,
                "last_error_text": null,
                "name": "mypushexample",
                "suspended": false,
                "updated_at": "2021-02-03T19:59:19.754418%2B00:00"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null
        }
    }
    
  • POST Examples
  • POST example for creating a new Alert Push Destination that uses "https://example.com.com" as its destination.

    Note: The invalid example url "https://example.com.com" is corrected in the PATCH example in the next section.

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/alert_push_destinations/" -d '{
    "endpoint": {"url": "https://example.com.com"},
    "authentication": {"secret": "mysecretsecret"},
    "name": "mypushexample"
    }'
    

    Example response body

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "authentication": {
            "secret": "*"
        },
        "destination_config_id": "4d75218a-665a-11eb-9aa9-42edcb7bf284",
        "enabled": true,
        "endpoint": {
            "url": "https://example.com.com"
        },
        "last_error_at": null,
        "last_error_text": null,
        "name": "mypushexample",
        "resource_url": "https://www.cradlepointecm.com/api/v2/alert_push_destinations/",
        "suspended": false,
        "updated_at": "2021-02-03T19:59:19.754418%2B00:00"
    }
    
  • PATCH Examples
  • The following example updates the url field in an Alert Push Destination.

    curl -v -X PATCH -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/alert_push_destinations/1cf2c024-64e5-11eb-be7d-42edcb7bf284/" -d '{"endpoint": {"url": "https://example.com"}}'
    

    Successful PATCH requests return an empty response body with a 202 response code.

  • DELETE Example
  • To delete an Alert Push Notification, call the alert_push_notifications endpoint and pass the destination_config_id of the Alert Push Notification to delete.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/alert_push_destinations/1cf2c024-64e5-11eb-be7d-42edcb7bf284/"
    

    Successful DELETE requests return an empty response body with a 204 response code.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the alert_rules endpoint to configure Alert Rules that monitor the health and status of your NetCloud account and endpoints. Alert rules are groupings of one or more alert types. Alert types specify the NetCloud system events that you want to be notified of. See the Cradlepoint Connect article Alerting and Reporting for more details on the types of alerts available in NetCloud.

The alert_rules endpoint provides the same functionality as available in the NetCloud Manager (NCM) UI on the Alerts & Logs pages. You can create new Alert Rules, view, edit, and delete them using this endpoint. See the List of NetCloud Alerts section below for a listing of the alerts available in NetCloud.

When an alert is triggered, the alert registers in NetCloud and displays in the NetCloud Manager Alert Log. Alert notifications can be sent via email and to HTTP destinations.

  • Email notifications: when creating an Alert Rule to use email notifications, add one or more user IDs to a list in the email_destinations field. The user IDs from this field are resolved by NetCloud into user email addresses and notification of the alert is sent to those email addresses.
  • Push notifications: alert notifications can be pushed to one or more URLs for processing and monitoring in custom applications. To configure an Alert Rule to send push notifications, use the http_destinations field. This field accepts a list of one or more destinations that you define using the alert_push_destinations endpoint. If you do not have any alert destinations configured in NetCloud, you must create at least one destination to use the push notification functionality.

Important: The unique identifier for an alert_push_destinations record is the destination_config_id (timeuuid) field. The value from this field is the value you must use in the http_destinations field list when configuring an Alert Rule to use a push notification.

NOTE: Certain alerts can be configured with thresholds. These thresholds allow you to control when alerts are triggered. See the Cradlepoint Customer Connect Knowledgebase article Alerting and Reporting for details on using alerts that have thresholds.

When configuring an Alert Rule to push to an HTTP destination, the following steps are required.

  1. Configure a destination to push the alert(s) to using the alert_push_destinations endpoint
  2. Test the destination to ensure it was added correctly using the test_alert_push_destination endpoint
  3. Configure an Alert Rule using this endpoint (alert_rules) and specify one or more destinations for the alert to be pushed to in the http_destination field. Only one destination is required.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, POST, PATCH, DELETE.
  • alert_rules Endpoint Fields and Filters
  • This table lists the fields associated with the alert_rules endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description Permissions
    account url Account that created the alert_rules record Read Only
    alert_config_id! url =, __in, __gt, __lt Unique ID of an Alert Rule. A timeuuid type. Read Only
    associated_accounts List of ints List of ints that identify accounts to include alert types from. These become part of your Alert Rule. Read/Write
    associated_groups List of ints List of ints that identify groups to include alert types from. These become part of your Alert Rule. Read/Write
    email_destinations List of ints Use this to list email destinations to receive notification when this alert type is triggered. This is a list of user IDs; NetCloud converts these to email addresses. To obtain user IDs for this field, call the "users" endpoint. Read/Write
    filter_criteria* Dictionary with two keys: alert_type__in and external_id__in. Use a dictionary to specify alert types by name for your Alert Rule. You can use any alert-type name available in NetCloud. Read/Write
    http_destinations* list(timeuuid) Use this to list HTTP destinations to receive notification when this alert type is triggered. This is a list destination_config_ids (timeuuids) that link Alert Rules with alert_push_destinations records. Read/write
    schedule* timestamp Schedule for sending notifications. Can be None | Hourly | Daily. Read/Write
    settings json Additional settings for particular alert types. Currently suports extra information only for PDP service-overage alerts. Read/write
    updated_at timestamp Last date/time an alert_rules record was updated. Read only
    Note: ! indicates the attribute is required for PATCH and DELETE requests.
    Note: * indicates the attribute is required for POST requests.
    Permissions: Read/Write means a parameter is returned in responses to GET requests and is editable in PATCH/POST requests.
    Read Only means a parameter is returned in responses to GET requests but is NOT editable in PATCH/POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/alert_rules/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/alert_rules/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • List of NetCloud Alerts
  • The following tables list Alert types available in NetCloud.

    Router Alerts

    Alert Type Description Alert Field Name
    ADC Voltage Event Occurs on devices with voltage-sensing systems when a voltage limit is reached, and also when the voltage returns to within the accepted range. adc_event
    AP/Core Connection State The cellular AP specified service type connectivity to the packet core entered the specified state. pcn_ap_connection_state
    Battery Health Creates an alert when the remaining battery life reaches 62%. batt_health_alert
    Battery Over Current Creates an alert when the battery's current reaches 3.2 amps (3200 mA). batt_over_current_alert
    Battery Over Temperature Creates an alert when the battery's temperature reaches 50 degrees Celsius. batt_over_temp_alert
    Battery Over Voltage Creates an alert when the battery's recommended voltage reaches 8.5V (8500 mV). batt_over_voltage_alert
    Battery System Low Power Creates an alert when the battery's power reaches 20% charge. batt_sys_low_power_alert
    Battery System Power Off Creates an alert when the battery's power reaches 7% charge. batt_sys_power_off_alert
    Battery Maintenance Cycle Started The battery automatically begins discharging raining its charge then recharges to full power, for optimizing battery life. (E400/X20 devices) batt_maintenance_cycle_started
    Battery Maintenance Cycle Ended The battery has finished its maintenance cycle. (E400/X20 devices) batt_maintenance_cycle_ended
    Battery Backup Power Engaged When an E400/X20 device loses wall power and switches over to battery backup. batt_backup_power_engaged
    Wall Power Restored When an E400/X20 device regains wall power and switches back from battery backup mode. wall_power_restored
    Cellular Radio Status The cellular AP radio interface has entered the specified state. pcn_ap_radio_status
    Configuration Changed Occurs when there has been a local configuration change. config_change
    Configuration Rejected Occurs when a configuration change was sent to the device but was rejected. config_rejected
    Configuration Unacknowledged Occurs when a configuration change was sent to the device but was not acknowledged by the device. config_unacked
    CPU Utilization CPU Utilization crossed a threshold. cpu_utilization
    Custom Alert Is an alert generated by custom code in an NCOS SDK app. custom_alert
    Data Cap Threshold Occurs when a data cap threshold is reached. data_cap_threshold
    Device Location Unknown Occurs when no location is reported for 24 hours on a device with Location Services (GPS) enabled. If a manual location is used the alert is not generated. device_location_unknown
    Ethernet WAN Connected Indicates that an Ethernet WAN device is now active. ethernet_wan_connected, intel_ethernet_wan_connected
    Ethernet WAN Disconnected Indicates that an Ethernet WAN device is no longer active. ethernet_wan_disconnected, intel_ethernet_wan_disconnected
    Ethernet WAN Plugged In An Ethernet WAN device is now attached. ethernet_wan_plugged
    Ethernet WAN Standby An Ethernet WAN device is in standby mode ethernet_wan_standby
    Ethernet WAN Unplugged An Ethernet WAN device has been removed. ethernet_wan_unplugged
    Failed Login Attempt (NCM) SOURCE: (source_ip) | USER: (user) | REASON: (reason) ncm_login_failure
    Failover Event A router (or group of routers) has changed the primary WAN interface from a higher- priority interface to a lower-priority interface. failover_event
    Firmware Upgrade Occurs when the device's NetCloud OS is upgraded. firmware_upgrade
    GBR Bearer Setup Failure The device with the specified IMSI failed to connect to its requested QCI because the guaranteed bitrate requirement could not be met. pcn_core_ue_dedicated_bearer_alloc_failure
    Geo fence Proximity Change Occurs whenever the device enters or exits the specified Geo-fence geofence_proximity_change
    GPIO State Change Occurs when a device's GPIO pin has changed state. To view or update the GPIO configuration, open the Device UI and select the System > GPIOs tab. This alert requires NetCloud OS 6.0.2 and newer, and a Cradlepoint device with GPIO. gpio_state_change
    Interface Status The packet core specified interface has entered the specified state. pcn_core_port_status_changed
    IPsec Connection State The packet core IPsec connectivity to the specified cellular AP entered the specified state. pcn_core_ipsec_connection_status_changed
    IP Address Banned Occurs if the Ban IP Address setting is turned on for a device and someone from a particular IP address attempts and fails to log into the Device UI six times, that IP address is banned for 30 minutes. To enable this setting, login to the Device UI and go to System > Administration > Router Security and click on Advanced Security Mode. Select the Ban IP Address option. ip_banned
    Intrusion Activity Is only relevant for devices with CP Secure Threat Management. Whenever the Threat Management deep packet inspection engine detects an intrusion, that event is recorded in the logs. These events are grouped together for 15 minutes and then reported in NetCloud Manager, so an emailed alert notification might not arrive for approximately 15 minutes after an intrusion. Intrusion Activity alerts include the intrusion details and the action taken by the engine (e.g., Blocked). To edit Threat Management settings, login to the Device UI and select Security > Threat Management.
    For more information, see CP Secure Threat Management Overview.
    ips_activity
    IPS Engine Failure For devices using Cradlepoint Secure Threat Management (CPSTM), this alert occurs in the unlikely event that the Threat Management engine fails. You can set the router to either allow or deny traffic with a failure. To edit this setting, log in to the Device UI and go to Security > Threat Management. ips_eng_failure
    IPSec VPN Tunnel Down Occurs when a connected IPSec tunnel is disconnected. ipsec_tunnel_down
    IPsec Tunnel Setup Failure The cellular AP failed to setup an IPsec tunnel with the specified packet core. pcn_ap_ipsec_setup_failure
    IPS Enablement Change Occurs when Intrusion Prevention Systems / Intrusion Detection Systems (IPS/IDS) has been enabled or disabled using Cradlepoint Secure Threat Management (CPSTM) and provides details about who made the change and when it occurred. ips_enable_disable
    IPS Mode Change Occurs when the IPS/IDS mode has been changed (for example, from Detect and Prevent to Detect Only) using CPSTM and provides details on what changed, who made the change, and when it occurred. ips_mode_change
    IPSec VPN Tunnel Restored Occurs when a connected IPSec tunnel reconnects after being disconnected. ipsec_tunnel_restored
    IPSev VPN Tunnel Up Occurs when an IPSec tunnel initially connects. ipsec_tunnel_up
    IP Verify Test Result Occurs when an IP Verify test is complete. ipverify_event
    Successful Login (Router) A login attempt succeeded to the router's Device UI. login_success
    Location Service Mode Changed Alert sent when there is change to the configuration of Location Services (including but limited to turning it on/off). This alert contains the time and date of the change, what was changed, and the device or group to which it was applied. location_service_change
    Memory Utilization Memory Utilization crossed a threshold. memory_utilization
    Modem Software Upgrade Available Occurs when new modem software is available for download. Includes the version number of the new software, the products to which it applies, and a link to the Release Notes. modem_firmware_summary_create
    Modem WAN Connected A modem WAN device is now active. modem_wan_connected, intel_modem_wan_connected
    Modem WAN Disconnected Indicates that a modem WAN device is no longer active. modem_wan_disconnected, intel_modem_wan_disconnected
    Modem WAN Device Plugged In A modem WAN device is now attached. modem_wan_plugged
    Modem WAN Standby Indicates that a modem WAN device's default connection state is set to Standby. This means the modem is connected to the carrier, but is not sending data. A modem in Standby will failover faster than a modem not in Standby. Standby is enabled by modifying the Default Connection State from the Device UI's Connection Manager table. modem_wan_standby
    Modem WAN Device Unplugged A modem WAN device has been removed. modem_wan_unplugged
    Microsoft IoT Disconnect Occurs when a Microsoft IoT device disconnects. msft_iot_disconnect
    NCM Connection State Occurs when the device loses or regains its connection to NetCloud Manager. A device must be online or offline for 60 seconds before this alert is generated.
    For more information, see Details on NetCloud Manager Connection State Online and Offline Alerts.
    connection_state
    NetCloud OS Upgrade Available Occurs when new NetCloud OS software is available for download. Includes the version number of the new software, the products to which it applies, and a link to the Release Notes. ncos_firmware_summary_create
    No SAS Response The cellular AP did not receive a response from the CBRS SAS server. pcn_sas_no_response
    NTP Sync Issue The cellular AP cannot reach the NTP server and may have incorrect system time. pcn_ap_ntp_syn_failure
    NTP Sync Issue The packet core cannot reach the NTP server and may have incorrect system time. pcn_core_ntp_sync_failure
    Reboot Occurs when the device is rebooted. reboot_status_change, intel_reboot_status_change
    Remote Connect Ended A remote connect session to the specified router has been closed. remote_connection_destroyed
    Remote Connect Started A remote connect session to the specified router has been opened. remote_connection_request
    Rogue Access Point Detected Occurs after running a Wi-Fi site survey when a rogue access point not marked as "known" is detected broadcasting the same SSID as the device running the site survey. This helps identify potential access-point hijacking, evil twin, and man-in-the-middle Wi-Fi attacks. duplicate_ssid
    Router Group Change The specified router has been moved or added to the specified group. Also includes the username associated with the move, the date and time, the group the router was in previously (if applicable) and the group to which the router was added (if applicable). router_group_change
    NCOS App Execution State Changed Indicates that an NCOS SDK app that is running on a group has entered a different execution state (start, stop, error, etc). router_sdk_app_execution_state_changed
    Unexpected NCOS App Installed Indicates that an unexpected NCOS SDK app is found installed, an expected NCOS SDK app is unexpectedly uninstalled, or a that an NCOS app unknown to the system is found installed. router_sdk_mismatched_app_action
    S1 Setup Failure The packet core failed to setup an S1 connection with the specfiied cellular AP. pcn_core_s1_setup_failure
    S1 Connection State The packet core S1 connectivity to the specified cellular AP entered the specified state. pcn_core_s1_connection_state
    SAS Grant Expired A CBRS SAS Grant has expired for the cellular AP. pcn_sas_grant_expired
    SAS Grant Success The cellular AP received a CBRS SAS grant successfully. pcn_sas_grant_success
    SAS Grant Suspended A CBRS SAS Grant was suspended for the cellular AP. pcn_sas_grant_suspended
    SAS Grant Terminated A CBRS SAS Grant was terminated for the cellular AP. pcn_sas_grant_terminated
    SCEP Enrollment Failure This alert is generated when a device attempts to enroll with a SCEP server but can't enroll successfully. scep_enrollment_failure
    SCEP Enrollment Success This alert is generated when a device successfully enrolls with a SCEP server. scep_enrollment_success
    SIM Door Event Occurs when the SIM door opens or closes. sim_door_event
    SPAN Enabled SPAN Packet Cloning Enabled span_enabled
    System Error Requires Reboot The router rebooted due to a system error that requires a reboot to resolve. system_error
    Sustained System Overload The system experienced sustained levels for CPU or Packet Loss that exceeded thresholds. sustained_system_overload
    Test Error A speed test encountered an error. csi_test_error
    Test Failed A carrier failed to meet the benchmarks for a speed test. csi_test_failed
    Test Passed A carrier met or exceeded the benchmarks for a speed test. csi_test_passed
    Test Started All preconditions have been met for CSI (Carrier Selection Intelligence) to start. csi_test_started
    Temperature Limit Exceeded Occurs on devices with an internal temperature sensor (COR IBR1100 and IBR1150) when a user-defined temperature limit is reached. To set the temperature limits for the COR IBR1100 Series, login to the Device UI, select System > Administration, and then click the Temperature tab. thermal_exceeds_limit
    Tunnel Limit Reached Occurs when the number of IPSec tunnel connections has met or exceeded either 90% or 100% of the maximum tunnel limit. tunnel_limit
    Unrecognized Client Indicates a client with an unrecognized MAC address has attempted to connect to the device. MAC logging must be enabled to trigger this alert. To enable MAC logging, login to the Device UI and go to Networking > Local Networks> MAC Filter & Logging and select Enable MAC Logging. unrecognized_mac_alert
    VRRP State Changed to Backup The specified router has become a VRRP backup. You can further configure this alert to only be sent if the router was previously a master or in a fault state for a specified period. vrrp_new_backup, intel_vrrp_new_backup
    VRRP State Changed to Fault The specified router is in a VRRP fault state. You can further configure this alert to only be sent if the router was previously a backup or a master for a specified period. vrrp_new_fault, intel_vrrp_new_fault
    VRRP State Changed to Master The specified router has been become a VRRP master. You can further configure this alert to only be sent if the router was previously a backup or in a fault state for a specified period. vrrp_new_master, intel_vrrp_new_master
    WAN Service Type Indicates that a WAN device has changed its service type, such as switching from 3G to 4G. Possible service types include: DHCP, LTE, HSPA+, etc. wan_service_type
    WAN Status Change Router WAN has plugged, unplugged, connected or disconnected. (Deprecated) wan_status_change
    Webhook Suspended Previously configured webhook is in a suspended state. http_destination_suspended
    Webhook Failure Webhook delivery failed for alert with UUID (created_uuid), type (type), account (account_id), router (router_id), at time (created_ts) with message: (message). http_push_failure
    WiFi Client State Changed Occurs when a WiFi client changes state. For example, when a client's state changes from connected to disconnected (requires NetCloud OS version 6.6.1 and newer). wifi_client_state_change
    WiFi as WAN Standby Indicates a WiFi as WAN network is in standby. wwan_standby
    WiFi as WAN Connected Indicates WiFi as WAN is no longer active. wwan_connected
    WWAN Disconnected A WiFi as WAN network is no longer active. wwan_disconnected
    WiFi as WAN Network Available A WiFi as WAN network is now attached. wwan_network_available
    WiFi as WAN Network Unavailable A WiFi as WAN network has been removed. wwan_network_unavailable
    Zscaler TLS Tunnel State Indicates the state of a Zscaler tunnel has changed. zs_tls_tunnel

    Account Alerts

    Alert Type Description Alert Field Name
    Account Locked The account is locked for 30 minutes after six failed attempts to log into the device. account_locked
    Non-Compliant Devices Indicates account has new non-compliant devices. acs_noncompliant_devices
    Unlicensed Devices Indicates account has new unlicensed devices. acs_unlicensed_devices
    Devices Unlicensed in 5 Days Indicates account has devices unlicensing in 5 days. acs_unlicensed_in_5_days
    Devices Unlicensed in 15 Days Indicates account has devices unlicensing in 15 days. acs_unlicensed_in_15_days
    Pooled Carrier Data Usage Creates an alert when a user-defined usage percentage is met for a pooled data plan. pdp_account_overage
    Carrier Data Usage Per Router Creates an alert when a user-defined usage percentage is met for a single router. pdp_router_overage
    Subscriptions Expiring 180 Days Indicates account has subscriptions expiring in 180 days.
    For more information on notification limitations with Subscriptions Expiring alerts, see Alerts Not Supported for Use in Webhooks. Note the potential issues when using this alert.
    acs_expires_in_180_days
    Subscriptions Expiring 90 Days Indicates account has subscriptions expiring in 90 days acs_expires_in_90_days
    Subscriptions Expiring 60 Days Indicates account has subscriptions expiring in 60 days acs_expires_in_60_days
    Subscriptions Expiring 30 Days Indicates account has subscriptions expiring in 30 days acs_expires_in_30_days
    Subscriptions Expiring 15 Days Indicates account has subscriptions expiring in 15 days acs_expires_in_15_days
    Subscriptions Expiring 5 Days Indicates account has subscriptions expiring in 5 days acs_expires_in_5_days
  • GET Examples
  • To get all the Alert Rules configured in your account:

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/alert_rules/"
    

    To retrieve a single Alert Rule, pass the alert_config_id as a query param in the URL.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/alert_rules/?alert_config_id=1a5faaf8-6649-11eb-9823-42edcb7bf284"

    Example response body of a GET request for a single alert_rule record.

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/35065/",
                "alert_config_id": "e81f4500-1e13-11b2-bfff-ffffffffffff",
                "associated_accounts": [
                    86819,
                    84906,
                    86737,
                    36023,
                    35065,
                    84954
                ],
                "associated_groups": [],
                "email_destinations": [
                    63944
                ],
                "external_rules": null,
                "filter_criteria": {
                    "alert_type__in": [
                        "geofence_proximity_change"
                    ]
                },
                "http_destinations": [],
                "last_summary_ts": "2021-04-27T22:28:45.262710+00:00",
                "schedule": null,
                "settings": null,
                "updated_at": "2021-04-27T22:29:16.096135+00:00"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null
        }
    }     
    

     

  • POST Examples
  • Example POST request to add an Alert Rule for an account_locked alert type that registers an alert daily and sends push notifications to a single HTTP destination. A Content-Type header set to "application/json" must be included in the request.

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/alert_rules/" -d '{
            "schedule": "daily",
            "filter_criteria": {
              "alert_type__in": ["account_locked"]
            },
            "http_destinations": ["1cf2c024-64e5-11eb-be7d-42edcb7bf284"]
          }'
          

    Example response body.

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "alert_config_id": "1a5faaf8-6649-11eb-9823-42edcb7bf284",
        "associated_accounts": [],
        "associated_groups": [],
        "email_destinations": [],
        "external_rules": null,
        "filter_criteria": {
            "alert_type__in": [
                "account_locked"
            ]
        },
        "http_destinations": [
            "1cf2c024-64e5-11eb-be7d-42edcb7bf284"
        ],
        "last_summary_ts": null,
        "resource_url": "https://www.cradlepointecm.com/api/v2/alert_rules/",
        "schedule": "daily",
        "settings": null,
        "updated_at": "2021-02-03T17:56:12.605494+00:00"
    }
               

    If you use filter_criteria in an Alert Rule that contains pdp_router_overage or pdp_account_overage types, you must supply entries for them in the settings field using the following pattern.

     
    {
        "settings": {
            "pdp_router_overage": {
                "carrier": "VERIZON",
                "thresholds": [
                    25,
                    50,
                    75,
                    90
                ]
            },
            "pdp_account_overage": {
                "carrier": "VERIZON",
                "thresholds": [
                    50,
                    60,
                    80
                ]
            }
        }
    }
               

    The settings contain a key for each PDP type that is present in the filter_criteria field. Any settings for types not in the filters field, or non-PDP types, are ignored. Each alert type key contains a dictionary with two keys:

    • “carrier”: This contains the name of a carrier as it appears in your carrier data (e.g., VERIZON, SPRINT). This should be a carrier for which the server has a matching data plan already configured for this account, on the Carrier dashboard in NCM. The server will use this carrier name to find a matching PDP data plan which the alert will be attached. If there is no existing data plan for this carrier/account combination, an error is thrown on save validation.
    • “thresholds”: This contains a list of integers representing the percent thresholds at which an alert is triggered. For example, “Verizon data usage alerted at 80% of monthly limit”.
  • PATCH Examples
  • To update an Alert Rule with a PATCH request, call the alert_rules endpoint with the alert_config_id of the Alert Rule to update in the URL. A Content-Type header set to "application/json" must be included in the request.

    The following example updates the schedule field in an Alert Rule.

    curl -v -X PATCH -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/alert_rules/8696b080-1dea-11b2-bfff-ffffffffffff/" -d '{
          "schedule": "hourly"
          }   
          

    Successful PATCH requests return an empty response body with a 201 response code.

     

  • DELETE Example
  • To delete an Alert Rule, call the alert_rules endpoint and pass the alert_config_id of the Alert Rule to delete.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/alert_rules/94026980-1def-11b2-bfff-ffffffffffff/"
        

    Successful DELETE requests return an empty response body with a 204 response code.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

NetCloud Manager (NCM) provides alert functionality to notify NCM users of the health and status of their account and devices. Use the alerts endpoint to view alerts that have been generated in your account. Alerts must be configured in NetCloud, using the NCM UI or the alert_rules endpoint, before they are generated. The default NCM configuration does not create any alerts. After the alerts have been configured, use this endpoint or the NCM UI to monitor the alerts.
See the List of NetCloud Alerts section below for a listing of the alerts available in NetCloud.

Special Notes:

  • This endpoint does not have the standard filter limits of 100 values per field (ex. router__in=[1234,4321,...])
  • This endpoint will have only one value out of the router field and the account field. The other value will always be "null." You can filter on the value being null or not with the isnull operation. For example, "/alerts/?router__isnull=true" will give you alerts where the router field has a "null" value.
  • See the "router_alerts" endpoint on this page for details on alerts specific to routers.

NOTE: Certain alerts can be configured with thresholds. These thresholds allow you to control when alerts are triggered. See the Cradlepoint Customer Connect Knowledgebase article Alerting and Reporting for details on using alerts that have thresholds.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • alerts Endpoint Fields and Filters
  • This table lists the fields associated with the alerts endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account url =, __in, __isnull Account the alert is related to, or null if the router field has a value
    created_at timestamp __gt, __lt Timestamp for when the alerts record was created
    created_at_timeuuid timeuuid =, __in, __gt, __gte, __lt, __lte A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    detected_at timestamp Time the alert was detected
    friendly_info string Human-readable description of the alert
    info json Alert-type specific information
    router url =, __in, __isnull Device this alert is related to, or null if the account field has a value
    type string =, __in The type of the alert

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/alerts/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/alerts/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Important Alert/Push Alert Data-Type Differences
  • The router and account fields have different data types depending on whether they are in a response to a GET request made to the alerts endpoint, or in a push alert body.

    In GET response bodies, the router and account fields are URL types. In push alert bodies, the router and account fields are integer types.

    The reason for these differences is because using URLs in Push bodies would force a Push alert to be associated with a REST API version. This would effectively prevent versioning of Push payloads separately from the REST API.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • List of NetCloud Alerts
  • The following tables list Alert types available in NetCloud.

    Router Alerts

    Alert Type Description Alert Field Name
    ADC Voltage Event Occurs on devices with voltage-sensing systems when a voltage limit is reached, and also when the voltage returns to within the accepted range. adc_event
    AP/Core Connection State The cellular AP specified service type connectivity to the packet core entered the specified state. pcn_ap_connection_state
    Battery Health Creates an alert when the remaining battery life reaches 62%. batt_health_alert
    Battery Over Current Creates an alert when the battery's current reaches 3.2 amps (3200 mA). batt_over_current_alert
    Battery Over Temperature Creates an alert when the battery's temperature reaches 50 degrees Celsius. batt_over_temp_alert
    Battery Over Voltage Creates an alert when the battery's recommended voltage reaches 8.5V (8500 mV). batt_over_voltage_alert
    Battery System Low Power Creates an alert when the battery's power reaches 20% charge. batt_sys_low_power_alert
    Battery System Power Off Creates an alert when the battery's power reaches 7% charge. batt_sys_power_off_alert
    Battery Maintenance Cycle Started The battery automatically begins discharging raining its charge then recharges to full power, for optimizing battery life. (E400/X20 devices) batt_maintenance_cycle_started
    Battery Maintenance Cycle Ended The battery has finished its maintenance cycle. (E400/X20 devices) batt_maintenance_cycle_ended
    Battery Backup Power Engaged When an E400/X20 device loses wall power and switches over to battery backup. batt_backup_power_engaged
    Wall Power Restored When an E400/X20 device regains wall power and switches back from battery backup mode. wall_power_restored
    Cellular Radio Status The cellular AP radio interface has entered the specified state. pcn_ap_radio_status
    Configuration Changed Occurs when there has been a local configuration change. config_change
    Configuration Rejected Occurs when a configuration change was sent to the device but was rejected. config_rejected
    Configuration Unacknowledged Occurs when a configuration change was sent to the device but was not acknowledged by the device. config_unacked
    CPU Utilization CPU Utilization crossed a threshold. cpu_utilization
    Custom Alert Is an alert generated by custom code in an NCOS SDK app. custom_alert
    Data Cap Threshold Occurs when a data cap threshold is reached. data_cap_threshold
    Device Location Unknown Occurs when no location is reported for 24 hours on a device with Location Services (GPS) enabled. If a manual location is used the alert is not generated. device_location_unknown
    Ethernet WAN Connected Indicates that an Ethernet WAN device is now active. ethernet_wan_connected, intel_ethernet_wan_connected
    Ethernet WAN Disconnected Indicates that an Ethernet WAN device is no longer active. ethernet_wan_disconnected, intel_ethernet_wan_disconnected
    Ethernet WAN Plugged In An Ethernet WAN device is now attached. ethernet_wan_plugged
    Ethernet WAN Standby An Ethernet WAN device is in standby mode ethernet_wan_standby
    Ethernet WAN Unplugged An Ethernet WAN device has been removed. ethernet_wan_unplugged
    Failed Login Attempt (NCM) SOURCE: (source_ip) | USER: (user) | REASON: (reason) ncm_login_failure
    Failover Event A router (or group of routers) has changed the primary WAN interface from a higher- priority interface to a lower-priority interface. failover_event
    Firmware Upgrade Occurs when the device's NetCloud OS is upgraded. firmware_upgrade
    GBR Bearer Setup Failure The device with the specified IMSI failed to connect to its requested QCI because the guaranteed bitrate requirement could not be met. pcn_core_ue_dedicated_bearer_alloc_failure
    Geo fence Proximity Change Occurs whenever the device enters or exits the specified Geo-fence geofence_proximity_change
    GPIO State Change Occurs when a device's GPIO pin has changed state. To view or update the GPIO configuration, open the Device UI and select the System > GPIOs tab. This alert requires NetCloud OS 6.0.2 and newer, and a Cradlepoint device with GPIO. gpio_state_change
    Interface Status The packet core specified interface has entered the specified state. pcn_core_port_status_changed
    IPsec Connection State The packet core IPsec connectivity to the specified cellular AP entered the specified state. pcn_core_ipsec_connection_status_changed
    IP Address Banned Occurs if the Ban IP Address setting is turned on for a device and someone from a particular IP address attempts and fails to log into the Device UI six times, that IP address is banned for 30 minutes. To enable this setting, login to the Device UI and go to System > Administration > Router Security and click on Advanced Security Mode. Select the Ban IP Address option. ip_banned
    Intrusion Activity Is only relevant for devices with CP Secure Threat Management. Whenever the Threat Management deep packet inspection engine detects an intrusion, that event is recorded in the logs. These events are grouped together for 15 minutes and then reported in NetCloud Manager, so an emailed alert notification might not arrive for approximately 15 minutes after an intrusion. Intrusion Activity alerts include the intrusion details and the action taken by the engine (e.g., Blocked). To edit Threat Management settings, login to the Device UI and select Security > Threat Management.
    For more information, see CP Secure Threat Management Overview.
    ips_activity
    IPS Engine Failure For devices using Cradlepoint Secure Threat Management (CPSTM), this alert occurs in the unlikely event that the Threat Management engine fails. You can set the router to either allow or deny traffic with a failure. To edit this setting, log in to the Device UI and go to Security > Threat Management. ips_eng_failure
    IPSec VPN Tunnel Down Occurs when a connected IPSec tunnel is disconnected. ipsec_tunnel_down
    IPsec Tunnel Setup Failure The cellular AP failed to setup an IPsec tunnel with the specified packet core. pcn_ap_ipsec_setup_failure
    IPS Enablement Change Occurs when Intrusion Prevention Systems / Intrusion Detection Systems (IPS/IDS) has been enabled or disabled using Cradlepoint Secure Threat Management (CPSTM) and provides details about who made the change and when it occurred. ips_enable_disable
    IPS Mode Change Occurs when the IPS/IDS mode has been changed (for example, from Detect and Prevent to Detect Only) using CPSTM and provides details on what changed, who made the change, and when it occurred. ips_mode_change
    IPSec VPN Tunnel Restored Occurs when a connected IPSec tunnel reconnects after being disconnected. ipsec_tunnel_restored
    IPSev VPN Tunnel Up Occurs when an IPSec tunnel initially connects. ipsec_tunnel_up
    IP Verify Test Result Occurs when an IP Verify test is complete. ipverify_event
    Successful Login (Router) A login attempt succeeded to the router's Device UI. login_success
    Location Service Mode Changed Alert sent when there is change to the configuration of Location Services (including but limited to turning it on/off). This alert contains the time and date of the change, what was changed, and the device or group to which it was applied. location_service_change
    Memory Utilization Memory Utilization crossed a threshold. memory_utilization
    Modem Software Upgrade Available Occurs when new modem software is available for download. Includes the version number of the new software, the products to which it applies, and a link to the Release Notes. modem_firmware_summary_create
    Modem WAN Connected A modem WAN device is now active. modem_wan_connected, intel_modem_wan_connected
    Modem WAN Disconnected Indicates that a modem WAN device is no longer active. modem_wan_disconnected, intel_modem_wan_disconnected
    Modem WAN Device Plugged In A modem WAN device is now attached. modem_wan_plugged
    Modem WAN Standby Indicates that a modem WAN device's default connection state is set to Standby. This means the modem is connected to the carrier, but is not sending data. A modem in Standby will failover faster than a modem not in Standby. Standby is enabled by modifying the Default Connection State from the Device UI's Connection Manager table. modem_wan_standby
    Modem WAN Device Unplugged A modem WAN device has been removed. modem_wan_unplugged
    Microsoft IoT Disconnect Occurs when a Microsoft IoT device disconnects. msft_iot_disconnect
    NCM Connection State Occurs when the device loses or regains its connection to NetCloud Manager. A device must be online or offline for 60 seconds before this alert is generated.
    For more information, see Details on NetCloud Manager Connection State Online and Offline Alerts.
    connection_state
    NetCloud OS Upgrade Available Occurs when new NetCloud OS software is available for download. Includes the version number of the new software, the products to which it applies, and a link to the Release Notes. ncos_firmware_summary_create
    No SAS Response The cellular AP did not receive a response from the CBRS SAS server. pcn_sas_no_response
    NTP Sync Issue The cellular AP cannot reach the NTP server and may have incorrect system time. pcn_ap_ntp_syn_failure
    NTP Sync Issue The packet core cannot reach the NTP server and may have incorrect system time. pcn_core_ntp_sync_failure
    Reboot Occurs when the device is rebooted. reboot_status_change, intel_reboot_status_change
    Remote Connect Ended A remote connect session to the specified router has been closed. remote_connection_destroyed
    Remote Connect Started A remote connect session to the specified router has been opened. remote_connection_request
    Rogue Access Point Detected Occurs after running a Wi-Fi site survey when a rogue access point not marked as "known" is detected broadcasting the same SSID as the device running the site survey. This helps identify potential access-point hijacking, evil twin, and man-in-the-middle Wi-Fi attacks. duplicate_ssid
    Router Group Change The specified router has been moved or added to the specified group. Also includes the username associated with the move, the date and time, the group the router was in previously (if applicable) and the group to which the router was added (if applicable). router_group_change
    NCOS App Execution State Changed Indicates that an NCOS SDK app that is running on a group has entered a different execution state (start, stop, error, etc). router_sdk_app_execution_state_changed
    Unexpected NCOS App Installed Indicates that an unexpected NCOS SDK app is found installed, an expected NCOS SDK app is unexpectedly uninstalled, or a that an NCOS app unknown to the system is found installed. router_sdk_mismatched_app_action
    S1 Setup Failure The packet core failed to setup an S1 connection with the specfiied cellular AP. pcn_core_s1_setup_failure
    S1 Connection State The packet core S1 connectivity to the specified cellular AP entered the specified state. pcn_core_s1_connection_state
    SAS Grant Expired A CBRS SAS Grant has expired for the cellular AP. pcn_sas_grant_expired
    SAS Grant Success The cellular AP received a CBRS SAS grant successfully. pcn_sas_grant_success
    SAS Grant Suspended A CBRS SAS Grant was suspended for the cellular AP. pcn_sas_grant_suspended
    SAS Grant Terminated A CBRS SAS Grant was terminated for the cellular AP. pcn_sas_grant_terminated
    SCEP Enrollment Failure This alert is generated when a device attempts to enroll with a SCEP server but can't enroll successfully. scep_enrollment_failure
    SCEP Enrollment Success This alert is generated when a device successfully enrolls with a SCEP server. scep_enrollment_success
    SIM Door Event Occurs when the SIM door opens or closes. sim_door_event
    SPAN Enabled SPAN Packet Cloning Enabled span_enabled
    System Error Requires Reboot The router rebooted due to a system error that requires a reboot to resolve. system_error
    Sustained System Overload The system experienced sustained levels for CPU or Packet Loss that exceeded thresholds. sustained_system_overload
    Test Error A speed test encountered an error. csi_test_error
    Test Failed A carrier failed to meet the benchmarks for a speed test. csi_test_failed
    Test Passed A carrier met or exceeded the benchmarks for a speed test. csi_test_passed
    Test Started All preconditions have been met for CSI (Carrier Selection Intelligence) to start. csi_test_started
    Temperature Limit Exceeded Occurs on devices with an internal temperature sensor (COR IBR1100 and IBR1150) when a user-defined temperature limit is reached. To set the temperature limits for the COR IBR1100 Series, login to the Device UI, select System > Administration, and then click the Temperature tab. thermal_exceeds_limit
    Tunnel Limit Reached Occurs when the number of IPSec tunnel connections has met or exceeded either 90% or 100% of the maximum tunnel limit. tunnel_limit
    Unrecognized Client Indicates a client with an unrecognized MAC address has attempted to connect to the device. MAC logging must be enabled to trigger this alert. To enable MAC logging, login to the Device UI and go to Networking > Local Networks> MAC Filter & Logging and select Enable MAC Logging. unrecognized_mac_alert
    VRRP State Changed to Backup The specified router has become a VRRP backup. You can further configure this alert to only be sent if the router was previously a master or in a fault state for a specified period. vrrp_new_backup, intel_vrrp_new_backup
    VRRP State Changed to Fault The specified router is in a VRRP fault state. You can further configure this alert to only be sent if the router was previously a backup or a master for a specified period. vrrp_new_fault, intel_vrrp_new_fault
    VRRP State Changed to Master The specified router has been become a VRRP master. You can further configure this alert to only be sent if the router was previously a backup or in a fault state for a specified period. vrrp_new_master, intel_vrrp_new_master
    WAN Service Type Indicates that a WAN device has changed its service type, such as switching from 3G to 4G. Possible service types include: DHCP, LTE, HSPA+, etc. wan_service_type
    WAN Status Change Router WAN has plugged, unplugged, connected or disconnected. (Deprecated) wan_status_change
    Webhook Suspended Previously configured webhook is in a suspended state. http_destination_suspended
    Webhook Failure Webhook delivery failed for alert with UUID (created_uuid), type (type), account (account_id), router (router_id), at time (created_ts) with message: (message). http_push_failure
    WiFi Client State Changed Occurs when a WiFi client changes state. For example, when a client's state changes from connected to disconnected (requires NetCloud OS version 6.6.1 and newer). wifi_client_state_change
    WiFi as WAN Standby Indicates a WiFi as WAN network is in standby. wwan_standby
    WiFi as WAN Connected Indicates WiFi as WAN is no longer active. wwan_connected
    WWAN Disconnected A WiFi as WAN network is no longer active. wwan_disconnected
    WiFi as WAN Network Available A WiFi as WAN network is now attached. wwan_network_available
    WiFi as WAN Network Unavailable A WiFi as WAN network has been removed. wwan_network_unavailable
    Zscaler TLS Tunnel State Indicates the state of a Zscaler tunnel has changed. zs_tls_tunnel

    Account Alerts

    Alert Type Description Alert Field Name
    Account Locked The account is locked for 30 minutes after six failed attempts to log into the device. account_locked
    Non-Compliant Devices Indicates account has new non-compliant devices. acs_noncompliant_devices
    Unlicensed Devices Indicates account has new unlicensed devices. acs_unlicensed_devices
    Devices Unlicensed in 5 Days Indicates account has devices unlicensing in 5 days. acs_unlicensed_in_5_days
    Devices Unlicensed in 15 Days Indicates account has devices unlicensing in 15 days. acs_unlicensed_in_15_days
    Pooled Carrier Data Usage Creates an alert when a user-defined usage percentage is met for a pooled data plan. pdp_account_overage
    Carrier Data Usage Per Router Creates an alert when a user-defined usage percentage is met for a single router. pdp_router_overage
    Subscriptions Expiring 180 Days Indicates account has subscriptions expiring in 180 days.
    For more information on notification limitations with Subscriptions Expiring alerts, see Alerts Not Supported for Use in Webhooks. Note the potential issues when using this alert.
    acs_expires_in_180_days
    Subscriptions Expiring 90 Days Indicates account has subscriptions expiring in 90 days acs_expires_in_90_days
    Subscriptions Expiring 60 Days Indicates account has subscriptions expiring in 60 days acs_expires_in_60_days
    Subscriptions Expiring 30 Days Indicates account has subscriptions expiring in 30 days acs_expires_in_30_days
    Subscriptions Expiring 15 Days Indicates account has subscriptions expiring in 15 days acs_expires_in_15_days
    Subscriptions Expiring 5 Days Indicates account has subscriptions expiring in 5 days acs_expires_in_5_days
  • GET Examples
  • Example curl GET request/response to the alerts endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/alerts/"

    Response body for curl GET example

    Note: The account field is null if the router field contains a value.

    {
        "data": [
            {
                "account": null,
                "created_at": "2020-12-07T17:44:19.430235+00:00",
                "created_at_timeuuid": "d554418c-38b3-11eb-acd7-32b969db3e3f",
                "detected_at": "2020-12-07T17:44:18+00:00",
                "friendly_info": "User admin has logged into the router from 127.0.0.1.",
                "info": {
                    "ip": "127.0.0.1",
                    "time": [
                        "2020-12-07 17:44:18",
                        "UTC"
                    ],
                    "type": "login_success",
                    "user": "admin"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "login_success"
            },
            {
                "account": null,
                "created_at": "2020-12-04T09:20:30.538148+00:00",
                "created_at_timeuuid": "f4442066-3611-11eb-bd86-5ebca3547463",
                "detected_at": "2020-12-04T09:16:16+00:00",
                "friendly_info": "The ethernet port \"Ethernet\" has connected to the network.",
                "info": {
                    "alert_type": "ethernet_wan_connected",
                    "history": [],
                    "info": {
                        "mac": "00:30:44:47:cb:09",
                        "port": "Ethernet",
                        "raw_port": "eth0",
                        "reason": "Manual",
                        "type": "ethernet",
                        "uid": "wan"
                    },
                    "status": "connected",
                    "time": [
                        "2020-12-04 09:16:16",
                        "UTC"
                    ],
                    "type": "wan_status_change"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "ethernet_wan_connected"
            },
            ... 
            ],
            "meta": {
                "limit": 20,
                "next": "https://www.cradlepointecm.com/api/v2/alerts/?created_at_timeuuid__lt=f4778d8a-3243-11eb-bce8-522895cf33a7"
            }
        }
     

    Example curl GET request/response to the alerts endpoint with a filters applied for the type field with a value ethernet_wan_connected.

    curl -v -X GET -H "X-ECM-API-ID:40961453-652c-48bc-8445-2cfeb36d2c4a" -H "X-ECM-API-KEY:d02aacae1b4b77967014b7270812e8a465ac3174" -H "X-CP-API-ID:a939a410" -H "X-CP-API-KEY:808163e5193491974cd55eda5120ed9d" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/alerts/?type=ethernet_wan_connected"

    Response body for curl GET example

    {
        "data": [
            {
                "account": null,
                "created_at": "2020-12-04T09:20:30.538148+00:00",
                "created_at_timeuuid": "f4442066-3611-11eb-bd86-5ebca3547463",
                "detected_at": "2020-12-04T09:16:16+00:00",
                "friendly_info": "The ethernet port \"Ethernet\" has connected to the network.",
                "info": {
                    "alert_type": "ethernet_wan_connected",
                    "history": [],
                    "info": {
                        "mac": "00:30:44:47:cb:09",
                        "port": "Ethernet",
                        "raw_port": "eth0",
                        "reason": "Manual",
                        "type": "ethernet",
                        "uid": "wan"
                    },
                    "status": "connected",
                    "time": [
                        "2020-12-04 09:16:16",
                        "UTC"
                    ],
                    "type": "wan_status_change"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "ethernet_wan_connected"
            },
            {
                "account": null,
                "created_at": "2020-11-29T13:08:21.165839+00:00",
                "created_at_timeuuid": "f4879e94-3243-11eb-a03e-522895cf33a7",
                "detected_at": "2020-11-29T13:06:11+00:00",
                "friendly_info": "The ethernet port \"Ethernet\" has connected to the network.",
                "info": {
                    "alert_type": "ethernet_wan_connected",
                    "history": [],
                    "info": {
                        "mac": "00:30:44:47:cb:09",
                        "port": "Ethernet",
                        "raw_port": "eth0",
                        "reason": "Manual",
                        "type": "ethernet",
                        "uid": "wan"
                    },
                    "status": "connected",
                    "time": [
                        "2020-11-29 13:06:11",
                        "UTC"
                    ],
                    "type": "wan_status_change"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "ethernet_wan_connected"
            },
            {
                "account": null,
                "created_at": "2020-11-29T13:08:21.105197+00:00",
                "created_at_timeuuid": "f47e5dc2-3243-11eb-b40d-522895cf33a7",
                "detected_at": "2020-11-29T13:04:56+00:00",
                "friendly_info": "The ethernet port \"Ethernet\" has connected to the network.",
                "info": {
                    "alert_type": "ethernet_wan_connected",
                    "history": [],
                    "info": {
                        "mac": "00:30:44:47:cb:09",
                        "port": "Ethernet",
                        "raw_port": "eth0",
                        "reason": "Manual",
                        "type": "ethernet",
                        "uid": "wan"
                    },
                    "status": "connected",
                    "time": [
                        "2020-11-29 13:04:56",
                        "UTC"
                    ],
                    "type": "wan_status_change"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "ethernet_wan_connected"
            },
    ...
        ],
        "meta": {
            "limit": 20,
            "next": null
        }
    }

    Forms

    Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the batteries endpoint to retrieve battery information for E100 series devices. Note the following when interpreting values returned by this endpoint.

  • A battery's "status" field contains a positive value while a battery is charging and a negative value while discharging. A battery is considered charged when its capacity is within 15% of its design capacity.
  • A battery's "health" is a ratio of its present capacity and its design capacity.

The following alerts can be configured for monitoring the state of batteries in a router.

  • Battery Health (batt_health_alert): creates an alert when the remaining battery life reaches 62%
  • Battery Over Current (batt_over_current_alert): creates an alert when the battery's current reaches 3.2 amps
  • Battery Over Temperature (batt_over_temp_alert): creates an alert when the battery's temperature reaches 50 degrees Celsius
  • Battery Over Voltage (batt_over_voltage_alert): creates an alert when the battery's recommended voltage exceeds 8.5V (8500 mV)
  • Battery System Low Power (batt_sys_low_power_alert): creates an alert when the battery's power reaches 20% charge
  • Battery System Power Off (batt_sys_power_off_alert): creates an alert when the battery's power reaches 7% charge
IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • batteries Endpoint Fields and Filters
  • This table lists the fields associated with the batteries endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    created_at timestamp Timestamp of a battery's initial record in NetCloud
    health int Ratio of present capacity and design capacity
    id string ID of the batteries record
    manufacturer string Manufacturer of battery
    milliamps int Battery current (milliamps, negative indicates discharging)
    millivolts int Battery voltage (millivolts)
    resource_url url URL of the batteries record
    router in: int, out:url =, __in ID of the router containing the battery(s) to query
    rsoc int Relative state of charge
    serial string Battery serial number
    status string State of battery (charging, discharging, idle)
    temp int Battery temperature
    time_remaining int Battery time remaining, in minutes
    type string Type of power source
    updated_at timestamp Battery's most recent update date/time in NetCloud

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/batteries/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/batteries/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the batteries endpoint with the required router filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"  "https://www.cradlepointecm.com/api/v2/batteries/?router=2287406"

    Response body for curl GET example

    {
        "data": [
             {
              "created_at": "2021-01-12T13:48:45.438933+00:00",
              "health": 96,
              "id": "2022",
              "manufacturer": "GETAC",
              "milliamps": 0,
              "millivolts": 8162,
              "resource_url": "https://www.cradlepointecm.com/api/v2/batteries/2022/",
              "router": "https://www.cradlepointecm.com/api/v2/routers/2287406/",
              "rsoc": 100,
              "serial": "GA2039BA001264",
              "status": "Idle",
              "temp": 34,
              "time_remaining": null,
              "type": "battery",
              "updated_at": "2021-03-30T01:38:46.564399+00:00"
            },
            {
                ...
            }
        ],
        }
    }
     

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the configuration_managers endpoint to view and edit configurations for your devices.

Note: Device configuration data is retained for 90 days.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, PUT, PATCH.
  • configuration_managers Endpoint Fields and Filters
  • This table lists the fields associated with the configuration_managers endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description Permissions
    account in: int, out: url =, __in Account the configuration_managers record belongs to Read Only
    actual object JSON object that contains the device's actual config settings Read Only
    configuration object JSON object that contains the device's individual config settings Read/Write
    id* int =, __in The ID of a configuration_managers record Read Only
    pending object JSON object containing pending config settings Read Only
    resource_url in: int, out: url URL of the configuration_managers record Read Only
    router in: int, out: url =, __in The router that the configuration_managers record applies Read Only
    suspended boolean = The suspended state of a configuration Read/Write
    synched boolean = The synched state of a configuration Read Only
    target object JSON object that contains the current firmware's config settings Read Only
    version_number int =, __gt, __lt The version number of a configuration Read Only
    Note: * indicates the attribute is required for PUT and PATCH requests.
    Permissions: Read/Write means a parameter is returned in responses to GET requests and is editable in PATCH/POST requests.
    Read Only means a parameter is returned in responses to GET requests but is NOT editable in PATCH/POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/configuration_managers/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/configuration_managers/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Updating SCEP via the NetCloud API
  • When updating SCEP certificate values in a configuration through the API, remove the line containing""ca_print": "null"," from your HTTP PATCH request if you're not using MS NDES.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the configuration_managers endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/configuration_managers/"

    Response body for curl GET example.

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "actual": [
                    {
                        "ecm": {
                            "config_version": 28
                        },
                        "gre": {
                            "tunnels": {
                                "0": {
                                    "_id_": "00000000-e18b-3714-86cd-152498cbeeec",
                                    "dhcp_enabled": false,
                                    "enabled": true,
                                    "exception_route_mode": "route",
                                    "fail_back_to": "",
                                    "fail_over_to": "",
                                    "keep_alive_enabled": true,
                                    "keep_alive_period": 10,
                                    "keep_alive_retries": 3,
                                    "key": null,
                                    "local_network": "10.0.0.1",
                                    "name": "GRE Tunnel",
                                    "nemo": false,
                                    "netmask": "255.255.255.252",
                                    "remote_gateway": "166.18.88.35",
                                    "remote_network": "10.0.0.2",
                                    "routes": [
                                        {}
                                    ],
                                    "ttl": 64,
                                    "wan_dev": "disabled",
                                    "wan_trigger_field": "uid",
                                    "wan_trigger_predicate": "is",
                                    "wan_trigger_value": ""
                                }
                            }
                        },
                        "routing": {
                            "eigrp": {
                                "routers": {
                                    "0": {
                                        "asn": 100,
                                        "enabled": true,
                                        "interfaces": [
                                            {
                                                "authentication": [],
                                                "bandwidth": 100,
                                                "device": "00000000-e18b-3714-86cd-152498cbeeec",
                                                "hello_interval": 10,
                                                "hold_time": 40,
                                                "throughput_delay": 100
                                            }
                                        ],
                                        "neighbors": [],
                                        "networks": [],
                                        "redistribute": [],
                                        "router_id": "1.1.1.1",
                                        "timers_active_time_disabled": false
                                    }
                                }
                            }
                        },
                        "stats": {
                            "client_usage": {
                                "enabled": true
                            }
                        },
                        "system": {
                            "admin": {
                                "product_name": "AER2200-600M"
                            },
                            "gps": {
                                "enabled": true
                            },
                            "show_cloud_setup": false,
                            "system_id": "AER2200-b09-Home",
                            "ui_activated": true,
                            "users": {
                                "0": {
                                    "password": "*"
                                }
                            }
                        },
                        "wan": {
                            "connectionsets": {
                                "0": {
                                    "mode": "loadbalance"
                                }
                            },
                            "datacap": {
                                "enabled": true
                            },
                            "rules2": {
                                "0": {
                                    "connectionset": 1,
                                    "failureCheck": {
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "1": {
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "2": {
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "3": {
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "4": {
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                }
                            },
                            "swans": {
                                "criteria": {
                                    "datausage": {
                                        "enabled": true
                                    }
                                },
                                "enabled": true
                            }
                        },
                        "wlan": {
                            "radio": {
                                "0": {
                                    "bss": {
                                        "0": {
                                            "ssid": "AER2200-b09-JE-Home"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    []
                ],
                "configuration": [
                    {
                        "gre": {
                            "tunnels": {
                                "00000000-e18b-3714-86cd-152498cbeeec": {
                                    "_id_": "00000000-e18b-3714-86cd-152498cbeeec",
                                    "dhcp_enabled": false,
                                    "enabled": true,
                                    "exception_route_mode": "route",
                                    "fail_back_to": "",
                                    "fail_over_to": "",
                                    "keep_alive_enabled": true,
                                    "keep_alive_period": 10,
                                    "keep_alive_retries": 3,
                                    "key": null,
                                    "local_network": "10.0.0.1",
                                    "name": "GRE Tunnel",
                                    "nemo": false,
                                    "netmask": "255.255.255.252",
                                    "remote_gateway": "166.18.88.35",
                                    "remote_network": "10.0.0.2",
                                    "routes": {
                                        "0": {}
                                    },
                                    "ttl": 64,
                                    "wan_dev": "disabled",
                                    "wan_trigger_field": "uid",
                                    "wan_trigger_predicate": "is",
                                    "wan_trigger_value": ""
                                }
                            }
                        },
                        "routing": {
                            "eigrp": {
                                "routers": {
                                    "0": {
                                        "asn": 100,
                                        "enabled": true,
                                        "interfaces": {
                                            "0": {
                                                "authentication": [],
                                                "bandwidth": 100,
                                                "device": "00000000-e18b-3714-86cd-152498cbeeec",
                                                "hello_interval": 10,
                                                "hold_time": 40,
                                                "throughput_delay": 100
                                            }
                                        },
                                        "neighbors": [],
                                        "networks": [],
                                        "redistribute": [],
                                        "router_id": "1.1.1.1",
                                        "timers_active_time_disabled": false
                                    }
                                }
                            }
                        },
                        "stats": {
                            "client_usage": {
                                "enabled": true
                            }
                        },
                        "system": {
                            "admin": {
                                "product_name": "AER2200-600M"
                            },
                            "gps": {
                                "enabled": true
                            },
                            "show_cloud_setup": false,
                            "system_id": "AER2200-b09-Home",
                            "ui_activated": true,
                            "users": {
                                "0": {
                                    "password": "*"
                                }
                            }
                        },
                        "wan": {
                            "connectionsets": {
                                "0": {
                                    "mode": "loadbalance"
                                }
                            },
                            "datacap": {
                                "enabled": true
                            },
                            "rules2": {
                                "00000000-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000000-a81d-3590-93ca-8b1fcfeb8e14",
                                    "connectionset": 1,
                                    "failureCheck": {
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000001-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000001-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000002-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000002-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000003-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000003-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000004-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000004-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                }
                            },
                            "swans": {
                                "criteria": {
                                    "datausage": {
                                        "enabled": true
                                    }
                                },
                                "enabled": true
                            }
                        },
                        "wlan": {
                            "radio": {
                                "0": {
                                    "bss": {
                                        "0": {
                                            "ssid": "AER2200-b09-JE-Home"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    []
                ],
                "id": "2163609",
                "pending": [
                    {},
                    []
                ],
                "resource_url": "https://www.cradlepointecm.com/api/v2/configuration_managers/2163609/",
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "suspended": false,
                "synched": true,
                "target": [
                    {
                        "ecm": {
                            "config_version": 28
                        },
                        "gre": {
                            "tunnels": {
                                "00000000-e18b-3714-86cd-152498cbeeec": {
                                    "_id_": "00000000-e18b-3714-86cd-152498cbeeec",
                                    "dhcp_enabled": false,
                                    "enabled": true,
                                    "exception_route_mode": "route",
                                    "fail_back_to": "",
                                    "fail_over_to": "",
                                    "keep_alive_enabled": true,
                                    "keep_alive_period": 10,
                                    "keep_alive_retries": 3,
                                    "key": null,
                                    "local_network": "10.0.0.1",
                                    "name": "GRE Tunnel",
                                    "nemo": false,
                                    "netmask": "255.255.255.252",
                                    "remote_gateway": "166.18.88.35",
                                    "remote_network": "10.0.0.2",
                                    "routes": {
                                        "0": {}
                                    },
                                    "ttl": 64,
                                    "wan_dev": "disabled",
                                    "wan_trigger_field": "uid",
                                    "wan_trigger_predicate": "is",
                                    "wan_trigger_value": ""
                                }
                            }
                        },
                        "routing": {
                            "eigrp": {
                                "routers": {
                                    "0": {
                                        "asn": 100,
                                        "enabled": true,
                                        "interfaces": {
                                            "0": {
                                                "authentication": [],
                                                "bandwidth": 100,
                                                "device": "00000000-e18b-3714-86cd-152498cbeeec",
                                                "hello_interval": 10,
                                                "hold_time": 40,
                                                "throughput_delay": 100
                                            }
                                        },
                                        "neighbors": [],
                                        "networks": [],
                                        "redistribute": [],
                                        "router_id": "1.1.1.1",
                                        "timers_active_time_disabled": false
                                    }
                                }
                            }
                        },
                        "stats": {
                            "client_usage": {
                                "enabled": true
                            }
                        },
                        "system": {
                            "admin": {
                                "product_name": "AER2200-600M"
                            },
                            "gps": {
                                "enabled": true
                            },
                            "show_cloud_setup": false,
                            "system_id": "AER2200-b09-Home",
                            "ui_activated": true,
                            "users": {
                                "0": {
                                    "password": "*"
                                }
                            }
                        },
                        "wan": {
                            "connectionsets": {
                                "0": {
                                    "mode": "loadbalance"
                                }
                            },
                            "datacap": {
                                "enabled": true
                            },
                            "rules2": {
                                "00000000-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000000-a81d-3590-93ca-8b1fcfeb8e14",
                                    "connectionset": 1,
                                    "failureCheck": {
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000001-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000001-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000002-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000002-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000003-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000003-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                },
                                "00000004-a81d-3590-93ca-8b1fcfeb8e14": {
                                    "_id_": "00000004-a81d-3590-93ca-8b1fcfeb8e14",
                                    "failureCheck": {
                                        "idle_seconds": 30,
                                        "mode": "active_ping",
                                        "ping_target": "192.168.0.1"
                                    }
                                }
                            },
                            "swans": {
                                "criteria": {
                                    "datausage": {
                                        "enabled": true
                                    }
                                },
                                "enabled": true
                            }
                        },
                        "wlan": {
                            "radio": {
                                "0": {
                                    "bss": {
                                        "0": {
                                            "ssid": "AER2200-b09-JE-Home"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    []
                ],
                "version_number": 28
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }                
     
  • PUT Examples
  • Example curl PUT request/response to the configuration_managers endpoint to clear a configuration object. Please note that the configuration object in a configuration_managers is the only config object that can be modified. The target, actual, and pending objects in a configuration_managers record are read only.

    PUT https://www.cradlepointecm.com/api/v2/configuration_managers/123/?fields=configuration
            {
                 "configuration": [{}, []]
             }

    Response body for curl PUT example

    202 Accepted
            {
                 "configuration": [{}, []]
             }
  • PATCH Examples
  • Example curl PATCH request/response to the configuration_managers endpoint. This updates the client_usage boolean field to false.

    curl -v -X PATCH -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/configuration_managers/2163609/" -d '{    
    "configuration": [
            {
                "stats": {
                    "client_usage": {
                        "enabled": false
                    }
                }
            },
            []
        ]
    }'

    The example response body for curl PATCH actions to the configuration_managers endpoint returns the updated configuration.

    Notes on using arrays vs objects when making PATCH requests

    While PATCH requests can use both arrays and objects in their request bodies, there are some notable differences between these data structures that affect how PATCH requests work on data.

    Arrays are ordered based on implicit, zero-based numeric keys where the ordering of data isn't easily ascertained without knowing the ordering in advance. Due to this, when using an array in a PATCH body the entire array is replaced with successful a PATCH request.

    Objects, however, do contain explicit keys. PATCH requests that use objects can specify the index/value pairs to update in the array and thus only update those specified values instead of replacing the entire array.

    For example, PATCHing with a body containing an object like this

    {
     "0": "value for data at position 0",
     "1": "value for data at position 1"
    }
    

    results in an array like this:

    ["value for data at position 0", "value for data at position 1"]
    

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

A device app binding object represents a Cradlepoint SDK app to NCM group binding.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, POST, DELETE.
  • device_app_bindings Endpoint Fields and Filters
  • This table lists the fields associated with the device_app_bindings endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description Permissions
    account* url =, __in Account that created the device_app_bindings record Read/Write
    app_version* url =, __in The app version to be tied to the group binding Read/Write
    created_at timestamp Timestamp for when the device_app_bindings record was created Read Only
    group* url =, __in The group the binding will be applied Read/Write
    id! int =, __in ID of a device_app_bindings record Read Only
    resource_url url URL of the device_app_bindings record Read Only
    state string =, __in State of the device app Read/Write
    updated_at timestamp Time of last attribute update Read Only
    Note: * indicates the attribute is required for POST requests.
    Note: ! indicates the attribute is required for DELETE requests.
    Permissions: Read/Write means a parameter is returned in responses to GET requests and is editable in POST requests.
    Read Only means a parameter is returned in responses to GET requests but is NOT editable in POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/device_app_bindings/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/device_app_bindings/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the device_app_bindings endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"  "https://www.cradlepointecm.com/api/v2/device_app_bindings/"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "app_version": "https://www.cradlepointecm.com/api/v2/device_app_versions/8615/",
                "created_at": "2021-02-12T17:49:30.656191+00:00",
                "group": "https://www.cradlepointecm.com/api/v2/groups/216763/",
                "id": "12526",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_app_bindings/12526/",
                "state": "installing",
                "updated_at": "2021-02-12T17:49:30.710742+00:00"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     
  • POST Examples
  • Example curl POST request/response to the device_app_bindings endpoint to create a device_app_bindings record. The POST body must contain the account, group, and app_version fields. The values for these fields must be passed by their URL values and NOT their IDs.

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/device_app_bindings/" -d {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "app_version": "https://www.cradlepointecm.com/api/v2/device_app_versions/8521/",
        "group": "https://www.cradlepointecm.com/api/v2/groups/236090/"
    }    
        
        

    Response body for curl POST example. Successful POSTs to the device_app_bindings endpoint return a 201 response and response body with the following fields.

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "app_version": "https://www.cradlepointecm.com/api/v2/device_app_versions/8521/",
        "created_at": "2021-04-09T17:02:03.299244+00:00",
        "group": "https://www.cradlepointecm.com/api/v2/groups/236090/",
        "id": "13990",
        "resource_url": "https://www.cradlepointecm.com/api/v2/device_app_bindings/",
        "state": "",
        "updated_at": "2021-04-09T17:02:03.299263+00:00"
    }
        
  • DELETE Example
  • Example curl DELETE request/response to the device_app_bindings endpoint. This deletes the device_app_binding matching the ID passed in the route.

    curl -v -X DELETE -H "$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_app_bindings/13839/"  
      

    Successful DELETE actions return a 204 response with no content in the body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

The device_app_states endpoint retrieves the state of a Cradlepoint SDK app.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • device_app_states Endpoint Fields and Filters
  • This table lists the fields associated with the device_app_states endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account url =, __in Account that created the device_app_states record
    app_version url =, __in The app version associated with device app
    created_at timestamp Timestamp for when the device_app_states record was created
    id int =, __in ID of a device_app_states record
    resource_url url URL of the device_app_states record
    router url =, __in The router with the device app
    state string =, __in State of the device app
    updated_at timestamp Time of last attribute update

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/device_app_states/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/device_app_states/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the device_app_states endpoint with the ID filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_app_states/?account=241"

    Response body for curl GET example

    {
       {
          "data": [
              {
                  "account": "https://www.cradlepointecm.com/api/v2/accounts/241/",
                  "app_version": "https://www.cradlepointecm.com/api/v2/device_app_versions/112/",
                  "state": "started",
                  "router": "https://www.cradlepointecm.com/api/v2/routers/77/"
                  "created_at": "2015-08-10T16:19:31.784055+00:00",
                  "updated_at": "2015-09-22T10:35:55.182602+00:00"
                  "id": "17",
                  "resource_url": "https://www.cradlepointecm.com/api/v2/device_apps/17/",
              },
              { ... }
          ],
          "meta": {
              "limit": 20,
              "next": null,
              "offset": 0,
              "previous": null
          }
      }
     

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the device_app_versions endpoint to retrieve information about the versions of your installed Cradlepoint SDK apps.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, DELETE.
  • device_app_versions Endpoint Fields and Filters
  • This table lists the fields associated with the device_app_versions endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account url =, __in Account that created the device_app_versions record
    app url =, __in Associated device app
    created_at timestamp Timestamp for when the device_app_versions record was created
    id* int =, __in ID of a device_app_versions record
    resource_url url URL of the device_app_versions record
    state string =, __in State of the app version
    state_details string Details of the app version state
    updated_at timestamp Time of last attribute update
    version int Version
    Note: * indicates the attribute is required for DELETE requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/device_app_versions/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/device_app_versions/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the device_app_versions endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_app_versions/"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "app": "https://www.cradlepointecm.com/api/v2/device_apps/1441/",
                "created_at": "2021-02-10T22:00:38.433457+00:00",
                "id": "8612",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_app_versions/8612/",
                "state": "ready",
                "state_details": "",
                "updated_at": "2021-02-10T22:00:38.771163+00:00",
                "version": "1.0.0"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "app": "https://www.cradlepointecm.com/api/v2/device_apps/1442/",
                "created_at": "2021-02-10T22:44:22.763337+00:00",
                "id": "8613",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_app_versions/8613/",
                "state": "ready",
                "state_details": "",
                "updated_at": "2021-02-10T22:44:23.073839+00:00",
                "version": "2.0.0"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "app": "https://www.cradlepointecm.com/api/v2/device_apps/1441/",
                "created_at": "2021-02-10T23:31:55.828016+00:00",
                "id": "8615",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_app_versions/8615/",
                "state": "ready",
                "state_details": "",
                "updated_at": "2021-02-10T23:31:56.085865+00:00",
                "version": "1.5.0"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     

    Example curl GET request/response to the device_app_versions endpoint with the ID filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_app_versions/?id=8613"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts//",
                "app": "https://www.cradlepointecm.com/api/v2/device_apps/1442/",
                "created_at": "2021-02-10T22:44:22.763337+00:00",
                "id": "8613",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_app_versions/8613/",
                "state": "ready",
                "state_details": "",
                "updated_at": "2021-02-10T22:44:23.073839+00:00",
                "version": "2.0.0"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
  • DELETE Example
  • Example curl DELETE request/response to the device_app_versions endpoint. This deletes the device version matching the ID passed in the route.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_app_versions/8613/"

    Successful DELETE actions return a 204 response with no content in the body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the device_apps endpoint to retrieve information about your installed SDK apps.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, DELETE.
  • device_apps Endpoint Fields and Filters
  • This table lists the fields associated with the device_apps endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account url =, __in Account that created the device_apps record
    created_at timestamp Timestamp for when the device_apps record was created
    description string Description for the device app
    id* int =, __in ID of a device_apps record
    name string =, __in Name of the device app
    resource_url url URL of the device_apps record
    updated_at timestamp Time of last attribute update
    uuid int =, __in Uuid of the device_apps record
    Note: * indicates the attribute is required for DELETE requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/device_apps/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/device_apps/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the device_apps endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_apps/"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "created_at": "2021-02-10T22:00:38.608575+00:00",
                "description": "hello_world",
                "id": "1441",
                "name": "hello_world",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_apps/1441/",
                "updated_at": "2021-02-10T22:00:38.615080+00:00",
                "uuid": "dfc1a1fe-8394-418a-904b-ae246cceedb5"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "created_at": "2021-02-10T22:44:22.882317+00:00",
                "description": "Simple Web Server Reference Application with single fixed page",
                "id": "1442",
                "name": "simple_web_server",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_apps/1442/",
                "updated_at": "2021-02-10T22:44:22.892095+00:00",
                "uuid": "f9ed307f-1a0e-4a18-bd97-a7b09ce6cff5"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "created_at": "2021-02-17T16:18:05.438843+00:00",
                "description": "Execute CLI command and return output",
                "id": "1455",
                "name": "cli_sample",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_apps/1455/",
                "updated_at": "2021-02-17T16:18:06.220362+00:00",
                "uuid": "6af0a447-0946-4102-a21c-219c1cc15f48"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     

    Example curl GET request/response to the device_apps endpoint with the ID filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_apps/?id=8613"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "created_at": "2021-02-10T22:00:38.608575+00:00",
                "description": "hello_world",
                "id": "8613",
                "name": "hello_world",
                "resource_url": "https://www.cradlepointecm.com/api/v2/device_apps/1441/",
                "updated_at": "2021-02-10T22:00:38.615080+00:00",
                "uuid": "dfc1a1fe-8394-418a-904b-ae246cceedb5"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
  • DELETE Example
  • Example curl DELETE request/response to the device_apps endpoint. This deletes the device apps record matching the ID passed in the route.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/device_apps/8613/"

    Successful DELETE actions return a 204 response with no content in the body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the failovers endpoint to retrieve data for failover events on individual routers, groups of routers, and across your account.

A failover event represents when a Cradlepoint device (without load balancing enabled) with multiple WAN interfaces changes its primary WAN interface from a higher-priority interface to a lower-priority interface.

Note: The failovers endpoint requires NCOS version 7.1.30 or newer and an Advanced license.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • failovers Endpoint Fields and Filters
  • This table lists the fields associated with the failovers endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account_id int = Account that created the failovers record
    carrier_name string Cellular carrier
    current_wan_interface string WAN interface currently in use
    current_wan_priority float WAN priority
    data_usage int Data usage amount
    elapsed_time int Amount of time spent in failover state
    ended_at datetime =, __gt, __gte, __lt, __lte Datetime for when a failover event ended
    group_id int = The ID of a group to view failover events
    group_name string The name of a group to view failover events
    percent_data_cap float Percentage of data used relative to data cap
    previous_wan_interface string WAN interface in use before failover
    previous_wan_priority float Priority of the WAN interface in use before failover
    router_id int = The ID of a router to view failover events
    router_name string The name of a router to view failover events
    started_at datetime =, __gt, __gte, __lt, __lte Datetime for when a failover event started
    tenant_id string Tenant ID
    updated_at datetime Datetime for when a failover event updated
    uuid string Uuid of a failover event record

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/failovers/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/failovers/ "
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the failovers endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/failovers/"

    Response body for curl GET example

    {
        "data": [
            {
                "account_id": 55993,
                "carrier_name": "Verizon",
                "current_wan_interface": "ethernet-wan",
                "current_wan_priority": 0.00088295,
                "data_usage": 65898,
                "elapsed_time": 32,
                "ended_at": "2019-10-22T20:26:34.033177+00:00",
                "group_id": 145242,
                "group_name": "2200",
                "percent_data_cap": null,
                "previous_wan_interface": "mdm-3983dbd5",
                "previous_wan_priority": 2.25014338,
                "router_id": 1507274,
                "router_name": "AER2200-120",
                "started_at": "2019-10-22T20:26:01.870771+00:00",
                "tenant_id": "0013800001TB9s1",
                "updated_at": "2019-10-22T20:27:32.390005+00:00",
                "uuid": "6a701002-652b-4137-9ead-5847ae338ccd"
            },
            {
                "account_id": 55993,
                "carrier_name": "Verizon",
                "current_wan_interface": "ethernet-wan",
                "current_wan_priority": 0.00088295,
                "data_usage": 74607,
                "elapsed_time": 96,
                "ended_at": "2019-10-22T20:32:24.293963+00:00",
                "group_id": 145242,
                "group_name": "2200",
                "percent_data_cap": null,
                "previous_wan_interface": "mdm-3983dbd5",
                "previous_wan_priority": 1.50014338,
                "router_id": 1507274,
                "router_name": "AER2200-120",
                "started_at": "2019-10-22T20:30:47.578229+00:00",
                "tenant_id": "0013800001TB9s1",
                "updated_at": "2019-10-22T20:33:18.376541+00:00",
                "uuid": "c3636db8-dd82-4974-a245-7ce872674afa"
            },
            ...
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     

Forms

Use the firmwares endpoint to retrive information about NetCloud OS (NCOS) firmware builds.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • firmwares Endpoint Fields and Filters
  • This table lists the fields associated with the firmwares endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    built_at timestamp The time when the firmware image was built
    default_configuration json Default configuration for the firmware version
    expires_at timestamp The time when the firmware version expires
    hash string sha1sum hash of the firmware image
    id int =, __in ID of a firmwares record
    is_deprecated boolean True if this firmware version has been deprecated
    product url Product this firmware is for
    released_at timestamp The time when the firmware was released
    resource_url url URL of the firmwares record
    uploaded_at timestamp The time when the firmware image was uploaded to NCM
    url url URL of the firmware image
    version string =, __in Version of this firmware

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/firmwares/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/firmwares/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the firmwares endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/firmwares/"

    Response body for curl GET example

    {
        "data": [
            {
                "built_at": "2013-07-02T17:08:47+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/1/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "25e8477e202e16dc64303c02bdc990d4d06a5daa",
                "id": "1",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/4/",
                "released_at": "2013-07-02T17:08:47+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/1/",
                "uploaded_at": "2013-07-03T17:59:24.167915+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/CBR450-2013-07-02T17%3A08%3A47.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-07-02T16:34:08+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/2/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "516cdeaef3830f5558eb1276b4f6f573440f4082",
                "id": "2",
                "is_deprecated": true,
                "product": "https://www.cradlepointecm.com/api/v2/products/6/",
                "released_at": "2013-07-02T16:34:08+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/2/",
                "uploaded_at": "2013-07-03T17:59:25.035746+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1200B-2013-07-02T16%3A34%3A08.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-07-02T17:41:32+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/3/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "dc1578e687ca38964ddb59abe1c0f2fd8f001d70",
                "id": "3",
                "is_deprecated": true,
                "product": "https://www.cradlepointecm.com/api/v2/products/9/",
                "released_at": "2013-07-02T17:41:32+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/3/",
                "uploaded_at": "2013-07-03T17:59:25.704200+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/CBA750B-2013-07-02T17%3A41%3A32.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-07-02T16:51:19+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/4/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "01a79f1aee3a26618fe49c7e7e65eb6e24ae5046",
                "id": "4",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/3/",
                "released_at": "2013-07-02T16:51:19+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/4/",
                "uploaded_at": "2013-07-03T17:59:26.518240+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/CBR400-2013-07-02T16%3A51%3A19.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-07-02T15:18:08+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/5/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "b57f285926f36147d1912d7c3072e798586a9e51",
                "id": "5",
                "is_deprecated": true,
                "product": "https://www.cradlepointecm.com/api/v2/products/7/",
                "released_at": "2013-07-02T15:18:08+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/5/",
                "uploaded_at": "2013-07-03T17:59:27.308069+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/IBR600-2013-07-02T15%3A18%3A08.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-07-02T15:56:43+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/6/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "f8c76946f67614da3db0b1a505ca718161c90851",
                "id": "6",
                "is_deprecated": true,
                "product": "https://www.cradlepointecm.com/api/v2/products/2/",
                "released_at": "2013-07-02T15:56:43+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/6/",
                "uploaded_at": "2013-07-03T17:59:28.230896+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1400v2-2013-07-02T15%3A56%3A43.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-07-02T16:15:37+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/7/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "5c824cc2f027313eb5ac85d8ced1c1e296976a5c",
                "id": "7",
                "is_deprecated": true,
                "product": "https://www.cradlepointecm.com/api/v2/products/1/",
                "released_at": "2013-07-02T16:15:37+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/7/",
                "uploaded_at": "2013-07-03T17:59:29.642496+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1400-2013-07-02T16%3A15%3A37.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-07-02T15:37:18+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/8/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "8e8e95fe5db91e2d9ebc7281a529a14eb8469f4a",
                "id": "8",
                "is_deprecated": true,
                "product": "https://www.cradlepointecm.com/api/v2/products/8/",
                "released_at": "2013-07-02T15:37:18+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/8/",
                "uploaded_at": "2013-07-03T17:59:30.400223+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/IBR650-2013-07-02T15%3A37%3A18.bin",
                "version": "4.3.2"
            },
            {
                "built_at": "2013-08-12T16:32:13+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/15/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "5d8b5ebfceda731472f609009f0783981f0c462d",
                "id": "15",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/6/",
                "released_at": "2013-08-12T16:32:13+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/15/",
                "uploaded_at": "2013-09-11T23:59:38.141907+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1200B-2013-08-12T16%3A32%3A13.bin",
                "version": "4.4.0"
            },
            {
                "built_at": "2013-08-12T17:09:53+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/16/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "50ede08a8fa0533ab908f336140c0c924cf52f6d",
                "id": "16",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/9/",
                "released_at": "2013-08-12T17:09:53+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/16/",
                "uploaded_at": "2013-09-11T23:59:39.244468+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/CBA750B-2013-08-12T17%3A09%3A53.bin",
                "version": "4.4.0"
            },
            {
                "built_at": "2013-08-12T15:05:51+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/17/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "febe611670c83608f122fef654d32a55cd55d70d",
                "id": "17",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/7/",
                "released_at": "2013-08-12T15:05:51+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/17/",
                "uploaded_at": "2013-09-11T23:59:40.485441+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/IBR600-2013-08-12T15%3A05%3A51.bin",
                "version": "4.4.0"
            },
            {
                "built_at": "2013-08-12T15:50:22+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/18/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "ccb0f716bf4bd296e2ff1e11a96b8931742a35ad",
                "id": "18",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/2/",
                "released_at": "2013-08-12T15:50:22+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/18/",
                "uploaded_at": "2013-09-11T23:59:41.390803+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1400v2-2013-08-12T15%3A50%3A22.bin",
                "version": "4.4.0"
            },
            {
                "built_at": "2013-08-12T16:11:11+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/19/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "fa7ba9b01208bec3348a7ad9b9d2e84aadda642c",
                "id": "19",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/1/",
                "released_at": "2013-08-12T16:11:11+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/19/",
                "uploaded_at": "2013-09-11T23:59:42.169480+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1400-2013-08-12T16%3A11%3A11.bin",
                "version": "4.4.0"
            },
            {
                "built_at": "2013-08-12T15:27:33+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/20/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "344df0ea31fad4ed57e63995bf8c8832d69db60b",
                "id": "20",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/8/",
                "released_at": "2013-08-12T15:27:33+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/20/",
                "uploaded_at": "2013-09-11T23:59:42.906921+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/IBR650-2013-08-12T15%3A27%3A33.bin",
                "version": "4.4.0"
            },
            {
                "built_at": "2013-10-07T11:26:12+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/24/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "2bf48e15384582d703064889dd968862a921fef6",
                "id": "24",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/6/",
                "released_at": "2013-10-07T11:26:12+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/24/",
                "uploaded_at": "2013-10-08T00:59:47.836270+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1200B-2013-10-07T11%3A26%3A12.bin",
                "version": "4.4.2"
            },
            {
                "built_at": "2013-10-07T12:37:37+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/25/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "de683b3704e0dc6e2be18709cf666209a12b4f8a",
                "id": "25",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/9/",
                "released_at": "2013-10-07T12:37:37+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/25/",
                "uploaded_at": "2013-10-08T00:59:52.284638+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/CBA750B-2013-10-07T12%3A37%3A37.bin",
                "version": "4.4.2"
            },
            {
                "built_at": "2013-10-07T10:02:37+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/26/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "c78ce23fa43047789dcbfe641ef6b5dd9a74553b",
                "id": "26",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/7/",
                "released_at": "2013-10-07T10:02:37+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/26/",
                "uploaded_at": "2013-10-08T00:59:54.135536+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/IBR600-2013-10-07T10%3A02%3A37.bin",
                "version": "4.4.2"
            },
            {
                "built_at": "2013-10-07T10:46:04+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/27/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "37a13ea54efdd2c155fc9b96b5194810fefd126d",
                "id": "27",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/2/",
                "released_at": "2013-10-07T10:46:04+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/27/",
                "uploaded_at": "2013-10-08T00:59:55.300692+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1400v2-2013-10-07T10%3A46%3A04.bin",
                "version": "4.4.2"
            },
            {
                "built_at": "2013-10-07T11:06:13+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/28/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "72d96f027a4dfb8133a513c45409d997a51e5d56",
                "id": "28",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/1/",
                "released_at": "2013-10-07T11:06:13+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/28/",
                "uploaded_at": "2013-10-08T00:59:56.957464+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1400-2013-10-07T11%3A06%3A13.bin",
                "version": "4.4.2"
            },
            {
                "built_at": "2013-10-07T10:23:47+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/29/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "5549f9e11b5e0f54e1e2b58be501604d48ad4f7f",
                "id": "29",
                "is_deprecated": false,
                "product": "https://www.cradlepointecm.com/api/v2/products/8/",
                "released_at": "2013-10-07T10:23:47+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/29/",
                "uploaded_at": "2013-10-08T01:00:03.272843+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/IBR650-2013-10-07T10%3A23%3A47.bin",
                "version": "4.4.2"
            }
        ],
        "meta": {
            "limit": 20,
            "next": "https://www.cradlepointecm.com/api/v2/firmwares/?limit=20&offset=20",
            "offset": 0,
            "previous": null
        }
    }

    Example curl GET request/response to the firmwares endpoint with the ID filter applied. This retrieves information for the firmware package with the ID "2."

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/firmwares/?id=2"

    Response body for curl GET example

    {
        "data": [
            {
                "built_at": "2013-07-02T16:34:08+00:00",
                "default_configuration": "https://www.cradlepointecm.com/api/v2/firmwares/2/default_configuration/",
                "expires_at": "2020-01-01T00:00:00+00:00",
                "hash": "516cdeaef3830f5558eb1276b4f6f573440f4082",
                "id": "2",
                "is_deprecated": true,
                "product": "https://www.cradlepointecm.com/api/v2/products/6/",
                "released_at": "2013-07-02T16:34:08+00:00",
                "resource_url": "https://www.cradlepointecm.com/api/v2/firmwares/2/",
                "uploaded_at": "2013-07-03T17:59:25.035746+00:00",
                "url": "https://d251cfg5d9gyuq.cloudfront.net/MBR1200B-2013-07-02T16%3A34%3A08.bin",
                "version": "4.3.2"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }  
      

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

A group is a NetCloud object designed to contain endpoints. Groups allow you to manage endpoints together so you can configure them at the same time with the same settings. Groups have the following characteristics.

  • All endpoints in a group must be the same product type.
  • The group has one NCOS version and endpoints are automatically upgraded to that version when they are added to the group.
  • Groups can have configurations and the group configurations are applied to all endpoints in a group.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, POST, PUT, PATCH, DELETE.
  • groups Endpoint Fields and Filters
  • This table lists the fields associated with the groups endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description Permissions
    account* url =, __in Account that a group belongs to Read/Write
    configuration json Configuration for the group Read/Write
    device_type string =, __in Type of device, e.g. router or access point Read Only
    id int =, __in ID of a groups record Read Only
    name!* string =, __in Name of the group Read/Write
    product* url Product type for the group Read/Write
    resource_url url URL of the groups record Read Only
    target_firmware* url Firmware version for the group Read/Write
    Note: * indicates the attribute is required for POST requests.
    Permissions: Read/Write means a parameter is returned in responses to GET requests and is editable in PUT/POST requests.
    Read Only means a parameter is returned in responses to GET requests but is NOT editable in PUT/POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/groups/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/groups/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the groups endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/groups/"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "configuration": [
                    {},
                    []
                ],
                "device_type": "access_point",
                "id": "85136",
                "name": "AP22 Group",
                "product": "https://www.cradlepointecm.com/api/v2/products/48/",
                "resource_url": "https://www.cradlepointecm.com/api/v2/groups/85136/",
                "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "configuration": [
                    {},
                    []
                ],
                "device_type": "router",
                "id": "155407",
                "name": "AER3100 Group",
                "product": "https://www.cradlepointecm.com/api/v2/products/28/",
                "resource_url": "https://www.cradlepointecm.com/api/v2/groups/155407/",
                "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/1529/"
            },
            ...
         ]
    }     
    
            

    Example curl GET request/response to the groups endpoint with the name filter applied. This retrieves the group with the name matching "AP-22 Group".

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/groups/?name=AP22%20Group"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "configuration": [
                    {},
                    []
                ],
                "device_type": "access_point",
                "id": "85136",
                "name": "AP22 Group",
                "product": "https://www.cradlepointecm.com/api/v2/products/48/",
                "resource_url": "https://www.cradlepointecm.com/api/v2/groups/85136/",
                "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
            
  • POST Examples
  • Example curl POST request/response to the groups endpoint. This creates a new group in the specified account.

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY " -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/groups/" -d '{
            "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
            "name": "IBR1100",
            "product": "https://www.cradlepointecm.com/api/v2/products/23/",
            "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/29/"
            }'

    Response body for curl POST example

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/35065/",
        "configuration": [
            {},
            []
        ],
        "device_type": "router",
        "id": "230007",
        "name": "IBR1100",
        "product": "https://www.cradlepointecm.com/api/v2/products/23/",
        "resource_url": "https://www.cradlepointecm.com/api/v2/groups/",
        "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/29/"
    }
        
  • PUT Examples
  • Example curl PUT request/response to the groups endpoint. This updates the name of the group matching the ID "230007".

    curl -v -X PUT -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/groups/230007/" -d '{
            "name": "IBR1100 Group"}'

    Response body for curl PUT example

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "configuration": [
            {},
            []
        ],
        "device_type": "router",
        "id": "230007",
        "name": "IBR1100 Group",
        "product": "https://www.cradlepointecm.com/api/v2/products/23/",
        "resource_url": "https://www.cradlepointecm.com/api/v2/groups/230007/",
        "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/29/"
    }
        
  • PATCH Examples
  • Example curl PATCH request/response to the groups endpoint. This patches the group configuration's system > gps > enabled setting to true.

    curl -v -X PATCH -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/groups/235942/" -d '{ "configuration": [{ "system": { "gps": { "enabled": true } } }, [] ] }'
    
    

    Response body for curl PATCH example

                "system": {
                  "gps": {
                    "enabled": true
                  },
        

    Successful PATCH actions return a 202 response.

  • DELETE Example
  • Example curl DELETE request/response to the groups endpoint. This deletes the group matching the ID passed in the route.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/groups/230007/"

    Successful DELETE actions return a 204 response with no content in the body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

The historical_locations endpoint reports a history of the locations a device has traveled. Use this endpoint to obtain the data points that describe where a specific device has been physically located.

Beginning with NCOS version 7.1.30, your location data is stored (for devices with Location Tracking enabled) even if you lose your network connectivity. Location data is stored on your device and then uploaded to NetCloud when your connection resumes. This prevent gaps in your Location Services data and ensures you always have reliable information about the locations of your devices.

The historical_locations endpoint returns 5,000 location records per query by default (most Cradlepoint endpoints return 20 records by default). This ensures you receive enough historical-location data to meet your reporting needs.

Note: A maximum of 360 location data points are stored while your device is in motion but has no network connection.

Note: Historical location data is retained for one year.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • historical_locations Endpoint Fields and Filters
  • This table lists the fields associated with the historical_locations endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    accuracy int Calculated accuracy of coordinates, based on latitude.
    altitude_meters int Altitude value in meters
    carrier_id string The carrier the modem is currently registered with
    cinr double Carrier to Interference plus Noise Ratio (dB)
    created_at timestamp __gt, __lte Timestamp for when the historical_locations record was created
    created_at_timeuuid timeuuid __gt A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    dbm int Strength of received signal (dBm)
    ecio int Ec/Io, the ratio of average channel power to total signal power (dB)
    latitude int A device's relative position north or south on the Earth's surface, in degrees from the Equator
    longitude int A device's relative position east or west on the Earth's surface, in degrees from the prime meridian
    mph float Speed of the vehicle carrying the device
    net_device_name float Network device's name, e.g. 'ethernet-wan', 'lte-1234abcd', 'mdm-dcba4321'
    rfband string Indicates the Radio Frequency Band that is currently being used by the modem module
    rfband_5g string Indicates the 5G Radio Frequency Band that is currently being used by the modem module
    router int = The router ID of the device providing the location information.
    rsrp double LTE reference signal receive power
    rsrp_5g double 5G reference signal receive power
    rsrq int LTE reference signal receive quality
    rsrq_5g int 5G reference signal receive quality
    rssi int Received Signal Strength Indication (units vary with manufacturer)
    Note: Only for WiFi as WAN interfaces
    signal_percent int Percent signal strength, derived heuristically from other values
    sinr double Signal to Interference plus Noise Ratio (dB)
    sinr_5g double 5G Signal to Interference plus Noise Ratio (dB)
    summary string Connected status of the net device.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/historical_locations/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/historical_locations/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the historical_locations endpoint. This endpoint requires a router id to be passed in for the router query param (?router=<router id>).

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/historical_locations/?router=2162719"

    Response body for curl GET example. This example is one historical_locations record from a recordset of hundreds of location records for the specified router.

    {
        "created_at": "2021-02-06T21:38:01.447270Z",
        "ecio": null,
        "rfband_5g": null,
        "rsrq_5g": null,
        "net_device_name": "wwan-60:38:e0:35:f2:96:2_4G-1",
        "rsrq": null,
        "mph": 52.71,
        "signal_percent": null,
        "sinr": null,
        "longitude": -116.07866,
        "dbm": null,
        "rfband": null,
        "created_at_timeuuid": "964d01fa-68c3-11eb-8000-000000000000",
        "latitude": 44.82413,
        "cinr": null,
        "carrier_id": null,
        "sinr_5g": null,
        "rsrp_5g": null,
        "summary": null,
        "rssi": null,
        "rsrp": null,
        "accuracy": 2
    }
     

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

NetCloud Manager (NCM) supports location functionality which stores the last known location of a device. This requires that the Location Services feature is available on the account and that appropriate devices have been enabled. After Location Services are enabled, the NCM UI or this endpoint can be used to monitor or modify device locations.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, POST, PUT, DELETE.
  • locations Endpoint Fields and Filters
  • This table lists the fields associated with the locations endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description Permissions
    account* url Account that created the locations record Read/Write
    accuracy!* int Indicates accuracy range of location coordinates in meters Read/Write
    altitude_meters int Altitude value in meters
    id int =, __in Unique ID of a locations record. Unique identifiers are generated when locations records are created via calls to this endpoint using POST, as well as locations gathered from the device when Location Services are enabled. Read Only
    latitude!* int A device's relative position north or south on the Earth's surface, in degrees from the Equator Read/Write
    longitude!* int A device's relative position east or west on the Earth's surface, in degrees from the prime meridian Read/Write
    method* string Method used to determine location (eg. "gps" or "manual") Read/Write
    resource_url url URL of the locations record Read Only
    router* int =, __in The router ID of the device providing the location information. Read/Write
    updated_at timestamp Timestamp of the last location update Read Only
    Note: * indicates the attribute is required for POST requests.
    Note:! indicates the attribute is required for PUT requests.
    Permissions: Read/Write means a parameter is returned in responses to GET requests and is editable in PUT/POST requests.
    Read Only means a parameter is returned in responses to GET requests but is NOT editable in PUT/POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/locations/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/locations/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the locations endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/locations/"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "accuracy": 0,
                "id": "731218",
                "latitude": 43.5783243,
                "longitude": -116.1913274,
                "method": "manual",
                "resource_url": "https://www.cradlepointecm.com/api/v2/locations/731218/",
                "router": <router id>,
                "updated_at": "2021-01-25T16:04:34.731183+00:00"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     

    Example curl GET request/response to the locations endpoint with the ID filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/locations/?id=731218"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "accuracy": 0,
                "id": "731218",
                "latitude": 43.5783243,
                "longitude": -116.1913274,
                "method": "manual",
                "resource_url": "https://www.cradlepointecm.com/api/v2/locations/731218/",
                "router": <router id>,
                "updated_at": "2021-01-25T16:04:34.731183+00:00"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
            
  • POST Examples
  • Example curl POST request/response to the locations endpoint. This creates a new location record in the specified account.

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/locations/" -d '        {
            "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
            "accuracy": "0",
            "method": "manual",
            "latitude": "54.6197012",
            "longitude": -116.2059159,
            "router": <router id>
        }'
        

    Response body for curl POST example

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "accuracy": 0,
        "id": "763427",
        "latitude": 54.6197012,
        "longitude": -116.2059159,
        "method": "manual",
        "resource_url": "https://www.cradlepointecm.com/api/v2/locations/",
        "router": <router id>,
        "updated_at": "2021-02-17T17:36:53.239075+00:00"
    }
        
  • PUT Examples
  • Example curl PUT request/response to the locations endpoint. This updates the latitude value from 43 to 44.

    curl -v -X PUT -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/locations/731218/" -d '
          {
              "accuracy": 0,
              "latitude": "44.6197012",
              "longitude": "-116.2059159"
          }
    '

    Response body for curl PUT example

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "accuracy": 0,
        "id": "731218",
        "latitude": 44.6197012,
        "longitude": -116.2059159,
        "method": "manual",
        "resource_url": "https://www.cradlepointecm.com/api/v2/locations/731218/",
        "router": <router id>,
        "updated_at": "2021-02-17T16:51:50.499149+00:00"
    }
      
  • DELETE Example
  • Example curl DELETE request/response to the locations endpoint. This deletes the location record matching the ID passed in the route.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/locations/731218/"

    Successful DELETE actions return a 204 response with no content in the body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

The net_device_health endpoints returns a cellular health category and corresponding cellular health score.

The cellular_health_category field is a ranking with one of the following values:

  • Excellent
  • Good
  • Fair
  • Poor

The cellular_health_score field is based on the cellular technology of the connection (i.e. LTE, HSPA, CDMS, etc.), the signal quality (SINR, RSRQ, RSRP, EC/lo, RSSI) and signal strength (RSSI) of the connection.

The following conditions should be considered when evaluating the information returned by the net_device_health endpoint:

  • Routers must be managed by NCM in order for statistics to be gathered on them.
  • Removing a router from NCM, or moving a router to a new group, does not affect the historically-collected, group-uptime data. The history will not change if a router's group membership changes.
IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • net_device_health Endpoint Fields and Filters
  • This table lists the fields associated with the net_device_health endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    cellular_health_category string Cellular Health category name
    cellular_health_score int Cellular Health score
    id int ID of a net_device_health record
    net_device in: int, out: url =, __in The URL of the net_device.
    resource_url URL URL of the net_device_health record

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/net_device_health/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/net_device_health/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the net_device_health endpoint with the net_device filter applied. Omit the net_device filter to retrieve net_device_health records for all net devices in your account.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/net_device_health/?net_device=<net_device id>"

    Response body for curl GET example

    {
        "data": [
            {           
                "cellular_health_category": "excellent",
                "cellular_health_score": 82,
                "id": "28298558
                "net_device": "https://www.cradlepointecm.com/api/v2/net_devices/<net device id>/",
                "resource_url": "https://www.cradlepointecm.com/api/v2/net_device_health/28298558/"                  
            }
        ],
        "meta": {
            "limit": 20,
            "previous": null,
            "offset": 0,
            "next": null
        }
    }
     

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

This endpoint allows access to the latest signal, usage, and cell-tower data reported by an account’s wireless devices. This endpoint does not query the historical, raw-sample tables. These tables are not optimized for queries that span many wireless devices at once.

The primary key of this endpoint is net_device. The data returned by this endpoint has a one-to-one relationship with the net_devices endpoint. Expansion is supported to the net_devices endpoint. Paging is supported through our standard offset/limit functionality on the relational endpoints.

This endpoint also returns information about the cell towers used by your devices. This information includes cell tower IDs and the PLMN (MCC and MNC), LAC, and TAC codes.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • net_device_metrics Endpoint Fields and Filters
  • This table lists the fields associated with the net_device_metrics endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    bmask_applied boolean = Indicates if band masking is applied
    bytes_in bigint Last sampled usage value received from net_device (running total since last device reset)
    bytes_out bigint Last sampled usage value received from net_device (running total since last device reset)
    cell_id string Cell Tower ID
    cinr double Carrier to Interference plus Noise Ratio (dB)
    dbm int Strength of received signal (dBm).
    Note: Only used as a metric for cellular RSSI.
    ecio int Ec/Io, the ratio of average channel power to total signal power (dB)
    id int ID of a net_device_metrics record
    lac string Location Area Code
    mcc string Mobile Country Code (PLMN component)
    mnc string Mobile Network Code (PLMN component)
    net_device in: int, out: url =, __in net_device that reported the usage sample
    resource_url url URL of the net_device_metrics record
    rsrp double LTE reference signal receive power
    rsrq double LTE reference signal receive quality
    rssi int Received Signal Strength Indication (units vary with manufacturer)
    Note: Only used as a metric for WiFi as WAN interfaces.
    service_type string Last sampled service type value received from net_device
    signal_strength int Last sampled signal value received from net_device
    sinr double Signal to Interference plus Noise Ratio (dB)
    tac string Tracking Area Code
    update_ts timestamp __gt, __lt Last time any field on this record was updated

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/net_device_metrics/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/net_device_metrics/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the net_device_metrics endpoint with the net_device filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/net_device_metrics/?net_device=134193"

    Response body for curl GET example

    {
        "data": [
            {
                "bmask_applied": null,
                "bytes_in": 49972,
                "bytes_out": 331753,
                "cell_id": null,
                "cinr": null,
                "dbm": null,
                "ecio": null,
                "id": "134193",
                "lac": null,
                "mcc": null,
                "mnc": null,
                "net_device": "https://www.cradlepointecm.com/api/v2/net_devices/134193/",
                "resource_url": "https://www.cradlepointecm.com/api/v2/net_device_metrics/134193/",
                "rsrp": null,
                "rsrq": null,
                "rssi": null,
                "rssnr": null,
                "service_type": "Ethernet",
                "signal_strength": null,
                "sinr": null,
                "tac": null,
                "update_ts": "2021-04-30T16:51:24.475397+00:00"
            }
        ],
        "meta": {
            "limit": 20,
            "next": "https://www.cradlepointecm.com/api/v2/net_device_metrics/?limit=20&offset=20",
            "offset": 0,
            "previous": null
        }
    }
     

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Net device signal samples are periodic reports of modem signal strength indicators. By default a modem will report its current signal strength to NetCloud Manager (NCM) on an hourly basis, although this can be configured.

Note: Device signal-sample data is retained in NetCloud for 90 days.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • net_device_signal_samples Endpoint Fields and Filters
  • This table lists the fields associated with the net_device_signal_samples endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    cinr double Carrier to Interference plus Noise Ratio (dB)
    created_at timestamp __gt, __lt Timestamp of when the sample was created
    created_at_timeuuid timeuuid =, __in, __gt, __gte, __lt, __lte A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    dbm int Strength of received signal (dBm)
    ecio int Ec/Io, the ratio of average channel power to total signal power (dB)
    net_device in: int, out: url =, __in Network device that reported the usage sample
    rsrp double LTE reference signal receive power
    rsrp5g double 5G reference signal receive power
    rsrp5g_highband double 5G high-band reference signal receive power
    rsrq double LTE reference signal receive quality
    rsrq5g double 5G reference signal receive quality
    rsrq5g_highband double 5G high-band reference signal receive quality
    rssi int Received Signal Strength Indication (units vary with manufacturer)
    Note: Only for WiFi as WAN interfaces
    rssnr int Reference Signal Signal to Noise Ratio
    signal_percent int Percent signal strength, derived heuristically from other values
    sinr double Signal to Interference plus Noise Ratio (dB)
    sinr5g double 5G Signal to Interference plus Noise Ratio (dB)
    sinr5g_highband double 5G high-band Signal to Interference plus Noise Ratio (dB)
    uptime double Time in seconds since the net device established its link

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/net_device_signal_samples/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/net_device_signal_samples/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the net_device_signal_samples endpoint for the net device with id "73308086."

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/net_device_signal_samples/?net_device=73308086"

    Response body for curl GET example

    {
        "data": [
            {
                "cinr": null,
                "created_at": "2021-04-28T08:35:09.785076+00:00",
                "created_at_timeuuid": "a477e788-a7fc-11eb-bec0-925dfd668908",
                "dbm": -69,
                "ecio": null,
                "net_device": "https://www.cradlepointecm.com/api/v2/net_devices/73308086/",
                "rsrp": -96,
                "rsrp5g": null,
                "rsrp5g_highband": null,
                "rsrq": -10,
                "rsrq5g": null,
                "rsrq5g_highband": null,
                "rssi": null,
                "rssnr": null,
                "signal_percent": 100,
                "sinr": 16.4,
                "sinr5g": null,
                "sinr5g_highband": null,
                "uptime": 138686
            },
            { .... }
        ],
        "meta": {
            "limit": 20,
            "next": "https://www.cradlepointecm.com/api/v2/net_device_signal_samples/?created_at_timeuuid__lt=e8f813de-a7e2-11eb-bc01-067ecc6c90d9"
        }
    }
     

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Net device usage samples are periodic reports of the number of bytes passed in and out of a net device. By default a net device will report its usage on an hourly basis, although this can be configured.

Note: Net device usage sample data is retained in NetCloud for 90 days.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • net_device_usage_samples Endpoint Fields and Filters
  • This table lists the fields associated with the net_device_usage_samples endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    bytes_in bigint Bytes received to device since last update
    bytes_out bigint Bytes sent from device since last update
    created_at timestamp __gt, __lt Timestamp of when the sample was created
    created_at_timeuuid timeuuid =, __in, __gt, __gte, __lt, __lte A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    net_device in: int, out: url =, __in Network device that reported the usage sample
    period double Time in seconds since the last sample was reported
    uptime double Time in seconds since the net device established its link

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/net_device_usage_samples/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/net_device_usage_samples/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the net_device_usage_samples endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/net_device_usage_samples/"

    Response body for curl GET example

    {
        "data": [
            {
                "bytes_in": 41055349,
                "bytes_out": 26513817,
                "created_at": "2021-02-09T22:37:08.009631+00:00",
                "created_at_timeuuid": "5774ba36-6b27-11eb-810a-82c571ff5873",
                "net_device": "https://www.cradlepointecm.com/api/v2/net_devices/74404917/",
                "period": 2766.1619693620014,
                "uptime": 193395.479387832
            },
            {
                "bytes_in": 523161,
                "bytes_out": 830563,
                "created_at": "2021-02-09T22:37:08.006812+00:00",
                "created_at_timeuuid": "57744c1a-6b27-11eb-9b8a-82c571ff5873",
                "net_device": "https://www.cradlepointecm.com/api/v2/net_devices/74404916/",
                "period": 1424.0312275589968,
                "uptime": 193395.479387832
            },
            ... 
            ],
            "meta": {
                "limit": 20,
                "next": "https://www.cradlepointecm.com/api/v2/net_device_usage_samples/?created_at_timeuuid__lt=06c75c2c-6b0b-11eb-975d-fa12fe283560"
            }
        }        
     

    Example curl GET request/response to the net_device_usage_samples endpoint with the created_at_timeuuid filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/net_device_usage_samples/?created_at_timeuuid=f803740a-6b14-11eb-a773-12bfd7fde28d"

    Response body for curl GET example

    {
        "data": [
            {
                "bytes_in": 115192663,
                "bytes_out": 192047700,
                "created_at": "2021-02-09T20:25:36.942593+00:00",
                "created_at_timeuuid": "f803740a-6b14-11eb-a773-12bfd7fde28d",
                "net_device": "https://www.cradlepointecm.com/api/v2/net_devices/74404917/",
                "period": 2074.1544243349927,
                "uptime": 185504.796904274
            }
        ],
        "meta": {
            "limit": 20,
            "next": null
        }
    }
            

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the net_devices endpoint to view network interfaces, and information about each interface, currently enabled on a given Cradlepoint device. Net devices are categorized as either WAN or LAN devices, as signified by the "mode" field, and further categorized by interface type, such as Ethernet, wireless, modem, LTE, etc.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • net_devices Endpoint Fields and Filters
  • This table lists the fields associated with the net_devices endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account in: int, out: url =, __in Account that created the net_devices record
    apn string Access Point Name
    bsid string Base Station ID
    carrier string The connected carrier if available. Otherwise, the carrier the modem is configured to connect to
    carrier_id string The carrier the modem is currently registered with
    channel int WiFi channel currently in use, if applicable
    connection_state string =, __in Connected, Connecting, Disconnecting, Disconnected, Error, Ready, Configuring, None
    dns0 string Primary DNS server
    dns1 string Secondary DNS server
    esn string Electronic serial number
    gateway string Gateway server onto network
    gsn string Modem's global object identifier
    homecarrid string Modem's home carrier identifier
    hostname string Net device's hostname, if available
    iccid string =, __in Modem's SIM card's integrated circuit card identifier
    id int =, __in ID of a net_devices record
    imei string =, __in Modem's international mobile station equipment identity number
    imsi string Modem's SIM card's unique subscriber identity
    ipv4_address string =, __in Device's IPv4 address
    ipv6_address string =, __in Device's IPv6 address
    is_asset boolean = True for modem net devices
    is_gps_supported boolean True if the device supports GPS
    is_upgrade_available DATA FIELD IS NO LONGER VALID
    is_upgrade_supported boolean True if the modem firmware is upgradable
    ltebandwidth string Indicates the frequency width of the LTE Band being used by the modem module
    mac string MAC address of the net device
    manufacturer string Manufacturer of the net device
    mdn string Modem's mobile data number (phone number)
    meid string Modem's CDMA unique identifier
    mfg_model string Network device's manufacturing model
    mfg_product string Product name of the net device
    mn_ha_spi string Mobile Node Home Agent Security Parameter Index - Indicates the specific security association between the home agent and the mobile device and the algorithm used for security purposes
    mn_ha_ss string Mobile Node Home Agent Shared Secret - Contains the shared secret used between the home agent and mobile device for security purposes
    mode string =, __in Net device's mode, WAN or LAN
    model string Net device's model
    modem_fw string Modem's current firmware version
    mtu int Modem's network maximum transmission unit size
    nai string Modem's Network access identifier
    name string Network device's name, e.g. 'ethernet-wan', 'lte-1234abcd', 'mdm-dcba4321'
    netmask string Net device's netmask
    pin_status string Indicates the status of the SIM PIN. Examples include "READY", "PIN REQUIRED:, etc
    port string Port identifier on device
    prlv string Preferred Roaming List Version - Indicates the version of the Preferred Roaming List that is being used by the modem module
    profile string Indicates the active CDMA profile used by the modem module
    resource_url url URL of the net_devices record
    rfband string Indicates the Radio Frequency Band that is currently being used by the modem module
    rfband5g string Indicates the 5G Radio Frequency Band that is currently being used by the modem module
    rfchannel string Indicates the Radio Frequency Channel that is currently being used by the modem module
    roam string Indicates if the modem is roaming outside its home network (0 - Roaming on a non-preferred network, 1 - Home network, 2 - Roaming on a preferred network)
    router in: int, out: urlurl =, __in Cradlepoint device the net device is currently connected to
    rxchannel string Indicates the Radio Frequency Channel that is currently being used by for receiving data
    serial string Serial number of net device
    service_type string Connection mode: 3G, 4G, etc
    ssid string Service set identifier or network name
    summary string Additional net device state details, e.g. suspended, unconfigured, connecting, unplugged
    txchannel string Indicates the Radio Frequency Channel that is currently being used by for transmitting data
    type string Device type, e.g. 'mdm', 'modem', 'lte', 'ethernet'
    uid string A unique identifier used to the net device by the Cradlepoint device
    updated_at timestamp __gt, __lt Time of last update to this object
    uptime float Time in seconds since the net device established its link
    ver_pkg string Indicates the firmware package version that is currently loaded on the modem module
    version string Firmware version of the network device
    wimax_realm string WiMAX realm string used to connect to a WiMAX network

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/net_devices/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/net_devices/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the net_devices endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/net_devices/"

    Response body for curl GET example

      {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "bsid": null,
                "carrier": "Unknown Service",
                "carrier_id": null,
                "channel": null,
                "connection_state": "unplugged",
                "dns0": null,
                "dns1": null,
                "esn": null,
                "gateway": null,
                "gsn": "353547063430048",
                "homecarrid": null,
                "hostname": "JGE-IBR900-f1d",
                "iccid": null,
                "id": "32081658",
                "imei": "353547063430048",
                "imsi": null,
                "ipv4_address": null,
                "ipv6_address": null,
                "is_asset": true,
                "is_gps_supported": true,
                "is_upgrade_available": false,
                "is_upgrade_supported": true,
                "ltebandwidth": null,
                "mac": null,
                "manufacturer": "Cradlepoint Inc.",
                "mdn": null,
                "meid": "35354706343004",
                "mfg_model": "MC7354-CP",
                "mfg_product": "Internal LPE (SIM1)",
                "mn_ha_spi": null,
                "mn_ha_ss": null,
                "mode": "wan",
                "model": "Internal LPE-VZ (SIM1)",
                "modem_fw": "Verizon Wireless",
                "mtu": 1428,
                "nai": null,
                "name": "mdm-c5be779",
                "netmask": null,
                "pin_status": "NOSIM",
                "port": "int1",
                "prlv": null,
                "profile": null,
                "resource_url": "https://www.cradlepointecm.com/api/v2/net_devices/32081658/",
                "rfband": null,
                "rfchannel": null,
                "roam": null,
                "router": null,
                "rxchannel": null,
                "serial": "353547063430048",
                "service_type": "Not Available",
                "ssid": null,
                "summary": "unplugged",
                "txchannel": null,
                "type": "mdm",
                "uid": "c5be779",
                "updated_at": "2018-12-12T16:41:31.117640+00:00",
                "uptime": null,
                "ver_pkg": "05.05.58.01_VZW,005.030_000",
                "version": "SWI9X15C_05.05.58.01 r27044 carmd-fwbuild1 2015/03/05 00:02:40",
                "wimax_realm": "sprintpcs.com"
            },
            ... 
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }    
    }        
     

    Example curl GET request/response to the net_devices endpoint with the ID filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/net_devices/?id=32081658"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "bsid": null,
                "carrier": "Unknown Service",
                "carrier_id": null,
                "channel": null,
                "connection_state": "unplugged",
                "dns0": null,
                "dns1": null,
                "esn": null,
                "gateway": null,
                "gsn": "353547063430048",
                "homecarrid": null,
                "hostname": "JGE-IBR900-f1d",
                "iccid": null,
                "id": "32081658",
                "imei": "353547063430048",
                "imsi": null,
                "ipv4_address": null,
                "ipv6_address": null,
                "is_asset": true,
                "is_gps_supported": true,
                "is_upgrade_available": false,
                "is_upgrade_supported": true,
                "ltebandwidth": null,
                "mac": null,
                "manufacturer": "Cradlepoint Inc.",
                "mdn": null,
                "meid": "35354706343004",
                "mfg_model": "MC7354-CP",
                "mfg_product": "Internal LPE (SIM1)",
                "mn_ha_spi": null,
                "mn_ha_ss": null,
                "mode": "wan",
                "model": "Internal LPE-VZ (SIM1)",
                "modem_fw": "Verizon Wireless",
                "mtu": 1428,
                "nai": null,
                "name": "mdm-c5be779",
                "netmask": null,
                "pin_status": "NOSIM",
                "port": "int1",
                "prlv": null,
                "profile": null,
                "resource_url": "https://www.cradlepointecm.com/api/v2/net_devices/32081658/",
                "rfband": null,
                "rfchannel": null,
                "roam": null,
                "router": null,
                "rxchannel": null,
                "serial": "353547063430048",
                "service_type": "Not Available",
                "ssid": null,
                "summary": "unplugged",
                "txchannel": null,
                "type": "mdm",
                "uid": "c5be779",
                "updated_at": "2018-12-12T16:41:31.117640+00:00",
                "uptime": null,
                "ver_pkg": "05.05.58.01_VZW,005.030_000",
                "version": "SWI9X15C_05.05.58.01 r27044 carmd-fwbuild1 2015/03/05 00:02:40",
                "wimax_realm": "sprintpcs.com"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the products endpoint to retrieve information about Cradlepoint products, including product names and resource urls.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • products Endpoint Fields and Filters
  • This table lists the fields associated with the products endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    device_type string =, __in Type of device, e.g. router or access point
    id int =, __in ID of a products record
    name string =, __in Name of the product, e.g. IBR600
    resource_url url URL of the products record
    series int Series of the product, e.g. 2 or 3

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/products/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/products/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the products endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/products/"

    Response body for curl GET example

    {
        "data": [
            {
                "device_type": "router",
                "id": "1",
                "name": "MBR1400",
                "resource_url": "https://www.cradlepointecm.com/api/v2/products/1/",
                "series": 3
            },
            {
                "device_type": "router",
                "id": "2",
                "name": "MBR1400v2",
                "resource_url": "https://www.cradlepointecm.com/api/v2/products/2/",
                "series": 3
            },
            {
                "device_type": "router",
                "id": "3",
                "name": "CBR400",
                "resource_url": "https://www.cradlepointecm.com/api/v2/products/3/",
                "series": 3
            },
            {
                "device_type": "router",
                "id": "4",
                "name": "CBR450",
                "resource_url": "https://www.cradlepointecm.com/api/v2/products/4/",
                "series": 3
            },
    ...
        ],
        "meta": {
            "limit": 20,
            "next": "https://www.cradlepointecm.com/api/v2/products/?limit=20&offset=20",
            "offset": 0,
            "previous": null
        }
    }
     

    Example curl GET request/response to the products endpoint with the ID filter applied. This retrieves the product matching the ID "29".

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/products/?id=29"

    Response body for curl GET example

    {
        "data": [
            {
                "device_type": "router",
                "id": "29",
                "name": "AER3150",
                "resource_url": "https://www.cradlepointecm.com/api/v2/products/29/",
                "series": 3
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

The reboot_activity endpoint allows you to reboot a single router or a group of routers. The reboot_activity endpoint provides the ability to

  • POST a router's URI in the request payload to reboot a router, or
  • POST a group's URI in the request payload to reboot a group of routers.

Specifying both a router and a group in the same call is not supported and the resulting behavior should be considered undefined. The caller must choose to reboot a router or reboot a group of router.

On success, POST requests return a "201 Created" code indicating that the request has been submitted without error. This does not necessarily indicate that the router has started to reboot. If the router is online (connected to NCM), the reboot command is sent as soon as possible. If the router is offline, the request will be lost.

Sending an invalid ID for the target router or group results in an HTTP error, typically a "403 Forbidden" error.

Supported methods:POST.
POST payload requirements: router or group URI.

Endpoint base path:

https://www.cradlepointecm.com/api/v2/reboot_activity/

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • POST Examples
  • Example curl POST request to the reboot_activity endpoint. This reboots a router with the ID "42".

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/reboot_activity/" -d '{"router":"https://www.cradlepointecm.com/api/v2/routers/42/"}'
          

    Example curl POST request to the reboot_activity endpoint. This reboots the routers in the group with the ID "24".

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/reboot_activity/" -d '{"group":"https://www.cradlepointecm.com/api/v2/groups/24/"}'
           

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

NCM provides alert functionality to notify NCM administrators of the health and status of their devices. Alerts must be configured in NCM before they are generated. The default NCM configuration does not create any alerts. After the alerts have been configured, a customer can use the NCM UI or this endpoint to monitor alerts.
See the List of NetCloud Router Alerts section below for a listing of the alerts available in NetCloud.

NOTE: Certain alerts can be configured with thresholds. These thresholds allow you to control when alerts are triggered. See the Cradlepoint Customer Connect Knowledgebase article Alerting and Reporting for details on using alerts that have thresholds.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • router_alerts Endpoint Fields and Filters
  • This table lists the fields associated with the router_alerts endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    created_at timestamp __gt, __lt Timestamp for when the router_alerts record was created
    created_at_timeuuid timeuuid =, __in, __gt, __gte, __lt, __lte A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    detected_at timestamp Timestamp of when the alert was detected
    friendly_info string Human-readable description of the alert
    info json Alert-type specific information
    router in: int, out: url =, __in Device this alert is related to
    type string The type of the alert

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/router_alerts/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/router_alerts/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • List of NetCloud Router Alerts
  • The following table lists the Router Alert types available in NetCloud.

    Alert Type Description Alert Field Name
    ADC Voltage Event Occurs on devices with voltage-sensing systems when a voltage limit is reached, and also when the voltage returns to within the accepted range. adc_event
    AP/Core Connection State The cellular AP specified service type connectivity to the packet core entered the specified state. pcn_ap_connection_state
    Battery Health Creates an alert when the remaining battery life reaches 62%. batt_health_alert
    Battery Over Current Creates an alert when the battery's current reaches 3.2 amps (3200 mA). batt_over_current_alert
    Battery Over Temperature Creates an alert when the battery's temperature reaches 50 degrees Celsius. batt_over_temp_alert
    Battery Over Voltage Creates an alert when the battery's recommended voltage reaches 8.5V (8500 mV). batt_over_voltage_alert
    Battery System Low Power Creates an alert when the battery's power reaches 20% charge. batt_sys_low_power_alert
    Battery System Power Off Creates an alert when the battery's power reaches 7% charge. batt_sys_power_off_alert
    Battery Maintenance Cycle Started The battery automatically begins discharging raining its charge then recharges to full power, for optimizing battery life. (E400/X20 devices) batt_maintenance_cycle_started
    Battery Maintenance Cycle Ended The battery has finished its maintenance cycle. (E400/X20 devices) batt_maintenance_cycle_ended
    Battery Backup Power Engaged When an E400/X20 device loses wall power and switches over to battery backup. batt_backup_power_engaged
    Wall Power Restored When an E400/X20 device regains wall power and switches back from battery backup mode. wall_power_restored
    Cellular Radio Status The cellular AP radio interface has entered the specified state. pcn_ap_radio_status
    Configuration Changed Occurs when there has been a local configuration change. config_change
    Configuration Rejected Occurs when a configuration change was sent to the device but was rejected. config_rejected
    Configuration Unacknowledged Occurs when a configuration change was sent to the device but was not acknowledged by the device. config_unacked
    CPU Utilization CPU Utilization crossed a threshold. cpu_utilization
    Custom Alert Is an alert generated by custom code in an NCOS SDK app. custom_alert
    Data Cap Threshold Occurs when a data cap threshold is reached. data_cap_threshold
    Device Location Unknown Occurs when no location is reported for 24 hours on a device with Location Services (GPS) enabled. If a manual location is used the alert is not generated. device_location_unknown
    Ethernet WAN Connected Indicates that an Ethernet WAN device is now active. ethernet_wan_connected, intel_ethernet_wan_connected
    Ethernet WAN Disconnected Indicates that an Ethernet WAN device is no longer active. ethernet_wan_disconnected, intel_ethernet_wan_disconnected
    Ethernet WAN Plugged In An Ethernet WAN device is now attached. ethernet_wan_plugged
    Ethernet WAN Standby An Ethernet WAN device is in standby mode ethernet_wan_standby
    Ethernet WAN Unplugged An Ethernet WAN device has been removed. ethernet_wan_unplugged
    Failed Login Attempt (NCM) SOURCE: (source_ip) | USER: (user) | REASON: (reason) ncm_login_failure
    Failover Event A router (or group of routers) has changed the primary WAN interface from a higher- priority interface to a lower-priority interface. failover_event
    Firmware Upgrade Occurs when the device's NetCloud OS is upgraded. firmware_upgrade
    GBR Bearer Setup Failure The device with the specified IMSI failed to connect to its requested QCI because the guaranteed bitrate requirement could not be met. pcn_core_ue_dedicated_bearer_alloc_failure
    Geo fence Proximity Change Occurs whenever the device enters or exits the specified Geo-fence geofence_proximity_change
    GPIO State Change Occurs when a device's GPIO pin has changed state. To view or update the GPIO configuration, open the Device UI and select the System > GPIOs tab. This alert requires NetCloud OS 6.0.2 and newer, and a Cradlepoint device with GPIO. gpio_state_change
    Interface Status The packet core specified interface has entered the specified state. pcn_core_port_status_changed
    IPsec Connection State The packet core IPsec connectivity to the specified cellular AP entered the specified state. pcn_core_ipsec_connection_status_changed
    IP Address Banned Occurs if the Ban IP Address setting is turned on for a device and someone from a particular IP address attempts and fails to log into the Device UI six times, that IP address is banned for 30 minutes. To enable this setting, login to the Device UI and go to System > Administration > Router Security and click on Advanced Security Mode. Select the Ban IP Address option. ip_banned
    Intrusion Activity Is only relevant for devices with CP Secure Threat Management. Whenever the Threat Management deep packet inspection engine detects an intrusion, that event is recorded in the logs. These events are grouped together for 15 minutes and then reported in NetCloud Manager, so an emailed alert notification might not arrive for approximately 15 minutes after an intrusion. Intrusion Activity alerts include the intrusion details and the action taken by the engine (e.g., Blocked). To edit Threat Management settings, login to the Device UI and select Security > Threat Management.
    For more information, see CP Secure Threat Management Overview.
    ips_activity
    IPS Engine Failure For devices using Cradlepoint Secure Threat Management (CPSTM), this alert occurs in the unlikely event that the Threat Management engine fails. You can set the router to either allow or deny traffic with a failure. To edit this setting, log in to the Device UI and go to Security > Threat Management. ips_eng_failure
    IPSec VPN Tunnel Down Occurs when a connected IPSec tunnel is disconnected. ipsec_tunnel_down
    IPsec Tunnel Setup Failure The cellular AP failed to setup an IPsec tunnel with the specified packet core. pcn_ap_ipsec_setup_failure
    IPS Enablement Change Occurs when Intrusion Prevention Systems / Intrusion Detection Systems (IPS/IDS) has been enabled or disabled using Cradlepoint Secure Threat Management (CPSTM) and provides details about who made the change and when it occurred. ips_enable_disable
    IPS Mode Change Occurs when the IPS/IDS mode has been changed (for example, from Detect and Prevent to Detect Only) using CPSTM and provides details on what changed, who made the change, and when it occurred. ips_mode_change
    IPSec VPN Tunnel Restored Occurs when a connected IPSec tunnel reconnects after being disconnected. ipsec_tunnel_restored
    IPSev VPN Tunnel Up Occurs when an IPSec tunnel initially connects. ipsec_tunnel_up
    IP Verify Test Result Occurs when an IP Verify test is complete. ipverify_event
    Successful Login (Router) A login attempt succeeded to the router's Device UI. login_success
    Location Service Mode Changed Alert sent when there is change to the configuration of Location Services (including but limited to turning it on/off). This alert contains the time and date of the change, what was changed, and the device or group to which it was applied. location_service_change
    Memory Utilization Memory Utilization crossed a threshold. memory_utilization
    Modem Software Upgrade Available Occurs when new modem software is available for download. Includes the version number of the new software, the products to which it applies, and a link to the Release Notes. modem_firmware_summary_create
    Modem WAN Connected A modem WAN device is now active. modem_wan_connected, intel_modem_wan_connected
    Modem WAN Disconnected Indicates that a modem WAN device is no longer active. modem_wan_disconnected, intel_modem_wan_disconnected
    Modem WAN Device Plugged In A modem WAN device is now attached. modem_wan_plugged
    Modem WAN Standby Indicates that a modem WAN device's default connection state is set to Standby. This means the modem is connected to the carrier, but is not sending data. A modem in Standby will failover faster than a modem not in Standby. Standby is enabled by modifying the Default Connection State from the Device UI's Connection Manager table. modem_wan_standby
    Modem WAN Device Unplugged A modem WAN device has been removed. modem_wan_unplugged
    Microsoft IoT Disconnect Occurs when a Microsoft IoT device disconnects. msft_iot_disconnect
    NCM Connection State Occurs when the device loses or regains its connection to NetCloud Manager. A device must be online or offline for 60 seconds before this alert is generated.
    For more information, see Details on NetCloud Manager Connection State Online and Offline Alerts.
    connection_state
    NetCloud OS Upgrade Available Occurs when new NetCloud OS software is available for download. Includes the version number of the new software, the products to which it applies, and a link to the Release Notes. ncos_firmware_summary_create
    No SAS Response The cellular AP did not receive a response from the CBRS SAS server. pcn_sas_no_response
    NTP Sync Issue The cellular AP cannot reach the NTP server and may have incorrect system time. pcn_ap_ntp_syn_failure
    NTP Sync Issue The packet core cannot reach the NTP server and may have incorrect system time. pcn_core_ntp_sync_failure
    Reboot Occurs when the device is rebooted. reboot_status_change, intel_reboot_status_change
    Remote Connect Ended A remote connect session to the specified router has been closed. remote_connection_destroyed
    Remote Connect Started A remote connect session to the specified router has been opened. remote_connection_request
    Rogue Access Point Detected Occurs after running a Wi-Fi site survey when a rogue access point not marked as "known" is detected broadcasting the same SSID as the device running the site survey. This helps identify potential access-point hijacking, evil twin, and man-in-the-middle Wi-Fi attacks. duplicate_ssid
    Router Group Change The specified router has been moved or added to the specified group. Also includes the username associated with the move, the date and time, the group the router was in previously (if applicable) and the group to which the router was added (if applicable). router_group_change
    NCOS App Execution State Changed Indicates that an NCOS SDK app that is running on a group has entered a different execution state (start, stop, error, etc). router_sdk_app_execution_state_changed
    Unexpected NCOS App Installed Indicates that an unexpected NCOS SDK app is found installed, an expected NCOS SDK app is unexpectedly uninstalled, or a that an NCOS app unknown to the system is found installed. router_sdk_mismatched_app_action
    S1 Setup Failure The packet core failed to setup an S1 connection with the specfiied cellular AP. pcn_core_s1_setup_failure
    S1 Connection State The packet core S1 connectivity to the specified cellular AP entered the specified state. pcn_core_s1_connection_state
    SAS Grant Expired A CBRS SAS Grant has expired for the cellular AP. pcn_sas_grant_expired
    SAS Grant Success The cellular AP received a CBRS SAS grant successfully. pcn_sas_grant_success
    SAS Grant Suspended A CBRS SAS Grant was suspended for the cellular AP. pcn_sas_grant_suspended
    SAS Grant Terminated A CBRS SAS Grant was terminated for the cellular AP. pcn_sas_grant_terminated
    SCEP Enrollment Failure This alert is generated when a device attempts to enroll with a SCEP server but can't enroll successfully. scep_enrollment_failure
    SCEP Enrollment Success This alert is generated when a device successfully enrolls with a SCEP server. scep_enrollment_success
    SIM Door Event Occurs when the SIM door opens or closes. sim_door_event
    SPAN Enabled SPAN Packet Cloning Enabled span_enabled
    System Error Requires Reboot The router rebooted due to a system error that requires a reboot to resolve. system_error
    Sustained System Overload The system experienced sustained levels for CPU or Packet Loss that exceeded thresholds. sustained_system_overload
    Test Error A speed test encountered an error. csi_test_error
    Test Failed A carrier failed to meet the benchmarks for a speed test. csi_test_failed
    Test Passed A carrier met or exceeded the benchmarks for a speed test. csi_test_passed
    Test Started All preconditions have been met for CSI (Carrier Selection Intelligence) to start. csi_test_started
    Temperature Limit Exceeded Occurs on devices with an internal temperature sensor (COR IBR1100 and IBR1150) when a user-defined temperature limit is reached. To set the temperature limits for the COR IBR1100 Series, login to the Device UI, select System > Administration, and then click the Temperature tab. thermal_exceeds_limit
    Tunnel Limit Reached Occurs when the number of IPSec tunnel connections has met or exceeded either 90% or 100% of the maximum tunnel limit. tunnel_limit
    Unrecognized Client Indicates a client with an unrecognized MAC address has attempted to connect to the device. MAC logging must be enabled to trigger this alert. To enable MAC logging, login to the Device UI and go to Networking > Local Networks> MAC Filter & Logging and select Enable MAC Logging. unrecognized_mac_alert
    VRRP State Changed to Backup The specified router has become a VRRP backup. You can further configure this alert to only be sent if the router was previously a master or in a fault state for a specified period. vrrp_new_backup, intel_vrrp_new_backup
    VRRP State Changed to Fault The specified router is in a VRRP fault state. You can further configure this alert to only be sent if the router was previously a backup or a master for a specified period. vrrp_new_fault, intel_vrrp_new_fault
    VRRP State Changed to Master The specified router has been become a VRRP master. You can further configure this alert to only be sent if the router was previously a backup or in a fault state for a specified period. vrrp_new_master, intel_vrrp_new_master
    WAN Service Type Indicates that a WAN device has changed its service type, such as switching from 3G to 4G. Possible service types include: DHCP, LTE, HSPA+, etc. wan_service_type
    WAN Status Change Router WAN has plugged, unplugged, connected or disconnected. (Deprecated) wan_status_change
    Webhook Suspended Previously configured webhook is in a suspended state. http_destination_suspended
    Webhook Failure Webhook delivery failed for alert with UUID (created_uuid), type (type), account (account_id), router (router_id), at time (created_ts) with message: (message). http_push_failure
    WiFi Client State Changed Occurs when a WiFi client changes state. For example, when a client's state changes from connected to disconnected (requires NetCloud OS version 6.6.1 and newer). wifi_client_state_change
    WiFi as WAN Standby Indicates a WiFi as WAN network is in standby. wwan_standby
    WiFi as WAN Connected Indicates WiFi as WAN is no longer active. wwan_connected
    WWAN Disconnected A WiFi as WAN network is no longer active. wwan_disconnected
    WiFi as WAN Network Available A WiFi as WAN network is now attached. wwan_network_available
    WiFi as WAN Network Unavailable A WiFi as WAN network has been removed. wwan_network_unavailable
    Zscaler TLS Tunnel State Indicates the state of a Zscaler tunnel has changed. zs_tls_tunnel
  • GET Examples
  • Example curl GET request/response to the router_alerts endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_alerts/"

    Response body for curl GET example

    {
        "data": [
            {
                "created_at": "2020-12-07T17:44:19.430235+00:00",
                "created_at_timeuuid": "d554418c-38b3-11eb-acd7-32b969db3e3f",
                "detected_at": "2020-12-07T17:44:18.145000+00:00",
                "friendly_info": "User admin has logged into the router from 127.0.0.1.",
                "info": {
                    "ip": "127.0.0.1",
                    "time": [
                        "2020-12-07 17:44:18",
                        "UTC"
                    ],
                    "type": "login_success",
                    "user": "admin"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "login_success"
            },
            {
                "created_at": "2020-12-04T09:20:30.538148+00:00",
                "created_at_timeuuid": "f4442066-3611-11eb-bd86-5ebca3547463",
                "detected_at": "2020-12-04T09:16:16.405000+00:00",
                "friendly_info": "The ethernet port \"Ethernet\" has connected to the network.",
                "info": {
                    "alert_type": "ethernet_wan_connected",
                    "history": [],
                    "info": {
                        "mac": "00:30:44:47:cb:09",
                        "port": "Ethernet",
                        "raw_port": "eth0",
                        "reason": "Manual",
                        "type": "ethernet",
                        "uid": "wan"
                    },
                    "status": "connected",
                    "time": [
                        "2020-12-04 09:16:16",
                        "UTC"
                    ],
                    "type": "wan_status_change"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "ethernet_wan_connected"
            },
            ... 
    ],
    "meta": {
            "limit": 20,
            "next": null
            }
        }
     

    Example curl GET request/response to the router_alerts endpoint with the created_at_timeuuid filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_alerts/?created_at_timeuuid=f4442066-3611-11eb-bd86-5ebca3547463"

    Response body for curl GET example

    {
        "data": [
            {
                "created_at": "2020-12-04T09:20:30.538148+00:00",
                "created_at_timeuuid": "f4442066-3611-11eb-bd86-5ebca3547463",
                "detected_at": "2020-12-04T09:16:16.405000+00:00",
                "friendly_info": "The ethernet port \"Ethernet\" has connected to the network.",
                "info": {
                    "alert_type": "ethernet_wan_connected",
                    "history": [],
                    "info": {
                        "mac": "00:30:44:47:cb:09",
                        "port": "Ethernet",
                        "raw_port": "eth0",
                        "reason": "Manual",
                        "type": "ethernet",
                        "uid": "wan"
                    },
                    "status": "connected",
                    "time": [
                        "2020-12-04 09:16:16",
                        "UTC"
                    ],
                    "type": "wan_status_change"
                },
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "type": "ethernet_wan_connected"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null
        }
    }

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the router_lans endpoint to retrieve information about the layer 3 LANs of your devices, such as IP addresses and netmasks.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • router_lans Endpoint Fields and Filters
  • This table lists the fields associated with the router_lans endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account in: int, out: url =, __in Account that created the router_lans record
    created_at datetime Datetime for when the router_lans record was created
    enabled boolean = Enabled/disabled state of a router_lans record
    id int =, __in ID of a router_lans record
    ip_address string =, __in IP address
    name string =, __in Name of the router_lans record
    netmask string Netmask for the lan
    router in: int, out: url =, __in Router ID
    updated_at datetime Datetime of the last update to the router_lans record

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/router_lans/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/router_lans/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the router_lans endpoint without filters applied.

    curl -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_lans/"
    

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts//",
                "created_at": "2019-04-12T14:28:38.423098+00:00",
                "enabled": true,
                "id": "2147873",
                "ip_address": "192.168.17.1",
                "name": "Primary LAN",
                "netmask": "255.255.255.0",
                "resource_url": "https://www.cradlepointecm.com/api/v2/router_lans/2147873/",
                "router": "https://www.cradlepointecm.com/api/v2/routers/1284575/",
                "updated_at": "2020-12-21T00:22:56.363885+00:00"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts//",
                "created_at": "2020-11-18T17:06:23.672117+00:00",
                "enabled": true,
                "id": "3999183",
                "ip_address": "192.168.0.1",
                "name": "Primary LAN",
                "netmask": "255.255.255.0",
                "resource_url": "https://www.cradlepointecm.com/api/v2/router_lans/3999183/",
                "router": "https://www.cradlepointecm.com/api/v2/routers/2174016/",
                "updated_at": "2021-02-21T10:01:33.093821+00:00"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts//",
                "created_at": "2020-11-18T17:06:23.687020+00:00",
                "enabled": false,
                "id": "3999184",
                "ip_address": "192.168.11.1",
                "name": "Guest LAN",
                "netmask": "255.255.255.0",
                "resource_url": "https://www.cradlepointecm.com/api/v2/router_lans/3999184/",
                "router": "https://www.cradlepointecm.com/api/v2/routers/2174016/",
                "updated_at": "2021-02-21T10:01:33.101744+00:00"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     

    Forms

Use the router_logs endpoint to view a device's logs. Device logs contain log events sent from the device to NetCloud Manager (NCM). The following are required for a device to report log events.

  • A device must be in an NCM group
  • The NCM group's settings must have the ‘Enable Log Reporting’ setting enabled

To reduce NCM traffic, device logs are not sent to the NCM server by default.

Note: Router log data is retained in NetCloud for 30 days.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • router_logs Endpoint Fields and Filters
  • This table lists the fields associated with the router_logs endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    created_at timestamp __gt, __lt Timestamp for when the router_logs record was created
    created_at_timeuuid timeuuid =, __in, __gt, __gte, __lt, __lte A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    exception string Contains details of a device exception (optional)
    level string The level of the log, e.g. DEBUG, INFO, NOTICE, WARN, ERR, CRIT or ALERT
    message string The log message
    reported_at timestamp Timestamp for when the log entry was written to the device's log
    router in: int, out: url = Device this log is related to
    sequence int The insertion order for each log event
    source string The source of the log entry

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/router_logs/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/router_logs/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • Log Levels
  • The following table lists the potential log-level string values that can be returned in the "level" field in responses.

    Level      Description
    -------    -----------
    ALERT      indicates action must be taken immediately
    CRIT       a critical condition occurred
    ERR        an error condition occurred
    WARNING    a warning condition occurred
    NOTICE     a normal, but significant, condition occurred
    INFO       indicates an informational message
    DEBUG      indicates a debug-level message  
    
  • GET Examples
  • Example curl GET request/response to the router_logs endpoint. GET requests require the router ID to be passed in the URL query string (?router=<router id>).

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_logs/?router=2162719"

    Response body for curl GET example

    {
        "data": [
            {
                "created_at": "2021-02-09T22:37:07.590858+00:00",
                "created_at_timeuuid": "2021-02-09T22:37:07.590858_0",
                "exception": null,
                "level": "INFO",
                "message": "Checking upgrade server for pkg: 24.01.521_Verizon,2013, fw_info path: ['status', 'wan', 'devices', 'mdm-11eec444e', 'ob_upgrade', 'fw_info_verizon']",
                "reported_at": "2021-02-09T17:05:12+00:00",
                "router": "https://www.cradlepointecm.com/api/v1/routers/2162719/",
                "sequence": 0,
                "source": "upgrade"
            },
            {
                "created_at": "2021-02-09T22:37:07.590858+00:00",
                "created_at_timeuuid": "2021-02-09T22:37:07.590858_1",
                "exception": null,
                "level": "INFO",
                "message": "Found file on server; version: 24.01.546_ATT,4028",
                "reported_at": "2021-02-09T17:05:12+00:00",
                "router": "https://www.cradlepointecm.com/api/v1/routers/2162719/",
                "sequence": 1,
                "source": "upgrade"
            },
            ...
        ],
        "meta": {
            "count": 20,
            "limit": 20,
            "next": "https://www.cradlepointecm.com/api/v2/router_logs/?router=2162719&limit=20&offset=20",
            "offset": 0,
            "previous": null
        }
    }
                

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the router_state_samples endpoint to track the online/offline status of your devices. NetCloud Manager (NCM) keeps a history of the online/offline state of devices using state samples. A device is considered online when it is connected to NCM. This endpoint can be used to track historical online/offline status of your devices.

It is important to understand that the router_state_samples endpoint is designed only to report on the online/offline status of routers. It is not recommended to use this endpoint to make calculations related to router states, like router uptime and downtime time periods.

Please note the following about how online/offline status is calculated.

  • Online/offline state is not reported by the router itself but is a function of when the router connects/disconnects to an NCM server. NCM makes online/offline time calculations based on the router being connected to NCM.
  • To account for cases where routers briefly disconnect and reconnect from NCM servers, NCM only counts a device as being offline when it is disconnected from NCM for two minutes or longer.

Note: Router state sample data is retained in NetCloud for 90 days.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • router_state_samples Endpoint Fields and Filters
  • This table lists the fields associated with the router_state_samples endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    created_at timestamp __gt, __lt Timestamp for when the router_state_samples record was created. When a router disconnects from NCM, i.e. goes "offline", NCM creates a record of the offline state and gives the record a time-stamped, “created_at” value that indicates when the router went offline. A similar record is created when a router comes online.
    created_at_timeuuid timeuuid =,__in, __gt, __gte, __lt, __lte A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    period double The time in seconds that the device was in this state
    router in: int, out: url =,__in Device that is connected to NCM
    state string The state of the device during this sample's period, e.g. online or offline

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/router_state_samples/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/router_state_samples/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the router_state_samples endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_state_samples/"

    Response body for curl GET example

    {
        "data": [
            {
                "created_at": "2020-12-04T09:20:24.040723+00:00",
                "created_at_timeuuid": "f064b2c0-3611-11eb-9034-32d40d962d51",
                "period": 222.93943309783936,
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "state": "offline"
            },
            {
                "created_at": "2020-12-04T09:18:42.592802+00:00",
                "created_at_timeuuid": "b3ecf954-3611-11eb-acf6-3a257258b42e",
                "period": 25334.473613977432,
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "state": "online"
            },
            ... 
        ]
    }
     

    Example curl GET request/response to the router_state_samples endpoint with the created_at_timeuuid filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_state_samples/?created_at_timeuuid=f221d310-3243-11eb-827b-daedcb174526"

    Response body for curl GET example

    {
        "data": [
            {
                "created_at": "2020-11-29T13:08:17.143272+00:00",
                "created_at_timeuuid": "f221d310-3243-11eb-827b-daedcb174526",
                "period": 188.75138449668884,
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "state": "offline"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null
        }
    }
            

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Cradlepoint devices connect to NetCloud Manager (NCM) through the NCM stream server. NCM tracks communication between devices and the server using stream samples from the stream server. Use the router_stream_usage_samples endpoint to gather stream samples and calculate total NCM network traffic. Note that this data only includes NCM management traffic and not general traffic from the router to the Internet.

Note: Device stream-usage sample data is retained in NetCloud for 90 days.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • router_stream_usage_samples Endpoint Fields and Filters
  • This table lists the fields associated with the router_stream_usage_samples endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    bytes_in bigint Bytes received by the device from NCM since last update
    bytes_out bigint Bytes sent from the device to NCM since last update
    created_at timestamp __gt, __lt Timestamp for when the router_stream_usage_samples record was created
    created_at_timeuuid timeuuid =, __in, __gt, __gte, __lt, __lte A unique ID associated with the created_at timestamp. Ordering by the ID is equivalent to time ordering. This field can identify a specific record or be used for paging.
    period double Time in seconds since the last sample was reported
    router in: int, out: url =, __in Device that is connected to NCM
    uptime double Time in seconds since the net device established its link

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/router_stream_usage_samples/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/router_stream_usage_samples/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the router_stream_usage_samples endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_stream_usage_samples/"

    Response body for curl GET example

    {
        "data": [
            {
                "bytes_in": 3648,
                "bytes_out": 15911,
                "created_at": "2021-02-08T22:21:58.998417+00:00",
                "created_at_timeuuid": "0f3adfa8-6a5c-11eb-8f56-7e6ef7af9ffc",
                "period": 3660.3108481550007,
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "uptime": 106087.10812882498
            },
            {
                "bytes_in": 3807,
                "bytes_out": 16438,
                "created_at": "2021-02-08T21:20:58.591900+00:00",
                "created_at_timeuuid": "89752a1a-6a53-11eb-87ed-368a313553a3",
                "period": 3660.362778883995,
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "uptime": 102426.79728066998
            },
            {
                "bytes_in": 3969,
                "bytes_out": 18152,
                "created_at": "2021-02-08T20:19:58.058442+00:00",
                "created_at_timeuuid": "039c15e6-6a4b-11eb-85bc-32c6a22e5b89",
                "period": 3660.510760029996,
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "uptime": 98766.434501786
            }
            ... 
            ],
            "meta": {
                "limit": 20,
                "next": "https://www.cradlepointecm.com/api/v2/router_stream_usage_samples/?created_at_timeuuid__lt=21b87914-69ba-11eb-a826-267fb8b4f5d2"
            }
        }
     

    Example curl GET request/response to the router_stream_usage_samples endpoint with the created_at_timeuuid filter applied. This retrieves router_stream_usage_samples record with the created_at_timeuuid of 039c15e6-6a4b-11eb-85bc-32c6a22e5b89.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/router_stream_usage_samples/?created_at_timeuuid=039c15e6-6a4b-11eb-85bc-32c6a22e5b89"

    Response body for curl GET example

    {
        "data": [
            {
                "bytes_in": 3969,
                "bytes_out": 18152,
                "created_at": "2021-02-08T20:19:58.058442+00:00",
                "created_at_timeuuid": "039c15e6-6a4b-11eb-85bc-32c6a22e5b89",
                "period": 3660.510760029996,
                "router": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "uptime": 98766.434501786
            }
        ],
        "meta": {
            "limit": 20,
            "next": null
        }
    }
            

Forms

Use the form below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the routers endpoint to view information about the devices in your account. This endpoint retrieves information that includes a device's state, location, MAC address, firmware version and other information to help you refer to a device or check its status.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, PUT, DELETE.
  • routers Endpoint Fields and Filters
  • This table lists the fields associated with the routers endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account in: int, out: url =, in Account the router belongs to
    actual_firmware url Firmware currently on the device, if known
    asset_id string =, __in User defined identifier often used for asset tracking
    configuration_manager string Use this value for retrieving the router's configuration_manager resource. The configuration_manager resource contains the router's configuration.
    config_status string Status of configuration synch: synched, pending or suspended
    created_at timestamp Timestamp for when the routers record was created
    custom1 string User defined custom text field
    custom2 string User defined custom text field
    description string =, __in Optional description of the device (synched with device)
    device_type string =, __in Type of device, e.g. router or access point
    full_product_name string = Device's full product name, e.g. IBR600LP-AT
    group url =, __in Optional group this device belongs to
    id* int =, __in ID of a routers record
    ipv4_address string =, __in Device's IPv4 address
    lans url Device's LANs
    last_known_location url Optional last known location of the device
    locality string Device's timezone
    mac string =, __in Device's MAC address
    name string =, __in Device's name (synched with device)
    overlay_network_binding url Device's overlay network bindings
    product url Device product, e.g. IBR600 or AP22
    reboot_required boolean =, __in Reboot required to enable additional device functionality
    resource_url url URL of the routers record
    serial_number string =, __in Device's serial number, if known
    state string =, __in Device's state: initialized, online or offline
    state_updated_at timestamp __lt, __gt Timestamp of last state update
    target_firmware url Firmware currently assigned to the router’s group
    updated_at timestamp __lt, __gt Timestamp of last attribute update
    upgrade_pending boolean True indicates an NCOS upgrade is pending for the device
    Note: * indicates the attribute is required for PUT and DELETE requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/routers/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/routers/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the routers endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/routers/"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "actual_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/",
                "asset_id": null,
                "config_status": "synched",
                "configuration_manager": "https://www.cradlepointecm.com/api/v2/routers/861605/configuration_manager/",
                "created_at": "2018-04-24T21:53:32.315171+00:00",
                "custom1": null,
                "custom2": null,
                "description": "My AP Twenty Two",
                "device_type": "access_point",
                "full_product_name": "AP22",
                "group": "https://www.cradlepointecm.com/api/v2/groups/85136/",
                "id": "861605",
                "ipv4_address": "65.153.116.34",
                "last_known_location": null,
                "locality": "US/Mountain",
                "mac": "00:30:44:24:61:54",
                "name": "AP22-154",
                "product": "https://www.cradlepointecm.com/api/v2/products/48/",
                "reboot_required": false,
                "resource_url": "https://www.cradlepointecm.com/api/v2/routers/861605/",
                "serial_number": "WA1801AA001172",
                "state": "online",
                "state_updated_at": "2021-02-04T17:29:05.075116+00:00",
                "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/",
                "updated_at": "2021-01-19T22:04:42.650617+00:00",
                "upgrade_pending": false
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "actual_firmware": null,
                "asset_id": null,
                "config_status": "synched",
                "configuration_manager": "https://www.cradlepointecm.com/api/v2/routers/1437919/configuration_manager/",
                "created_at": "2019-07-31T03:11:52.746361+00:00",
                "custom1": null,
                "custom2": null,
                "description": null,
                "device_type": "access_point",
                "full_product_name": "unknown",
                "group": null,
                "id": "1437919",
                "ipv4_address": null,
                "last_known_location": null,
                "locality": "US/Mountain",
                "mac": "00:30:44:24:61:54",
                "name": "AP22-154",
                "product": "https://www.cradlepointecm.com/api/v2/products/48/",
                "reboot_required": false,
                "resource_url": "https://www.cradlepointecm.com/api/v2/routers/1437919/",
                "serial_number": null,
                "state": "initialized",
                "state_updated_at": null,
                "target_firmware": null,
                "updated_at": "2020-11-11T23:08:00.746990+00:00",
                "upgrade_pending": false
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "actual_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/2958/",
                "asset_id": null,
                "config_status": "synched",
                "configuration_manager": "https://www.cradlepointecm.com/api/v2/routers/2162719/configuration_manager/",
                "created_at": "2020-11-05T23:13:37.346456+00:00",
                "custom1": null,
                "custom2": null,
                "description": null,
                "device_type": "router",
                "full_product_name": "AER2200-600M",
                "group": "https://www.cradlepointecm.com/api/v2/groups/216763/",
                "id": "2162719",
                "ipv4_address": "160.2.177.156",
                "last_known_location": "https://www.cradlepointecm.com/api/v2/locations/731218/",
                "locality": "US/Mountain",
                "mac": "00:30:44:47:CB:09",
                "name": "AER2200-b09",
                "product": "https://www.cradlepointecm.com/api/v2/products/41/",
                "reboot_required": false,
                "resource_url": "https://www.cradlepointecm.com/api/v2/routers/2162719/",
                "serial_number": "MM202300000212",
                "state": "online",
                "state_updated_at": "2021-02-08T02:17:58.389788+00:00",
                "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/2958/",
                "updated_at": "2021-02-08T01:52:25.628645+00:00",
                "upgrade_pending": false
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     

    Example curl GET request/response to the routers endpoint with the ID filter applied. This retrieves the routers object with the ID "861605."

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/routers/?id=861605"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "actual_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/",
                "asset_id": null,
                "config_status": "synched",
                "configuration_manager": "https://www.cradlepointecm.com/api/v2/routers/861605/configuration_manager/",
                "created_at": "2018-04-24T21:53:32.315171+00:00",
                "custom1": null,
                "custom2": null,
                "description": "My AP Twenty Two",
                "device_type": "access_point",
                "full_product_name": "AP22",
                "group": "https://www.cradlepointecm.com/api/v2/groups/85136/",
                "id": "861605",
                "ipv4_address": "65.153.116.34",
                "last_known_location": null,
                "locality": "US/Mountain",
                "mac": "00:30:44:24:61:54",
                "name": "AP22-154",
                "product": "https://www.cradlepointecm.com/api/v2/products/48/",
                "reboot_required": false,
                "resource_url": "https://www.cradlepointecm.com/api/v2/routers/861605/",
                "serial_number": "WA1801AA001172",
                "state": "online",
                "state_updated_at": "2021-02-04T17:29:05.075116+00:00",
                "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/",
                "updated_at": "2021-01-19T22:04:42.650617+00:00",
                "upgrade_pending": false
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
    
  • PUT Examples
  • Example curl PUT request/response to the routers endpoint. This updates the name of the router matching the ID "861605".

    curl -v -X PUT -H "X-ECM-API-ID:40961453-652c-48bc-8445-2cfeb36d2c4a" -H "X-ECM-API-KEY:d02aacae1b4b77967014b7270812e8a465ac3174" -H "X-CP-API-ID:a939a410" -H "X-CP-API-KEY:808163e5193491974cd55eda5120ed9d" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/routers/861605/" -d '{
            "name": "My AP-22"
            }'

    Response body for curl PUT example

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
        "actual_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/",
        "asset_id": null,
        "config_status": "synched",
        "configuration_manager": "https://www.cradlepointecm.com/api/v2/routers/861605/configuration_manager/",
        "created_at": "2018-04-24T21:53:32.315171+00:00",
        "custom1": null,
        "custom2": null,
        "description": "My AP Twenty Two",
        "device_type": "access_point",
        "full_product_name": "AP22",
        "group": "https://www.cradlepointecm.com/api/v2/groups/85136/",
        "id": "861605",
        "ipv4_address": "65.153.116.34",
        "last_known_location": null,
        "locality": "US/Mountain",
        "mac": "00:30:44:24:61:54",
        "name": "My AP-22",
        "product": "https://www.cradlepointecm.com/api/v2/products/48/",
        "reboot_required": false,
        "resource_url": "https://www.cradlepointecm.com/api/v2/routers/861605/",
        "serial_number": "WA1801AA001172",
        "state": "online",
        "state_updated_at": "2021-02-04T17:29:05.075116+00:00",
        "target_firmware": "https://www.cradlepointecm.com/api/v2/firmwares/877/",
        "updated_at": "2021-02-08T20:20:33.338472+00:00",
        "upgrade_pending": false
    }
    
  • DELETE Example
  • Example curl DELETE request/response to the routers endpoint. This deletes the device matching the ID passed in the route.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/routers/861605/"

    Successful DELETE actions return a 204 response with no content in the body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

The speed_test endpoint allows users to create speed-test jobs that spawn individual speed tests for a given list of network devices. Users can create and start a speed-test job capable of queueing and running individual speed tests for up to 10k network devices in one POST request. Users can call the HTTP GET method to check the state of a speed-test job and view the results of completed speed tests. The speed_test endpoint displays speed-test results in the same format as speed test results in NetCloud Manager (NCM).

A speed_test object contains two nested objects; one object for configuration ("config" field) and one object containing the speed test(s) results ("results" field).

IMPORTANT: A netperf server is required for running speed tests via the NetCloud Manager API. No particular netperf server is required. See the Ericsson Enterprise documentation portal article Using Cradlepoint Speedtest for more information on using your own netperf server.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET, POST, DELETE.
  • speed_test Endpoint Fields and Filters
  • The tables below list the fields associated with the speed_test endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    The Speed Test Object

    Field Data Type Filter Sort Expand Description
    account* url =, __in Account that created the speed_test record
    config* object Configuration object for the speed test (see the following table)
    created_at datetime Datetime of speed test creation
    id int ID of a speed_test record
    progress object Contains "completed" and "total_count" fields
    resource_url url URL of the speed test record
    results object Results from speed test (see the Results Object table below)
    state string State of speed test
    updated_at timestamp Timestamp of speed test update

    Nested Configuration Object Fields

    Field Data Type Description
    host* url URL of Speedtest Server
    max_test_concurrency* int Number of maximum simultaneous tests to server (1-50)
    net_device_ids* int[] List of net_device IDs (up to 10,000 net_device IDs per request)
    port* int TCP port for test
    size* int Number of bytes to transfer
    test_timeout* int Test timeout in seconds
    test_type* string TCP Download, TCP Upload, TCP Latency
    time* int Test Time

    Nested Results Object Fields

    This table contains the result fields for an individual speed test.

    Field Data Type Description
    created_at datetime Speed test creation datetime
    net_device_id int ID for net device
    results string String containing TCP Download Test Timestamp, Duration, Client Received (bytes), Client Sent (bytes), Server Recieved (bytes), Server Sent (bytes), Download Throughput (bytes)
    router_id int ID for router
    state string Speed test state
    updated_at datetime Datetime of speed test
    Note: * indicates the attribute is required for POST requests. Note that the required fields are in both the speed_test object and the nested config object tables.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/speed_test/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud Manager API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/speed_test/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the speed_test endpoint using a speed test ID as a filter.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/speed_test/47535/"

    Response body for curl GET example

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/1/",
        "config": {
            "host": "YOURTESTSERVER.COM",
            "max_test_concurrency": 5,
            "net_device_ids": [
                12345678
            ],
            "port": 12865,
            "size": null,
            "test_timeout": 10,
            "test_type": "TCP Download",
            "time": 10
        },
        "created_at": "2019-02-06T15:16:16.240612+00:00",
        "id": "47535",
        "progress": {
            "completed": 1,
            "total_count": 1
        },
        "resource_uri": "https://www.cradlepointecm.com/api/v2/speed_test/47535/",
        "results": [
            {
                "created_at": "2019-02-06 15:16:16.260749+00:00",
                "net_device_id": 12345678,
                "results": "TCP Download Test Timestamp: 2019-02-18 16:14:56 Duration: 10.01 Seconds Client Received: 69.6 MB Client Sent: 0 bytesServer Received: 0 bytes Server Sent: 70.4 MB Download Throughput: 58.34 Mbps",
                "router_id": 123456,
                "state": "success",
                "updated_at": "2019-02-06 15:16:19.573507+00:00"
            }
        ],
        "state": "complete",
        "updated_at": "2019-02-06T15:17:16.362784+00:00"
    }  
     
  • POST Examples
  • Example curl POST request/response to the speed_test endpoint.

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/speed_test/" -d '{
            "account": "https://www.cradlepointecm.com/api/v2/accounts/1/",
              "config": {
              "host": "YOURTESTSERVER.COM",
              "max_test_concurrency": 5,
              "net_device_ids": [
                  12345678
              ],
              "port": 12865,
              "size": null,
              "test_timeout": 10,
              "test_type": "TCP Download",
              "time": 10
          }
        }
        

    Response body for curl POST example

    {
        "account": "https://www.cradlepointecm.com/api/v2/accounts/1/",
        "config": {
            "host": "YOURTESTSERVER.COM",
            "max_test_concurrency": 5,
            "net_device_ids": [
                12345678
            ],
            "port": 12865,
            "size": null,
            "test_timeout": 10,
            "test_type": "TCP Download",
            "time": 10
        },
        "created_at": "2019-02-06T15:16:16.240612+00:00",
        "id": "47535",
        "progress": null,
        "resource_uri": "https://www.cradlepointecm.com/api/v2/speed_test/47535/",
        "results": null,
        "state": "created",
        "updated_at": "2019-02-06T15:16:16.240636+00:00"
    }
        
  • DELETE Example
  • Example curl DELETE request/response to the speed_test endpoint. This deletes the group matching the ID passed in the route.

    curl -v -X DELETE -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/speed_test/{id}/"

    Successful DELETE actions return a 204 response with no content in the body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

Use the test_alert_push_destinations endpoint to test a destination created with the alert_push_destinations endpoint. This endpoint accepts only POST requests containing the destination_config_id of the alert destination to test. Successful POST requests to this endpoint return a 201 Created response with empty response body to indicate an alert push destination is reachable and the secret passed in is valid.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods:POST.
  • test_alert_push_destinations Endpoint Fields and Filters
  • This table lists the fields associated with the test_alert_push_destinations endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    destination_config_id* timeuuid Unique ID for destination for which a test push will be initiated.
    Note: * indicates the attribute is required for POST requests.

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/test_alert_push_destinations/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/test_alert_push_destinations/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • POST Examples
  • Example curl POST request/response to the test_alert_push_destinations endpoint to test an Alert Push Destination. This requires a destination_config_id from an Alert Push Destination to be passed in the request body, in the following form:

    {"destination_config_id": “9b98af58-6703-11eb-8aef-42edcb7bf284”}

    Complete curl example:

    curl -v -X POST -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" -H "Content-Type:application/json" "https://www.cradlepointecm.com/api/v2/test_alert_push_destinations/" -d '{
          "destination_config_id": “9b98af58-6703-11eb-8aef-42edcb7bf284”
          }
        

    Responses to successful POSTs to the test_alert_push_destinations endpoint return a 201 status code (created) and an empty response body.

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.

The users endpoint retrieves information about the users in your account including user IDs, names, and email addresses.

IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
Supported methods: GET.
  • users Endpoint Fields and Filters
  • This table lists the fields associated with the users endpoint. Fields with operators specified in the Filter column indicate that those fields can be used as filters.

    Field Data Type Filter Sort Expand Description
    account url URL for the account
    email string =, __in A user's email address
    first_name string First name of user
    id int =, __in User ID
    last_name string Last Name of user
    resource_url url URL of the users record
    username string =, __in Username of user

    Endpoint base path:

    https://www.cradlepointecm.com/api/v2/users/

    IMPORTANT: URLs for endpoints MUST have a trailing forward slash. If a trailing slash is not present the call to the endpoint is automatically redirected, resulting in two calls attributed to your account.
    Correct format:    https://www.cradlepointecm.com/api/v2/<endpoint name>/
    Incorrect format: https://www.cradlepointecm.com/api/v2/<endpoint name>
  • Tips for Using the NetCloud API
  • When making API calls with curl in a console session, it can be helpful to define variables for your API keys, payloads, and the base URL of the endpoint for re-use with each curl statement.
    Please note that the method for setting variables in your console of choice can vary depending on the console/OS used. These variable definition examples are BASH specific; other console tools can require slightly different syntax to define these variables in a console session.

    • X_ECM_API_ID="<X-ECM-API-ID>"
    • X_ECM_API_KEY="<X-ECM-API-KEY>"
    • X_CP_API_ID="<X-CP-API-ID>"
    • X_CP_API_KEY="<X-CP-API-KEY>"
    • -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY"
    • URL="https://www.cradlepointecm.com/api/v2/users/"
    • BODY = -d '{"<field name>": "<field value>"}

    Important: Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

  • Paging Parameters
  • Endpoints that return result sets with multiple records can be "paged" through by using the 'offset' and 'limit' parameters.

    Note that not all endpoints support the offset parameter. See the list of endpoints that don't support the offset parameter at the end of this section.

             GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=50&limit=25

    The offset parameter specifies the starting index in a result set to return records from for an endpoint call. The limit parameter specifies how many records to return in each endpoint call.

    When a result set is returned from an endpoint call, the values used for offset and limit are returned in the meta portion of the response. Note that most resources have a max limit of 500 records per call. To page through the full record set, you must increment the offset. To get the next 25 devices:

    GET https://www.cradlepointecm.com/api/v2/<endpointName>/?offset=75&limit=25

    Alternatively, if the response contains "next" and "previous" URL values in the meta fields they can be used to return the next or previous "page" of records. The "next" field contains a URL with an offset value equal to the next index (and retains the limit value) to return the next page of records. The "previous" field contains a URL with an offset value equal to the previous index (and retains the limit value) to return the previous page of records.

    The limit parameter is supported for all endpoints

    The offset parameter is supported for ALL endpoints except the following:

    • alert_push_destinations
    • alert_rules
    • historical_locations
    • net_device_signal_samples
    • net_device_usage_samples
    • router_state_samples
    • router_stream_usage_samples

    Limit the Fields Returned in a Result Set

    If you do not need all the fields returned by an endpoint, use the fields parameter to retrieve a partial result set containing only the fields you want. The fields to return are specified with the fields query param, e.g. ?fields=field1,field2,... The following is a more complete example that returns only the name and is_disabled fields:

    GET https://www.cradlepointecm.com/api/v2/accounts/308/?fields=name,is_disabled
  • GET Examples
  • Example curl GET request/response to the users endpoint without filters applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/users/"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "email": "jsmithn@some.com",
                "first_name": "John",
                "id": "63944",
                "last_name": "Smith",
                "resource_url": "https://www.cradlepointecm.com/api/v2/users/<id>/",
                "username": "038Bd0s1O9tzah0g"
            },
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "email": "albert@some.com",
                "first_name": "Albert",
                "id": "111032",
                "last_name": "Wilson",
                "resource_url": "https://www.cradlepointecm.com/api/v2/users/<id>/",
                "username": "muU8o4fXj1IKwzuq"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
     

    Example curl GET request/response to the users endpoint with the ID filter applied.

    curl -v -X GET -H "X-ECM-API-ID:$X_ECM_API_ID" -H "X-ECM-API-KEY:$X_ECM_API_KEY" -H "X-CP-API-ID:$X_CP_API_ID" -H "X-CP-API-KEY:$X_CP_API_KEY" "https://www.cradlepointecm.com/api/v2/users/?id=111032"

    Response body for curl GET example

    {
        "data": [
            {
                "account": "https://www.cradlepointecm.com/api/v2/accounts/<account number>/",
                "email": "albert@some.com",
                "first_name": "Albert",
                "id": "111032",
                "last_name": "Wilson",
                "resource_url": "https://www.cradlepointecm.com/api/v2/users/111032/",
                "username": "muU8o4fXj1IKwzuq"
            }
        ],
        "meta": {
            "limit": 20,
            "next": null,
            "offset": 0,
            "previous": null
        }
    }
            

Forms

Use the forms below to call the endpoint from this page. The results of your API calls made with these forms are displayed beneath the form.


Endpoint support for different device types

The following table lists which endpoints and methods are supported for which devices

Endpoint name Routers Access Points
accounts x x
alerts x
alert_rules x
alert_push_destinations x
batteries x
configuration_managers x x
device_apps x x
device_app_versions x x
device_app_bindings x x
device_app_states x x
firmwares x x
groups x x
locations x  
net_device_health x x
net_device_metrics x x
net_device_signal_samples x  
net_device_usage_samples x x
net_devices x x
products x x
reboot_activity x x
router_alerts x x
router_lans x x
router_logs x x
router_state_samples x x
router_stream_usage_samples x x
routers x x
speed_test x
test_alert_push_destination x
users x


The URL data type has the following conventions:

  • Request: URI, Example: https://www.cradlepointecm.com/api/v2/accounts/1/
  • Response: URL, Example: https://www.cradlepointecm.com/api/v2/accounts/1/
  • Query Argument: Integer, Example: ?account=1
  • Note: Any API calls done through the examples above will use the NCM account linked to the NetCloud Manager API key. This can affect production devices and data!

    Code Samples

    The following code samples demonstrate how to query the NetCloud Manager API using examples in Python, Java, PHP, and shell scripts.

    Python Code Sample

    The following Python code sample shows how to access the routers endpoint of NetCloud Manager API v2 using the Python requests module with paging. It makes use of the NetCloud Manager and CP credential headers to authenticate and access the device data. The data is returned as a JSON-encoded object.

    import json
    import requests
    
    url = 'https://www.cradlepointecm.com/api/v2/routers/'
    
    headers = {
        'X-CP-API-ID': '…',
        'X-CP-API-KEY': '…',
        'X-ECM-API-ID': '…',
        'X-ECM-API-KEY': '…',
        'Content-Type': 'application/json' 
    }
    
    # Get routers
    while url:
        req = requests.get(url, headers=headers)
        routers_resp = req.json()
                   
        # Get URL for next set of resources
        url = routers_resp['meta']['next']
    

    Regrades (API v3)

    Use this Python code sample to perform regrade operations. Note that this script is intended to be modifed for specific uses cases and environments. See the run() function in the script for the variables (action/action_id, mac_address, etc) that you can set for your specific needs.

        
    import json
    import time
    from datetime import datetime
    from enum import Enum
    from typing import List, Union
    
    import requests
    
    
    class RegradeAction(Enum):
        """
        Enum that contains the supported regrade actions
        """
        UPGRADE = "UPGRADE"
        DOWNGRADE = "DOWNGRADE"
        LICENSE = "LICENSE"
        UNLICENSE = "UNLICENSE"
    
    
    class RegradeStatus(Enum):
        """
        Enum that contains the supported regrade statuses
        """
        RUNNING = "RUNNING"
        COMPLETED = "COMPLETED"
        FAILED = "FAILED"
    
    
    class RegradePayload:
        @staticmethod
        def __generate_regrade(action: RegradeAction, mac_address: str, subscription_type: str = None):
            regrade = {
                "op": "add",
                "data": {
                    "type": "regrades",
                    "attributes": {
                        "action": action.value,
                        "mac_address": mac_address
                    }
                }
            }
    
            if subscription_type is not None:
                regrade["data"]["attributes"]["subscription_type"] = subscription_type
    
            return regrade
    
        def generate_regrade_payload(self, action: RegradeAction, mac_addresses: List[str], subscription_type: str = None):
            return {
                "atomic:operations": [self.__generate_regrade(action, mac_address, subscription_type) for mac_address in mac_addresses]
            }
    
    
    class RegradeOperations:
        def __init__(self):
            self.regrade_url = "https://api.cradlepointecm.com/api/v3/asset_endpoints/regrades"
    
        @staticmethod
        def __save_file(file_name, data):
            """
            Saves data to a file
            Args:
                file_name: Name of file
                data: Data to be saved
            """
            with open(file_name, "w") as f:
                json.dump(data, f, ensure_ascii=False, indent=2)
    
        @staticmethod
        def __generate_client(token):
            """
            Generate the request client to perform GET and POST actions
            Args:
                token: API token
            Returns:
                A session with the supplied api token
            """
            # Validate the token is not None and not empty
            if token is None or not token:
                raise ValueError(f"Token is required. '{token}' is not a valid token.")
    
            session = requests.Session()
            session.headers.update({"Authorization": f"Bearer {token}", "Content-Type": "application/vnd.api+json"})
    
            return session
    
        def __get_regrade_by_id(self, token, regrade_id):
            """
            Get a single regrade by id
            Args:
                token: API token
                regrade_id: Regrade id
            Returns:
                The regrade for the given id
            """
            url = f"{self.regrade_url}/{regrade_id}"
    
            client = self.__generate_client(token)
            t0 = time.time()
            response = client.get(url)
            response.raise_for_status()
            t1 = time.time()
            print(f"GET:  {url}  time:  {round((t1 - t0) * 1000)}ms")
            client.close()
    
            return response
    
        def get_regrades_by_ids(self, token, regrades: Union[List, str] = None):
            """
            Fetches regrades by a list of regrade Ids or the file path to the json output from posting regrades
            Args:
                token: API token
                regrades: List of regrade ids or the file path to the json response created from posting a regrade
            Returns:
                Creates a json file with the output of fetching regrades with the given regrade ids
            """
            if regrades is None or len(regrades) == 0:
                raise ValueError("A list of regrade ids or the file path to the json response from a previous post must be provided to perform a GET")
    
            regrade_id_list: List = []
            if isinstance(regrades, str):
                json_file = open(regrades)
                data = json.load(json_file)
                for regrade in data['atomic:results']:
                    regrade_id_list.append(regrade["data"]["id"])
                json_file.close()
            elif isinstance(regrades, List):
                regrade_id_list = regrades
    
            regrades = []
            for regrade_id in regrade_id_list:
                response = self.__get_regrade_by_id(token, regrade_id)
                if response is not None and len(response.json()['data']) > 0:
                    regrades.append(response.json()["data"])
    
            # Save the fetched regrades to a json file
            self.__save_file(f"{datetime.now().strftime('%Y%m%d%H%M%S')}_GET_BY_IDS_RESPONSE.json", regrades)
    
        def get_regrades(self, token: str, **kwargs):
            """
            Get a collection of regrades by query params
            Args:
                token: API token
                **kwargs: Keyword arguments used as query parameters
            Returns:
                A collection of regrades filtered by the given query params
            """
            query_params = []
            for key, value in kwargs.items():
                if value is not None:
                    if key in ["page", "size"]:
                        query_params.append(f"{key}={value}")
                    else:
                        if isinstance(value, RegradeAction) or isinstance(value, RegradeStatus):
                            value = value.value
                        query_params.append(f"filter[{key}]={value}")
    
            url = f"{self.regrade_url}"
            for i in range(len(query_params)):
                if i == 0:
                    url += f"?{query_params[i]}"
                else:
                    url += f"&{query_params[i]}"
    
            client = self.__generate_client(token)
            t0 = time.time()
            response = client.get(url)
            response.raise_for_status()
            t1 = time.time()
            print(f"GET:  {url}  time:  {round((t1 - t0) * 1000)}ms")
            client.close()
    
            # Save the fetched regrades to a json file
            self.__save_file(f"{datetime.now().strftime('%Y%m%d%H%M%S')}_GET_BY_FILTER_PARAMS_RESPONSE.json",
                             response.json())
    
        def __post_regrades(self, token, regrade_payload):
            """
            Posts regrade via the supplied json blob
            Args:
                token: API token
                regrade_payload: Regrade payload
            Returns:
                The response from posting the regrade payload
            """
            client = self.__generate_client(token)
            t0 = time.time()
            response = client.post(self.regrade_url, json=regrade_payload)
            t1 = time.time()
            response.raise_for_status()
            print(
                f"POST:  {self.regrade_url}  Device_Count:  {len(regrade_payload['atomic:operations'])}  time:  {round((t1 - t0) * 1000)}ms")
            client.close()
    
            return response
    
        def post_regrades_via_csv(self, token: str, action: RegradeAction, csv_file_path: str, subscription_type: str = None):
            """
            Post regrades using a csv file that contains the mac addresses of the devices to be regraded. If the file has more than 1000 macs, the macs will be chunked into groups of 1000. Each chunk will be posted separately and will have its own file created with an appended number at the end of the file name.
            Args:
                token: API token
                action: Regrade action, i.e. RegradeAction.UPGRADE, RegradeAction.DOWNGRADE
                csv_file_path: CSV file path
                subscription_type: Subscription type if wanting to specify which subscription to upgrade to or downgrade
                from. Does not work with LICENSE or UNLICENSE.
            Returns:
                Creates a json file with the response from the POST
            """
            if csv_file_path is None or len(csv_file_path) == 0:
                raise ValueError("The csv file path must be specified to perform a POST.")
    
            mac_addresses = []
            with open(csv_file_path, 'r') as file:
                for line in file:
                    line = line.strip()
                    mac_addresses.append(line)
    
            # API supports up to 1000 macs when performing a POST. If there are more than 1000 macs in the CSV then they
            # will be grouped in chunks of 1000 and each chunk will be posted in separate calls.
            mac_addresses_chunks = [mac_addresses[x:x + 1000] for x in range(0, len(mac_addresses), 1000)]
            base_file_name = f"{datetime.now().strftime('%Y%m%d%H%M%S')}_POST_{action.value}_RESPONSE"
            for index, val in enumerate(mac_addresses_chunks):
                regrade_payload = RegradePayload().generate_regrade_payload(action, val, subscription_type)
                response = self.__post_regrades(token, regrade_payload)
    
                # Save each chunk of 1000 regrades as a csv
                self.__save_file(f"{base_file_name}_{index}.json", response.json())
    
    def run():
        # API token is required when performing the GET and POST operations. Read only tokens can only GET while Admin
        # tokens can GET and POST.
        api_token = None
    
        # Are you performing a GET or POST?
        operation = "GET"
    
        # If performing a GET operation, there are two options:
        # Option 1 - Fill in a list of regrade Ids, i.e. ["3ZMHRpcb6OJBtVO", "Sa8MUaAN21mCGQn"] or the file path for the
        # json response from a previous regrade POST. If you want to use option 2 then leave regrade_ids set to None.
        regrade_ids: Union[List, str] = None
    
        # Option 2 - Fill in the values below to return filtered regrades based on the values populated.
        mac_address: str = None
        action: RegradeAction = None
        action_id: str = None
        get_subscription_type: str = None
        status: RegradeStatus = None
        page: int = None
        size: int = None
    
        # If performing a POST, fill in fill your csv path containing the mac addresses to be regraded and the desired
        # regrade action, i.e. RegradeAction.UPGRADE. This csv only needs the MACs to be listed in the first column without
        # a header
        post_csv_path = None
        regrade_action = None
        post_subscription_type = None
    
        if operation.lower() == "get":
            if regrade_ids is not None:
                RegradeOperations().get_regrades_by_ids(api_token, regrade_ids)
            else:
                RegradeOperations().get_regrades(
                    api_token,
                    mac_address=mac_address,
                    action=action,
                    action_id=action_id,
                    subscription_type=get_subscription_type,
                    status=status,
                    page=page,
                    size=size
                )
        elif operation.lower() == "post":
            RegradeOperations().post_regrades_via_csv(api_token, regrade_action, post_csv_path,
                                                      subscription_type=post_subscription_type)
        else:
            raise ValueError(f"Operation '{operation}' is not supported. Must be GET or POST.")
    
    
    if __name__ == "__main__":
        # Be sure to enter your values into the run() operation before executing the script
        run()   
     
    

    Subscriptions (API v3)

    The following Python code sample shows how to access the subscriptions endpoint of the NetCloud Manager API v3 using the Python requests module with paging. It makes use of a bearer token to authenticate and access an account's subscription data. The data is returned as a JSON encoded object.

    import json
    import requests
    
    url = 'https://api.cradlepointecm.com/api/v3/subscriptions'
    
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/vnd.api+json"
    }
    
    # Get subscriptions
    while url:
        req = requests.get(url, headers=headers)
        routers_resp = req.json()
                   
        # Get URL for next set of resources
        url = routers_resp['meta']['next']
    

    Net Device Usage and Signal Samples

    The following Python code extends the previous example and can be used to efficiently export the account's net device usage and signal information. It minimizes API requests by using the maximum API_OBJ_REQUEST_SIZE and API_OBJ_RESPONSE_SIZE values.

    import json
    import requests
    
    
    API_OBJ_REQUEST_SIZE = 100
    API_OBJ_RESPONSE_SIZE = 500
    
    START_DATE = '2017-10-19'
    END_DATE = '2017-10-20'
    
    
    # Chunk lists into blocks
    def chunker(seq, size):
        return (seq[pos:pos + size] for pos in range(0, len(seq), size))
    
    
    # Get the next url, at completion return None
    def next_url(resp):
        if resp['meta']['next']:
            url = resp['meta']['next']
        else:
            url = None
    
        return url
    
    
    # Fill in your API keys here
    headers = {
        'X-CP-API-ID': '...',
        'X-CP-API-KEY': '...',
        'X-ECM-API-ID': '...',
        'X-ECM-API-KEY': '...',
        'Content-Type': 'application/json'
    }
    
    
    # Get net_devices
    net_device_ids = set()
    url = 'https://www.cradlepointecm.com/api/v2/net_devices/?limit={}'. \
        format(API_OBJ_RESPONSE_SIZE)
    while url:
        req = requests.get(url, headers=headers)
        resp = req.json()
        for net_device in resp['data']:
            net_device_ids.add(int(net_device['id']))
        url = next_url(resp)
    
    
    # Get usage samples
    print('bytes_in,bytes_out,created_at,created_at_timeuuid,'
          'net_device,period,uptime')
    for net_devices in chunker(sorted(net_device_ids), API_OBJ_REQUEST_SIZE):
        url = 'https://www.cradlepointecm.com/api/v2/net_device_usage_samples/' \
            '?limit={}'.format(API_OBJ_RESPONSE_SIZE)
        url += '&net_device__in={}'.format(','.join(map(str, net_devices)))
        url += '&created_at__gt={}&created_at__lt={}'.format(START_DATE, END_DATE)
        url += '&order_by=created_at_timeuuid'
    
        while url:
            req = requests.get(url, headers=headers)
            resp = req.json()
            if (len(resp['data']) > 0):
                for net_device in resp['data']:
                    print('{},{},{},{},{},{},{}'.format(
                        net_device['bytes_in'],
                        net_device['bytes_out'],
                        net_device['created_at'],
                        net_device['created_at_timeuuid'],
                        net_device['net_device'],
                        net_device['period'],
                        net_device['uptime']))
            url = next_url(resp)
    
    
    # Get signal samples
    print('created_at,created_at_timeuuid,ecio,net_device,rssi,'
          'signal_percent,sinr,uptime')
    for net_devices in chunker(sorted(net_device_ids), API_OBJ_REQUEST_SIZE):
        url = 'https://www.cradlepointecm.com/api/v2/net_device_signal_samples/' \
            '?limit={}'.format(API_OBJ_RESPONSE_SIZE)
        url += '&net_device__in={}'.format(','.join(map(str, net_devices)))
        url += '&created_at__gt={}&created_at__lt={}'.format(START_DATE, END_DATE)
        url += '&order_by=created_at_timeuuid'
    
        while url:
            req = requests.get(url, headers=headers)
            resp = req.json()
            if (len(resp['data']) > 0):
                for net_device in resp['data']:
                    print('{},{},{},{},{},{},{},{}'.format(
                        net_device['created_at'],
                        net_device['created_at_timeuuid'],
                        net_device['ecio'],
                        net_device['net_device'],
                        net_device['rssi'],
                        net_device['signal_percent'],
                        net_device['sinr'],
                        net_device['uptime']))
            url = next_url(resp)
    
        
    

    Sample Code in Shell Script

    The shell script below shows how to access the NetCloud Manager API to view account data. It makes use of environment variables to set the NCM and CP credentials and uses the curl program to access the NetCloud accounts endpoint.

    Note that the "-L" option, shown in the example below, must be used with all curl requests to Cradlepoint's API. This allows your curl request to follow any redirects put in place by Cradlepoint.

    ECM_API_ID="<ECM-API-ID HERE>"
    ECM_API_KEY="<ECM-API-KEY HERE>"
    CP_API_ID="<CP-API-ID HERE>"
    CP_API_KEY="<CP-API-KEY HERE>"
    URL="https://www.cradlepointecm.com/api/v2/accounts/"
    curl -H "X-ECM-API-ID: $ECM_API_ID" -H "X-ECM-API-KEY: $ECM_API_KEY" 
         -H "X-CP-API-ID: $CP_API_ID" -H "X-CP-API-KEY: $CP_API_KEY" 
         -H "Content-Type: application/json" -L $URL 
    

    Sample Code in JAVA

    import java.util.*;
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import javax.net.ssl.HttpsURLConnection;
    
    public class HttpURLConnectionExample {
    
    	public static void main(String[] args) throws Exception {
    		HttpURLConnectionExample http = new HttpURLConnectionExample();
    		http.sendGet();
    	}
    
    	// HTTP GET request
    	private void sendGet() throws Exception {
    		String url = "https://www.cradlepointecm.com/api/v2/accounts/";		
    		URL obj = new URL(url);
    		HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    
    		// optional default is GET
    		con.setRequestMethod("GET");
    
    		//add request header
    		HttpURLConnectionExample http = new HttpURLConnectionExample();
    		http.set_headers(con);
    		int responseCode = con.getResponseCode();
    
    		System.out.println("\nSending 'GET' request to URL : " + url);
    		System.out.println("Response Code : " + responseCode);
    
                    Scanner s = new Scanner(con.getInputStream());
                    System.out.println("Response : " + s.useDelimiter("\0").next());	
    
    	}
    
            public HttpURLConnection set_headers(HttpURLConnection con)
    	{
                    con.setRequestProperty("x-ecm-api-id", "...");
                    con.setRequestProperty("x-ecm-api-key", "...");
                    con.setRequestProperty("x-cp-api-id", "...");
                    con.setRequestProperty("x-cp-api-key", "...");
                    con.setRequestProperty("Accept", "*/*");
                    return con;
    	}
    }
    

    Sample Code in PHP

    <?php
    $url = 'https://www.cradlepointecm.com/api/v2/routers/';
    $headers = array(
        'X-CP-API-ID: ...',
        'X-CP-API-KEY: ...',
        'X-ECM-API-ID: ...',
        'X-ECM-API-KEY: ...', 
        'Content-Type: application/json' 
    );
    
    $req = curl_init();
    curl_setopt_array($req, array(    
        CURLOPT_URL => $url,
     CURLOPT_HTTPHEADER => $headers, 
    ));
    
    $result = curl_exec($req);
    $res_info = curl_getinfo($req);
    echo $res_info['http_code'];
    curl_close($req);
    ?>
    

    NetCloud Webhooks

    Webhooks provide a simplified messaging standard (RFC8030) for communication between remote applications. Application inter-messaging is often accomplished using a message queueing and subscribing approach. Webhooks use a simpler, direct-messaging approach that requires less overhead and includes the capability to authenticate messages between remote applications.

    The webhooks model follows this process.

    1. An event occurs in a remote application.
    2. The remote application is configured to call a URL you provide when the event occurs. This URL will typically be routed to a function in your application, or webhook. The event-providing, remote application sends a message that, by design, your application can understand. The convention is to use messages that are JSON objects. These messages describe state changes in the remote application that your application wants to know.
    3. Your application can take some action based on the message contents. The action your application takes could be anything from updating a database to sending an email.

    The NetCloud webhook implementation is used to notify your application of when NetCloud alerts have occurred. This process uses the following steps.

    1. Tell NetCloud where to send, or "push", the message.
    2. a. Configure an Alert Push Destination using the alert_push_destination endpoint. Use a URL in the endpoint field that points to your function for processing the message, and add a "secret" value in the authentication field to enable the message to be validated by your webhook.
    3. Test the Alert Push Destination by using the test_alert_push_destination endpoint.
    4. Configure an Alert Rule and reference the Alert Push Destination. This is done by adding the value from the Alert Push Destination's destination_config_id field to the http_destinations field in the Alert Rule. This links the Alert Push Destination to the Alert Rule.

    NOTE: Certain alerts can be configured with thresholds. These thresholds allow you to control when alerts are triggered. See the Cradlepoint Customer Connect Knowledgebase article Alerting and Reporting for details on using alerts that have thresholds.

     

    Webhooks Alert Overview

     

    Troubleshooting Webhooks in a Suspended State

    The following issues can cause Webhooks to go into a Suspended state. Each issue is followed by an action to take for resolving the Suspended state.

    • The destination isn't receiving valid authentication to allow the Webhook payload to be accepted and processed. Check the Webhook configuration in NCM and verify the correct secret is being sent.
    • NCM can't connect to the URL of the Webhook destination. Check the Webhook URL in the NCM configuration and verify it is correct.
    • The destination endpoint's SSL environment may have vulnerabilities. Check the SSL libraries used by the destination endpoint and verify they are up-to-date.

     

    Webhook Response Payload Examples

    The following examples show the payloads sent from NetCloud to your Alert Push Destination for various alerts.

    Note: The content in the "info" object varies with the type of alert. The type of alert is identified from the outer "type" field.

    • Example payload for connection_state - offline ("NCM Connection State") alerts
    •     
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-13T05:20:18.322318+00:00",
            "created_at_timeuuid": "da54838c-ffca-11ef-bd02-82acc788746c",
            "detected_at": "2025-03-13T05:20:18.322301+00:00",
            "friendly_info": "The device entered the \"offline\" state.",
            "info": {
              "state": "offline"
            },
            "router": 4716965,
            "type": "connection_state",
            "router_details": {
              "name": "OpenWRT-99b",
              "description": null,
              "mac": "46:E4:2E:D4:B0:30",
              "serial_number": "C551GW2276D4B004",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }  
            
    • Example payload for connection_state - online ("NCM Connection State") alerts
    •        
          {
              "data": [
                  {
                      "account": 00000,
                      "created_at": "2022-09-21T20:24:44.609340+00:00",
                      "created_at_timeuuid": "6e20c858-39eb-11ed-a6b3-f25293fee494",
                      "detected_at": "2022-09-21T20:24:44.616133+00:00",
                      "friendly_info": "The device entered the \"online\" state.",
                      "info": {
                          "state": "online"
                      },
                      "router": 0000000,
                      "type": "connection_state",
                      "router_details": {
                          "name": "IBR900-082",
                          "description": null,
                          "mac": "00:00:00:00:00:00",
                          "serial_number": "00000000000000",
                          "asset_id": null,
                          "custom1": null,
                          "custom2": null
                      }
                  }
              ],
              "meta": {
                  "record_type": "alert",
                  "record_version": "1.0.0",
                  "deprecated": false
              }
          }  
          
    • Example payload for cpu_utilization ("CPU Utilization") alerts
    •      
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-07T07:46:41.970033+00:00",
            "created_at_timeuuid": "4f504a68-fb28-11ef-94bf-9a65331e67f4",
            "detected_at": "2025-03-07T07:46:23.812013+00:00",
            "friendly_info": "CPU Utilization reached 9.69% which is higher than threshold of 2%.",
            "info": {
              "time": [
                "2025-03-07 07:46:23",
                "UTC"
              ],
              "state": "cpu_util_high",
              "usage": 9.693877551020408,
              "duration": 5,
              "threshold": 2,
              "type": "cpu_utilization"
            },
            "router": 4707137,
            "type": "cpu_utilization",
            "router_details": {
              "name": "E100-0eb",
              "description": null,
              "mac": "00:30:44:48:F0:EB",
              "serial_number": "MM202600009920",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for data_cap_threshold ("Data Cap Threshold") alerts
    •     {
              "data": [
                {
                  "account": 1297836,
                  "created_at": "2025-03-05T04:24:37.529683+00:00",
                  "created_at_timeuuid": "bfc20340-f979-11ef-940b-4e19ecb649c4",
                  "detected_at": "2025-03-05T04:23:33.740422+00:00",
                  "friendly_info": "The Ethernet-wan rule exceeded 1.0 percent of its 1 MB daily cycle.",
                  "info": {
                    "time": [
                      "2025-03-05 04:23:33",
                      "UTC"
                    ],
                    "info": {
                      "percentage": "1.0",
                      "cycle_str": "2025-03-04 00:00:00",
                      "hostname": "E3000-451",
                      "version": 2,
                      "profilename": "Ethernet-wan",
                      "interface": "0",
                      "capMB": 1,
                      "cycle": "daily",
                      "description": "Data usage alert"
                    },
                    "type": "data_cap_threshold"
                  },
                  "router": 4701864,
                  "type": "data_cap_threshold",
                  "router_details": {
                    "name": "E3000-451",
                    "description": null,
                    "mac": "00:30:44:69:54:51",
                    "serial_number": "WB2236RA009523",
                    "asset_id": null,
                    "custom1": null,
                    "custom2": null
                  }
                }
              ],
              "meta": {
                "record_type": "alert",
                "record_version": "1.0.0",
                "deprecated": false
              }
            }
        
    • Example payload for ethernet_wan_connected ("Ethernet WAN Connected") alerts
    • {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-04T08:14:00.731148+00:00",
            "created_at_timeuuid": "a0da2478-f8d0-11ef-8dfa-4606e0024983",
            "detected_at": "2025-03-04T08:13:10.183524+00:00",
            "friendly_info": "The ethernet port \"Ethernet \" has connected to the network.",
            "info": {
              "time": [
                "2025-03-04 08:13:10",
                "UTC"
              ],
              "history": [],
              "status": "connected",
              "info": {
                "type": "ethernet",
                "mac": "00:30:44:69:54:51",
                "port": "Ethernet ",
                "reason": "Failover",
                "uid": "wan",
                "raw_port": "0"
              },
              "type": "wan_status_change",
              "alert_type": "ethernet_wan_connected"
            },
            "router": 4701864,
            "type": "ethernet_wan_connected",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for ethernet_wan_disconnected ("Ethernet WAN Disconnected") alerts
    • {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-13T04:41:26.034183+00:00",
            "created_at_timeuuid": "6c2d9646-ffc5-11ef-ae8b-a210c64f29d7",
            "detected_at": "2025-03-13T04:41:09.712491+00:00",
            "friendly_info": "The ethernet port \"Ethernet \" has disconnected from the network.",
            "info": {
              "time": [
                "2025-03-13 04:41:09",
                "UTC"
              ],
              "history": [],
              "status": "disconnected",
              "info": {
                "type": "ethernet",
                "mac": "00:30:44:4e:3c:3c",
                "port": "Ethernet ",
                "reason": "Unready",
                "uid": "wan",
                "raw_port": "0"
              },
              "type": "wan_status_change",
              "alert_type": "ethernet_wan_disconnected"
            },
            "router": 4705965,
            "type": "ethernet_wan_disconnected",
            "router_details": {
              "name": "E3000-c3c-rk",
              "description": null,
              "mac": "00:30:44:4E:3C:3C",
              "serial_number": "WA2011RA000482",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for ethernet_wan_plugged ("Ethernet WAN Plugged In") alerts
    •     
          {
              "data": [
                {
                  "account": 1297836,
                  "created_at": "2025-03-04T08:14:00.727042+00:00",
                  "created_at_timeuuid": "a0d98414-f8d0-11ef-b820-4606e0024983",
                  "detected_at": "2025-03-04T08:13:02.536688+00:00",
                  "friendly_info": "A cable has been inserted into the ethernet port \"Ethernet \".",
                  "info": {
                    "time": [
                      "2025-03-04 08:13:02",
                      "UTC"
                    ],
                    "history": [],
                    "status": "plugged",
                    "info": {
                      "type": "ethernet",
                      "mac": "00:30:44:69:54:51",
                      "port": "Ethernet ",
                      "reason": "Plugged",
                      "uid": "wan",
                      "raw_port": "0"
                    },
                    "type": "wan_status_change",
                    "alert_type": "ethernet_wan_plugged"
                  },
                  "router": 4701864,
                  "type": "ethernet_wan_plugged",
                  "router_details": {
                    "name": "E3000-451",
                    "description": null,
                    "mac": "00:30:44:69:54:51",
                    "serial_number": "WB2236RA009523",
                    "asset_id": null,
                    "custom1": null,
                    "custom2": null
                  }
                }
              ],
              "meta": {
                "record_type": "alert",
                "record_version": "1.0.0",
                "deprecated": false
              }
            } 
        
    • Example payload for ethernet_wan_standby ("Ethernet WAN Standby") alerts
    •     
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-13T04:41:26.036604+00:00",
            "created_at_timeuuid": "6c2df4d8-ffc5-11ef-b720-a210c64f29d7",
            "detected_at": "2025-03-13T04:41:14.271050+00:00",
            "friendly_info": "The ethernet port \"Ethernet \" has gone to standby.",
            "info": {
              "time": [
                "2025-03-13 04:41:14",
                "UTC"
              ],
              "history": [],
              "status": "standby",
              "info": {
                "type": "ethernet",
                "mac": "00:30:44:4e:3c:3c",
                "port": "Ethernet ",
                "reason": "Standby",
                "uid": "wan",
                "raw_port": "0"
              },
              "type": "wan_status_change",
              "alert_type": "ethernet_wan_standby"
            },
            "router": 4705965,
            "type": "ethernet_wan_standby",
            "router_details": {
              "name": "E3000-c3c-rk",
              "description": null,
              "mac": "00:30:44:4E:3C:3C",
              "serial_number": "WA2011RA000482",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for ipsec_tunnel_down ("IPSec VPN Tunnel Down") alerts
    •     
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-06T12:31:55.059131+00:00",
            "created_at_timeuuid": "fd18b54c-fa86-11ef-b94f-2a0df17e68b7",
            "detected_at": "2025-03-06T12:31:55.992859+00:00",
            "friendly_info": "IPsec Tunnel \"hub0_wan\" has gone down.",
            "info": {
              "time": [
                "2025-03-06 12:31:55",
                "UTC"
              ],
              "tunname": "hub0_wan",
              "type": "ipsec_tunnel_down"
            },
            "router": 4705965,
            "type": "ipsec_tunnel_down",
            "router_details": {
              "name": "E3000-c3c-rk",
              "description": null,
              "mac": "00:30:44:4E:3C:3C",
              "serial_number": "WA2011RA000482",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
       
        
    • Example payload for ipsec_tunnel_up ("IPSec VPN Tunnel Up") alerts
    •     
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-06T12:31:29.465201+00:00",
            "created_at_timeuuid": "edd76268-fa86-11ef-8fc4-32c043f6d289",
            "detected_at": "2025-03-06T12:31:18.424148+00:00",
            "friendly_info": "IPsec Tunnel \"hub1_wan\" has gone up.",
            "info": {
              "time": [
                "2025-03-06 12:31:18",
                "UTC"
              ],
              "tunname": "hub1_wan",
              "type": "ipsec_tunnel_up"
            },
            "router": 4705965,
            "type": "ipsec_tunnel_up",
            "router_details": {
              "name": "E3000-c3c-rk",
              "description": null,
              "mac": "00:30:44:4E:3C:3C",
              "serial_number": "WA2011RA000482",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for login_success ("Successful Login (Router)") alerts
    •     
          {
              "data": [
                {
                  "account": 1297836,
                  "created_at": "2025-03-04T08:06:31.714332+00:00",
                  "created_at_timeuuid": "95379d1a-f8cf-11ef-87e2-eaaf67b3c0e8",
                  "detected_at": "2025-03-04T08:06:32.440775+00:00",
                  "friendly_info": "User admin has logged into the router from 10.190.250.8.",
                  "info": {
                    "time": [
                      "2025-03-04 08:06:32",
                      "UTC"
                    ],
                    "ip": "10.190.250.8",
                    "user": "admin",
                    "type": "login_success"
                  },
                  "router": 4701864,
                  "type": "login_success",
                  "router_details": {
                    "name": "E3000-451",
                    "description": null,
                    "mac": "00:30:44:69:54:51",
                    "serial_number": "WB2236RA009523",
                    "asset_id": null,
                    "custom1": null,
                    "custom2": null
                  }
                }
              ],
              "meta": {
                "record_type": "alert",
                "record_version": "1.0.0",
                "deprecated": false
              }
            } 
        
    • Example payload for memory_utilization ("Memory Utilization") alerts
    •     
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-07T07:46:19.647787+00:00",
            "created_at_timeuuid": "42022fae-fb28-11ef-b3c6-c25443944b6f",
            "detected_at": "2025-03-07T07:46:18.829770+00:00",
            "friendly_info": "Memory Utilization reached 28.21% which is higher than threshold of 2%.",
            "info": {
              "time": [
                "2025-03-07 07:46:18",
                "UTC"
              ],
              "state": "memory_util_high",
              "usage": 28.21346959502349,
              "duration": 5,
              "threshold": 2,
              "type": "memory_utilization"
            },
            "router": 4707137,
            "type": "memory_utilization",
            "router_details": {
              "name": "E100-0eb",
              "description": null,
              "mac": "00:30:44:48:F0:EB",
              "serial_number": "MM202600009920",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for modem_wan_connected ("Modem WAN Connected") alerts
    •  {
          "data": [
              {
                  "account": 00000,
                  "created_at": "2022-09-21T20:21:42.414147+00:00",
                  "created_at_timeuuid": "0188009c-39eb-11ed-93d7-e66426b735a2",
                  "detected_at": "2022-09-21T20:21:26.126543+00:00",
                  "friendly_info": "The Internal 1200M-B (SIM1) mdm on port Internal 1 has connected to the network.",
                  "info": {
                      "time": [
                          "2022-09-21 20:21:26",
                          "UTC"
                      ],
                      "history": [],
                      "status": "connected",
                      "info": {
                          "type": "mdm",
                          "product": "Internal 1200M-B (SIM1)",
                          "model": "Internal 1200M-B (SIM1)",
                          "manufacturer": "CradlePoint Inc.",
                          "serial": "000000000000000",
                          "port": "Internal 1",
                          "reason": "Failover",
                          "uid": "00000000",
                          "raw_port": "int1"
                      },
                      "type": "wan_status_change",
                      "alert_type": "modem_wan_connected"
                  },
                  "router": 0000000,
                  "type": "modem_wan_connected",
                  "router_details": {
                      "name": "IBR900-082",
                      "description": null,
                      "mac": "00:00:00:00:00:00",
                      "serial_number": "00000000000000",
                      "asset_id": null,
                      "custom1": null,
                      "custom2": null
                  }
              }
          ],
          "meta": {
              "record_type": "alert",
              "record_version": "1.0.0",
              "deprecated": false
          }
      }  
        
    • Example payload for modem_wan_disconnected ("Modem WAN Disconnected") alerts
    •    
         {
          "data": [
              {
                  "account": 00000,
                  "created_at": "2022-09-21T20:26:51.882097+00:00",
                  "created_at_timeuuid": "b9fd1068-39eb-11ed-8f49-3a61e7923188",
                  "detected_at": "2022-09-21T20:26:50.539984+00:00",
                  "friendly_info": "The Internal 1200M-B (SIM1) mdm on port Internal 1 has disconnected from the network.",
                  "info": {
                      "time": [
                          "2022-09-21 20:26:50",
                          "UTC"
                      ],
                      "history": [],
                      "status": "disconnected",
                      "info": {
                          "type": "mdm",
                          "product": "Internal 1200M-B (SIM1)",
                          "model": "Internal 1200M-B (SIM1)",
                          "manufacturer": "CradlePoint Inc.",
                          "serial": "000000000000000",
                          "port": "Internal 1",
                          "reason": "Connection set",
                          "uid": "00000000",
                          "raw_port": "int1"
                      },
                      "type": "wan_status_change",
                      "alert_type": "modem_wan_disconnected"
                  },
                  "router": 0000000,
                  "type": "modem_wan_disconnected",
                  "router_details": {
                      "name": "IBR900-082",
                      "description": null,
                      "mac": "00:00:00:00:00:00",
                      "serial_number": "00000000000000",
                      "asset_id": null,
                      "custom1": null,
                      "custom2": null
                  }
              }
          ],
          "meta": {
              "record_type": "alert",
              "record_version": "1.0.0",
              "deprecated": false
          }
      }  
      
    • Example payload for modem_wan_plugged ("Modem WAN Device Plugged") alerts
    • {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-04T08:14:03.194765+00:00",
            "created_at_timeuuid": "a2520f82-f8d0-11ef-9093-eaaf67b3c0e8",
            "detected_at": "2025-03-04T08:13:43.034760+00:00",
            "friendly_info": "The Internal C18B (SIM1) has been inserted into Internal 1.",
            "info": {
              "time": [
                "2025-03-04 08:13:43",
                "UTC"
              ],
              "history": [],
              "status": "plugged",
              "info": {
                "type": "mdm",
                "product": "Internal C18B (SIM1)",
                "model": "Internal C18B (SIM1)",
                "manufacturer": "CradlePoint Inc.",
                "serial": "357926104637348",
                "port": "Internal 1",
                "reason": "Plugged",
                "uid": "31f2123c",
                "raw_port": "int1"
              },
              "type": "wan_status_change",
              "alert_type": "modem_wan_plugged"
            },
            "router": 4701864,
            "type": "modem_wan_plugged",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for modem_wan_unplugged ("Modem WAN Device Unplugged") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-04T08:14:04.410384+00:00",
            "created_at_timeuuid": "a30b8c9e-f8d0-11ef-a2b4-eaaf67b3c0e8",
            "detected_at": "2025-03-04T08:14:01.790726+00:00",
            "friendly_info": "The Internal C18B (SIM1) has been removed from Internal 1.",
            "info": {
              "time": [
                "2025-03-04 08:14:01",
                "UTC"
              ],
              "history": [],
              "status": "unplugged",
              "info": {
                "type": "mdm",
                "product": "Internal C18B (SIM1)",
                "model": "Internal C18B (SIM1)",
                "manufacturer": "CradlePoint Inc.",
                "serial": "357926104637348",
                "port": "Internal 1",
                "reason": "Unplugged",
                "uid": "31f2123c",
                "raw_port": "int1"
              },
              "type": "wan_status_change",
              "alert_type": "modem_wan_unplugged"
            },
            "router": 4701864,
            "type": "modem_wan_unplugged",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for reboot_status_change alerts
    •    
          {
              "data": [
                {
                  "account": 1350624,
                  "created_at": "2025-03-03T12:10:31.944336+00:00",
                  "created_at_timeuuid": "810fad9e-f828-11ef-9b91-42855bc023f3",
                  "detected_at": "2025-03-03T12:09:14.483080+00:00",
                  "friendly_info": "The device has been rebooted.",
                  "info": {
                    "time": [
                      "2025-03-03 12:09:14",
                      "UTC"
                    ],
                    "reason": "",
                    "type": "reboot_status_change"
                  },
                  "router": 4700133,
                  "type": "reboot_status_change",
                  "router_details": {
                    "name": "E3000-451",
                    "description": null,
                    "mac": "00:30:44:69:54:51",
                    "serial_number": "WB2236RA009523",
                    "asset_id": null,
                    "custom1": null,
                    "custom2": null
                  }
                }
              ],
              "meta": {
                "record_type": "alert",
                "record_version": "1.0.0",
                "deprecated": false
              }
            } 
        
    • Example payload for sim_door_event ("SIM Door Event") alerts
    •    
      {
          "data": [
              {
                  "account": 000000,
                  "created_at": "2022-10-04T21:39:57.994956+00:00",
                  "created_at_timeuuid": "17af85f8-442d-11ed-8ea1-de09384c864a",
                  "detected_at": "2022-10-04T21:39:57.953508+00:00",
                  "friendly_info": "SIM door changed state to \"open\".",
                  "info": {
                      "time": [
                          "2022-10-04 21:39:57",
                          "UTC"
                      ],
                      "value": "open",
                      "type": "sim_door_event"
                  },
                  "router": 0000000,
                  "type": "sim_door_event",
                  "router_details": {
                      "name": "E3000-d32",
                      "description": null,
                      "mac": "00:00:00:00:00:00",
                      "serial_number": "WB000000000000",
                      "asset_id": null,
                      "custom1": null,
                      "custom2": null
                  }
              }
          ],
          "meta": {
              "record_type": "alert",
              "record_version": "1.0.0",
              "deprecated": false
          }
      }  
        
    • Example payload for sustained_system_overload ("System Overload") alerts
    •         
          {
              "data": [
                  {
                      "account": 000000,
                      "created_at": "2022-10-04T22:05:32.724350+00:00",
                      "created_at_timeuuid": "aa74a4ec-4430-11ed-b331-de09384c864a",
                      "detected_at": "2022-10-04T22:05:32.682391+00:00",
                      "friendly_info": "System reached overload 100 consecutive times with Overload threshold:5 CPU threshold:5 and Packet Loss threshold:5",
                      "info": {
                          "time": [
                              "2022-10-04 22:05:32",
                              "UTC"
                          ],
                          "overload_threshold": 5,
                          "cpu_threshold": 5,
                          "packet_loss_threshold": 5,
                          "sustained_overload_counter": 100,
                          "type": "sustained_system_overload"
                      },
                      "router": 0000000,
                      "type": "sustained_system_overload",
                      "router_details": {
                          "name": "E3000-d32",
                          "description": null,
                          "mac": "00:00:00:00:00:00",
                          "serial_number": "WB000000000000",
                          "asset_id": null,
                          "custom1": null,
                          "custom2": null
                      }
                  }
              ],
              "meta": {
                  "record_type": "alert",
                  "record_version": "1.0.0",
                  "deprecated": false
              }
          }  
            
    • Example payload for thermal_exceeds_limit ("Temperature Limit Exceeded") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-05T04:32:38.838086+00:00",
            "created_at_timeuuid": "dea3d8ba-f97a-11ef-bcbb-4e19ecb649c4",
            "detected_at": "2025-03-05T04:32:15.241303+00:00",
            "friendly_info": "The temperature of the device reached 56°C which exceeded the limit of 19°C.",
            "info": {
              "time": [
                "2025-03-05 04:32:15",
                "UTC"
              ],
              "limit": 19,
              "current": 56,
              "modem": false,
              "type": "thermal_exceeds_limit"
            },
            "router": 4701864,
            "type": "thermal_exceeds_limit",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for wan_service_type ("WAN Service Type") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-05T07:03:08.897092+00:00",
            "created_at_timeuuid": "e4f980a8-f98f-11ef-b335-1a3425fd4f74",
            "detected_at": "2025-03-05T07:03:08.904922+00:00",
            "friendly_info": "The wwan-admin:2_4G-1 service type has changed to WiFi.",
            "info": {
              "from": null,
              "to": "WiFi",
              "interface_name": "wwan-admin:2_4G-1"
            },
            "router": 4701864,
            "type": "wan_service_type",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for wifi_client_state_change ("Wi-Fi Client State Changed") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-12T05:33:33.714548+00:00",
            "created_at_timeuuid": "8a01fc8a-ff03-11ef-8b28-6ea6e3d2f326",
            "detected_at": "2025-03-12T05:33:34.494541+00:00",
            "friendly_info": "WiFi client \"66:da:40:5d:ff:d4\" changed state to \"connected\".",
            "info": {
              "time": [
                "2025-03-12 05:33:34",
                "UTC"
              ],
              "state": "connected",
              "mac": "66:da:40:5d:ff:d4",
              "ssid": "E3000-451-5g",
              "radio": 2,
              "type": "wifi_client_state_change"
            },
            "router": 4701864,
            "type": "wifi_client_state_change",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
      
        
    • Example payload for wwan_connected ("WiFi as WAN Connected") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-17T07:05:58.496740+00:00",
            "created_at_timeuuid": "47055ae8-02fe-11f0-a3f7-1677a19f93df",
            "detected_at": "2025-03-17T07:05:30.340941+00:00",
            "friendly_info": "The WiFi as WAN on SSID Public-c3c has connected to the network.",
            "info": {
              "time": [
                "2025-03-17 07:05:30",
                "UTC"
              ],
              "history": [],
              "status": "connected",
              "info": {
                "type": "wwan",
                "ssid": "Public-c3c",
                "rssi": -62,
                "reason": "Always On",
                "uid": "06:30:44:4e:3c:3f:2_4G-1"
              },
              "type": "wan_status_change",
              "alert_type": "wwan_connected"
            },
            "router": 4707137,
            "type": "wwan_connected",
            "router_details": {
              "name": "E100-0eb",
              "description": null,
              "mac": "00:30:44:48:F0:EB",
              "serial_number": "MM202600009920",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
      
        
    • Example payload for wwan_disconnected ("WiFi as WAN Disconnected") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-17T07:07:56.556064+00:00",
            "created_at_timeuuid": "8d63c740-02fe-11f0-8f58-aec633b41b5e",
            "detected_at": "2025-03-17T07:07:34.253497+00:00",
            "friendly_info": "The WiFi as WAN on SSID Public-c3c has disconnected from the network.",
            "info": {
              "time": [
                "2025-03-17 07:07:34",
                "UTC"
              ],
              "history": [],
              "status": "disconnected",
              "info": {
                "type": "wwan",
                "ssid": "Public-c3c",
                "rssi": -55,
                "reason": "Unready",
                "uid": "06:30:44:4e:3c:3f:2_4G-1"
              },
              "type": "wan_status_change",
              "alert_type": "wwan_disconnected"
            },
            "router": 4707137,
            "type": "wwan_disconnected",
            "router_details": {
              "name": "E100-0eb",
              "description": null,
              "mac": "00:30:44:48:F0:EB",
              "serial_number": "MM202600009920",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
      
        
    • Example payload for wwan_network_available ("WiFi as WAN Network Available") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-05T07:03:13.657043+00:00",
            "created_at_timeuuid": "e7cfd03e-f98f-11ef-95bf-b2460987fcac",
            "detected_at": "2025-03-05T07:02:52.670788+00:00",
            "friendly_info": "WiFi as WAN has detected the wireless network with SSID admin.",
            "info": {
              "time": [
                "2025-03-05 07:02:52",
                "UTC"
              ],
              "history": [],
              "status": "plugged",
              "info": {
                "type": "wwan",
                "ssid": "admin",
                "rssi": 0,
                "reason": "Plugged",
                "uid": "admin:2_4G-1"
              },
              "type": "wan_status_change",
              "alert_type": "wwan_network_available"
            },
            "router": 4701864,
            "type": "wwan_network_available",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for wwan_network_unavailable ("WiFi as WAN Network Unavailable") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-05T07:08:31.373506+00:00",
            "created_at_timeuuid": "a52f7f94-f990-11ef-84ac-dabe84c736bc",
            "detected_at": "2025-03-05T07:08:05.168584+00:00",
            "friendly_info": "WiFi as WAN has lost detection of the wireless network SSID admin.",
            "info": {
              "time": [
                "2025-03-05 07:08:05",
                "UTC"
              ],
              "history": [],
              "status": "unplugged",
              "info": {
                "type": "wwan",
                "ssid": "admin",
                "rssi": 0,
                "reason": "Unplugged",
                "uid": "admin:2_4G-1"
              },
              "type": "wan_status_change",
              "alert_type": "wwan_network_unavailable"
            },
            "router": 4701864,
            "type": "wwan_network_unavailable",
            "router_details": {
              "name": "E3000-451",
              "description": null,
              "mac": "00:30:44:69:54:51",
              "serial_number": "WB2236RA009523",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
        
    • Example payload for wwan_standby ("WiFi as WAN Standby") alerts
    •    
      {
        "data": [
          {
            "account": 1297836,
            "created_at": "2025-03-17T07:15:28.565875+00:00",
            "created_at_timeuuid": "9acf007e-02ff-11f0-815b-3e257f6f5f6d",
            "detected_at": "2025-03-17T07:15:17.902834+00:00",
            "friendly_info": "The WiFi as WAN on SSID Public-c3c has gone to standby.",
            "info": {
              "time": [
                "2025-03-17 07:15:17",
                "UTC"
              ],
              "history": [],
              "status": "standby",
              "info": {
                "type": "wwan",
                "ssid": "Public-c3c",
                "rssi": -95,
                "reason": "Standby",
                "uid": "06:30:44:4e:3c:3f:2_4G-1"
              },
              "type": "wan_status_change",
              "alert_type": "wwan_standby"
            },
            "router": 4707137,
            "type": "wwan_standby",
            "router_details": {
              "name": "E100-0eb",
              "description": null,
              "mac": "00:30:44:48:F0:EB",
              "serial_number": "MM202600009920",
              "asset_id": null,
              "custom1": null,
              "custom2": null
            }
          }
        ],
        "meta": {
          "record_type": "alert",
          "record_version": "1.0.0",
          "deprecated": false
        }
      }
      
        

    Important: The following examples are not intended for production use and are meant only as guidelines.

    Python Webhook Example

    import hmac
    def lambda_handler(event, context):
        body = event["body"] or " "
        headers = event["headers"]
        ret = 200
        secret = "__super secret__"
        h = hmac.new(secret.encode("utf-8"), body.encode("utf-8"), "sha256")
        signature = h.hexdigest()
        if signature != headers["x-cp-signature"]:
            ret = 403
        else:
            ret = 200   
        return {
            'statusCode': ret
        }
    

    Node JS/Express Webhook Example

    const express = require( 'express' );
    const app = express();
    
    const API_SECRET = 'secret';
    
    app.use( express.json( { verify: ( req, res, buffer ) => { req.rawBody = buffer; } } ) );
    
    app.post( '/', ( req, res ) => {
      const signature = _generateSignature( req.method, req.url, req.headers[ 'x-cp-signature' ], req.rawBody );
      const ret = 200;
    
      if ( signature !== req.headers[ 'x-cp-signature' ] ) {
        ret = 403;
      }
      else {
        ret = 200;
      }
      res.sendStatus(ret);
    } );
    
    app.listen( 9000, () => console.log( 'Node.js server started on port 9000.' ) );
    
    function _generateSignature( method, url, timestamp, body ) {
      const hmac = crypto.createHmac( 'SHA256', API_SECRET );
    
      hmac.update( `${ method.toUpperCase() }${ url }${ timestamp }` );
    
      if ( body ) {
          hmac.update( body );
      }
      return hmac.digest( 'hex' );
    }    
      

    Q&A

    Q) When can a request refer to a nested resource for filtering or field selection?

    A general rule which usually works is this: if a field is NOT a URL by default, then you CANNOT “dive into it” with query parameters. For instance, if you GET https://www.cradlepointecm.com/api/v2/routers/, the “product” field is a URL:

    "product": "https://www.cradlepointecm.com/api/v2/products/2"

    By way of comparison, if you GET https://www.cradlepointecm.com/api/v2/alerts/, the “info” field is not a URL, it's a literal value (which happens to be a nested dict):

    "info": { ... stuff ... }

    So filters and field selection cannot “dive into” the internals of info.

    Q) When does the Hostname Field in the net_devices Endpoint Update?

    To force the hostname field to update, the router must be rebooted after changing it's name.

    To update the net_device hostname first update the router name. The router name is stored on the device under config/system/system_id. After a reboot, the net_device hostname is updated in status/wan/devices. This is where the interface monitor collects the hostname (e.g. status/wan/devices/*/config/hostname). This can only be updated via a reboot.

    Q) What is the best way to get API results into Excel?

    The best way is to page the results in as JSON and convert them using a script.

    Q) How can I use the API to create an uptime report?

    If by “uptime” you mean “time the device has been connected to NetCloud Manager (NCM),” then this is very close:

    https://www.cradlepointecm.com/api/v2/routers/?state=online&fields=state_updated_at

    This shows all the devices currently online and the time when they came online. Again (with a script) one can subtract that time from the current time to get uptime. You can do the same for state=offline to see when devices were detected as offline by NCM.

    As an alternative , each net_device reports an uptime:

    https://www.cradlepointecm.com/api/v2/net_devices/?connection_state=connected&fields=uptime,name

    Q) Can I use PMIP names to identify network interfaces in custom code?

    Using PMIP names to identify network interfaces in custom code is not recommeneded due to those names changing during modem resets. Use the net_devices endpoint to find the modem's UID and use that instead of relying on PMIP names.

    Server Timeouts when using NetCloud API

    The NetCloud API is intended to serve queries that can be fulfilled in a reasonable, synchronous, web-request time frame. A “reasonable” amount of time in this context is up to ~10 seconds per query. When working with large data sets that might take longer than 10 seconds to retrieve, your queries may encounter a 408 (Response Timeout), 504 (Gateway Timeout), or a 524 (Cloudflare Timeout) response that prevents you from receiving the expected response.

    Any v2 query could result in a timeout error due to unknown issues occurring on remote servers. These errors represent a transient, response-time issue. When timeout errors occur, your first response should be to retry the query.

    408 or 504 errors are much more likely to occur on a long-running query than a short query. You can prevent server timeouts for your queries by limiting the scope of your queries, thus reducing the amount of time to execute.

    For example, if a query to the alerts endpoint for a 90-day date/time window is timing out, try 90 individual queries, each for a 1-day time window. If a query across 280,000 routers is timing out, try querying a smaller subset of those routers at a time. If a query potentially scans through millions of alerts records, try restricting the arguments so that the maximum dataset contains substantially less than a million alerts.

    Filtering

    Filter Syntax:

    Multiple filters can be provided. Results will match all of the filters.

    Generic Filters

    fieldname=value Exact match
    fieldname__in=[value_1, value_2,..., value_n] Match any from a list

    Examples:

    Return all devices in groups 5, 6 or 7 which are offline:

    GET https://www.cradlepointecm.com/api/v2/routers/?group__in=5,6,7&state=offline

    Values for datetime and timestamp fields in response bodies may contain plus signs ("+"). These plus signs must be replaced with their html encoding, "%2b", when used as filter values.
    For example, the timestamp value "2015-08-10T16:19:31.784055+00:00" must be changed to "2015-08-10T16:19:31.784055%2b00:00" or the value will not work as expected when used as a filter.

    Partial Result Sets

    A partial result set is when only a subset of the available fields are asked for in a request. The syntax for requesting a subset of fields is as follows.

    fields=field_1,field_2,...,field_n Return only the fields listed

    Examples:

    Return only the name, state, group and MAC fields for all devices in an account:

    GET https://www.cradlepointecm.com/api/v2/routers/?fields=name,state,group,mac

    Expands

    Expanding is when related objects are asked for in request. Only a subset of related objects allow expands. The syntax.

    Expandable fields are fields that contain objects as values and the object's fields/values can be returned, or "expanded."

    NetCloud API fields which are expandable typically include "account", "router",

    expands=field_1,field_2,...,field_n Return related data of the fields listed

    Examples:

    Return all devices, as well as the related objects account and group:

    GET https://www.cradlepointecm.com/api/v2/routers/?expand=account,group

    Paging

    When getting a list you can request a slice with the paging parameters: 'offset' and 'limit'.

    GET https://www.cradlepointecm.com/api/v2/routers/?offset=count&limit=count

    Any time a list is returned the values used for offset and limit are returned in the meta portion of the reply. Note that most resources have a max limit of 500. To page the whole list you need to increment the offset. So to get the next 50 devices:

    Examples:

    import requests
    
    headers = {
        'X-CP-API-ID': '…',
        'X-CP-API-KEY': '…',
        'X-ECM-API-ID': '…',
        'X-ECM-API-KEY': '…',
        'Content-Type': 'application/json',
        'Accept': '*/*'
    }
    
    result = []
    #Get next 50 devices
    url = 'https://www.cradlepointecm.com/api/v2/routers/?offset=50&limit=50'
    
        #loop to get all the data
        while url != None:
    
            req = requests.get(url, headers=headers)
            alert_data = req.json()
            result.append(alert_data)
            meta = alert_data['meta']
            url = meta['next']
          

    Glossary

    • admin: a user named as admin by an account, and who gains certain automatic privileges thereby.
    • authentication: the act of verifying that a request is really coming from the user it claims to be coming from.
    • authorization: the act of checking that a request's user has permission to do what the request is trying to do.
    • CRUD: acronym for create, read, update and delete; the four basic operations on a data resource.
    • DTD: document type definition; a structured document describing the format of a class of structured documents. A DTD specifies data types, defaults and hierarchical structure.

    Device and Group Configuration using NetCloud API

    The following sections describe how to make changes to your device and group configurations using the NetCloud API.

    Use the configuration_managers endpoint to make changes to your device configuration.

    
      https://www.cradlepointecm.com/api/v2/configuration_managers/[id/]
      

    Use the groups endpoint to make changes to your group configurations.

    
      https://www.cradlepointecm.com/api/v2/groups/
      

    Device Configurations

    A configuration manager is an abstract resource for controlling and monitoring configuration sync on a single device. Each device has its own corresponding configuration manager.

    Configuration Manager Schema

    A configuration_managers object contains the following fields.

    
      account         # URL to account that owns the config (readonly)
      actual          # JSON diff of router's actual config (readonly) [1]
      configuration   # JSON diff of individual config (read/write) [1]
      id              # integer ID of this resource (readonly, sortable)
      pending         # JSON diff of pending updates to device (readonly) [1]
      resource_url    # URL to this endpoint (readonly)
      router          # URL to device endpoint (readonly, expandable)
      suspended       # false unless config sync is paused (read/write)
      synched         # true if device config is synched (readonly)
      target          # JSON diff of target config (readonly) [1]
      version_number  # integer count of config changes (readonly)
      
      [1] See the discussion of config diffs in the Appendix of this document.
      

    The account field represents the account the device is associated with. This field is formatted as a URL in responses; the last segment of the path contains the ID of the account. When using the account field with PUT/DELETE requests, or as a filter, only the ID value is required and not the full URL.

    The actual config shows the last diff received from the router. Routers send diffs when they connect to NetCloud Manager (NCM) and whenever the config changes while they are connected. This config is always formatted to match the router's current actual firmware.

    The configuration field shows the individual configuration for the device. The API can be used to change values in the config via PUT or PATCH, see the examples below. This config is formatted to match the device's target firmware (or actual, if there is no target). When the device's target firmware changes, NCM automatically migrates this config to be compatible with the new firmware.

    The id is the identifier for the resource. It sometimes matches the device id, but not necessarily, so do not assume they are the same.

    The pending field is empty unless a device is unsynched. If a device is unsynched, the pending field shows the changes waiting to be synched to the device when it connects or resumes config sync. If the device's actual firmware and target firmware are different, the pending field displays nothing even if there are pending changes. This is because the changes cannot be computed until the device syncs its firmware version. (Comparing configs for different firmware versions is not well-defined.)

    The resource_url is a self-referential link to a configuration_managers record.

    The router is a reference to the device.

    The suspended flag is true if a config sync has been stopped. This happens when the device rejects a configuration change from NCM. If the Configuration Rejected alert is enabled, this event generates an alert with information from the device about why it rejected the config. After fixing the config, sync can be resumed by setting suspended to false via the API (or via the Resume Updates button in the UI).

    The synched flag is true if the device is synched and false if there are pending changes.

    The target config is the result of layering an individual config over the group config. It is the final desired configuration of the device. When the target and actual fields are the same, the device is in sync. This config is always formatted to match the device's target firmware. If the device has no target firmware, it matches the actual firmware.

    The version_number starts at zero and increments any time the target config changes. This is used as part of the sync protocol with the device client. The device stores a copy of the last version_number it synched to in its own config, as ecm.config_version in the device's router tree. When the device sends a config diff to NCM, NCM checks if the device has the latest version_number. If and only if it does, then NCM considers the device to be in-sync and accepts any local changes. If the version numbers do not match, NCM clears the local changes to forces the device to sync. The API shows this number for informational purposes only. It automatically increments any time a change is made via the NCM UI, or the NetCloud API, or a local change is accepted, or if the config is migrated to a different firmware version.

    Allowed HTTP methods are GET, PUT and PATCH. The user must have at least a Full Access User role to make PUT and PATCH requests. Any attempt to PUT or PATCH the config is validated using static validators. The validator checks the format of the config, verifying that the keys are valid and the values conform to the correct types and ranges.

    GET

    Use the GET method on the configuration_managers endpoint to retrieve a device's configuration.

    Possible HTTP status codes for GET requests:

    
      200 Ok            # Success
      401 Unauthorized  # Incorrect or missing API key headers (X-ECM-API-ID, X-ECM-API-KEY, X-CP-API-ID,         
                          or X-CP-API-KEY)
      403 Forbidden     # Invalid URL or resource not visible
      

    Supported filters for GET requests:

    
      Field           Filters   Right-hand side
      =====           =======   ===============
      version_number  =,gt,lt   any non-negative integer
      router          =,in      device ID
      id              =,in      resource ID
      synched         =         true or false
      suspended       =         true or false
      

    Other supported URL parameters:

    
    offset  # index of the first record to return in a recordset (for paging)
    limit   # max number of records to return (for paging)
    fields  # list of fields to return (for partial returns)
    expand  # converts a url field to an object and displays the object's fields (only supported on the account and router fields)
      

    See Format of Examples section for an explanation of the example format.

    GET Example: A Specific Manager

    
      > GET https://www.cradlepointecm.com/api/v2/configuration_manager/123/
      < 200 Ok
      < {
      <     "success": true,
      <     "data": {
      <         "pending" : [
      <            {},
      <            []
      <         ],
      <         "account" : "https://www.cradlepointecm.com/api/v2/accounts/1/",
      <         "target" : [
      <            {
      <               "system" : {
      <                  "logging" : {
      <                     "level" : "debug"
      <                  }
      <               },
      <               "lan" : {
      <                  "00000000-0d93-319d-8220-4a1fb0372b51" : {
      <                     "ip_address" : "192.168.30.1",
      <                     "_id_" : "00000000-0d93-319d-8220-4a1fb0372b51",
      <                     "name" : "LAN0"
      <                  }
      <               },
      <               "ecm" : {
      <                  "config_version" : 18
      <               }
      <            },
      <            []
      <         ],
      <         "actual" : [
      <            {
      <               "ecm" : {
      <                  "config_version" : 18
      <               },
      <               "lan" : {
      <                  "0" : {
      <                     "name" : "LAN0",
      <                     "ip_address" : "192.168.30.1"
      <                  }
      <               },
      <               "system" : {
      <                  "logging" : {
      <                     "level" : "debug"
      <                  }
      <               }
      <            },
      <            []
      <         ],
      <         "resource_url" : "https://www.cradlepointecm.com/api/v2/configuration_managers/1/",
      <         "version_number" : 18,
      <         "router" : "https://www.cradlepointecm.com/api/v2/routers/1/",
      <         "id" : "1",
      <         "synched" : true,
      <         "suspended" : false,
      <         "configuration" : [
      <            {
      <               "system" : {
      <                  "logging" : {
      <                     "level" : "debug"
      <                  }
      <               },
      <               "lan" : {
      <                  "00000000-0d93-319d-8220-4a1fb0372b51" : {
      <                     "name" : "LAN0",
      <                     "ip_address" : "192.168.30.1",
      <                     "_id_" : "00000000-0d93-319d-8220-4a1fb0372b51"
      <                  }
      <               }
      <            },
      <            []
      <         ]
      <     }
      < }
      

    The device is synched in the previous example. This is indicated by the following field values:

    • the pending field is an empty diff ([{}, []])
    • the actual and target fields have the same content, and
    • synched is true

    Note that the target and actual fields are not identical. In the lan section, the target has this:

    
      < "00000000-0d93-319d-8220-4a1fb0372b51" : {
      <	"ip_address" : "192.168.30.1",
      <    "_id_" : "00000000-0d93-319d-8220-4a1fb0372b51",
      <    "name" : "LAN0"
      < }
      

    But the actual has this:

    
      < "0" : {
      <	"name" : "LAN0",
      <    "ip_address" : "192.168.30.1"
      < }
      

    This difference is because the lan array has an _id_ field, and the device and NCM express these kind of arrays differently. This is due to the way the _id_ fields were first introduced into device firmware. NCM can understand both representations, and it recognizes that they are saying the same thing, so it knows the device is actually synched. See the section on _id_ fields for more details.

    Notes on using arrays vs objects when making PATCH requests

    While PATCH requests can use both arrays and objects in their request bodies, there are some notable differences between these data structures that affect how PATCH requests work on data.

    Arrays are ordered based on implicit, zero-based numeric keys where the ordering of data isn't easily ascertained without knowing the ordering in advance. Due to this, when using an array in a PATCH body the entire array is replaced with successful a PATCH request.

    Objects, however, do contain explicit keys. PATCH requests that use objects can specify the index/value pairs to update in the array and thus only update those specified values instead of replacing the entire array.

    For example, PATCHing with a body containing an object like this

    {
     "0": "value for data at position 0",
     "1": "value for data at position 1"
    }
    

    results in an array like this:

    ["value for data at position 0", "value for data at position 1"]
    

    Updating certificate values in configurations

    When updating SCEP certificate values in a configuration through the API, remove the line containing""ca_print": "null"," from your HTTP PATCH request if you're not using MS NDES.

    PUT

    PUT replaces an entire individual config with the given payload. It can also be used to resume the sync on a suspended device.

    As indicated in the schema, only two fields are writable: configuration (the individual config) and suspended. It is not necessary to provide both with PUT. You can PUT just the configuration to change the individual config, or just the suspended field to resume sync. If you include any other field in your PUT request payload, you get a 409 Conflict.

    HTTP status codes:

    
      202 Accepted            # Success
      400 Bad Request         # Invalid config request
      401 Unauthorized        # Incorrect or missing X-ECM-API-ID or X-ECM-API-KEY headers
      403 Forbidden           # Invalid URL or resource not visible
      405 Method Not Allowed  # URL did not include an /<id>/ in the path
      409 Conflict            # Invalid API or config request
      

    You cannot PUT to more than one configuration manager at a time. This is ok:

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/34365/
      

    These are not, and return a 405 Method Not Allowed:

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/?synched=false
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/56/
      

    A 409 Bad Request can mean that the request is trying to set an invalid config, and the problem is something inside the config body. The response includes the validation error. For example:

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/2/
      > {"configuration": [{"foo": "bar"}, []]}
      < 409 Bad Request
      < {
      <    "errors" : [
      <       {
      <          "configuration" : {
      <             "message" : "cannot set foo to bar: invalid path",
      <             "reason" : "invalid path",
      <             "value" : "bar",
      <             "path" : [
      <                "foo"
      <             ]
      <          }
      <       }
      <    ],
      <    "exception" : {
      <       "message" : "bad or missing data",
      <       "type" : "validation"
      <    }
      < }
      

    See here for a complete catalog of config validation errors.

    Other URL parameters:

    
      fields  # list of fields to return (for partial returns)
      

    Because PUT is only supported on one configuration manager at a time, the standard filter and paging options do not apply.

    See here for an explanation of the example format.

    PUT Example: A Simple Config

    This enables GPS in the individual config:

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/17/?fields=configuration
      > {
      >     "configuration": [
      >         {
      >             "system": {
      >                 "gps": {
      >                     "enabled": true
      >                 }
      >             }
      >         },
      >         []
      >     ]
      > }
      < 202 Accepted
      < {
      <     "configuration": [
      <         {
      <             "system": {
      <                 "gps": {
      <                     "enabled": true
      <                 }
      <             }
      <         },
      <         []
      <     ]
      < }
      

    (The fields=configuration URL option is telling NCM to reply with only the configuration field, otherwise it would return the entire config manager object. For brevity, the PUT examples always use this technique.)

    If the request actually changes the config - which is usually the intent - the following changes take place:

    • the target field is updated
    • the version_number field is incremented
    • the synched field is set to false, and
    • the pending field shows the changes that will be (or already have been) sent to sync the device

    If the request does not change the config (meaning it already matches the request payload) then nothing changes.

    Since only system.gps.enabled is set, all other individual config settings will be unassigned. That means they will be determined by the group config. If there is no group config, or if the group config also leaves a setting unassigned, then the default value applies.

    It is important to understand that for PUT, not specifying a config value is equivalent to removing it from the individual config, if it was there. PATCH is different, as discussed below.

    PUT Example: A Complicated Config

    The following example config removes the default Guest LAN and sets up LAN port 4 on a VLAN to pass traffic to the WAN. It does this by performing the following actions:

    1. Removes the default Guest LAN
    2. Moves port 4 from the set of normal LAN ports to a new VLAN named "aleph"
    3. Assigns the aleph VLAN to a new LAN interface named "Aleph LAN"
    4. Adds a new firewall zone for the Aleph LAN
    5. Adds a forwarding rule from the aleph zone to the WAN zone

    The request:

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/2/?fields=version_number
      > {
      >     "configuration": [
      >         {
      >             "lan": {
      >                 "00000001-2a38-3724-a6fa-02dfdfbc129e": {
      >                     "_id_": "00000001-2a38-3724-a6fa-02dfdfbc129e",
      >                     "devices": [
      >                         {
      >                             "type": "ethernet",
      >                             "uid": "aleph"
      >                         }
      >                     ],
      >                     "dhcpcd": {},
      >                     "enabled": true,
      >                     "ip_address": "192.168.20.1",
      >                     "name": "Aleph LAN",
      >                     "netmask": "255.255.255.0"
      >                 }
      >             },
      >             "security": {
      >                 "zfw": {
      >                     "forwardings": {
      >                         "00000004-356d-30f0-962f-bb705dfddfc9": {
      >                             "_id_": "00000004-356d-30f0-962f-bb705dfddfc9",
      >                             "dst_zone_id": "00000002-695c-3d87-95cb-d0ee2029d0b5",
      >                             "enabled": true,
      >                             "filter_policy_id": "00000000-77db-3b20-980e-2de482869073",
      >                             "src_zone_id": "00000005-e091-3d73-80d1-9a51d6143759"
      >                         }
      >                     },
      >                     "zones": {
      >                         "00000005-e091-3d73-80d1-9a51d6143759": {
      >                             "_id_": "00000005-e091-3d73-80d1-9a51d6143759",
      >                             "devices": [
      >                                 {
      >                                     "trigger_field": "config_id",
      >                                     "trigger_group": "lan",
      >                                     "trigger_neg": false,
      >                                     "trigger_predicate": "is",
      >                                     "trigger_value": "00000001-2a38-3724-a6fa-02dfdfbc129e"
      >                                 }
      >                             ],
      >                             "name": "aleph"
      >                         }
      >                     }
      >                 }
      >             },
      >             "vlan": {
      >                 "2": {
      >                     "mode": "lan",
      >                     "ports": [
      >                         {
      >                             "mode": "tagged",
      >                             "port": 4
      >                         }
      >                     ],
      >                     "uid": "aleph",
      >                     "vid": 3
      >                 }
      >             }
      >         },
      >         [
      >             ["vlan", 1, "ports", 3],
      >             ["lan", "00000001-0d93-319d-8220-4a1fb0372b51"]
      >         ]
      >     ]
      > }
      < 202 Accepted
      < {
      <    "version_number" : 29
      < }
      

    The removals are processed by the device first. Removals must refer to elements which exist in the device's default config. Thefollowing elments exist in the default config:

    
      [
        ["vlan", 1, "ports", 3],
          ["lan", "00000001-0d93-319d-8220-4a1fb0372b51"]
      ]
      

    To understand these examples it is necessary to understand what the default config looks like. In this case the device is an MBR1400 router running 5.4.0 firmware. The default vlan array looks like this:

    
      [
          {
             "uid" : "wan",
             "mode" : "wan",
             "vid" : 1,
             "ports" : [
                {
                   "port" : 0,
                   "mode" : "untagged"
                }
             ]
          },
          {
             "mode" : "lan",
             "uid" : "lan",
             "ports" : [
                {
                   "mode" : "untagged",
                   "port" : 1
                },
                {
                   "port" : 2,
                   "mode" : "untagged"
                },
                {
                   "port" : 3,
                   "mode" : "untagged"
                },
                {                          \
                   "port" : 4,              \ This is vlan.1.port.3
                   "mode" : "untagged"      /
                }                          /
             ],
             "vid" : 2
          }
      ]
      

    vlan is an array, and ["vlan", 1, ...] refers to the entry at offset 1. Offsets start at 0, so 1 means the second entry. Within each vlan entry there is another array for the ports. So ["vlan", 1, "ports", 3] means "The port at offset 3 in the vlan at offset 1". In this default config, that is port 4, and it is "untagged". That is what will be removed first.

    The next removal looks very different: ["lan", "00000001-0d93-319d-8220-4a1fb0372b51"]. It is obviously trying to remove something from the default lan array, but is referring to the LAN it wants to remove not by its offset in the array, but by it's unique _id_ field value. "00000001-0d93-319d-8220-4a1fb0372b51" is the _id_ for the Guest LAN, as indicated by the default config, shown here in part:

    
      "lan": [
          {
              "name": "Primary LAN",
              "_id_": 00000000-0d93-319d-8220-4a1fb0372b51"
          },
          {
              "name": "Guest LAN",
              "_id_": 00000001-0d93-319d-8220-4a1fb0372b51"
          }
      ]
      

    If an array contains elements with an _id_ field then removals can refer to them by this instead of using the offset. Whenever a config is generated by the NCM UI, it uses the _id_ in its removals whenever possible.

    After processing the removals, the device applies all the updates in one operation. This part of the config tells it to add a new entry to the vlan array at offset 2:

    
      "vlan": {
          "2": {
              "mode": "lan",
              "ports": [
                  {
                      "mode": "tagged",
                      "port": 4
                  }
              ],
              "uid": "aleph",
              "vid": 3
          }
      }
      

    Notice that the "2" (the key to the dict) is in quotes, like a string, whereas in the removal ["vlan", 1, "ports", 3] the offsets are not quoted. This is not a mistake and is important. If the "2" is not quoted in the updates, then it is not valid JSON and you get a 400 Bad Request in resonse to your PUT.

    Compare adding the vlan entry to adding the lan and security entries. Instead of using a quoted number, these use a UUID as the key. The key value corresponds exactly to the _id_ values inside the entries:

    
      "lan": {
              "00000001-2a38-3724-a6fa-02dfdfbc129e": {
                  "_id_": "00000001-2a38-3724-a6fa-02dfdfbc129e",
                  <...etc...>
      

    This may seem like senseless repitition but it is required.

    When adding an entry to an array which supports _id_ fields, you must provide a UUID or the result is a validation error. The _id_ is necessary to make it clear which entry the update is referring to.

    By now it is probably clear that manually building a configuration is not easy. A better approach is to use the NCM UI to create a configuration to serve as a template and then to modify it as necessary for different devices. A typical workflow might be:

    1. Use the NCM config editor to create a config on one device.
    2. Call GET https://www.cradlepointecm.com/api/v2/configuration_managers/123/ to download the config from the device.
    3. Edit the downloaded copy.
    4. Call PUT https://www.cradlepointecm.com/api/v2/configuration_managers/456/ to upload the edited config to a different device.

    PUT Example: Resume Sync

    To restart the sync cycle on a suspended device after fixing its config:

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/2/?fields=suspended
      > {
      >     "suspended": false
      > }
      < 202 Accepted
      < {
      <    "suspended" : false
      < }
      

    This only works if a device is online. If the device is offline, it stays suspended.

    PUT Example: Clearing the Config

    To wipe the individual config back to defaults, just PUT an empty diff:

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/123/?fields=configuration
      > {
      >     "configuration": [{}, []]
      > }
      < 202 Accepted
      < {
      <     "configuration": [{}, []]
      < }
      

    PUT Example: Manually Suspend Sync

    You can force NCM to stop syncing a device via the API. Why would you stop the syncing of a device? You might not want devices to sync until you are done making and testing configuration changes on a test device. Or you might only want to sync devices at certain times.

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/2/?fields=suspended
      > {
      >     "suspended": true
      > }
      < 202 Accepted
      < {
      <     "suspended" : true
      < }
      

    PATCH

    PATCH also changes the config. The difference between PUT and PATCH is in how they treat the parts of the config that are not mentioned in the request. PUT replaces anything not mentioned with nothing (ie, resets it back to defaults). PATCH leaves it alone.

    For example, the following PUT call resets the entire individual config back to defaults:

    
      PUT https://www.cradlepointecm.com/api/v2/configuration_managers/123/
      {"configuration": [{}, []]}
      

    And this will do nothing at all:

    
      PATCH https://www.cradlepointecm.com/api/v2/configuration_managers/123/
      {"configuration": [{}, []]}
      

    PATCH is the operation to use when you want to adjust an existing config. PUT is what you should use to replace an existing config.

    Note that you can't remove anything with PATCH, you can only add or update changes.

    HTTP status codes:

    
      202 Accepted            # Success
      400 Bad Request         # Invalid config request
      401 Unauthorized        # Incorrect or missing X-ECM-API-ID or X-ECM-API-KEY headers
      403 Forbidden           # Invalid URL or resource not visible
      405 Method Not Allowed  # URL did not include an /<id>/ in the path
      409 Conflict            # Invalid API request
      

    Like PUT, PATCH cannot operate on more than one configuration manager at a time. For this reason it also does not support the URL options for filtering or paging.

    Also like PUT, it returns a 400 Bad Request if it detects an invalid config.

    Unlike PUT, PATCH never returns a payload in its reply. The fields URL option is therefore meaningless to PATCH.

    See the here for an explanation of the example format.

    Notes on using arrays vs objects when making PATCH requests

    While PATCH requests can use both arrays and objects in their request bodies, there are some notable differences between these data structures that affect how PATCH requests work on data.

    Arrays are ordered based on implicit, zero-based numeric keys where the ordering of data isn't easily ascertained without knowing the ordering in advance. Due to this, when using an array in a PATCH body the entire array is replaced with successful a PATCH request.

    Objects, however, do contain explicit keys. PATCH requests that use objects can specify the index/value pairs to update in the array and thus only update those specified values instead of replacing the entire array.

    For example, PATCHing with a body containing an object like this

    {
     "0": "value for data at position 0",
     "1": "value for data at position 1"
    }
    

    results in an array like this:

    ["value for data at position 0", "value for data at position 1"]
    

    PATCH Example: Set Primary LAN IP Address

    Change the IP address of the Primary LAN to 192.168.30.1, leaving the other parts of the diff the same. Note the reply contains the entire diff; in this example it shows that PUT Example 1 to add a third LAN was already done, and the PATCH is an incremental change on top of that:

    
      > PATCH https://www.cradlepointecm.com/api/v2/configuration_managers/1234/
      > {
      >     "configuration": [
      >         {
      >             "lan": {
      >                 "00000000-0d93-319d-8220-4a1fb0372b51": {
      >                     "_id_": "00000000-0d93-319d-8220-4a1fb0372b51",
      >                     "ip_address": "192.168.30.1"
      >                 }
      >             }
      >         },
      >         []
      >     ]
      > }
      < 202 Accepted
      

    This example uses the Primary LAN's _id_ value as the key. When using this approach, you must include the _id_ field itself as part of the request or you will get a validation error:

    
      {
         "exception" : {
            "message" : "invalid literal for int() with base 10: &#39;00000000-0d93-319d-8220-4a1fb0372b51&#39;",
            "type" : "error"
         },
         "errors" : [
            {
               "path" : "https://www.cradlepointecm.com/api/v2/configuration_managers/2/"
            }
         ]
      }
      

    PATCH Example: Insert A LAN

    PATCH supports inserting new array elements:

    
      {
          "configuration": [
              {
                  "lan": {
                      "00000002-2a38-3724-a6fa-02dfdfbc129e": {
                          "_id_": "00000002-2a38-3724-a6fa-02dfdfbc129e",
                          "ip_address": "192.168.40.1",
                          "name": "Gamma",
                          "netmask": "255.255.255.0",
                          "dhcpd": {
                              "enabled": true
                          },
                          "devices": []
                      }
                  }
              },
              []
          ]
      }
      

    Group Configurations

    A group's config is part of the groups resource:

    
      > GET https://www.cradlepointecm.com/api/v2/groups/35/?fields=configuration
      < 200 Ok
      < {
      <    "configuration" : [
      <       {
      <          "system" : {
      <             "logging" : {
      <                "level" : "debug"
      <             }
      <          },
      <          "webfilter" : {
      <             "proxy" : {
      <                "https_filtering" : true
      <             }
      <          }
      <       },
      <       []
      <    ]
      < }
      

    GET, PUT and PATCH work the same for groups as for configuration_managers.

    Use Cases

    The following sections contain examples of how to make various configuration changes using the API.

    Get the pending configuration for a particular device

    If the configuration_manager ID is known:

    
      GET https://www.cradlepointecm.com/api/v2/configuration_managers/1106/?field=pending
      

    If the configuration_manager ID is not known, query the configuration_managers by device ID. The result will be a list of one element, such as:

    
      > GET https://www.cradlepointecm.com/api/v2/configuration_managers/1106/?field=pending
      < 200 Ok
      < {
      <    "data" : [
      <       {
      <          "pending" : [
      <             {
      <                "system" : {
      <                   "logging" : {
      <                      "level" : "debug"
      <                   }
      <                },
      <                "ecm" : {
      <                   "config_version" : 9
      <                }
      <             },
      <             []
      <          ]
      <       }
      <    ],
      <    "meta" : {
      <       "offset" : 0,
      <       "previous" : null,
      <       "next" : null,
      <       "limit" : 20
      <    }
      < }
      

    Get the actual config on all devices on a nightly basis

    Page through the configuration_managers using limit and offset. To associate each result with its device, ask for some unique identifier such as the router.id or router.mac or router.name:

    
      GET https://www.cradlepointecm.com/api/v2/configuration_managers/?fields=actual,router.id,router.mac,router.name&limit=200&offset=0
      GET https://www.cradlepointecm.com/api/v2/configuration_managers/?fields=actual,router.id,router.mac,router.name&limit=200&offset=201
      ... etc ...
      GET https://www.cradlepointecm.com/api/v2/configuration_managers/?fields=actual,router.id,router.mac,router.name&limit=200&offset=12000
      

    Read/modify/write a "golden" config

    
      GET https://www.cradlepointecm.com/api/v2/groups/123/?fields=configuration
      # modify it for group 456
      PUT https://www.cradlepointecm.com/api/v2/groups/456/
      # modify it for group 789
      PUT https://www.cradlepointecm.com/api/v2/groups/789/
      ... etc ...
      

    Change the WiFi SSID and WPA2/PSK Passkey On Specific Routers

    PUT and PATCH require the URL of the configuration_managers ID endpoint and do not support filtering by router.id (or router.mac, router.name, etc):

    
      > PUT https://www.cradlepointecm.com/api/v2/configuration_managers/1234/
      > PATCH https://www.cradlepointecm.com/api/v2/configuration_managers/1234/
      > {
      >     "configuration": [
      >         {
      >             "wlan": {
      >                 "radio": {
      >                     "0": {
      >                         "bss": {
      >                              "0": {
      >                                "ssid": "MBR1400-8c1",
      >                                "wpapsk": "t311-n00ne"
      >                               }
      >                          }
      >                      }
      >                  }
      >              }
      >         },
      >         []
      >     ]
      > }
      < 202 Accepted
      

    Add User

    This and the following examples work the same way with PATCH or PUT as all the previous examples. For brevity, only the payload is shown.

    
      {
          "configuration": [
              {
                  "system": {
                      "pci_dss": true,
                      "users": {
                          "1": {
                              "group": "admin",
                              "password": "SuperDuper1",
                              "username": "super"
                          }
                      }
                  }
              },
              []
          ]
      }
      

    Static IP for Ethernet WAN using WAN rule

    Configuring the static IP on the Ethernet WAN device requires setting the ip_override section of its corresponding WAN rule. The WAN rules changed somewhat with firmware version 6.0. The wan.rules path was replaced with wan.rules2, and the _id_ of the rule dealing with Ethernet WAN also changed as shown in the examples that follow.

    5.0 <= Firmware < 6.0

    
      {
          "configuration": [
              {
                  "wan": {
                      "rules": {
                          "00000001-dea3-3ccd-a78d-e0196084396f": {
                              "_id_": "00000001-dea3-3ccd-a78d-e0196084396f",
                              "ip_mode": "static",
                              "static": {
                                  "dns": {
                                      "0": {
                                          "ip_address": "172.21.21.50"
                                      },
                                      "1": {}
                                  },
                                  "gateway": "172.19.8.1",
                                  "ip_address": "172.19.9.30",
                                  "netmask": "255.255.252.0"
                              }
                          }
                      }
                  }
              },
              []
          ]
      }
      

    Firmware >= 6.0

    Change rules to rules2 and change the _id_ field and key. The dns section is not required like it is in older versions, which will accept the config without DNS but may fail to connect, resulting in a config rollback.

    
      {
          "configuration": [
              {
                  "wan": {
                      "rules2": {
                          "00000000-a81d-3590-93ca-8b1fcfeb8e14": {
                              "_id_": "00000000-a81d-3590-93ca-8b1fcfeb8e14",
                              "ip_mode": "static",
                              "static": {
                                  "ip_address": "172.19.9.30",
                                  "netmask": "255.255.252.0"
                              }
                          }
                      }
                  }
              },
              []
          ]
      }
      

    Setting the APN for modem using LTE defaults WAN rule

    The APN must be set in the WAN rule corresponding to the modem it is for. For example, to set it for an LTE modem, use the WAN rule with _id_ "00000002-dea3-3ccd-a78d-e0196084396f":

    5.0 <= Firmware < 6.0

    
      {
          "configuration": [
              {
                  "wan": {
                      "rules": {
                          "00000002-dea3-3ccd-a78d-e0196084396f": {
                              "_id_": "00000002-dea3-3ccd-a78d-e0196084396f",
                              "modem": {
                                  "apn_mode": "manual",
                                  "manual_apn": "myapn"
                              }
                          }
                      }
                  }
              },
              []
          ]
      }
      

    Firmware >= 6.0

    Change rules to rules2 and change the _id_ field and key.

    
      {
          "configuration": [
              {
                  "wan": {
                      "rules2": {
                          "00000002-a81d-3590-93ca-8b1fcfeb8e14": {
                              "_id_": "00000002-a81d-3590-93ca-8b1fcfeb8e14",
                              "modem": {
                                  "apn_mode": "manual",
                                  "manual_apn": "myapn"
                              }
                          }
                      }
                  }
              },
              []
          ]
      }
      

    Appendix

    Format of Examples

    There are many Rest API clients available on the web or as browser plugins. They all differ slightly but provide the same common elements of method, headers, URL, payload, and status code. Rather than showing the syntax for a particular tool, this document uses the following format for all examples.

    First, examples appear in monospace font. The first character of each line is either > or < and indicates the direction of travel, either client-to-server or server-to-client, respectively:

    
      > = client to server
      < = server to client
      

    The first line is always the method and URL. If there is data to be sent (as in PUT and PATCH), this appears on the following lines going in the same direction. The reply appears on subsequent lines, beginning with the status code and followed by the reply payload (if any). Here's an annotated example, with lines numbered for discussion:

    
      1 > GET https://www.cradlepointecm.com/api/v2/configuration_managers/1/?fields=version_number
      2 < 200 Ok
      3 < {
      4 <     "version_number" : 19,
      5 < }
      

    Line 1 shows the method (GET) and full URL (https://www.cradlepointecm.com/api/v2/configuration_managers/1/?fields=version_number) sent from the client to the server to initiate the request. In this example the URL is asking for a specific object (with ID 1), and specifying that it only wants to see the version_number field (this is known as a "partial result").

    Line 2 shows the status code from the server as 200 Ok.

    Lines 3-5 are the payload of the reply from the server. For readability, the examples always show the payloads as JSON formatted with line breaks and indentations. Not all clients format the reply like this (curl won't, for example, and neither will most browsers unless you install a plugin). The payload from the server will actually be all on one line with no indentation. The meaning is the same.

    The examples do not show the headers required for authentication or content-type, but they are necessary. As described in the general API v2 documentation (the Sample Code section is most succinct), all requests to the API must provide a header each for X-ECM-API-ID, X-ECM-API-KEY, X-CP-API-ID and X-CP-API-KEY to authenticate the client. Also, PUT and PATCH requests require a Content-Type header.

    _id_ Fields

    Many parts of the device configuration are composed of arrays. Most of these lists are treated more like sets than like arrays, where the order of the elements does not matter and elements must be unique from one another in some way. Order does not matter; as long as nothing inserts or removes elements the order remains stable.

    Some of these arrays are pre-populated with entries by default. For example, if you factory reset most devices (but not all!) you will find that they have two LAN entries and maybe five WAN rules.

    In a config diff arrays are always presented as dictionaries. Historically (prior to 5.0) the keys were always string numerals representing the index of the elements. For example:

    
      {
          "lan": {
              "1" : {
                  "ip_address" : "192.168.30.1",
                  "name" : "Office LAN"
              }
          }
      }
      

    This refers to the LAN at index 1 which is the second LAN. In most devices that is the Guest LAN. But not necessarily, if the config has changed from the default. This might be a third LAN inserted before the Guest LAN. It might even be the Primary LAN, if the Guest LAN were somehow re-ordered to come first. This is an aliasing problem, where it is sometimes impossible to tell which element a config diff is referring to just by looking at it. The problem becomes worse when NCM begins to layer configs.

    The solution, introduced in firmware version 5.0, was to add a unique _id_ field to the elements of lists that have default values. The _id_ is a UUID. The lists that support them include the lan, wan.rules and various others, depending on the firmware version and product.

    The following example diff illustrates this by referring to the primary LAN by it's _id_: "00000000-0d93-319d-8220-4a1fb0372b51".

    
      {
          "lan": {
              "00000000-0d93-319d-8220-4a1fb0372b51" : {
                  "ip_address" : "192.168.30.1",
                  "_id_" : "00000000-0d93-319d-8220-4a1fb0372b51",
                  "name" : "LAN0"
              }
          }
      }
      

    For firmware versions 5.0 and greater this is the unambiguous way to refer to these array elements.

    For firmware versions prior to 5.0, these UUID fields are not supported by any arrays, so you must use string numerals to reference their position in the array. The first position is always "0".

    The default elements of these lists (ie, those which populate the list after a factory reset) all have pre-assigned _id_ field values. When adding a new element to such a list, you must provide your own UUID value.

    Here's a list of arrays with elements that use the _id_ field from a recent firmware build (6.1.0) as of this writing:

     
       asavie.tunnels
       certmgmt.certs
       dns.dnsmasq_options
       gre.tunnels
       identities.ip
       identities.mac
       identities.port
       lan
       openvpn.tunnels
       routing.access_list
       routing.bgp.access_list
       routing.bgp.community_list
       routing.prefix_list
       routing.route_map
       routing.tables
       security.app_sets
       security.ips.cat_cfg
       security.ips.sig_cfg
       security.zfw.filter_policies
       security.zfw.forwardings
       security.zfw.zones
       split_dns.domain_lists
       split_dns.servers
       system.gps.connections
       vpn.tunnels
       wan.rules
       wan.rules2
      

    Firmware Versioning And DTDs

    What constitutes a valid configuration? It depends on the firmware version and product. Every version of firmware has a Document Type Definition (DTD) that specifies the configuration-tree structure, the types of the elements, any limits on the range of values of elements, and whether an element must be specified or can be left blank. If a configuration does not conform to the DTD it is invalid.

    NCM checks for valid configs in the API by checking them against the DTD. But even if a config conforms to the DTD it can still be invalid. The devices check for dynamic constraints which can't be expressed in the DTD and may reject a config from NCM because one of these checks fails.

    For example, currently all devices have a check that

    
      if `firewall.remote_admin.enabled` is `true` then either
      'firewall.remote_admin.secure_only` must be `true` or
      `firewall.remote_admin.port` must be provided.
      

    So even though this conforms to the DTD and would be accepted by NCM, the device would reject it:

    
      {
          "firewall": {
              "remote_admin": {
                  "enabled": true,
                  "secure_only": false
              }
          }
      }
      

    The DTD can change from one firmware version to another. This changes what constitutes a valid config. When a device's target firmware changes, NCM automatically attempts to migrate its configuration to make it compatible with the new version.

    The DTD specifies a default value for many fields, including all required fields. As noted elsewhere, it also specifies default elements for some arrays such as lan, wan.rules and firewall.zfw.filter_policies. The default elements can be altered or removed. If they are, a factory reset of the device restores them. In NCM, clearing configs has a similar effect.

    Suspended Sync

    If NCM tries to sync a device to an invalid config, the device rejects it. NCM stops trying to sync the device and marks it as "suspended", as shown in the config_status field of the device's endpoint (eg, https://www.cradlepointecm.com/api/v2/routers/<router-id>).

    To understand why a device was suspended due to an invalid config, check the device's "Configuration Rejected" alert. This alert contains details about why the device rejected the config. The alert information typically references the field(s) that failed their dynamic validation checks. You can access a device's alerts through the NCM ALERTS & LOGS page or via the alerts endpoint.

    Once the problem is identified, the configuration should be changed to remove the error.

    Finally, to resume sync from the API, do a PUT with the suspended field set to False:

    
      PUT https://www.cradlepointecm.com/api/v2/configuration_managers/1234/
      {
          "suspended": false
      }
      

    Diffs

    A configuration diff describes how the configuration differs from the default for that firmware version. It is a list of two elements. The first element is called the update dictionary. The second element is called the removal list.

    A diff is like a UNIX patch. It can be applied to an existing configuration. When applied, every path in the removals list is removed in the specified order. Then, every key/value pair in the update dictionary is applied. The update tries to maintain existing elements, and only update exactly what is specified.

    For example, suppose a configuration looks like this:

    
      {
          "a": {
              "b": 1,
              "c": 2
          },
          "d": {
              "e": "hi",
              "f": "there"
          }
      }
      

    And the diff being applied looks like this:

    
      [
          {
              "a": {
                  "d": 4,
                  "c": 3
              }
          },
          [
              ["d", "e"]
          ]
      ]
      

    When applied, the diff will first remove element d.e, then, in no particular order, it will change element a.c and insert element a.d. Element a.b and d.f will be left as they are:

    
      {
          "a": {
              "d": 4,
              "c": 3,
              "b": 1
          },
          "d": {
              "f": "there"
          }
      }
      

    If a path in the removal list does not exist in the configuration, this is an error. If an element in the update dictionary is not described by the firmware's Document Type Definition (DTD), or if it is of the wrong type, that is also an error.

    An empty configuration diff looks like this:

    
      [{}, []]
      

    Group/Individual Layering

    Suppose the device is put into a group, and the group has a configuration like this:

    
      # Group config
      {
          "a": {
              "b": 1
              "c": 2
          }
      }
      

    If you GET the device's configuration, it will look exactly like that. Now suppose you PATCH the following to the device's configuration:

    
      # Patch to config
      {
          "a": {
              "b": 3,
              "d": 4
          }
      }
      

    NCM will save this as the device's individual configuration and update the target by layering it over the group. Now if you GET the device's configuration it will look like this:

    
      # Target config
      {
          "a": {
              "b": 3,
              "c": 2,
              "d": 4
          }
      }
      

    NCM changed a.b and inserted a.d. It left a.c alone, because the diff didn't mention it.

    What would happen if you then changed your mind and PUT with an empty config to the device’s configuration endpoint? NCM would clear the individual configuration, but the group configuration would stay the same, so the device's target configuration would go back to just being the group configuration:

    
      # Target config if the individual configuration is cleared
      {
          "a": {
              "b": 1
              "c": 2
          }
      }
      

    What if instead you removed the device from the group? Then only the individual configuration would remain:

    
      # Target config if removed from group
      {
          "a": {
              "b": 3,
              "d": 4
          }
      }
      

    NCM removed a.c from the target configuration, because a.c came from the group configuration.

    Passwords

    If you GET a config that has non-default passwords, the values are not shown. Instead, you see "*":

    
      > GET https://www.cradlepointecm.com/api/v2/configuration_managers/2/?fields=configuration
      < 200 Ok
      < {
      <    "configuration" : [
      <       {
      <          "wlan" : {
      <             "radio" : {
      <                "0" : {
      <                   "bss" : {
      <                      "0" : {
      <                         "wpapsk" : "*"
      <                      }
      <                   }
      <                }
      <             }
      <          }
      <       },
      <       []
      <    ]
      < }
      

    You can still set passwords through the API by sending them as cleartext:

    
      PATCH https://www.cradlepointecm.com/api/v2/configuration_managers/
      > {
      >    "configuration" : [
      >       {
      >          "wlan" : {
      >             "radio" : {
      >                "0" : {
      >                   "bss" : {
      >                      "0" : {
      >                         "radius0nasid" : null,
      >                         "wpapsk" : "2secret4Usorry"
      >                      }
      >                   }
      >                }
      >             }
      >          }
      >       },
      >       []
      >    ]
      > }
      < 202 Accepted
      

    They will be automatically encrypted.

    Validation Errors

    An "invalid path" error is reported anytime a diff refers to something that does not exist in the DTD. It does not matter if the reference is in the updates or the removals. For instance, both updates and removals are invalid here:

    [
          {
              "foo": "bar"
          },
          [
              ["baz", 6]
          ]
      ]
      

    Other errors are due to a wrong type or value:

    
      empty dict                                    # array can't be an empty dictionary
      not a dict                                    # struct must be dictionary
      invalid id                                    # _id_ not a UUID
      not a string
      url must have "http://" or "https://" prefix
      invalid url
      invalid ip address
      invalid ip address or dns name
      not a float type
      invalid mac address
      invalid ipv6 address
      too large
      negative invalid                              # ipv6_prefixlen must be >= 0
      not an integer
      invalid subnet mask
      invalid ipv4 address
      invalid ip address
      invalid option                                # select value must be from the list
      too large (max=n)
      number precision exceeded (max bits=n)        # u8, s8, u16, etc only allow 8 or 16 bits, etc
      too small(min=n)
      not a boolean
      bad array index
      not a list or dict                            # array must be a dict or list
      too short (min length=n)
      incorrect padding                             # encrypted password is corrupted
      too long (max length=n)
      invalid dns name
      

    Config Rollback

    Sometimes the device validates and applies a config, but is unable to connect to the WAN with the new settings. To protect against this situation, all firmware versions support a config rollback feature. After applying a config from NCM, if the device cannot contact NCM within 15 minutes it "undoes" the config change and reverts to the previous working version. When it reconnects to NCM after a rollback it informs NCM and config sync on the device is suspended.

    Differences From v1

    Sample v1 resource:

    
      "account" : "/api/v1/accounts/1/",
      "actual" : "/api/v1/configuration_managers/2/actual/",
      "configuration" : "/api/v1/configuration_managers/2/configuration/",
      "id" : "2",
      "lock" : "unlocked",
      "pending" : "/api/v1/configuration_managers/2/pending/",
      "pending_patch" : null,
      "resource_uri" : "/api/v1/configuration_managers/2/",
      "router" : "/api/v1/routers/2/",
      "suspended" : false,
      "synched" : true,
      "target" : "/api/v1/configuration_managers/2/target/",
      "version_number" : 83
      

    Sample v2 resource:

    
      "account" : "https://www.cradlepointecm.com/api/v2/accounts/1/",
      "actual" : [{}, []],
      "configuration" : [{}, []],
      "id" : "1108",
      "pending" : [{}, []],
      "resource_url" : "https://www.cradlepointecm.com/api/v2/configuration_managers/1108/",
      "router" : "https://www.cradlepointecm.com/api/v2/routers/1108/",
      "suspended" : false,
      "synched" : true,
      "target" : [{}, []],
      "version_number" : 0
      

    *Notable differences:

    • The fields which contain configuration diffs (configuration, actual, target and pending) are no longer URLs. They are contained right in the resource.
    • The pending_patch field has been removed. The same information is available in pending.
    • resource_uri has been renamed resource_url and is a full URL.
    • The account and router fields are full URLs.
    • The routers resource does not have a URL link to the corresponding configuration_managers. However, you can still find the corresponding configuration_manager by querying as in "Change the WiFi SSID and WPA2/PSK Passkey On Specific Routers" example

    Zscaler Configurations

    Zscaler is a cloud-based filtering and security policy application that can be configured on Cradlepoint devices. More details can be found at Zscaler Internet Security

    Zscaler Example Code

      
      ###Zscale Username / Password
      {
         "configuration": [
            {
            "dns": {"force_redir": true},
            "webfilter": {
               "cloudservice": "zsis",
           "zsis": {
           "dyndns": {"password": "password1", "user_name": "username1"}
             }
             },
             []
         ]
      }
      

    Hardware Requirements

    • Cradlepoint AER 2200
    • ZScaler service account

    Firmware Version

    • The firmware version used for the preparation of this document was NCOS 7.2.70