Try it free

Upgrade from classic access tokens to platform tokens

  • Latest Dynatrace
  • Upgrade guide
  • 9-min read
  • Published Aug 19, 2026

Dynatrace Classic authenticates API calls with access tokens managed through the Environment API's v2/apiTokens endpoint. In Latest Dynatrace, this model is replaced with platform tokens: credentials scoped to a specific user or service user and managed centrally in Account Management. This guide walks you through inventorying your existing classic access tokens, classifying them by usage, replacing active integrations with platform tokens, and safely decommissioning the tokens you no longer need.

Platform tokens are limited to 50 per user and 100 per service user, per account. Assign tokens used by automated integrations to service users rather than personal accounts, to keep automation credentials separate from your personal limit.

Why upgrade?

  • User-bounded access: Every platform token belongs to a specific user or service user and operates only within that user's permissions. A scope selection can't grant access beyond what the assigned user is allowed to do.
  • Account-level governance: Account administrators can view and manage all tokens across an account, disable token creation entirely, or disable and delete individual tokens.
  • Built-in rotation: The Account Management interface includes a rotate operation with a configurable overlap window, making regular credential rotation practical.
  • Single-account scope: A platform token is scoped to one account and can't be used to access other accounts, limiting the impact if a token is compromised.

What will you do?

In this upgrade guide, you'll:

  1. Export an inventory of your existing classic access tokens.
  2. Classify each one by usage pattern.
  3. Create platform token replacements for active integrations.
  4. Validate each replacement.
  5. Decommission the classic access tokens once you've confirmed the replacements work.

Before you begin

Prerequisites

To complete this upgrade guide, you need:

  • Account administrator access to Account Management, or the platform-token:tokens:manage OAuth scope, to create and manage platform tokens.
  • For automated integrations, the iam:service-users:use permission (optionally scoped with iam:service-user-email) granted to the relevant group, to assign tokens to service users.
  • An existing classic access token with the apiTokens.read scope, to export the token inventory.

Prior knowledge

  • Familiarity with where your integrations store their classic access tokens: secrets managers, CI/CD pipeline variables, Kubernetes secrets, configuration files, or scheduled scripts

Breaking changes

The following table summarizes breaking changes when upgrading to Latest Dynatrace platform tokens.

ChangeRequired action

v2/apiTokens moves to the .apps base URL in hybrid environments

Update any scripts, SDK configurations, or documentation that hardcode the .live URL before your environment enters the hybrid state.

Authentication header format changes

Replace Authorization: Api-Token <token> with Authorization: Bearer <platform-token> in every migrated integration.

v2/apiTokens isn't available in latest environments

Complete the migration before your environment reaches the latest state. There's no classic access token management after that point.

New concepts

Classic environment

Classic access tokens only, managed through v2/apiTokens on the .live domain.

Hybrid environment

Both classic and latest functionality are available. Classic token management remains available but moves to the .apps domain. Platform tokens are also available alongside classic access tokens. This is the most common state for environments that are migrating to Latest Dynatrace functionality.

Latest environment

Platform tokens only. Classic access tokens don't exist in latest environments, and v2/apiTokens isn't available.

Service user

In Latest Dynatrace, platform tokens can be assigned to a service user. This user is an account-level identity used to run automated integrations, separate from any individual's personal account. Platform tokens assigned to a service user don't count against a person's token limit.

How to upgrade

1. Export an inventory of classic access tokens

Before taking any migration action, export and store a complete snapshot of all existing classic access tokens. This is your baseline: it preserves point-in-time metadata (last-used dates, scopes, expiry) and gives you an audit trail for compliance review.

The Dynatrace API doesn't enforce unique names for classic access tokens; an environment can contain multiple tokens with the same name. Always use the token's unique ID, not its name, as the stable reference for classification, migration tracking, and deletion.

  1. Call the export endpoint for your environment type. The calling token needs the apiTokens.read scope. If the response includes a nextPageKey, request additional pages with ?nextPageKey=<value> until it's no longer present.

    • Classic environment:

      GET https://{your-environment-id}.live.dynatrace.com/api/v2/apiTokens?fields=+lastUsedDate,+lastUsedIpAddress,+expirationDate,+scopes
    • Hybrid environment:

      GET https://{your-environment-id}.apps.dynatrace.com/api/v2/apiTokens?fields=+lastUsedDate,+lastUsedIpAddress,+expirationDate,+scopes

    Here's an example curl call for classic environments:

    curl -s \
    -H "Authorization: Api-Token <your-classic-access-token>" \
    "https://{your-environment-id}.live.dynatrace.com/api/v2/apiTokens?fields=%2BlastUsedDate,%2BlastUsedIpAddress,%2BexpirationDate,%2Bscopes"

Store the export in an access-controlled location (for example, a private Confluence page, a restricted repository, or an attachment on your migration ticket), and record where you stored it in your migration ticket. The export contains token metadata that shouldn't be broadly accessible.

Once you export the data, you will have a complete, timestamped baseline of every classic access token in the environment.

Alternatively, for a richer view than lastUsedDate alone, you can use DQL to query which endpoints a token calls and how often.

fetch dt.system.events
| filter event.kind == "AUDIT_EVENT"
| filter event.provider == "CLASSIC_API"

authentication.token gives you the public portion of the token to match against your inventory. Summarizing by: endpoint helps identify periodic or batch use cases. This requires Grail access and query permissions in your environment.

2. Classify tokens by usage pattern

With the inventory in hand, classify each token before acting. An apparently unused token may be serving a periodic or seasonal workflow, so don't delete anything without classifying it first. The following table provides a guideline for how to classify tokens based on the lastUsedDate from the export in step 1.

