ixp
latest
false
UiPath logo, featuring letters U and I in white

Communications Mining user guide

Last updated Mar 13, 2026

Using the API

Note:

We strive to make the API predictable, as well as easy to use and integrate. If you have any feedback that could help us improve it, or if you encounter any issues or unexpected behavior, contact support. We will get back to you as soon as possible.

API endpoint

All API requests are sent to Communications Mining™ as JSON objects to your tenant endpoint over HTTPS.

Note:

You can view all available endpoints in the . Additionally, you can check the API Tutorial.

Tenants onboarded via UiPath®:

https://cloud.uipath.com/<my_uipath_organisation>/<my_uipath_tenant>/reinfer_/api/...
https://cloud.uipath.com/<my_uipath_organisation>/<my_uipath_tenant>/reinfer_/api/...

Tenants onboarded via Communications Mining:

https://<mydomain>.reinfer.io/api/...
https://<mydomain>.reinfer.io/api/...
Important:

In Communications Mining™, development and production data and workflows can be separated either by having separate tenants, or by placing them in separate projects in the same tenant. In each case the data access is permissioned separately , so that developers can have admin access to development data while stricter controls can be placed on production. If using separate tenants then the API endpoint is different for each of development and production data; if using separate projects in the same tenant then that single tenant's endpoint is used for both.

Authentication

All API requests require authentication to identify the user making the request. Two authentication methods are supported: developer API tokens and External Applications (OAuth Client Credentials).

To obtain the developer access token, proceed as follows:

  1. Access IXP from Automation Cloud.

  2. Go to the Administration page.

  3. Select My Account.

  4. Under API token, select the Regenerate button, which will generate an access token.

    This image depicts the regenerate button under the API token section on the Administration page.

Note:

You can have only one API token active at a time. Generating a new token will invalidate the previous one.

You need to include the following HTTP header for every API call you make, where $REINFER_TOKEN is your Communications Mining™ API token.

Authorization: Bearer $REINFER_TOKEN
Authorization: Bearer $REINFER_TOKEN

The bash examples in the assume that you have saved your token in an environment variable. The Python and Node examples in the assume that the token has been stored in a local variable REINFER_TOKEN via your chosen config solution.

Bash

curl -X GET 'https://<my_api_endpoint>/api/...' \
    -H "Authorization: Bearer $REINFER_TOKEN"
curl -X GET 'https://<my_api_endpoint>/api/...' \
    -H "Authorization: Bearer $REINFER_TOKEN"

Node

const request = require("request");

request.get(
  {
    url: "https://<my_api_endpoint>/api/...",
    headers: {
      Authorization: "Bearer " + process.env.REINFER_TOKEN,
    },
  },
  function (error, response, json) {
    // digest response
    console.log(JSON.stringify(json, null, 2));
  }
);
const request = require("request");

request.get(
  {
    url: "https://<my_api_endpoint>/api/...",
    headers: {
      Authorization: "Bearer " + process.env.REINFER_TOKEN,
    },
  },
  function (error, response, json) {
    // digest response
    console.log(JSON.stringify(json, null, 2));
  }
);

Python

import json
import os

import requests

response = requests.get(
    "https://<my_api_endpoint>/api/...",
    headers={"Authorization": "Bearer " + os.environ["REINFER_TOKEN"]},
)

print(json.dumps(response.json(), indent=2, sort_keys=True))
import json
import os

import requests

response = requests.get(
    "https://<my_api_endpoint>/api/...",
    headers={"Authorization": "Bearer " + os.environ["REINFER_TOKEN"]},
)

print(json.dumps(response.json(), indent=2, sort_keys=True))

Response

{
  "status": "ok"
}
{
  "status": "ok"
}

Authentication with external applications

For automated or server-to-server integrations where a developer API token is not appropriate, you can authenticate using an External Application with the Client Credentials flow.

Step 1: Create an external application

An administrator must create a Confidential application and configure the required scopes based on which APIs you need to access.

Required scopes:

  • PM.User
  • PM.User.Read
  • Ixp.ApiAccess
Important:

Save the App ID and App Secret immediately after creation, as you cannot retrieve the secret later.

For the complete instructions, check Managing External Applications.

Step 2: Assign application permissions

