Location (beta)
Ella Core supports three positioning methods: Cell ID, Enhanced Cell ID (E-CID), and GNSS in standalone mode. The Location API requests a subscriber's location, manages periodic location requests, and provisions the cell positions those estimates are drawn from.
Beta
The Location API is experimental and served under /api/beta. Its paths and payloads may change without notice.
Locate a Subscriber
This path returns a subscriber's current location.
| Method |
Path |
| POST |
/api/beta/location |
Parameters
supi (string): Subscriber identity.
method (string, optional): cell_id, ecid, or gnss. Defaults to cell_id.
mode (string, optional): network_based or ue_assisted for ecid; standalone for gnss. Defaults to every mode supported by method.
measurement_quantities (object, optional): E-CID measurement quantities (TS 38.455, TS 36.455). Only for ecid with mode network_based or omitted.
nr (array of strings, optional): Used when the serving cell is NR. Each entry must be one of cell-ID, sS-RSRP, sS-RSRQ, cSI-RSRP, cSI-RSRQ, angleOfArrivalNR, timingAdvanceNR, or uE-Rx-Tx-Time-Diff. No duplicates allowed.
eutra (array of strings, optional): Used when the serving cell is E-UTRA. Each entry must be one of cell-ID, angleOfArrival, timingAdvanceType1, timingAdvanceType2, rSRP, or rSRQ. No duplicates allowed.
Responses
| Status |
Condition |
200 |
Returns a location estimate. |
404 |
Subscriber not registered, or no estimate. |
504 |
Location request timed out. |
Sample Response
{
"result": {
"locationEstimate": {
"shape": "POINT_UNCERTAINTY_CIRCLE",
"point": {
"lat": 37.7749,
"lon": -122.4194
},
"uncertainty": 150
},
"positioningDataList": [
{
"method": "CELLID",
"mode": "CONVENTIONAL",
"usage": "SUCCESS_RESULTS_USED_TO_GENERATE_LOCATION"
}
],
"ncgi": {
"plmnId": {
"mcc": "001",
"mnc": "01"
},
"nrCellId": "000000010"
}
}
}
Sample Response (ecid)
{
"result": {
"locationEstimate": {
"shape": "POINT_UNCERTAINTY_CIRCLE",
"point": {
"lat": 37.7749,
"lon": -122.4194
},
"uncertainty": 150
},
"positioningDataList": [
{
"method": "CELLID",
"mode": "CONVENTIONAL",
"usage": "SUCCESS_RESULTS_USED_TO_GENERATE_LOCATION"
},
{
"method": "NR_ECID",
"mode": "CONVENTIONAL",
"usage": "UNSUCCESS"
},
{
"method": "NR_ECID",
"mode": "UE_ASSISTED",
"usage": "SUCCESS_RESULTS_NOT_USED"
}
],
"ncgi": {
"plmnId": {
"mcc": "001",
"mnc": "01"
},
"nrCellId": "000000010"
},
"radioMeasurements": [
{
"source": "UE",
"rat": "NR",
"serving": true,
"pci": 180,
"arfcn": 662592,
"arfcnType": "SSB",
"ssRsrp": -84,
"ssRsrq": -11,
"ssbBeams": [
{
"index": 0,
"rsrp": -84,
"rsrq": -11
}
]
},
{
"source": "UE",
"rat": "EUTRA",
"serving": false,
"pci": 148,
"arfcn": 9310,
"rsrp": -98,
"rsrq": -7.5
}
]
}
}
Create a Deferred Location Request
This path starts periodic location reporting for a subscriber (TS 23.273 deferred location request).
| Method |
Path |
| POST |
/api/beta/location/deferred-requests |
Parameters
supi (string): Subscriber identity.
ldr_type (string): One of UE_AVAILABLE, PERIODIC, ENTERING_INTO_AREA, LEAVING_FROM_AREA, BEING_INSIDE_AREA, or MOTION. Only PERIODIC is supported.
periodic_event_info (object):
reporting_amount (integer): Number of reports, 1 to 8639999. Required unless reporting_infinite_ind is true.
reporting_interval (integer): Interval between reports in seconds, 1 to 8639999. reporting_amount x reporting_interval must not exceed 8639999.
reporting_infinite_ind (boolean, optional): Report until 8639999 seconds have elapsed.
reporting_interval_ms (integer, optional): 1 to 999. Not supported; reporting_interval is used.
scheduled_loc_time (string, optional): RFC 3339 time of the first report. Must be in the future.
method (string, optional): cell_id, ecid, or gnss. Defaults to cell_id.
mode (string, optional): network_based or ue_assisted for ecid; standalone for gnss. Defaults to every mode supported by method.
measurement_quantities (object, optional): As in Locate a Subscriber.
Responses
| Status |
Condition |
201 |
Returns the deferred location request. |
400 |
Invalid parameters. |
404 |
Subscriber not registered on this node. |
409 |
The subscriber already has an active deferred location request. |
501 |
ldr_type is not supported. |
503 |
Deferred location requests are unavailable. |
Sample Request
{
"supi": "imsi-001010000000001",
"ldr_type": "PERIODIC",
"periodic_event_info": {
"reporting_amount": 120,
"reporting_interval": 30
},
"method": "ecid",
"mode": "network_based"
}
Sample Response
{
"result": {
"id": "019a2f3c-8d1e-7b2a-9c4f-1e2d3c4b5a69",
"supi": "imsi-001010000000001",
"ldr_type": "PERIODIC",
"periodic_event_info": {
"reporting_amount": 120,
"reporting_interval": 30
},
"method": "ecid",
"mode": "network_based",
"status": "ACTIVE",
"created_at": "2026-10-15T14:00:00Z"
}
}
List Deferred Location Requests
This path returns a paginated list of deferred location requests, newest first.
| Method |
Path |
| GET |
/api/beta/location/deferred-requests |
Query Parameters
| Name |
In |
Type |
Default |
Allowed |
Description |
supi |
query |
str |
|
|
Subscriber identity. |
status |
query |
str |
|
ACTIVE, TERMINATED |
Request status. |
page |
query |
int |
1 |
>= 1 |
Page number. |
per_page |
query |
int |
25 |
1..100 |
Items per page. |
Response Fields
| Field |
Type |
Description |
id |
string |
Request identifier. |
supi |
string |
Subscriber identity. |
ldr_type |
string |
PERIODIC. |
periodic_event_info |
object |
Accepted reporting parameters. |
scheduled_loc_time |
string |
Time of the first report. |
method |
string |
Positioning method. |
mode |
string |
Positioning mode. |
measurement_quantities |
object |
E-CID measurement quantities. |
status |
string |
ACTIVE or TERMINATED. |
termination_cause |
string |
NORMAL_TERMINATION, TERMINATION_BY_UE, or TERMINATION_BY_NETWORK (TS 29.572). |
termination_reason |
string |
ue_deregistered, ue_mobility, positioning_failed, node_restart, or node_shutdown. |
event_report_counter |
integer |
Number of reports produced (TS 29.572). Absent before the first report. |
created_at |
string |
Creation time. |
terminated_at |
string |
Termination time. |
Terminated requests and their reports are deleted 7 days after termination. Each request keeps its 10000 most recent reports.
Sample Response
{
"result": {
"items": [
{
"id": "019a2f3c-8d1e-7b2a-9c4f-1e2d3c4b5a69",
"supi": "imsi-001010000000001",
"ldr_type": "PERIODIC",
"periodic_event_info": {
"reporting_amount": 120,
"reporting_interval": 30
},
"method": "ecid",
"mode": "network_based",
"status": "TERMINATED",
"termination_cause": "TERMINATION_BY_NETWORK",
"termination_reason": "ue_deregistered",
"event_report_counter": 42,
"created_at": "2026-10-15T14:00:00Z",
"terminated_at": "2026-10-15T14:21:03.512Z"
}
],
"page": 1,
"per_page": 25,
"total_count": 1
}
}
Get a Deferred Location Request
This path returns a deferred location request.
| Method |
Path |
| GET |
/api/beta/location/deferred-requests/{id} |
Path Parameters
| Name |
Type |
Description |
id |
string |
Request identifier. |
The response fields are those of List Deferred Location Requests.
Delete a Deferred Location Request
This path stops a deferred location request if it is active, then deletes it and its reports.
| Method |
Path |
| DELETE |
/api/beta/location/deferred-requests/{id} |
Path Parameters
| Name |
Type |
Description |
id |
string |
Request identifier. |
Returns 200 OK on success.
List Location Reports
This path returns the location reports of a deferred location request, oldest first.
| Method |
Path |
| GET |
/api/beta/location/deferred-requests/{id}/reports |
Query Parameters
| Name |
In |
Type |
Default |
Allowed |
Description |
after |
query |
int |
0 |
>= 0 |
Return reports with a greater seq. |
limit |
query |
int |
100 |
1..1000 |
Maximum number of reports. |
Response Fields
| Field |
Type |
Description |
items[].seq |
integer |
Report number, starting at 1. |
items[].reported_at |
string |
Report time. |
items[].location_data |
object |
Location estimate, as returned by Locate a Subscriber. |
next |
integer |
Value to pass as after for the following reports. |
Sample Response
{
"result": {
"items": [
{
"seq": 1,
"reported_at": "2026-10-15T14:00:00.812Z",
"location_data": {
"locationEstimate": {
"shape": "POINT_UNCERTAINTY_CIRCLE",
"point": {
"lat": 37.7749,
"lon": -122.4194
},
"uncertainty": 50
},
"positioningDataList": [
{
"method": "NR_ECID",
"mode": "CONVENTIONAL",
"usage": "SUCCESS_RESULTS_USED_TO_GENERATE_LOCATION"
}
]
}
}
],
"next": 1
}
}
List Cell Positions
This path returns all provisioned cell positions.
| Method |
Path |
| GET |
/api/beta/cell-positions |
Response Fields
| Field |
Type |
Description |
id |
string |
Cell position identifier. |
rat |
string |
nr or eutra. |
mcc |
string |
Mobile Country Code. |
mnc |
string |
Mobile Network Code. |
cell_identity |
string |
Hex cell identity (NCI for NR, ECI for E-UTRA). |
gnb_id |
string |
gNB identifier. |
latitude |
number |
WGS-84 latitude in decimal degrees. |
longitude |
number |
WGS-84 longitude in decimal degrees. |
altitude |
number |
Altitude, in metres. |
uncertainty_semi_major |
number |
Semi-major axis of the uncertainty ellipse, in metres. |
uncertainty_semi_minor |
number |
Semi-minor axis of the uncertainty ellipse, in metres. |
orientation_major |
integer |
Orientation of the semi-major axis, in degrees. |
confidence |
integer |
Confidence, in percent. |
source |
string |
Origin of the record (e.g. provisioned). |
Sample Response
{
"result": [
{
"id": "018f9f3a-4c2e-7bd1-9f21-0a1b2c3d4e5f",
"rat": "nr",
"mcc": "001",
"mnc": "01",
"cell_identity": "000000010",
"latitude": 37.7749,
"longitude": -122.4194,
"source": "provisioned"
}
]
}
Create a Cell Position
This path provisions the geographic position of a cell antenna. Cell ID lookups resolve a subscriber's serving cell to this position.
| Method |
Path |
| POST |
/api/beta/cell-positions |
Parameters
rat (string): nr or eutra.
mcc (string): Mobile Country Code.
mnc (string): Mobile Network Code.
cell_identity (string): Hex cell identity (NCI for NR, ECI for E-UTRA).
gnb_id (string, optional): gNB identifier.
latitude (number): WGS-84 latitude in decimal degrees. Range -90…90.
longitude (number): WGS-84 longitude in decimal degrees. Range -180…180.
altitude (number, optional): Altitude, in metres.
uncertainty_semi_major (number, optional): Semi-major axis of the uncertainty ellipse, in metres.
uncertainty_semi_minor (number, optional): Semi-minor axis of the uncertainty ellipse, in metres.
orientation_major (integer, optional): Orientation of the semi-major axis, in degrees.
confidence (integer, optional): Confidence, in percent.
Sample Request (E-UTRA)
{
"rat": "eutra",
"mcc": "001",
"mnc": "01",
"cell_identity": "0000001",
"latitude": 37.7749,
"longitude": -122.4194
}
Sample Response
{
"result": {
"message": "Cell position created",
"id": "018f9f3a-4c2e-7bd1-9f21-0a1b2c3d4e5f"
}
}
Get a Cell Position
This path returns a provisioned cell position.
| Method |
Path |
| GET |
/api/beta/cell-positions/{id} |
Path Parameters
| Name |
Type |
Description |
id |
string |
Cell position identifier. |
Sample Response
{
"result": {
"id": "018f9f3a-4c2e-7bd1-9f21-0a1b2c3d4e5f",
"rat": "nr",
"mcc": "001",
"mnc": "01",
"cell_identity": "000000010",
"latitude": 37.7749,
"longitude": -122.4194,
"source": "provisioned"
}
}
Update a Cell Position
This path updates a provisioned cell position.
| Method |
Path |
| PUT |
/api/beta/cell-positions/{id} |
Path Parameters
| Name |
Type |
Description |
id |
string |
Cell position identifier. |
Parameters
rat (string): nr or eutra.
mcc (string): Mobile Country Code.
mnc (string): Mobile Network Code.
cell_identity (string): Hex cell identity (NCI for NR, ECI for E-UTRA).
gnb_id (string, optional): gNB identifier.
latitude (number): WGS-84 latitude in decimal degrees. Range -90…90.
longitude (number): WGS-84 longitude in decimal degrees. Range -180…180.
altitude (number, optional): Altitude, in metres.
uncertainty_semi_major (number, optional): Semi-major axis of the uncertainty ellipse, in metres.
uncertainty_semi_minor (number, optional): Semi-minor axis of the uncertainty ellipse, in metres.
orientation_major (integer, optional): Orientation of the semi-major axis, in degrees.
confidence (integer, optional): Confidence, in percent.
Sample Response
{
"result": {
"message": "Cell position updated"
}
}
Delete a Cell Position
This path deletes a provisioned cell position.
| Method |
Path |
| DELETE |
/api/beta/cell-positions/{id} |
Path Parameters
| Name |
Type |
Description |
id |
string |
Cell position identifier. |
Returns 200 OK on success.