HERE Tracking

HERE Tracking — 159 operation(s) across 115 path(s), OpenAPI 3.0.0 version 2.6.11, harvested verbatim from the HERE developer documentation. HERE Tracking is a cloud product designed to address location tracking problems for a wide range of Location IoT industry verticals. HERE Tracking also includes end-user mobile and web applications that can be used to demonstrate the product.

Operations 159

GET /v2/health Gets service health
GET /v2/version Gets service version
GET /v2/timestamp Gets the current timestamp
POST /v2/token Requests a token for a registered device
POST /v2/ Ingests data and receives a shadow
POST /v3/ Ingests data for a device and receives a shadow
GET /v3/health Gets service health
GET /v3/version Gets service version
POST /v3/batch Ingests data for multiple devices
GET /largedata/v4/health Gets service health
GET /largedata/v4/version Gets service version
POST /largedata/v4 Creates a new data upload
PUT /largedata/v4/{dataId}/parts/{partNumber} Uploads a part of a large data
POST /largedata/v4/{dataId} Completes data upload
DELETE /largedata/v4/{dataId} Deletes large data
GET /largedata/v4/{dataId}/data Gets large data object
GET /largedata/v4/{dataId}/metadata Gets metadata for a large data object
GET /largedata/v4/{dataId}/parts Gets parts information listing for a large data object
GET /largedata/v4/devices/{trackingId}/metadata Gets metadata listing for all large data for a device
GET /registry/v2/health Gets service health
GET /registry/v2/version Gets service version
GET /registry/v2/{appId}/devices Lists all the devices provisioned by a user
POST /registry/v2/{appId}/devices Creates licenses for multiple devices
POST /registry/v2/{appId}/one-device Creates a license for a single physical device
GET /registry/v2/{appId}/licenseCount Gets a number of device licenses provisioned by a user
GET /registry/v2/{jobId}/status Gets the multiple device license request job status
GET /registry/v2/{jobId}/results Gets the multiple device license request job results
PUT /registry/v2/devices/{deviceOrExternalId} Claims a device
GET /registry/v2/devices/{deviceOrExternalId} Gets the trackingId for a device
DELETE /registry/v2/devices/{deviceOrExternalId} Deactivates a device.
GET /registry/v2/{trackingId} Gets the deviceId
DELETE /registry/v2/{trackingId} Unclaims a device
GET /registry/v2/licenses Gets a list of projects along with their license information
GET /registry/v2/features Gets the project features for a project
PATCH /registry/v2/features Updates the project features
POST /registry/v4/resources/{resourceType}/find Gets all resources of a resource type
GET /users/v2/health Gets service health
GET /users/v2/version Gets service version
GET /users/v2/devices Gets all devices claimed by a project
POST /users/v2/login Gets a user access token
POST /users/v2/refresh Gets a renewed user access token
POST /users/v2/tokenExchange Gets a project-scoped user access token
GET /aliases/v2/health Gets service health
GET /aliases/v2/version Gets service version
GET /aliases/v2 Gets all aliases
GET /aliases/v2/{trackingId} Gets all aliases of a device
DELETE /aliases/v2/{trackingId} Deletes all aliases of a device
GET /aliases/v2/{trackingId}/{type} Gets all aliases of a specified type for a device
DELETE /aliases/v2/{trackingId}/{type} Deletes all aliases of a specified type for a device
GET /aliases/v2/trackingId Gets the tracking ID associated with an alias
PUT /aliases/v2/{trackingId}/{type}/{externalId} Creates an alias
DELETE /aliases/v2/{trackingId}/{type}/{externalId} Deletes an alias
PUT /aliases/v2/{trackingId}/batch Creates multiple aliases for a device
GET /metadata/v2/health Gets service health
GET /metadata/v2/version Gets service version
GET /metadata/v2/devices/{trackingId} Gets metadata of a device or a shipment
PUT /metadata/v2/devices/{trackingId} Creates or updates metadata of a device or a shipment
DELETE /metadata/v2/devices/{trackingId} Deletes all metadata of a device or a shipment
POST /metadata/v2/devices/batch Gets a batch of metadata of multiple devices or shipments
GET /metadata/v2/geofences/{geofenceId} Gets metadata of a geofence
PUT /metadata/v2/geofences/{geofenceId} Creates or updates metadata of a geofence
DELETE /metadata/v2/geofences/{geofenceId} Deletes all metadata of a geofence
POST /metadata/v2/geofences/batch Gets a batch of metadata of multiple geofences
GET /metadata/v2/sensorRules/{sensorRuleId} Gets metadata of a sensor rule
PUT /metadata/v2/sensorRules/{sensorRuleId} Creates or updates metadata of a sensor rule
DELETE /metadata/v2/sensorRules/{sensorRuleId} Deletes all metadata of a sensor rule
POST /metadata/v2/sensorRules/batch Gets a batch of metadata for multiple sensor rules
GET /labels/v4/health Gets service health
GET /labels/v4/version Gets service version
GET /labels/v4/{resourceType} Gets all labels of a resource type
GET /labels/v4/{resourceType}/keys Gets all label keys of a resource type
GET /labels/v4/{resourceType}/keys/{key}/values Gets all values of a label
GET /labels/v4/{resourceType}/{resourceId} Gets all labels of a resource
DELETE /labels/v4/{resourceType}/{resourceId} Deletes all labels of a resource
DELETE /labels/v4/{resourceType}/{resourceId}/{key} Deletes all labels of a resource by a label key
PUT /labels/v4/{resourceType}/{resourceId}/{key}/{value} Creates a label for a resource
DELETE /labels/v4/{resourceType}/{resourceId}/{key}/{value} Deletes a label of a resource
PUT /labels/v4/{resourceType}/{resourceId}/batch Creates a set of labels for a resource
GET /associations/v3/health Gets service health
GET /associations/v3/version Gets service version
GET /associations/v3/sensors/{sensorRuleId} Gets all devices associated with a sensor rule
GET /associations/v3/geofences/{geofenceId} Gets all devices associated with a geofence
GET /associations/v3/rules/{ruleId} Gets all devices associated with a rule
PUT /associations/v3/{trackingId}/sensors/{sensorRuleId} Associates a device with a sensor rule
DELETE /associations/v3/{trackingId}/sensors/{sensorRuleId} Disassociates a device and a sensor rule
PUT /associations/v3/{trackingId}/geofences/{geofenceId} Associates a device to a geofence
DELETE /associations/v3/{trackingId}/geofences/{geofenceId} Disassociates a device and a geofence
PUT /associations/v3/{trackingId}/rules/{ruleId} Associates a device to a rule
DELETE /associations/v3/{trackingId}/rules/{ruleId} Disassociates a device and a rule
GET /associations/v3/{trackingId}/sensors Gets sensor rules associated with a device
GET /associations/v3/{trackingId}/geofences Gets geofences associated with a device
GET /associations/v3/{trackingId}/rules Gets rules associated with a device
POST /associations/v3/devices/{trackingId}/batchCreate Associates rules with a device
POST /associations/v3/devices/{trackingId}/batchDelete Disassociates rules from a device
PUT /associations/v3/devices/batchUpdate Updates rules associations for devices
GET /events/v3/health Gets service health
GET /events/v3/version Gets service version
GET /events/v3 Gets event history
GET /events/v3/{trackingId} Gets event history for a device or a shipment
GET /events/v3/statuses Gets the event statuses
GET /events/v3/statuses/deviceCounts Gets the number of devices and shipments in each event state
GET /geofences/v2/health Gets service health
GET /geofences/v2/version Gets service version
POST /geofences/v2 Creates a geofence
GET /geofences/v2 Gets all geofences
DELETE /geofences/v2 Deletes all geofences
GET /geofences/v2/{geofenceId} Gets a single geofence
PUT /geofences/v2/{geofenceId} Updates a single geofence
DELETE /geofences/v2/{geofenceId} Deletes a geofence
POST /geofences/v2/{geofenceId}/poiTraining Trains a POI geofence
POST /geofences/v2/trainingTest Checks if a POI geofence training is possible with the given parameters
GET /locations/v4/health Gets service health
GET /locations/v4/version Gets service version
POST /locations/v4 Creates a location
GET /locations/v4 Gets all locations
DELETE /locations/v4 Deletes all locations
GET /locations/v4/{locationId} Gets a location details
PUT /locations/v4/{locationId} Updates a location details
DELETE /locations/v4/{locationId} Deletes a location
GET /rules/v4/health Gets service health
GET /rules/v4/version Gets service version
POST /rules/v4 Creates a rule
GET /rules/v4 Gets all rules
DELETE /rules/v4 Deletes all rules
GET /rules/v4/{ruleId} Gets a single rule
PUT /rules/v4/{ruleId} Updates a single rule
DELETE /rules/v4/{ruleId} Deletes a rule
GET /sensors/v3/health Gets service health
GET /sensors/v3/version Gets service version
POST /sensors/v3 Creates a sensor rule
GET /sensors/v3 Gets all sensor rules
DELETE /sensors/v3 Deletes all sensor rules
GET /sensors/v3/{sensorRuleId} Gets a single sensor rule
PUT /sensors/v3/{sensorRuleId} Updates a single sensor rule
DELETE /sensors/v3/{sensorRuleId} Deletes a sensor rule
GET /shadows/v2/health Gets service health
GET /shadows/v2/version Gets service version
PUT /shadows/v2/{trackingId} Updates a device shadow
GET /shadows/v2/{trackingId} Gets a device shadow
DELETE /shadows/v2/{trackingId} Clears a device shadow
POST /shadows/v2/batch Gets a batch of device shadows
GET /shadows/v2/{trackingId}/{state} Gets reported or desired state object of a device
GET /shadows/v2/{trackingId}/{state}/{selector} Gets a value of a shadow property
GET /shadows/v4 Gets all shadows
GET /shipments/v4/health Gets service health
GET /shipments/v4/version Gets service version
POST /shipments/v4 Creates a shipment
GET /shipments/v4 Gets all shipments
DELETE /shipments/v4 Deletes all shipments
GET /shipments/v4/{shipmentId} Gets a shipment details
PATCH /shipments/v4/{shipmentId} Updates a shipment details
DELETE /shipments/v4/{shipmentId} Deletes a shipment
GET /shipments/v4/{shipmentId}/{segmentId} Gets a segment details
PATCH /shipments/v4/{shipmentId}/{segmentId} Updates a segment details
GET /shipments/v4/{trackingId}/segments Gets segments assigned to a device
GET /traces/v2/health Gets service health
GET /traces/v2/version Gets service version
DELETE /traces/v2/{trackingId} Deletes all the device traces and events
GET /traces/v2/{trackingId} Gets traces within a specified time range

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/here-tracking-v2"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