After creating the external application, you must assign it the appropriate permissions before it can access resources.

  1. Navigate to the Manage Access page in IXP in your UiPath environment.
  2. Search for your application by the name you gave it when you created it.
  3. Assign the necessary roles to the application. The application will appear in the list just like regular users.
  4. Save the role assignments.

For the complete permission assignment details, check Managing User and Group Roles.

Step 3: Authenticate using the client credentials flow

Use the Client Credentials grant type to obtain an access token.

Required parameters:

  • grant_type=client_credentials
  • client_id={app_id} - from Step 1
  • client_secret={app_secret} - from Step 1
  • scope - the scopes you configured in Step 1 (space-separated)

For the complete authentication details, check External Applications (OAuth).

Step 4: Use the access token

Once you have an access token, include it in the Authorization header for all API requests.

Authorization: Bearer {access_token}
Authorization: Bearer {access_token}

Example request:

curl -X GET "https://cloud.uipath.com/{organizationName}/{tenantName}/reinfer_/api/v1/datasets" \
  -H "Authorization: Bearer {access_token}" \
  -H "Accept: application/json"
curl -X GET "https://cloud.uipath.com/{organizationName}/{tenantName}/reinfer_/api/v1/datasets" \
  -H "Authorization: Bearer {access_token}" \
  -H "Accept: application/json"
Note:

Replace {organizationName}, {tenantName}, and {access_token} with your actual values.

Permissions

Each API endpoint in the lists its required permissions. To view the permissions you have, go to the Manage Access tab on the Administration page. The tab shows the projects you have access to and the permissions you have in each project.

Errors

We use conventional HTTP response codes to indicate success or failure of an API request. In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that resulted from the provided request and codes in the 5xx range indicate a problem with Communications Mining.

Requests that error will also return a body with a status value of error, instead of ok, and an error message describing the error.

Bash

curl -X GET 'https://<my_api_endpoint>/api/v1/nonexistent_page' \
    -H "Authorization: Bearer $REINFER_TOKEN"
curl -X GET 'https://<my_api_endpoint>/api/v1/nonexistent_page' \
    -H "Authorization: Bearer $REINFER_TOKEN"

Node

const request = require("request");

request.get(
  {
    url: "https://<my_api_endpoint>/api/v1/nonexistent_page",
    headers: {
      Authorization: "Bearer " + process.env.REINFER_TOKEN,
    },
  },
  function (error, response, json) {
    // digest response
    console.log(JSON.stringify(json, null, 2));
  }
);
const request = require("request");

request.get(
  {
    url: "https://<my_api_endpoint>/api/v1/nonexistent_page",
    headers: {
      Authorization: "Bearer " + process.env.REINFER_TOKEN,
    },
  },
  function (error, response, json) {
    // digest response
    console.log(JSON.stringify(json, null, 2));
  }
);

Python

import json
import os

import requests

response = requests.get(
    "https://<my_api_endpoint>/api/v1/nonexistent_page",
    headers={"Authorization": "Bearer " + os.environ["REINFER_TOKEN"]},
)

print(json.dumps(response.json(), indent=2, sort_keys=True))
import json
import os

import requests

response = requests.get(
    "https://<my_api_endpoint>/api/v1/nonexistent_page",
    headers={"Authorization": "Bearer " + os.environ["REINFER_TOKEN"]},
)

print(json.dumps(response.json(), indent=2, sort_keys=True))

Response

{
  "message": "404 Not Found",
  "status": "error"
}
{
  "message": "404 Not Found",
  "status": "error"
}
Note:

Your request can fail due to issues in your network before it reaches Communications Mining. In such cases, the response you receive will look different from the previously-described Communications Mining error response.

Performance timing

We use the Server-Timing HTTP header to communicate the time taken for requests to our API to be processed. We include a single metric, total, which you can use to measure how long our platform took to process your request free from latency of the network request.

An example of the header as it shows in a response:

Server-Timing: total;dur=37.7
Server-Timing: total;dur=37.7

Server-Timing values are always in milliseconds, so in this case the API request with this header value took 37.7 milliseconds to process on our platform.

Was this page helpful?

Connect

Need help? Support

Want to learn? UiPath Academy

Have questions? UiPath Forum

Stay updated