Skip to main content

API Migration Guide

This guide is for developers who are currently using the Unwired Labs LocationAPI process endpoint and want to migrate to the nRF Cloud Ground Fix API. It covers field mappings for LTE, LTE-CAT-M, NB-IoT, and Wi-Fi location requests.

Key structural differences

Unwired LabsnRF Cloud
EndpointPOST /v2/processPOST /location/ground-fix
Cell radio typeradio at the root level of the requestSeparate field per radio type: lte, ltecatm, nbiot
Wi-Fi APsFlat array under wifi keyFlat array under wifi key
AuthAPI token in request bodyBearer token (Organization Auth Token) in Authorization header
Maximum Wi-Fi APs Limit15None
Maximum Cells Limit7None

Cell location

Unwired Labs uses a single cells array where each object includes a radio field to indicate the network type ("lte", "umts", "gsm", etc.). nRF Cloud uses separate typed arrays — lte, ltecatm, and nbiot — with identical field schemas. Split your cells by radio type when building the nRF Cloud request.

note

nRF Cloud supports LTE, LTE-CAT-M, and NB-IoT only.

LTE field mapping

The same field mapping applies to all three nRF Cloud cell array types: lte, ltecatm, and nbiot.

Unwired Labs fieldnRF Cloud fieldRequired (nRF Cloud)Notes
mccmccYesMobile Country Code — identical
mncmncYesMobile Network Code — identical; nRF Cloud also accepts string format (e.g. "01")
cideciYesCell ID → E-UTRA Cell Identifier
lactacYesLocation Area Code → Tracking Area Code (LTE uses TAC, not LAC)
signalrsrpNoSignal strength in dBm
pscpciNoPhysical Cell ID
taadvNoTiming Advance

LTE-CAT-M and NB-IoT follow the same structure, using ltecatm or nbiot as the top-level array key instead of lte.

Wi-Fi location

Both APIs use a flat array of access point objects under a wifi key. The main differences are field names and a few additional optional fields available in nRF Cloud.

Wi-Fi field mapping

Unwired Labs fieldnRF Cloud fieldRequired (nRF Cloud)Notes
bssidmacAddressYesMAC address of the access point — same data, different field name
(not supported)signalStrengthYesSignal strength detected of the Wi-Fi AP
channelchannelNoWi-Fi channel number — identical
frequencyfrequencyNoChannel frequency in MHz — identical. Mutually exclusive with channel in nRF Cloud
timestamp(not supported)No-
note

nRF Cloud requires a minimum of 2 access points per request.

Example: Wi-Fi request

Unwired Labs:

{
"token": "YOUR_TOKEN",
"wifi": [
{ "bssid": "30:86:2d:c4:29:d0", "channel": 6, "frequency": 2437 },
{ "bssid": "3c:37:86:5d:75:d4", "channel": 11, "frequency": 2462 }
]
}

nRF Cloud:

{
"wifi": [
{ "macAddress": "30:86:2d:c4:29:d0", "channel": 6, "signalStrength": -45 },
{ "macAddress": "3c:37:86:5d:75:d4", "channel": 11, "signalStrength": -50 }
]
}

Cell and Wi-Fi combined requests

nRF Cloud supports requests that include both cell and Wi-Fi data, same as Unwired Labs. Just include both lte (or ltecatm/nbiot) and wifi arrays in the same request body.

Example: Cell and Wi-Fi request

Unwired Labs:

{
"token": "YOUR_TOKEN",
"radio": "lte",
"mcc": 242,
"mnc": 2,
"cells": [
{
"cid": 33903884,
"lac": 2801,
"signal": -66,
"psc": 123,
"ta": 16
}
],
"wifi": [
{ "bssid": "30:86:2d:c4:29:d0", "channel": 6, "frequency": 2437 },
{ "bssid": "3c:37:86:5d:75:d4", "channel": 11, "frequency": 2462 }
]
}

nRF Cloud:

{
"lte": [
{
"mcc": 242,
"mnc": 2,
"eci": 33903884,
"tac": 2801,
"rsrp": -66,
"pci": 123,
"adv": 16
}
],
"wifi": [
{
"macAddress": "30:86:2d:c4:29:d0",
"channel": 6,
"frequency": 2437,
"signalStrength": -45
},
{
"macAddress": "3c:37:86:5d:75:d4",
"channel": 11,
"frequency": 2462,
"signalStrength": -50
}
]
}

Response format

Both APIs return a latitude, longitude, and accuracy estimate. Field names differ:

Unwired Labs fieldnRF Cloud fieldDescription
latlatLatitude
lonlonLongitude
accuracyuncertaintyRadius in meters, 1-sigma probability (68%) that your device is within this circle.
address(not returned)nRF Cloud does not return a geocoded address at this time
(not returned)fulfilledWithMethod used: SCELL, MCELL, or WIFI

Auth

Unwired Labs requires an API token to be included in the request body. nRF Cloud uses Bearer token authentication with an Organization Auth Token, which must be included in the Authorization header of the HTTP request.

Example: Auth

Unwired Labs:

URL: https://us1.unwiredlabs.com/v2/process

HEADERS: NONE

BODY:

{
"token": "YOUR_TOKEN",
"radio": "lte",
"mcc": 242,
"mnc": 2,
"cells": [
{
"cid": 33903884,
"lac": 2801,
"signal": -66,
"psc": 123,
"ta": 16
}
]
}

nRF Cloud:

URL: https://api.nrfcloud.com/v1/organizations/<YOUR_ORG>/projects/<YOUR_PROJECT>/location/ground-fix

HEADERS: Authorization: Bearer <YOUR_OAT_TOKEN>

BODY:

{
"lte": [
{
"mcc": 242,
"mnc": 2,
"eci": 33903884,
"tac": 2801,
"rsrp": -66,
"adv": 16
}
]
}

Example nRF Cloud request

In order to make a request to location services, you need an organization, project, and an OAT. See the details in the Location Services Quickstart Guide to get set up.

curl --request POST \
--url https://api.nrfcloud.com/v1/organizations/<YOUR_ORG>/projects/<YOUR_PROJECT>/location/ground-fix \
--header 'Authorization: Bearer <YOUR_OAT_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"lte": [
{
"mcc": 242,
"mnc": 2,
"eci": 33903884,
"tac": 2801,
"rsrp": -66,
"adv": 16
}
],
"wifi": [
{
"macAddress": "30:86:2d:c4:29:d0",
"channel": 6,
"frequency": 2437,
"signalStrength": -45
},
{
"macAddress": "3c:37:86:5d:75:d4",
"channel": 11,
"frequency": 2462,
"signalStrength": -50
}
]
}'