here-tracking-v2-openapi.json Raw ↑
{"openapi":"3.0.0","servers":[{"url":"https://tracking.hereapi.com/"},{"url":"https://tracking.api.here.com/"}],"info":{"version":"2.6.11","title":"HERE Tracking","description":"HERE Tracking is a cloud product designed to address location tracking problems for a wide range of Location IoT industry verticals.\n\nHERE Tracking also includes end-user mobile and web applications that can be used to demonstrate the product.","license":{"name":"HERE Documentation License","url":"https://legal.here.com/en-gb/terms/documentation-license"}},"externalDocs":{"description":"The Developer guide and Release notes are available here.","url":"https://www.here.com/docs/bundle/tracking-api-developer-guide"},"tags":[{"description":"The ingestion service provides an interface for devices to do data ingestion to HERE Tracking.\nThe ingested data is a device telemetry, which may include, for example, a GPS position, sensor readings,\nWLAN or Bluetooth scans.\nOnly a provisioned and a claimed device data is accepted.\n\nDevices should use uniquely this interface to send data to HERE Tracking.\n","name":"Ingestion"},{"description":"The Largedata service is used for storing large data blobs from devices to\nHERE Tracking and retrieving the resulting assembled data from HERE Tracking by the users.\n\nThe data upload from a device follows the multipart data upload pattern:\n\n* Create a new data upload.\n* Check that the upload status is no longer ***preparing***.\n* For each part:\n** Upload the part.\n* Complete the upload after all parts have been uploaded.\n\nA data upload state can be one of the following:\n* ***preparing***: The storage for the data is being prepared.\n* ***pending***: Data upload has been succesfully created but no parts have been uploaded yet.\n* ***ongoing***: Data upload is ongoing.\n* ***completed***: Data upload has been successfully completed.\n* ***failed***: Data upload has failed.\n\nData parts can be uploaded only if the upload state is one of the following: ***pending***, ***ongoing***, ***failed***.\nNote that the state will be changed to ***failed*** if uploading a part fails,\nbut if the part is uploaded again successfully, the upload state is changed back to ***ongoing***.\n\nThe data can be downloaded only if the upload state is ***completed***.\n","name":"Largedata"},{"description":"The Registry service is used for provisioning and claiming devices.\n","name":"Registry"},{"description":"\nAn alias is an arbitrary `type` - `externalId` pair, which can be associated with a `trackingId`.\n\nThe `externalId` can be, for example, an external management system asset ID or a human-readable name.\nAn alias is uniquely identified by an `externalId` and a `type` pair within a tracking project.\n\n> **IMPORTANT**\n> Aliases v2 API is deprecated.\n","name":"Aliases"},{"description":"An association is a link between a device and a geofence, a sensor rule or a rule.\nDevice events get generated for existing associations only.\n","name":"Associations"},{"description":"The Events service manages device and shipment events.\n\nAn event is created every time an associated rule or geofence is triggered by a device ingestion.\n\nA geofence event is created every time a device enters or exits an associated geofence.\nA sensor event is created when sensor data reported by a device triggers a sensor rule.\nA rule event (such as dwelling, detention, utilization, stock and online rule) is created when\na device behaviour triggers a rule.\n","name":"Events"},{"description":"The Geofences service creates and manages geofences.\n\nA geofence is an area boundary that users can define and associate with their devices.\nThe area that the geofence encloses can be defined using geographic coordinates or radio measurements.\n\nGeographic geofences can be `circular` or `polygonal`.\nA circular geofence is defined by geographic coordinates of its center and a radius,\nwhile polygonal geofences are defined as a set of geographic coordinates.\n\n`POI geofence` (Point Of Interest) is a geofence, which is defined using radio measurements.\nPOI geofences need to be trained separately using a telemetry that a device has recorded while\nbeing at the desired point of interest.\n\nOnce created, a geofence can be associated to a device.\nEvery time a position or a radio measurement update is received from a device,\nHERE Tracking would evaluate whether the device has transitioned across the boundary of\nan associated geofence.\nIf such a transition has happened, a transition event will be recorded.\nFor the geographic geofences, the evaluation is based on the coordinates of the trace.\nFor POI geofences, the device is considered to be inside a trained POI geofence when the radio\nmeasurements of the device-ingested telemetry and the training data match.\n\nIndoor geofences can be created by adding the floor properties to the geofence definition.\nCircular and polygonal geofences can be both outdoors and indoors.\nPOI geofences should only be used indoors.\nFor indoor geofences a device transition is recorded only if the position of the device is indoors\nand the floor details of the position match the geofence floor definition.\n\nNOTE: A geofence can also be referred to as a geozone, and these two terms are interchangeable.\n","name":"Geofences"},{"description":"The Labels service creates and manages labels.\n\nA label is a key-value pair that can be associated to the following resources:\n\n* device\n* geofence\n* sensor\n* rule\n* location\n* shipment\n\nOne can list labels for a specific resource or resource type, and filter\nlabels by keys or key-value pairs.\n\n> **IMPORTANT**\n> Labels v4 API is deprecated.\n","name":"Labels"},{"description":"The Locations service creates and manages locations.\n\nLocations are geographical points of interest users may store in HERE Tracking. Locations are\nused as building blocks for shipments.\n","name":"Locations"},{"description":"The Metadata service creates and manages metadata.\n\nMetadata is a descriptive information added to a device, a shipment, a geofence or a sensor rule.\n\n> **IMPORTANT**\n> Metadata v2 API is deprecated.\n","name":"Metadata"},{"description":"The Rules service creates and manages rules.\n\nRules generate events and notifications when get triggered by a device behaviour.\nThe following rule types are supported:\n* dwelling\n* detention\n* utilization\n* stock\n* online\n* shipmentEtaChange\n* shipmentSchedule\n\nAfter a rule has been created, it needs to be associated to a device to get activated.\n\nThis association means that every time a telemetry is received from the device,\nit will be evaluated against the rule condition.\nAs soon as the evaluation changes (for example, from true to false), an event will be recorded.\n","name":"Rules"},{"description":"The Sensors service creates and manages sensor rules.\n\nThe sensor rules generate events and notifications when get triggered by a\nreported device sensor reading.\n\nThe following sensor rule types are supported:\n* battery\n* humidity\n* pressure\n* temperature\n* acceleration\n* attach\n* tamper\n\nAfter a sensor rule has been created, it needs to be associated to a device to get activated.\n\nThis association means that every time a sensor update is received from the device as a part\nof its ingestion telemetry, it will be evaluated against the sensor rule condition.\nAs soon as the evaluation changes (for example, from true to false), an event will be recorded.\n","name":"Sensors"},{"description":"The Shadows service provides an effective way to manage configurations\nfor devices that are only intermittently online.\n\nThe device shadow contains `reported` and `desired` state objects of a device,\nreferred to as `reported` and `desired` shadows.\n\nThe `desired` shadow contains configuration settings that the device should use and possibly also\nsome optional custom settings.\nThe device receives the `desired` shadow from HERE Tracking as a response to the ingestion request.\n\nThe `reported` shadow contains the most recent position, sensor readings and settings that the\ndevice has sent. The reported shadow may also contain additional properties generated by HERE\nTracking based on the device-ingested telemetry. Such properties are stored in the `system.computed`\nproperty.\n\nIn case the most recent telemetry did not contain all the possible\nfields, the last known information will remain in the shadow. This means that one can\nsee, for example, the last reported temperature or tracker firmware information in the reported shadow,\neven if the device did not send that information in the latest telemetry.\n\n> **IMPORTANT**\n> Devices should not communicate directly with this service, but should instead send the telemetry to\n> the ingestion endpoint, which updates the `reported` shadow and returns the `desired` shadow.\n> Applications should only write to the `desired` shadow and only read from the\n> `reported` shadow.\n","name":"Shadows"},{"description":"The Shipments service manages shipments.\n\nA shipment describes a structure of a multimodal logistics journey. Shipments are useful when\nthe lifetime of an asset one is tracking spans across multiple devices.\n\nA shipment consists of segments that span from a location to another. The segments and their\norigins and destinations must form a continuous chain of locations, that is the origin of a segment\nmust match the destination of a previous segment. Each segment of the shipment may be assigned a\n`trackingId` that can vary between segments. Devices assigned to a shipment generate traces\nand events for the entire shipment.\n\nThe `shipmentId` of a shipment can be used in similar fashion as a `trackingId` in selected\nAPIs. For example, one can query for shipment ***traces*** and ***events*** and associate ***aliases*** and\n***metadata*** to a shipment.\n\nEach shipment has one of the following statuses:\n* ***pending***: The shipment has not yet started.\n* ***ongoing***: The shipment has started and it has one segment ongoing.\n* ***completed***: The shipment has ended and all of its segments are completed.\n* ***cancelled***: The shipment has ended and it has one or more cancelled segments.\n\nHERE Tracking progresses the shipment automatically if each segment has been assigned a\n`trackingId` and the origin and destination locations contain a `geofenceId`. Each segment is\nstarted upon exiting the origin location of the segment and completed upon entering the\ndestination location of the segment. If the origin and the destination of a segment share the\nsame location (that is, dwelling in a single location), the segment will automatically be\nstarted after the previous segment was completed. To automatically start a segment which\nfollows a dwelling segment, both the dwelling and following segment has to have the same\n`trackingId` assigned to them. If a segment does not have a device assigned, the user must\nstart and complete the segment manually.\n\nA new shipment should be instantiated for each separate logistical journey.\n\nShipments that are still ongoing after two weeks are automatically cancelled.\nThis time limit can be altered via `registry/v2/features` endpoint by changing\n`data.shipments.ongoingRetentionPeriod` configuration option.\n\nShipments older than six months are automatically removed.\n\nAutomatic shipment startup can be constrained to trigger only at time of shipment's `providedEtd`\nby defining an auto-start limit window via configuration options of\n`data.shipments.autoStartLimitBefore` and `data.shipments.autoStartLimitAfter` through\n`registry/v2/features` endpoint.\n\nWith the auto-start limit window configured, pending shipments that have `providedEtd` set that\nare not started within the limit window are automatically cancelled.\n","name":"Shipments"},{"description":"The Traces service allows users querying device traces based on time ranges.\n\nA device trace is a device-ingested telemetry along with the ingestion timestamp\nand the device current position.\n\n> **NOTE**:\n> Devices should not communicate directly with this service, but should instead send telemetry to\n> the ingestion endpoint. Each data ingestion results in an update to the `reported` device shadow\n> and a new device trace creation.\n","name":"Traces"},{"description":"The Users service provides HERE Tracking user authentication and authorization.\n","name":"Users"}],"paths":{"/v2/health":{"get":{"summary":"Gets service health","security":[],"responses":{"200":{"description":"OK\n\nThe service is performing as expected\n","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Health status"}},"example":{"message":"healthy"}}}}},"500":{"description":"Service unavailable\n\nThe service is not performing as expected\n"}},"tags":["Ingestion"]}},"/v2/version":{"get":{"summary":"Gets service version","security":[],"responses":{"200":{"description":"Success\n","content":{"application/json":{"schema":{"description":"OK\nService returns its current version number\nschema:\n    type: object\n    properties:\n        \"service-name\":\n            type: string\n            description: Version of service\n    example:\n        servicename: \"1.0.0\"\n"}}}},"500":{"description":"Service unavailable\n\nThe service is not performing as expected\n"}},"tags":["Ingestion"]}},"/v2/timestamp":{"get":{"summary":"Gets the current timestamp","tags":["Ingestion"],"description":"Returns the current server time in seconds since the UNIX epoch.\nThe server time is used to check the validity of the OAuth 1.0 header of a device data ingestion request.\nDevices must synchronise with the server time to avoid a clock skew.\n\n> Note that in the data ingestion request the timestamp is specified in milliseconds.\n","parameters":[{"in":"header","name":"X-Request-Id","schema":{"type":"string","format":"uuid"},"description":"ID used for correlating requests within HERE Tracking. Used for logging and error reporting.\n\nMust be a valid UUIDv4.\n","required":false}],"responses":{"200":{"description":"OK\n\nThe server timestamp was successfully returned\n","content":{"application/json":{"schema":{"type":"object","properties":{"timestamp":{"type":"integer","description":"Seconds elapsed since 1 January 1970 00:00:00 UTC.","minimum":2,"maximum":4102448400}}}}}},"400":{"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"message":{"type":"string","description":"Descriptive text that explains the error"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"]},"example":{"error":"Bad request","code":400,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee-lds2","message":"The request object is in an incorrect format or has values that are invalid or out of range.","details":{"hereErrorCode":400306}}}},"description":"Bad request\n\nThe request object is in an incorrect format or has values that are invalid or out of range.\n\nIf available, further error details are provided in the response body.\n"},"401":{"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"message":{"type":"string","description":"Descriptive text that explains the error"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"]},"example":{"error":"Unauthorized","code":401,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee-lds2","message":"The provided credentials are not valid.","details":{"hereErrorCode":401306}}}},"description":"Unauthorized\n\nThe request did not provide correct authentication details\n"},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"message":{"type":"string","description":"Descriptive text that explains the error"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"]},"example":{"error":"Forbidden","code":403,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee-lds2","message":"The account does not have the correct privileges.","details":{"hereErrorCode":403306}}}},"description":"Forbidden\n\nThe account does not have the correct privileges\n"},"429":{"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"message":{"type":"string","description":"Descriptive text that explains the error"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"]},"example":{"error":"Too Many Requests","code":429,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee-lds2","message":"Too Many Requests"}}},"description":"Too Many Requests\n\nUser has sent too many requests in a given amount of time.\n"}}}},"/v2/token":{"post":{"summary":"Requests a token for a registered device","security":[{"signedRequest":[]}],"description":"Authenticates a device to HERE Tracking and requests a device access token.\n\nA device must provide a valid device access token when it sends telemetry to HERE Tracking.\nTokens can be obtained upon a successful device authentication.\n\nThe device token requests must be signed. The signature method uses the OAuth 1.0 standard.\nFor more information on this standard, see the [OAuth Core 1.0](https://oauth.net/core/1.0/) specification.\n\nTokens can be requested only by claimed devices.\nA claimed device license, that is ```deviceId``` and ```deviceSecret``` credential pair, is used for creating a signed token request.\n\n> See the Authentication section for details on how to generate a signed token request.\n> A new signature must be created for each device access token request.\n> Signatures can only be used once.\n","parameters":[{"in":"header","name":"X-Request-Id","schema":{"type":"string","format":"uuid"},"description":"ID used for correlating requests within HERE Tracking. Used for logging and error reporting.\n\nMust be a valid UUIDv4.\n","required":false},{"name":"authorization","description":"Signed OAuth 1.0 header","in":"header","required":true,"example":"OAuth oauth_consumer_key='{deviceId}',oauth_signature_method='HMAC_SHA256',oauth_timestamp='{nowS}',oauth_nonce='{nonce}',oauth_signature='{signature}'","schema":{"type":"string"}}],"tags":["Ingestion"],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"expiresIn":{"type":"integer"}},"example":{"accessToken":"h1.ySDEpBjW2fXM0Nk1IyBohA.6YOv1MfQUd1K7MCg9elZrrVTT5fKfqYECYUrD7Y77d-p9KqIZrVfjpIrkMqVC9MmfUILOm7xk7VuhCH59o0oLJCl6M8Q8cGHTKVrPcpqiEzUQKs7pSZXxVbIui0O5caUgJ3GHrS1X4aZQuB1KSsngvWMcIz0M0a4g4x8bICUHNRbISbQOWNTc7CcxRIJegIlj24dUawrhtnuQh50JUUY2pHYpSh_t8R0AVkm8JO-WEtWW3SZiLa30IR0gz2121vlRjdNolnJYsuJzHoaEKEkrMj9ffybtcBVWo9dkY1qmDQ-DRg_loVenJK45kjHJijkQ902r_vhH8jtoXTrZ1RBFHuZtwLW8xXBw70BCWPu4OYGgthjaq61mpE8iP1s7MG7gbAiW_S249aaoWMUxQN6djw8cNoTP6YPM-ivSieRMxwPl56mhRQ5GRjQa8AYkuOvoCFg-LCMIxTYhrDZM4HFWQ.duHFPjvWUQbdArCL5CU7bTowK5fD07ro83r6CRWjuB_1TK2VyO1lvfNFZIZePWLyTlN0y9uqD7Uro6t87h_a0zfpeU8_529KrB9vgpcBARF5LGBo8Rh7y2islYxCGJ2pAxHADtxkfiZ8TCoEatg0F3jkeggOl8YUFkeaI2g7WtnhZwrXBwW9QizQH3EM_Djnu66-kv_aM-uddpzZJJ7CmrJiwhucaEJeYRDSpuzzZWT6_NwBg6_xLjyseCv5AGs8EmsuStCFP0Ey7UDIqo9V2RA9uDP64Q0mvEw3EUTHmJGHF_8E2s4iIpjKJCvUGsGYAy8XrjeW10EBAMkfrn6cwA","expiresIn":86399}}}}},"400":{"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"message":{"type":"string","description":"Descriptive text that explains the error"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"]},"example":{"error":"Bad request","code":400,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee-lds2","message":"The request object is in an incorrect format or has values that are invalid or out of range.","details":{"hereErrorCode":400306}}}},"description":"Bad request\n\nThe request object is in an incorrect format or has values that are invalid or out of range.\n\nIf available, further error details are provided in the response body.\n"},"401":{"headers":{},"description":"*Timestamp wrong*\n\nWhen the request timestamp is skewed by more than 10 second from the\nserver time, the `x-here-timestamp` header with the current server\ntimestamp is added to the response.\n\n*Incorrect Signature*\n\nIf the OAuth signature is incorrect, the response code will be 401,\nand *no* `x-here-timestamp` header will be added.\n","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"message":{"type":"string","description":"Descriptive text that explains the error"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"],"example":[{"error":"Unauthorized","code":401,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee","message":"Invalid Authorization, the request lacks valid authentication credentials for the target resource.","details":{"hereErrorCode":401306}}]}}}},"403":{"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"message":{"type":"string","description":"Descriptive text that explains the error"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"]},"example":{"error":"Forbidden","code":403,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee-lds2","message":"The account does not have the correct privileges.","details":{"hereErrorCode":403306}}}},"description":"Forbidden\n\nThe account does not have the correct privileges\n"},"404":{"description":"Invalid license","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"message":{"type":"string","description":"Descriptive text that explains the error"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"],"example":[{"error":"Unauthorized","code":401,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee","message":"Invalid Authorization, the request lacks valid authentication credentials for the target resource.","details":{"hereErrorCode":401306}}]},"examples":{"response":{"value":{"code":404,"error":"No license found for the given deviceId.","id":"e69ce7d3-82f2-43cd-95b4-4402f98c9a61"}}}}}},"412":{"description":"Unclaimed Device\n\nIf the device ID is valid but the device has not yet been claimed by an owner, an error response will be returned.\n","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"message":{"type":"string","description":"Descriptive text that explains the error"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"],"example":[{"error":"Unauthorized","code":401,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee","message":"Invalid Authorization, the request lacks valid authentication credentials for the target resource.","details":{"hereErrorCode":401306}}]},"examples":{"response":{"value":{"code":412,"error":"Device has not been claimed.","id":"e69ce7d3-82f2-43cd-95b4-4402f98c9a61"}}}}}},"429":{"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"An HTTP error description"},"code":{"type":"integer","description":"An HTTP status code"},"message":{"type":"string","description":"Descriptive text that explains the error"},"id":{"type":"string","format":"uuid","description":"An error ID that allows you to trace the error details"},"details":{"description":"An optional object containing more information about the error"}},"required":["error","code","id"]},"example":{"error":"Too Many Requests","code":429,"id":"5771b3d4-95ae-4959-ac63-fbaa3d5d06ee-lds2","message":"Too Many Requests"}}},"description":"Too Many Requests\n\nUser has sent too many requests in a given amount of time.\n"}}}},"/v2/":{"post":{"summary":"Ingests data and receives a shadow","description":"Devices can use this end point to ingest data into HERE Tracking,\nin the same way as via the `/v3` endpoint.\n\nA device uses its access token obtained via the the `/v2/token` endpoint\nto send telemetry – GPS position, sensor readings, WLAN or Bluetooth scans - to HERE Tracking.\n\nBy default the request is synchronous and the response will be\nthe device `desired` shadow. If the request is set\nto be asynchronous, the response will be empty.\n\nThe device position gets resolved based on the `position` and `scan` objects\nprovided in the request body (see the objects definitions for details).\nIf only `position` is provided, it will be used as the device position.\nIf only `scan` is provided, the position will be resolved asynchronously\nvia the HERE Positioning API after returning a response.\nIf both are provided, `scan` is resolved to a position via the HERE Positioning API,\nand the better of the two positions (provided vs. resolved) will be selected.\nIf neither `position` nor `scan` is provided, or if the HERE Positioning API is not able to\nresolve the position, the device position will be left empty.\n\nThe `reported` shadow will be updated with the device latest position information,\nsensor readings and settings ingested by the device.\nThe reported shadow may also contain additional properties generated by HERE\nTracking based on the device-ingested telemetry.\nSuch properties are stored in the `system.computed` property of the shadow.\nThe device shadow can be queried via the `shadows/v2/{trackingId}` endpoint.\n\nThe data ingested by the device will be available as a device trace via the `traces/v2/{trackingId}` endpoint.\n","security":[{"DeviceToken":[]}],"parameters":[{"in":"header","name":"X-Request-Id","schema":{"type":"string","format":"uuid"},"description":"ID used for correlating requests within HERE Tracking. Used for logging and error reporting.\n\nMust be a valid UUIDv4.\n","required":false},{"name":"authorization","in":"header","required":true,"example":"Bearer h1.yxPIksZ0ViLq77f1Nh-9cg.NVgGBZVlCU8G7kjV_...","schema":{"type":"string"}},{"name":"async","in":"query","description":"If set to `true`, ingests the device data and responds immediately with an empty response body.","required":false,"schema":{"type":"boolean","default":false}}],"requestBody":{"description":"A device telemetry data.\n\nThe timestamp specifies the time in milliseconds at which the device telemetry measurements were taken.\nThis must be within 10 seconds of the timestamp returned by the `/v2/timestamp` endpoint.\n\nExample of a GSM telemetry\n---\n\n```\n[{\n    \"scan\": {\n        \"gsm\": [{\n            \"mcc\": 262,\n            \"mnc\": 1,\n            \"lac\": 5126,\n            \"cid\": 16504,\n            \"nmr\": [\n                { \"bsic\": 6, \"bcch\": 82 },\n                { \"bsic\": 7, \"bcch\": 85 },\n                { \"bsic\": 12, \"bcch\": 93 },\n                { \"bsic\": 13, \"bcch\": 88 },\n                { \"bsic\": 19, \"bcch\": 88 }\n            ]\n        }]\n    },\n    \"payload\": {\n        \"sensor\": \"data\"\n    },\n    \"timestamp\": 1515169948976\n}]\n```\n\nExample of a WLAN telemetry\n---\n\n```\n[{\n    \"scan\": {\n        \"wlan\": [\n            { \"mac\": \"1c:1d:86:07:01:0f\", \"powrx\": -45 },\n            { \"mac\": \"e4:f4:c6:d9:85:59\", \"powrx\": -39 },\n            { \"mac\": \"1c:1d:86:07:01:0d\", \"powrx\": -43 },\n            { \"mac\": \"1c:1d:86:07:01:0b\", \"powrx\": -44 },\n            { \"mac\": \"1c:1d:86:07:01:04\", \"powrx\": -58 },\n            { \"mac\": \"1c:1d:86:07:01:03\", \"powrx\": -59 }\n        ]\n    },\n    \"payload\": {\n        \"sensor\": \"data\"\n    },\n    \"timestamp\": 1515169948976\n}]\n```\n","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"timestamp":{"description":"Milliseconds elapsed since 1 January 1970 00:00:00 UTC.\n\nSpecifies the time the device telemetry measurements were taken.\n","type":"integer","minimum":2,"maximum":4102448400000},"payload":{"type":"object","description":"A free format JSON object.\nThe maximum size is 1000B.\n"},"system":{"type":"object","properties":{"phoneNumber":{"type":"string","pattern":"^\\+[1-9]\\d{1,14}$","description":"The phone number of the device's SIM card in the international E.164 format. All the country codes should be prefixed a with \"+\" instead of \"00\".\n","example":"+491234567890"},"imsi":{"type":"string","pattern":"^[0-9]{1,15}$","description":"The IMSI of the device's SIM card.\n","example":"123456789012345"},"iccid":{"type":"string","minLength":18,"maxLength":22,"description":"SIM card integrated circuit card identifier (ICCID)"},"client":{"description":"Information about the client device.\n","type":"object","properties":{"manufacturer":{"description":"Manufacturer of the device (hardware)","type":"string","minLength":2,"maxLength":50},"model":{"description":"Model of the device (hardware)","type":"string","minLength":1,"maxLength":50},"firmware":{"description":"Device firmware version information","type":"string","minLength":1,"maxLength":150},"name":{"description":"Name of the client software accessing the HERE API","type":"string","minLength":3,"maxLength":50},"version":{"description":"Version of the client software in format X.Y.Z, where X [0..255] is a major, Y [0..255] is a minor, and Z [0..65535] is a build version number. Increase the version/build number for each release of the client.","type":"string","minLength":3,"maxLength":60},"platform":{"description":"Software platform information of the device, for example operating system name and version.","type":"string","minLength":3,"maxLength":50},"modules":{"description":"Software information of all updateable chips.","type":"array","maxItems":10,"items":{"description":"Software information of an updateable chip.","type":"object","properties":{"manufacturer":{"type":"string","description":"Manufacturer name","minLength":2,"maxLength":50},"model":{"type":"string","description":"Model or chip name","minLength":1,"maxLength":50},"firmwareVersion":{"type":"string","description":"Installed firmware version","minLength":3,"maxLength":60}}}},"diskquota":{"description":"Available disk quota in kilobytes.","type":"number","minimum":0},"diagnosticscode":{"description":"Device diagnostics code.","type":"number"},"homenetwork":{"description":"Information about subscriber home network - 3GPP MCC+MNC or 3GPP2 SID+NID. Dual-SIM devices can provide information on both subscriptions.","type":"array","maxItems":2,"items":{"description":"Network information. Either MCC + MNC or SID + NID attribute pair is required.","type":"obje

# --- truncated at 32 KB (1501 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/here/refs/heads/main/openapi/here-tracking-v2-openapi.json