How to apply BillingTags to HERE Location Service calls in SDK

Symptoms / Triggers
-------------------

You may need this article if you experience any of the following:

Usage from your HERE SDK (Android, iOS, or Flutter) appears ungrouped or unexpected on invoices
You expected to see custom billing tags, but only a project name appears
You can set billingTag for REST APIs, but cannot find where to set it in the HERE SDK
All SDK usage appears under a single project, even though your app performs multiple functions
You are trying to separate costs per feature, module, or API call when using HERE SDK

---

Quick answer
------------

HERE SDK billing tags cannot be set per request.
All HERE SDK usage is billed under the HERE project linked to your application credentials.
The project scope automatically acts as the billing tag, and this cannot be changed dynamically at runtime.

---

Explanation: how billing works for HERE SDK
-------------------------------------------

Unlike HERE REST APIs, which allow passing a billingTag parameter per request, the HERE SDK (Explore / Navigate) makes internal service calls on your behalf.
Billing attribution is therefore handled at SDK initialization and credential scope level, not per API call.

### What this means in practice

Billing tags are not configurable per route, search, or map request
All SDK usage is attributed to:
+ The HERE Project linked to your app, or
+ A global billing tag defined when the SDK engine is created (only supported by some SDKs)

---

Recommended approach (best practice)
------------------------------------

### Use one HERE Project per app or environment

This is the recommended and most reliable approach.

When your API key or access credentials are scoped to a HERE Project:

The project HRN (for example project/my-navigation-app) is automatically used as the billing grouping
Usage appears grouped by project in:
+ Cost Management
+ Usage CSV exports
+ Invoices

No SDK code changes are required.

Example use cases

Separate projects for:
+ Production vs staging
+ Multiple mobile apps
+ Internal testing apps

---

Optional: SDK‑level billingTag (limited support)
------------------------------------------------

Some SDKs expose a billingTag option during engine initialization.

### Flutter (Navigate SDK example)

SDKOptions sdkOptions = SDKOptions.withAccessKey(

accessKeyId,

accessKeySecret,

billingTag: "fleetApp01"

);

Important notes:

The billing tag applies globally to all SDK usage
It must follow HERE platform billing tag rules
Not all HERE SDKs or editions expose this option

---

Billing tag validation rules
----------------------------

Custom billing tags must meet these requirements:

4–16 characters
Allowed characters: A–Z a–z 0–9 - _
Must NOT start or end with - or _
Case‑sensitive
Multiple tags can be concatenated using + (maximum 6)

Invalid billing tags result in request errors and are not applied.

---

What is not supported
---------------------

The following scenarios are not possible with HERE SDK:

Different billing tags per API call
Switching billing tags dynamically at runtime
Overriding billing tags through REST‑style query parameters
Separating costs per SDK feature (routing vs search) within the same project

---

Applies to
----------

HERE SDK Explore / Navigate 4.x
Android, iOS, and Flutter platforms
All HERE subscription tiers

---

Related documentation
---------------------

HERE Cost Management: Billing tags overview
Usage reports and CSV export by billing tag
HERE SDK Developer Guides (Android / iOS / Flutter)

---

Tags
----

billing tags
HERE SDK billing
project billing
usage grouping
cost management
SDK 4.x