API v3
GET /iot/sims/{id}/events
The network log of one IoT SIM over a time range, newest first: authentication results (allowed or refused, with the network's reason), attaches, data sessions starting, detaches with the session's bytes, and location updates. Default range: the last 7 days; at most 31 days. truncated is true when the range held more than 5,000 network rows (narrow the range). Reads are limited to 10 a minute per account.
Addresshttps://api.voicepro.plus/v3/iot/sims/{id}/events
Key permissionread
Fields
| Name | In | Type | |
|---|---|---|---|
| id * | path | string | |
| limit | query | integer | |
| cursor | query | string | next_cursor from the previous page. |
| from | query | string | Start of the range. Default: 7 days before to. |
| to | query | string | End of the range. Default: now. At most 31 days after from. |
| type | query | string | Comma-separated event types to include: authentication, attach, data_session_start, detach, location. Default: all. |
| refused | query | boolean | true: only authentication attempts the network refused. |
* required
Example
curl -X GET "https://api.voicepro.plus/v3/iot/sims/sim_7k2mqqxw4hd3nvbc5rtfz6ya/events?from=2026-10-27T00%3A00%3A00Z&to=2026-10-28T00%3A00%3A00Z" \ -H "Authorization: Bearer vpkey_YOUR_KEY"
Response
{
"object": "list",
"data": [
{
"object": "iot_event",
"time": "2026-10-28T08:52:11Z",
"type": "data_session_start",
"outcome": "allowed",
"reason": null,
"message": null,
"network": {
"name": "Network GB",
"country": "GB",
"mcc": "234",
"mnc": "10"
},
"network_type": "4G",
"imei": "356938035643809",
"ip": "198.51.100.24",
"session_id": "sess_9f2k7m",
"upload_bytes": null,
"download_bytes": null,
"bytes": null,
"location": {
"cell_id": 52011,
"area_code": 1203,
"accuracy_m": 350,
"lat": 51.5072,
"lng": -0.1276
}
}
],
"has_more": true,
"next_cursor": "eyJrIjoiMjAyNi0xMC0yOFQwODo1MjoxMVoifQ"
}Errors
Every error has the same shape: { "error": { "type", "code", "message", "param", "request_id" } }.
missing_api_key401: No Authorization header, or not a Bearer key.
invalid_api_key401: The key is not recognised.
api_key_revoked401: The key was revoked in the portal.
api_key_expired401: The key passed the expiry date set on it.
missing_scope403: The key lacks the scope this endpoint needs; param names the scope.
ip_not_allowed403: The key has an IP allowlist and this request came from elsewhere.
account_not_active403: The workspace is suspended or closed.
invalid_parameter400: A query parameter or body field has a bad value; param names it.
missing_parameter400: A required parameter or field is missing; param names it.
unknown_parameter400: A parameter or field that this endpoint does not accept; param names it.
invalid_json400: The body is not valid JSON.
invalid_cursor400: The cursor is malformed, expired or from a different list.
invalid_time_range400: from or to is not an ISO 8601 date-time, or to is not after from.
range_too_long400: The time range is longer than this endpoint allows (stated in the endpoint).
route_not_found404: No such path in v3.
resource_not_found404: No object with that id on this account.
service_not_enabled404: The account does not have this service (voice trunk, IoT, numbers); param names it.
rate_limited429: Too many requests for this key or for the whole account (the message says which); wait Retry-After seconds.
upstream_unavailable503: A network partner or data service behind this endpoint is unavailable.
network_action_unavailable503: This network action is not switched on for the account yet (for example SIM suspend).
internal_error500: Our fault. Quote the request_id to support.
service_unavailable503: API v3 itself is briefly unavailable (for example a configuration problem on our side); the rest of VoicePro is unaffected. Retry later.