ClassificationSignalRecommended action

Actively used

lastUsedDate within the last 30 days

Migrate these tokens first, because they have the highest impact if blocked.

Rarely used

lastUsedDate between 30 and 180 days ago

Find the owner, then schedule migration.

Batch or periodic

lastUsedDate beyond the threshold, but known as a scheduled job

Apply a grace period of at least one full job cycle before acting.

Unused or orphaned

No recorded lastUsedDate, or an old token with no identified owner

Quarantine, then delete.

The 30-day/180-day thresholds are a starting point, not a rule: adapt them to your environment. Some tokens serve infrequent but legitimate tasks (quarterly reports, annual audit exports, fortnightly batch jobs), so cross-reference lastUsedDate against the known schedule of the integration before treating a token as inactive.

3. Create platform tokens for active integrations

For each token classified as actively used, or rarely used with a confirmed owner, create a platform token replacement.

  1. Create the platform token in Account Management, not in the environment's settings or API configuration.

    1. Go to My platform tokens.
    2. Select Platform token and specify a token name (up to 255 characters), an expiration date (or never expire), the account, and the target environments or account-level services.
    3. Choose whether to generate the token for yourself or for a service user you have access to.
    4. Select the minimum required token scopes.
    5. Select Generate, then copy the token value immediately. It's shown only once.

    For automated integrations, assign the token to a service user rather than your personal account. An account administrator must grant the iam:service-users:use permission to the relevant group first (optionally scoped to specific service users with iam:service-user-email).

  2. Replace the token in each integration.

    1. Identify every location where the old token is stored: secrets managers, CI/CD pipeline variables, Kubernetes secrets, application configuration files, and scheduled scripts.

    2. Update each location with the new platform token value.

    3. Update the authorization header format.

      • Classic access token: Authorization: Api-Token <your-classic-access-token>.
      • Platform token: Authorization: Bearer <your-platform-token>.
    4. Run the integration end-to-end to confirm it works before decommissioning the old token.

      curl -s \
      -H "Authorization: Bearer <your-platform-token>" \
      "https://{your-environment-id}.apps.dynatrace.com/platform/storage/logs/v1/export"

Each migrated integration authenticates with a platform token scoped to a user or service user, instead of an environment-wide classic access token.

4. Validate before decommissioning

For each migrated integration, confirm all of the following before removing the classic access token.

  1. Check that the platform token works end-to-end, with no HTTP 401 or 403 responses.

  2. Confirm the platform token has the minimum required scopes, and that the underlying user or service user has the required permissions. If it doesn't, see Why does a platform token return HTTP 403?.

  3. Remove the old classic access token from every known location: secrets managers, CI/CD variables, Kubernetes secrets, configuration files, scripts, and source code.

Don't delete the old classic access token until you confirm the replacement works.

5. Decommission classic access tokens

Once you've confirmed that the replacement platform token works, you can disable the classic access token. Before you permanently delete the token, wait at least one full business or job cycle before permanent deletion. This is because a disabled token can be re-enabled if you missed a dependency; deletion is permanent.

  1. Disable the token.

    Here's an example curl call for classic environments:

    curl -s -X PUT \
    -H "Authorization: Api-Token <your-classic-access-token>" \
    -H "Content-Type: application/json" \
    -d '{"revoked": true}' \
    "https://{your-environment-id}.live.dynatrace.com/api/v2/apiTokens/{id}"
  2. Delete the token using its unique ID, not its name.

    • Classic environment:

      DELETE https://{your-environment-id}.live.dynatrace.com/api/v2/apiTokens/{id}
    • Hybrid environment:

      DELETE https://{your-environment-id}.apps.dynatrace.com/api/v2/apiTokens/{id}

    Here's an example curl call for hybrid environments:

    curl -s -X DELETE \
    -H "Authorization: Api-Token <your-classic-access-token>" \
    "https://{your-environment-id}.apps.dynatrace.com/api/v2/apiTokens/{id}"

For your last remaining classic access token, plan ahead: v2/apiTokens can only be managed with a classic access token, so deleting the final one creates a circular dependency. Either keep one token with apiTokens.write scope as a self-removal cleanup token (a token can delete itself by ID), or use a platform token with the appropriate scope to call DELETE against the .apps domain endpoint.

Migration completed

You've completed the migration when:

  • All active integrations authenticate with platform tokens.
  • Classic access tokens have been disabled and removed.

Account administrators can now manage every token from Account Management, with rotation and per-token governance available across the account.

FAQ

Why does a platform token return HTTP 403?

A 403 means one of two things: the token doesn't have the required scope for the endpoint being called, or the user or service user it's assigned to doesn't have the required Dynatrace permissions. Both the token scope and the user's platform permissions must be in place. Scope selection can't grant access beyond what the assigned user is allowed to do.

Expired tokens also return 403. Check the token's expiration date: expired tokens remain in the token list until explicitly deleted, so use the rotate function in Account Management to replace expiring tokens before they expire.

I disabled a platform token, but it still authenticated. Why?

Disabling a platform token takes effect immediately, but propagation across all platform services can take up to five minutes. During that window, the token may still authenticate successfully against some services.

What if an integration breaks after I switch to a platform token?

If you haven't yet deleted the token, just re-enable the old classic access token to restore service immediately. Revert the integration to the classic access token while you diagnose the issue, then re-attempt the migration. Classic and platform token access can run side by side; see Validate before decommissioning.

If you have already deleted the token, this cannot be undone. You need to create a valid platform token.

Related topics

  • Platform tokens
  • Access tokens classic
  • Access tokens
  • Working with policies
  • Dynatrace API - Tokens and authentication
Related tags
Dynatrace Platform