Create a New Azure App Registration
This guide should only be performed once per Azure Tenant.
The App Registration should be created in the same tenant where the Azure Subscriptions are located.
In order to allow Microsoft 365 License optimization, you must grant admin consent for the Directory.Read.All, the Agreement.Read.All, the AuditLog.Read.All and the Reports.Read.All permissions.
(Steps 5 to 18 in the Azure Portal method)
This guide will walk you through the process of creating a new Azure App Registration in your Azure Tenant.
Prerequisites
In order to create a new Azure App Registration, you need the following prerequisites:
- An Active Azure Tenant.
- The following permissions Microsoft Entra ID Permissions:
microsoft.directory/applications/createAsOwnermicrosoft.directory/oAuth2PermissionGrants/createAsOwnermicrosoft.directory/servicePrincipals/createAsOwnermicrosoft.directory/servicePrincipals/managePermissionGrantsForAll.microsoft-company-admin(the listed permissions are part of theApplication Administratorrole)
- If you have Conditional Access Policies enabled, you need to ensure that the App Registration can bypass the policies.
(Please contact our support for more information)
Instructions
To create Chronom's App Registration, follow the steps below:
- Azure Portal
- Azure CLI (bash)
- Azure CLI (PowerShell)
-
Browse to the Application Registration Creation page in the Azure Portal.
(Make sure you are logged in to the correct Azure Tenant)tipIf the link does not work, you can navigate to the
Entra IDservice and click on theApp registrationssection inside Azure Portal,
then click on the+ New registrationbutton. -
Fill in the following details:
- Name:
Chronom Read-Only App Registration - Supported account types:
Accounts in this organizational directory only (Microsoft only - Single tenant) - Redirect URI:
- Platform:
web - URI:
https://app.chronom.ai
- Platform:
- Click on the
Registerbutton.

- Name:
-
Once the App Registration is created, Take note of the following details:
- Application (client) ID
- Directory (tenant) ID
noteAfter the initial creation, an enterprise application is created automatically. To configure API permissions and client secrets, you need to navigate to the App Registration. You can find it by going to
Entra ID→App registrations→Chronom Read-Only App Registration, or by staying on the current page after registration. -
Navigate to the
API permissionssection under theManageon the left-hand side menu.
(If you already have theUser.Readpermission, you can skip to step 9.)
-
Click on the
+ Add a permissionbutton and selectMicrosoft Graphfrom the list of APIs.
-
Select
Delegated permissionsand search forUser.Readin the search bar.
-
Under the
Usercategory, select theUser.Readpermission and click on theAdd permissionsbutton.
-
Click on the
+ Add a permissionbutton and selectMicrosoft Graphfrom the list of APIs.
-
Select
Application permissionsand search forDirectory.Read.Allin the search bar.
-
Under the
Directorycategory, select theDirectory.Read.Allpermission and click on theAdd permissionsbutton.
-
Click on the
+ Add a permissionbutton and selectMicrosoft Graphfrom the list of APIs.
-
Select
Application permissionsand search forAgreement.Read.Allin the search bar. -
Under the
Policycategory, select theAgreement.Read.Allpermission and click on theAdd permissionsbutton. -
Click on the
+ Add a permissionbutton and selectMicrosoft Graphfrom the list of APIs.
-
Select
Application permissionsand search forAuditLog.Read.Allin the search bar. -
Under the
Audit Logscategory, select theAuditLog.Read.Allpermission and click on theAdd permissionsbutton.
-
Click on the
+ Add a permissionbutton and selectMicrosoft Graphfrom the list of APIs.
-
Select
Application permissionsand search forReports.Read.Allin the search bar. -
Under the
Reportscategory, select theReports.Read.Allpermission and click on theAdd permissionsbutton. -
Click on the
Grant admin consent for <Your Tenant>button to grant the permissions and confirm by clickingYes.
-
Navigate to the
Certificates & secretssection under theManageon the left-hand side menu.
-
Click on the
+ New client secretbutton under theClient secretstab and fill in the following details:
- Description:
Chronom Read-Only Secret - Expires:
730 days (24 months) - Click on the
Addbutton.

- Once the secret is created, take note of the
Valueas it will be used to authenticate the App Registration in Chronom.
Handle with Extreme Care!
Client Secret is considered a highly sensitive credential.
Make sure to store it in a secure location and only share it via Chronom's Integrations Page.
Chronom will never ask you for your Client Secret via email or any other communication channel.
Do not share your Client Secret with anyone else.
The Client Secret is only displayed once after creation.
24. On a new tab, navigate to Chronom's Integrations Page and click on the + Add a new Tenant button.
25. Fill in the Details and click on the Save button:
- Tenant Name: The name of the Azure Tenant where the App Registration was created.
- Tenant ID: The Directory (tenant) ID of the App Registration.
- Application ID: The Application (client) ID of the App Registration.
- Client Secret: The Value of the Client Secret created in the previous step.

