Sorry, you need to enable JavaScript to visit this website.



IMPORTANT: The TomTom Geofencing API and Geofencing module in the Maps SDK for Android are currently in Public Preview. To find out what our Public Preview is and to revisit our Terms and Conditions, see the Public Preview Page. Under Public Preview, specific terms and conditions apply which are described here in section 4 of the Terms and Conditions


In order to use Geofencing you will need the appropriate Geofencing API Key. For more information on obtaining and configuring TomTom API Keys and their configuration, go to the "Getting started" page.

Create a Geofencing API object in the following manner:


GeofencingApi geofencingApi = GeofencingApi.create(context);
private val geofencingApi = GeofencingApi.create(context)


The Geofencing API provides you with the ability to define virtual barriers on real geographic locations. With geofenced object location you can determine if that object is located within or outside of predefined virtual barriers on real geographic locations.

The Geofencing API offers a number of services including the Configuration service, Report service, Projects service, Objects service, Transitions service, and Archive service. Details are available in the Geofencing API. Currently, the Maps SDK only offers the Report service.

Report service

The Report service allows you to generate a location report which determines if an object is within fences. The Response of this service contains a summary and:

  • A list of fences that the object/point is inside of.

  • A list of fences within a specified radius that the object is not inside of.

If no fences match the Request parameters, then the list returned in the Response can be empty. The outside fences list can only be empty if there are no more fences left in the project.

To use the Report service you need to have at least one project defined within a configuration.

For your mobile app you can use a standard listener approach or Reactive approach when preparing the Report service Request.

The first approach involves using the obtainReport() method, taking the ReportServiceQuery and ReportServiceResultListener implementation as parameters.

To obtain a Report for an object you will need to create a query in the following manner:


return ReportServiceQueryBuilder.create(location)


Then register an onResult listener to receive a callback with the Report service Response:


private ReportServiceResultListener resultListener = new ReportServiceResultListener() {

    public void onResponse(@NonNull ReportServiceResponse response) {

    public void onError(Throwable error) {
        Toast.makeText(getContext(), R.string.report_service_request_error, Toast.LENGTH_LONG).show();
private val resultListener = object : ReportServiceResultListener {
    override fun onResponse(serviceResponse: ReportServiceResponse) {

    override fun onError(error: Throwable) {
        Toast.makeText(context, error.message, Toast.LENGTH_LONG).show()


Now you can perform a Report service Request by calling:

geofencingApi.obtainReport(query, resultListener);


The other way to subscribe to the Geofencing Report service Response is to use a reactive method that returns RxJavas Single<ReportServiceResponse>. To take advantage of this implementation, you have to subscribe to it (for instance with a Disposable<ReportServiceResponse> / Disposable<ReportServiceResponse> or a Consumer<ReportServiceResponse> / Consumer<ReportServiceResponse>).