# Build on the network. Programmatically.

Manage routers, orchestrate fleets, and automate network operations with the NCM API — from a single device to thousands.

**40+**
API Endpoints

**v2 & v3**
API Versions

**REST**
Architecture

**Webhooks**
Real-time Events

## From zero to API call in 3 steps

No external docs required. Everything you need is right here.

### 1. Get your API credentials

Log into [NetCloud Manager](https://accounts.cradlepointecm.com), navigate to **Tools &rarr; NetCloud API**, and generate your API keys.

**v3 (recommended):** you'll get a Bearer token.
**v2 (legacy):** you'll get CP API ID/Key and ECM API ID/Key pairs.

### 2. Make your first request

Use API v3 with your Bearer token. Same call in three languages:

 
```
# cURL
curl -H "Authorization: Bearer YOUR_TOKEN" \
     "https://api.cradlepointecm.com/api/v3/routers/"
```
 

 
```
# Python
import requests

headers = {"Authorization": "Bearer YOUR_TOKEN"}
resp = requests.get(
    "https://api.cradlepointecm.com/api/v3/routers/",
    headers=headers
)
for r in resp.json()["data"]:
    print(r["name"], r["state"])
```
 

 
```
// JavaScript
const resp = await fetch(
  "https://api.cradlepointecm.com/api/v3/routers/",
  { headers: { "Authorization": `Bearer ${TOKEN}` } }
);
const { data } = await resp.json();
data.forEach(r => console.log(r.name, r.state));
```
 

### 3. See the response

A successful response returns your routers as JSON:

 
```
{
  "data": [
    {
      "id": "123456",
      "name": "HQ-Router-01",
      "state": "online",
      "model": "E3000",
      "group": "Headquarters",
      "firmware_version": "7.22.12",
      "ip_address": "10.0.1.1"
    }
  ],
  "meta": { "next": "/api/v3/routers/?cursor=abc123" }
}
```
 

That's it. You're in. Now explore the full API.

## Two API layers, one platform

Device-level control and fleet orchestration across v2 and v3. Use v3 for new integrations. Our complete reference covers every endpoint with schemas and a live request client.

[Browse the full API reference →](/developer/api)

## v2 vs v3 at a glance

What changes between the layers, at a glance. Note that the version split is by capability, not preference: most fleet and device endpoints — routers, alerts, device health and telemetry — are **v2 today**, while Private Cellular (5G), eSIM, and NetCloud Exchange are **v3**. Each endpoint in the API reference states its own version and base URL.

|  | API v2 | API v3 |
| --- | --- | --- |
| Authentication and authorization | Cradlepoint API Keys and NetCloud Manager API Keys (application identification) | Single Bearer token (user identification) |
| Documentation specification | Swagger 1.2 | OpenAPI 3.0 |
| Pagination | Offset | Cursor |
| Expandable fields | Yes | No |
| URL | https://www.cradlepointecm.com/api/v2/ — include the trailing slash; without it the call redirects and two calls are attributed to your account | https://api.cradlepointecm.com/api/v3 — no trailing slash on v3 endpoints |
| Content type | application/json | application/vnd.api+json |

## Your language. Your workflow.

Official libraries and tools to accelerate your integration.

## Real-time events. No polling.

Subscribe to network events and react instantly when things change — device state, config drift, alerts, firmware updates. Here's a sample state-change payload:

 
```
{
  "event": "router.state_change",
  "timestamp": "2026-04-23T14:30:00Z",
  "data": {
    "router_id": "123456",
    "name": "Store-42-Primary",
    "previous_state": "online",
    "current_state": "offline",
    "group": "Retail-West",
    "last_seen": "2026-04-23T14:29:47Z"
  }
}
```
 

Webhooks power event-driven automation, AIOps, and live dashboards across your fleet.

[Read the Webhooks guide →](/developer/webhooks)

## What will you build?

From monitoring dashboards to AI-powered network automation.

## Secure by default

TLS 1.2+, scoped tokens, and rate limiting on every request.

#### v3 — Bearer Token

Recommended for all new integrations. Single token, simple header.

 
```
Authorization: Bearer <your_token>
```
 

#### v2 — API Key Pairs

Legacy authentication using two key pairs in custom headers.

 
```
X-CP-API-ID: <cp_api_id>
X-CP-API-KEY: <cp_api_key>
X-ECM-API-ID: <ecm_api_id>
X-ECM-API-KEY: <ecm_api_key>
Content-Type: application/json
```
 

#### Rate limiting

All API requests are rate limited to maintain platform health. Check response headers for your current limits:

 
```
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1682345678
```
 

## Everything else you need