All steps below should be executed in the same bash session.
It is recommended to copy and paste the commands one by one to avoid any mistakes.
The steps below assume you have Azure CLI installed and configured with the necessary permissions.
If you haven't installed Azure CLI yet, you can follow the instructions here.
-
If not already installed, install jq by following the instructions here.
-
Authenticate Azure CLI with the Tenant where your subscriptions are by running the following command:
az login -
Create the App Registration by running the following command:
appRegistration=$(az ad app create --display-name "Chronom Read-Only App Registration" \
--sign-in-audience "AzureADMyOrg" \
--web-redirect-uris "https://app.chronom.ai")
clientId=$(echo $appRegistration | jq -r '.appId')
tenantId=$(az account show --query tenantId -o tsv)
echo "Application (client) ID: $clientId"
echo "Directory (tenant) ID: $tenantId" -
Grant
User.ReadAPI Permissions to the App Registration by running the following command:az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope
az ad sp create --id $clientId
az ad app permission grant --id $clientId --api 00000003-0000-0000-c000-000000000000 --scope "User.Read" -
Grant
Directory.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role
az ad app permission admin-consent --id $clientId -
Grant
Agreement.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions 2f3e6f8c-093b-4c57-a58b-ba5ce494a169=Role
az ad app permission admin-consent --id $clientId -
Grant
AuditLog.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions b0afded3-3588-46d8-8b3d-9842eff778da=Role
az ad app permission admin-consent --id $clientId -
Grant
Reports.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions 230c1aed-a721-4c5d-9cb4-a90514e508ef=Role
az ad app permission admin-consent --id $clientId -
Create a new client secret by running the following command:
dangerHandle with Extreme Care!
Client Secret is considered a highly sensitive credential.
Make sure to store it in a secure location and only share it via Chronom's Integrations Page.
Chronom will never ask you for your Client Secret via email or any other communication channel.
Do not share your Client Secret with anyone else.clientSecret=$(az ad app credential reset --id "$clientId" \
--display-name "Chronom Read-Only Secret" \
--years 2)
clientSecretValue=$(echo $clientSecret | jq -r '.password')
echo "Client Secret Value: $clientSecretValue" -
Navigate to Chronom's Integrations Page and click on the
+ Add a new Tenantbutton.
-
Fill in the Details and click on the
Savebutton:- Tenant Name: The name of the Azure Tenant where the App Registration was created.
- Tenant ID: The Directory (tenant) ID of the App Registration.
- Application ID: The Application (client) ID of the App Registration.
- Client Secret: The Value of the Client Secret created in the previous step.

