Authorization in the FME Flow REST API | Token Management

Mac Pham
Mac Pham
  • Updated

As of FME Flow 2025.1, the V3 REST API has been deprecated. The current API will remain accessible, but no new features or general bug fixes will be implemented. Starting with FME Flow 2026.1, the V3 API will be removed. We encourage all users to prepare their systems for this change. 

The V4 REST API offers enhanced security and usability, including new and reorganized endpoints, as well as the removal of certain endpoints. For information on migrating from V3 to V4, please see the FME Flow REST API V4 documentation and click on the heading Migrating from REST API V4.
 

As of FME Flow 2026.1, Flow App API tokens have been deprecated. Flow App permissions will no longer be configured via token permissions; instead, they will be set by the user when creating the Flow App and secured via a Flow App Identifier. This will affect all Flow Apps (Workspace Apps, Automation Apps, AR Apps, and Gallery Apps).

For information on migrating Flow Apps from 2025.2.x or older to 2026.1, see Managing Flow App Permissions in FME Flow 2026.1 or Newer.

Introduction

Security is always a significant consideration when working with any online service. The REST API works with security in two ways: authorization and authentication. Authentication proves that the user is who they say they are. Authorization verifies that the user is authorized to make the call.

Most calls to FME Flow (formerly FME Server) require authorization. The REST API uses tokens to prove the user is permitted to make the call to the server. A token is a string of encrypted information that is sent between the client and the server. Token Security will not be as secure as other methods, as the security of the system depends on controlling access to the tokens. 

While creating tokens to use with the REST API, try to limit the permissions the token is given. If the token is exposed, there will be limited access to the rest of the server. 

 

Types of Tokens

There are two types of tokens in FME Flow: API and Session. 

 

API Tokens

API Tokens should be used to provide applications with unauthenticated access to components in FME Flow. One example of using an API Token is if you would like to share your workspace either through an FME Flow App or a Webhook URL. Depending on what method you choose, you may need to generate the token separately through the Token Management page, or the token creation may be included as a step in the share workspace process. 
From the Token Management page, API Tokens can be enabled, disabled, duplicated, or removed, and all expired tokens will also be listed.

An API token has no permissions until you assign them. The token does not inherit the permissions of the user account that created it. This is true even when an administrator account creates the token. Assign only the permissions the task needs. You can change a token's permissions later: click the token, update its permissions, and click Save. The change takes effect when you save. For the minimum permissions for common tasks, see Permissions by Task later in this article.

 

Session Tokens

Session Tokens are assigned all the permissions that the user who created them has. These should be short-lived and are designed to be used by FME Flow's internal services and for testing purposes. Session tokens have fewer actions available than API tokens: they cannot be duplicated and once expired, these cannot be re-activated.

Token Type Created By Default Expiry Time
Web Application (SSO) Login Log in to FME Flow Web UI 30 minutes (FME Flow automatically extends this period if you remain logged in for more than 25 minutes)
Token Service Login Created using fmetoken/generate endpoint 5 minutes (unless otherwise specified in the query string parameters)
FME REST API When you 'get token' from FME Flow REST API V4 1 hour

It is possible this list may expand in the future.

These tokens should not be used in applications or shared between users. Expired Session Tokens have a clean-up task and are removed by default once they are a week old.

 

Obtaining API Tokens

API Tokens can be obtained manually via the Token Management page. These tokens can be downloaded and used in external applications. Additionally, tokens can be automatically created when building an FME Flow App or creating a webhook. How to manually create a token will be outlined below. 

 

Obtaining a Token Through the Token Management Page

1. Log into FME Flow
Open the FME Flow Web Interface and log into an account with permissions to create a new user and tokens. 

 

2. Open the Tokens Management Page
In the top-right corner, click on the user icon, and from the drop-down select Manage Tokens. 


Depending on your level of permissions, you may see API Tokens, Session Tokens, All Tokens as tabs across the top of the Token Management page. For this demo, we will be focusing on API tokens. To learn more about the other options, see the documentation.


3. Create a New Token - Metadata
In the API Token section, click on New to create a new token. 


On the Create New API Token page, enter the following parameters:

  • Token Name: REST API Demo
  • Description: Token to be used during training
  • Enabled: On
  • Expiration: 1 week
  • All Permissions: Off


