# One API. One token. Every endpoint.

Bearer token auth, OpenAPI specs, cursor pagination, and JSON:API responses. The modern way to build on NetCloud Manager.

[Browse Endpoints](/developer/api)

```
# Authenticate once, access everything
curl -H "Authorization: Bearer $TOKEN" \
  "https://api.cradlepointecm.com/api/v3/routers/"

# Same token, different endpoint
curl -H "Authorization: Bearer $TOKEN" \
  "https://api.cradlepointecm.com/api/v3/subscriptions/"
```

New to v3? Start with the two-minute quickstart.

[Jump to Quickstart ↓](#quickstart)

## Why v3

#### API v2

- ✕ Four separate API key headers
- ✕ Offset-based pagination
- ✕ Custom response format
- ✕ No OpenAPI spec
- ✕ Single-page docs, no deep links

#### API v3 (GA)

- ✓ Single Bearer token
- ✓ Cursor-based pagination
- ✓ JSON:API response format
- ✓ OpenAPI 3.0 specs
- ✓ Per-endpoint docs with Try It

## First API call in 2 minutes

#### 1. Get your Bearer token

In NCM, go to **Tools → NetCloud API** and generate a v3 token.

#### 2. Set it as a variable

Set your token as an environment variable so every request can reuse it.

#### 3. Make a request

Call any endpoint with the Bearer header — that's the whole flow.

```
# 2. Set your token
export TOKEN="your_bearer_token"

# 3. Make a request
curl -H "Authorization: Bearer $TOKEN" \
  https://api.cradlepointecm.com/api/v3/routers/

# Base URL
https://api.cradlepointecm.com/api/v3/
```

## JSON:API everywhere

Every v3 endpoint returns consistent, predictable responses.

#### Pagination

Cursor-based with `page[after]`, `page[before]`, and `page[size]`. No more offset math.

```
{
  "data": [...],
  "links": {
    "next": "?page[after]=eyJpZCI6MTIzfQ",
    "prev": "?page[before]=eyJpZCI6MTAwfQ"
  },
  "meta": { "total": 1847 }
}
```

#### Filtering

Consistent `filter[field]` query parameters across all endpoints.

```
# Filter by state
GET /api/v3/routers/?filter[state]=online

# Filter by time range
GET /api/v3/subscriptions/?filter[end_time]=2026-12-31T00:00:00Z
```

#### Authentication

One header. Every request. That's it.

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

#### Content Type

All requests and responses use the JSON:API media type.

```
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
```

## Moving from v2 to v3

What changes, what stays the same.

|  | API v2 | API v3 |
| --- | --- | --- |
| Base URL | www.cradlepointecm.com/api/v2/ | api.cradlepointecm.com/api/v3/ |
| Auth | 4 headers: X-CP-API-ID, X-CP-API-KEY, X-ECM-API-ID, X-ECM-API-KEY | Authorization: Bearer  |
| Pagination | ?limit=20&offset=40 | ?page[size]=20&page[after]=cursor |
| Filtering | ?state=online&group__in=1,2,3 | ?filter[state]=online |
| Response format | Custom JSON with meta.next URLs | JSON:API with data , links , meta |
| Spec format | Swagger 1.2 / none | OpenAPI 3.0 |
| IDs | Sequential integers | ULIDs (string) |

## v3 migration progress

#### Available in v3

Endpoints available in v3 today:

- subscriptions
- users
- private_cellular_networks
- private_cellular_cores
- private_cellular_sims
- private_cellular_radios
- private_cellular_radio_groups
- private_cellular_radio_statuses
- exchange_resources
- exchange_sites

#### Coming to v3

High-traffic v2 endpoints being migrated next:

- net_devices
- net_device_metrics
- locations
- net_device_usage_samples
- net_device_health
- router_alerts
- firmwares
- configuration_managers
- alerts
- groups

The full v3 reference covers every available endpoint with schemas and a live request client.

[Browse all v3 endpoints →](/developer/api)