The complete Bash script
#!/bin/bash
# Authenticate Azure CLI
az login
# Create the App Registration
appRegistration=$(az ad app create --display-name "Chronom Read-Only App Registration" \
--sign-in-audience "AzureADMyOrg" \
--web-redirect-uris "https://app.chronom.ai")
clientId=$(echo $appRegistration | jq -r '.appId')
tenantId=$(az account show --query tenantId -o tsv)
# Grant User.Read API Permissions
az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope
az ad sp create --id $clientId
az ad app permission grant --id $clientId --api 00000003-0000-0000-c000-000000000000 --scope "User.Read"
# Grant Directory.Read.All API Permissions
az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role
az ad app permission admin-consent --id $clientId
# Grant Agreement.Read.All API Permissions
az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions 2f3e6f8c-093b-4c57-a58b-ba5ce494a169=Role
az ad app permission admin-consent --id $clientId
# Grant AuditLog.Read.All API Permissions
az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions b0afded3-3588-46d8-8b3d-9842eff778da=Role
az ad app permission admin-consent --id $clientId
# Grant Reports.Read.All API Permissions
az ad app permission add --id "$clientId" \
--api 00000003-0000-0000-c000-000000000000 \
--api-permissions 230c1aed-a721-4c5d-9cb4-a90514e508ef=Role
az ad app permission admin-consent --id $clientId
# Create a new client secret
clientSecret=$(az ad app credential reset --id "$clientId" \
--display-name "Chronom Read-Only Secret" \
--years 2)
clientSecretValue=$(echo $clientSecret | jq -r '.password')
# Output the App Registration details
echo
echo "Application (client) ID: $clientId"
echo "Directory (tenant) ID: $tenantId"
echo "Client Secret Value: $clientSecretValue"
All steps below should be executed in the same PowerShell session.
It is recommended to copy and paste the commands one by one to avoid any mistakes.
The steps below assume you have Azure CLI installed and configured with the necessary permissions.
If you haven't installed Azure CLI yet, you can follow the instructions here.
-
Authenticate Azure CLI with the Tenant where your subscriptions are by running the following command:
az login -
Create the App Registration by running the following command:
$appRegistration = az ad app create --display-name "Chronom Read-Only App Registration" `
--sign-in-audience "AzureADMyOrg" `
--web-redirect-uris "https://app.chronom.ai" | ConvertFrom-Json
$clientId = $appRegistration.appId
$tenantId = (az account show --query tenantId -o tsv).Trim()
Write-Host "Application (client) ID: $clientId"
Write-Host "Directory (tenant) ID: $tenantId" -
Grant
User.ReadAPI Permissions to the App Registration by running the following command:az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope
az ad sp create --id $clientId
az ad app permission grant --id $clientId --api 00000003-0000-0000-c000-000000000000 --scope "User.Read" -
Grant
Directory.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role
az ad app permission admin-consent --id $clientId -
Grant
Agreement.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions 2f3e6f8c-093b-4c57-a58b-ba5ce494a169=Role
az ad app permission admin-consent --id $clientId -
Grant
AuditLog.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions b0afded3-3588-46d8-8b3d-9842eff778da=Role
az ad app permission admin-consent --id $clientId -
Grant
Reports.Read.AllAPI Permissions to the App Registration with Admin Consent by running the following command:az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions 230c1aed-a721-4c5d-9cb4-a90514e508ef=Role
az ad app permission admin-consent --id $clientId -
Create a new client secret by running the following command:
dangerHandle with Extreme Care!
Client Secret is considered a highly sensitive credential.
Make sure to store it in a secure location and only share it via Chronom's Integrations Page.
Chronom will never ask you for your Client Secret via email or any other communication channel.
Do not share your Client Secret with anyone else.$clientSecret = az ad app credential reset --id $clientId `
--display-name "Chronom Read-Only Secret" `
--years 2 | ConvertFrom-Json
$clientSecretValue = $clientSecret.password
Write-Host "Client Secret Value: $clientSecretValue" -
Navigate to Chronom's Integrations Page and click on the
+ Add a new Tenantbutton.
-
Fill in the Details and click on the
Savebutton:- Tenant Name: The name of the Azure Tenant where the App Registration was created.
- Tenant ID: The Directory (tenant) ID of the App Registration.
- Application ID: The Application (client) ID of the App Registration.
- Client Secret: The Value of the Client Secret created in the previous step.

The complete PowerShell script
# Authenticate Azure CLI
az login
# Create the App Registration
$appRegistration = az ad app create --display-name "Chronom Read-Only App Registration" `
--sign-in-audience "AzureADMyOrg" `
--web-redirect-uris "https://app.chronom.ai" | ConvertFrom-Json
$clientId = $appRegistration.appId
$tenantId = (az account show --query tenantId -o tsv).Trim()
# Grant User.Read API Permissions
az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope
az ad sp create --id $clientId
az ad app permission grant --id $clientId --api 00000003-0000-0000-c000-000000000000 --scope "User.Read"
# Grant Directory.Read.All API Permissions
az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role
az ad app permission admin-consent --id $clientId
# Grant Agreement.Read.All API Permissions
az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions 2f3e6f8c-093b-4c57-a58b-ba5ce494a169=Role
az ad app permission admin-consent --id $clientId
# Grant AuditLog.Read.All API Permissions
az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions b0afded3-3588-46d8-8b3d-9842eff778da=Role
az ad app permission admin-consent --id $clientId
# Grant Reports.Read.All API Permissions
az ad app permission add --id $clientId `
--api 00000003-0000-0000-c000-000000000000 `
--api-permissions 230c1aed-a721-4c5d-9cb4-a90514e508ef=Role
az ad app permission admin-consent --id $clientId
# Create a new client secret
$clientSecret = az ad app credential reset --id $clientId `
--display-name "Chronom Read-Only Secret" `
--years 2 | ConvertFrom-Json
$clientSecretValue = $clientSecret.password
# Output the App Registration details
write-host
Write-Host "Application (client) ID: $clientId"
Write-Host "Directory (tenant) ID: $tenantId"
Write-Host "Client Secret Value: $clientSecretValue"
After adding your Azure Tenant and saving the details, you are ready to proceed to the next stage: connecting your Management Group(s) or Subscription(s) to Chronom.
Continue to the Add Subscription guide to complete the integration process.
Continue to the Add Management Group guide to complete the integration process.