4. Assign Permissions to Token
Next, we need to assign permissions to the token. This token can list, download, and run workspaces in the Samples repository. Other tasks need different permissions. See Permissions by Task later in this article, and set the permissions for your specific use case. To learn more about what each permission includes, see the documentation: expand To Create an API Token > About permissions in FME Flow, then expand the permission of interest. 

Permission Level of Permission
Repositories Access
Individual Repositories - Click the drop-down arrow to expand the section Samples = Download, Read, Run
Resources Access
Run Workspace Access


If you are creating a web application, the permissions for the token should be limited to a specific repository.

This baseline lets a token list, download, and run workspaces in the Samples repository. It does not cover every task in the REST API articles. For example, with this baseline, viewing a job's status or result returns a 403 error. Those requests need Jobs > Manage. See Permissions by Task later in this article for the minimum permissions for each task.

Once the permissions have been set, click Create. 

 

5. Download Token
Once the token has been created, you will see a page with your token visible. This is the only time you’ll be able to see this token within FME Flow. To access it later, click the Download button to download the token. 


The token is downloaded in an unsecured text (.txt) file. 

 

Obtaining a Token Through FME Flow REST API V4

Tokens can be created using the FME Flow REST API by making a POST request. Within the request body, either secondsToExpiry or expiration must be specified, but not both. There are no additional parameters required. The request URL is http://<yourFMEFlowHost>/fmeapiv4/tokens, where <yourFMEFlowHost> is the specific name of your FME Flow. 

Please see the sample request body below:

{
 "name": "string",
 "description": "string",
 "ownerID": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
 "enabled": true,
 "customPermissions": true,
 "secondsToExpiry": 0,
 "expiration": "2025-07-29T20:44:40.785Z"
}

To test this API call, you can access the API documentation through your FME Flow web UI. On the homescreen, click the question mark icon at the top right corner and select REST API.

 

Select API Endpoints, and scroll to the Tokens header. Click the arrow to open all the token endpoints and select POST /tokens. Next, click Try it out, and you'll be prompted to log in to your FME Flow. After you enter your credentials, click Execute, and the responses will be shown below.

 

Grant Additional Permissions

There are many intertwined features within FME Flow that rely on permissions for other features to work, such as Automations. After clicking OK, depending on which permissions were set, a pop-up dialog may appear asking to grant additional permissions for other features. When creating the token, it is important to evaluate whether or not the token user will actually need access to these features.
GrantAdditional.png

 

Using a Token

Tokens can be included in the authorization header or in the query parameter

Authorization Header

Including the token inside the Request Header is the preferred method. This is because the token will be hidden inside the call. 

The name of the header would be Authorization, and the Value would be:

fmetoken token=<yourTOKEN>

Replace everything after the = with your token that you downloaded from FME Flow. 

 

Query Parameter

You may include the token right in the Request URL of the call. This is a quick and easy way to use a call that requires a token.

http://<yourServerHost>/fmeinfo/general?fmetoken=<yourTOKEN>

However, this is not recommended because the token will be visible in the URL.

 

Permissions by Task

This section lists the minimum API token permissions confirmed for common REST API tasks. The permissions were tested against FME Flow 2026.3 with API tokens, and they apply to REST API requests. According to the FME Flow documentation, jobs submitted through FME Flow Web Services, such as Job Submitter, Data Download, and Data Streaming, also need access to the service. See Configuring Authentication for the FME Flow Web Services.

 

How Token Permissions Work

Permissions in Token Management work at two levels. The FME Flow documentation lists them as general permissions and individual permissions for each item. General permissions are the checkboxes on the category row, such as Access, Create, Manage, Upload, and Advanced. Jobs, Run Workspace, and Queue Control only have general permissions. Item permissions are set on individual items. Categories such as Repositories and Automations have an arrow on the right of the row. Click the arrow to open a list of items. Then select the permissions for each item, such as Run for one repository or Webhooks for one automation.

On many categories, selecting Create, Manage, or Advanced on the category row also selects Access and locks it. For example, Jobs > Manage always includes Jobs > Access. Repositories > Create and Run Workspace > Advanced work the same way. This does not apply to every permission. For example, Packages > Upload can be selected alone. Depending on the permissions you select, a dialog can also ask you to grant additional permissions for related features. See Grant Additional Permissions above.

