Find an API

Search public APIs with auth details & Postman guides

← All APIs

HERE Tracking

here · Location

Location No Auth Free & Open location

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.

Authentication

No authentication requiredFree to use with no key needed.

Sample Requests

GET Gets all aliases

Gets all aliases of a project. If `type` query parameter is provided, the response will contain only aliases of the given type. If `externalId` query parameter is specified, the response will contain only aliases that match the given external ID. The following wildcards can be used: '*' matches an

https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/aliases/v2?type=json&after=1&count=100&pageToken=example&projectId=example&externalId=example

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/aliases/v2?type=json&after=1&count=100&pageToken=example&projectId=example&externalId=example"
import requests
params = {
    "type": "json",
    "after": "1",
    "count": "100",
    "pageToken": "example",
    "projectId": "example",
    "externalId": "example"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/aliases/v2",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/aliases/v2');
url.searchParams.set('type', 'json');
url.searchParams.set('after', '1');
url.searchParams.set('count', '100');
url.searchParams.set('pageToken', 'example');
url.searchParams.set('projectId', 'example');
url.searchParams.set('externalId', 'example');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/aliases/v2")
	q := baseURL.Query()
	q.Set("type", "json")
	q.Set("after", "1")
	q.Set("count", "100")
	q.Set("pageToken", "example")
	q.Set("projectId", "example")
	q.Set("externalId", "example")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/aliases/v2")
uri.query = URI.encode_www_form({
  "type" => "json",
  "after" => "1",
  "count" => "100",
  "pageToken" => "example",
  "projectId" => "example",
  "externalId" => "example"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/aliases/v2?" . http_build_query([
    "type" => "json",
    "after" => "1",
    "count" => "100",
    "pageToken" => "example",
    "projectId" => "example",
    "externalId" => "example"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Gets event history

Gets all events for all devices and shipments of the project. The results are listed in descending order based on the timestamp. An event is uniquely identified by `trackingId`-`ruleId`-`timestamp` key, with an exception of dwelling and stock rule events. Dwelling events also need `geofenceId`

https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/events/v3?after=1&appId=example&count=1000&before=1&ruleId=example&eventType=example&pageToken=example&projectId=example&eventSource=example&initialState=true

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/events/v3?after=1&appId=example&count=1000&before=1&ruleId=example&eventType=example&pageToken=example&projectId=example&eventSource=example&initialState=true"
import requests
params = {
    "after": "1",
    "appId": "example",
    "count": "1000",
    "before": "1",
    "ruleId": "example",
    "eventType": "example",
    "pageToken": "example",
    "projectId": "example",
    "eventSource": "example",
    "initialState": "true"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/events/v3",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/events/v3');
url.searchParams.set('after', '1');
url.searchParams.set('appId', 'example');
url.searchParams.set('count', '1000');
url.searchParams.set('before', '1');
url.searchParams.set('ruleId', 'example');
url.searchParams.set('eventType', 'example');
url.searchParams.set('pageToken', 'example');
url.searchParams.set('projectId', 'example');
url.searchParams.set('eventSource', 'example');
url.searchParams.set('initialState', 'true');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/events/v3")
	q := baseURL.Query()
	q.Set("after", "1")
	q.Set("appId", "example")
	q.Set("count", "1000")
	q.Set("before", "1")
	q.Set("ruleId", "example")
	q.Set("eventType", "example")
	q.Set("pageToken", "example")
	q.Set("projectId", "example")
	q.Set("eventSource", "example")
	q.Set("initialState", "true")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/events/v3")
uri.query = URI.encode_www_form({
  "after" => "1",
  "appId" => "example",
  "count" => "1000",
  "before" => "1",
  "ruleId" => "example",
  "eventType" => "example",
  "pageToken" => "example",
  "projectId" => "example",
  "eventSource" => "example",
  "initialState" => "true"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/events/v3?" . http_build_query([
    "after" => "1",
    "appId" => "example",
    "count" => "1000",
    "before" => "1",
    "ruleId" => "example",
    "eventType" => "example",
    "pageToken" => "example",
    "projectId" => "example",
    "eventSource" => "example",
    "initialState" => "true"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Gets all geofences

Gets all geofences of a project. Results can be filtered by using the query parameters. Indoor geofences with the `floor` properties may be filtered by `floor[id]`, which specifies the ID of the venue associated with the geofence.

https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/geofences/v2?bbox=example&type=json&count=100&floor=example&fields=example&pageToken=example&projectId=example

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/geofences/v2?bbox=example&type=json&count=100&floor=example&fields=example&pageToken=example&projectId=example"
import requests
params = {
    "bbox": "example",
    "type": "json",
    "count": "100",
    "floor": "example",
    "fields": "example",
    "pageToken": "example",
    "projectId": "example"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/geofences/v2",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/geofences/v2');
url.searchParams.set('bbox', 'example');
url.searchParams.set('type', 'json');
url.searchParams.set('count', '100');
url.searchParams.set('floor', 'example');
url.searchParams.set('fields', 'example');
url.searchParams.set('pageToken', 'example');
url.searchParams.set('projectId', 'example');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/geofences/v2")
	q := baseURL.Query()
	q.Set("bbox", "example")
	q.Set("type", "json")
	q.Set("count", "100")
	q.Set("floor", "example")
	q.Set("fields", "example")
	q.Set("pageToken", "example")
	q.Set("projectId", "example")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/geofences/v2")
uri.query = URI.encode_www_form({
  "bbox" => "example",
  "type" => "json",
  "count" => "100",
  "floor" => "example",
  "fields" => "example",
  "pageToken" => "example",
  "projectId" => "example"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/here.com/tracking/2.1.191/geofences/v2?" . http_build_query([
    "bbox" => "example",
    "type" => "json",
    "count" => "100",
    "floor" => "example",
    "fields" => "example",
    "pageToken" => "example",
    "projectId" => "example"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. See official documentation for authentication and setup.

What can you build with HERE Tracking?

HERE Tracking is a Location API. Developers commonly use location APIs for:

  • tracking assets and vehicles in real time
  • building delivery and logistics apps
  • finding nearby businesses or services
  • geo-fencing and location-based notifications
  • address validation and autocomplete

No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. HERE Tracking is free to use, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