You do not need the category Access checkbox for the tasks in this section. For Repositories and Automations, the item permissions worked with the category Access checkbox cleared. According to the FME Flow documentation, the Repositories Access checkbox controls whether users can open the Workspaces page, and only Run on the repository is needed to run a workspace.

This section writes item permissions as Category > Item > Permission, for example Repositories > Training > Run. It writes general permissions as Category > Permission, for example Jobs > Manage.

 

Repository Tasks

Each table lists the endpoint used in testing.

Task Endpoint Permission Notes
List repositories or workspaces GET /repositories, GET /workspaces Repositories > [repository name] > Read Both lists only include items from repositories the token has Read on. If a list looks incomplete, check Read on each repository.
Submit a job POST /jobs Repositories > [repository name] > Run Run Workspace access is not required. No other permission was needed.
Submit a job with directives (priority, queue, or runtime limits) POST /jobs Repositories > [repository name] > Run Same as a basic job submit. The request is accepted with the priority, queue, and maxJobRuntime directives. According to the FME Flow documentation, Run Workspace > Advanced gives access to job directives in the Web UI. It is not needed to send directives in the REST API request.
Use an existing Web Connection in a workspace POST /jobs Repositories > [repository name] > Run A job for a workspace that uses a Web Connection completed with this permission only.
Download a workspace GET /repositories/{repository}/items/{item}/download Repositories > [repository name] > Download Repository names are case-sensitive. In a download request, training returned a 403 error and Training succeeded.
Get a workspace's user parameters GET /workspaces/{repository}/{workspace}/parameters Repositories > [repository name] > Read Read alone is enough.
Publish a workspace POST /repositories/{repository}/items/upload Repositories > [repository name] > Publish This row covers publishing a workspace that has no connections or packages.
Upload a resource file to a workspace POST /repositories/{repository}/items/{item}/resources Repositories > [repository name] > Publish This row covers files attached to a workspace in a repository.

 

Job Tasks

Task Endpoint Permission Notes
Get a job's details, result, or log GET /jobs/{id}, GET /jobs/{id}/result, GET /jobs/{id}/log Jobs > Manage Manage selects Access automatically. Access alone returned a 403 error, even on a job submitted by the same token. /result and /log also worked on another user's job.
View job history GET /jobs?status={status} Jobs > Manage

The text after the ? is a query parameter. The status parameter is required. It chooses which jobs the list returns: queued, running, success, failure, or cancelled. Queue Control permissions are not required. 

If you use Try it out in the REST API documentation, clear leftover example values in fields such as startedOn and finishedOn. These values are sent with the request and can make the list return 0 results.

Delete a job's history record DELETE /jobs/{id} Jobs > Manage This removes the history record of a completed job.

 

Automation Tasks

Task Endpoint Permission Notes
Start or stop an Automation PUT /automations/{id}/enabled Automations > [automation name] > Run Use enabled: true to start and enabled: false to stop. Both were tested.
View an Automation's details GET /automations/{id} Automations > [automation name] > Read Read alone is enough.
Call an authenticated Automation webhook POST /automations/{automation-id}/{webhook-trigger-id}/message Automations > [automation name] > Webhooks Send the token in the Authorization header. The Automation must also be enabled. Otherwise, the request returns a 404 error with the message "Cannot find webhook trigger." A request with no credentials returns a 401 error with the message "No acceptable credentials provided."

 

Troubleshooting

A 403 error usually means the token is missing a permission. Check the tables above and add only what the task needs. A 403 message can also mean the object does not exist. For example, training returned a 403 error on a download request because the repository is named Training. In a POST /jobs request, the same mistake returned a 404 error. On the jobs endpoints, the message read: Unauthorized request by user [username] due to lack of proper permissions or the object does not exist. For 401 errors, see FME Flow Troubleshooting: REST API. For other token problems, see FME Flow Troubleshooting: Tokens.

Do not give a token All Permissions to fix a 403 error. A 403 error means FME Flow recognized the token, but the token does not have the permission for that action. Assign only the permissions the task needs. To add a missing permission, click the token in Token Management, update its permissions, and click Save. The change takes effect when you save, so you can send the request again. Avoid Select All on item lists. It selects every permission for every item in the list.

 

​​​​Additional Resources

Tutorial: Getting Started with APIs
REST API Documentation
Managing Security Tokens Documentation

Was this article helpful?

We're sorry to hear that.

Please tell us why.