API Connectivity
Altus stores its data in the customer's Microsoft Dataverse environment. For complex or high-volume integrations, connect directly to the Dataverse Web API to read and write Altus tables, and call Altus custom APIs where they provide the required business operation.
Use Power Automate for simple event-driven integrations. Use an integration service or enterprise service bus for orchestration, transformation, retries, and other complex integration requirements.
Prerequisites
Before you begin, ensure that you have:
- Access to the target Power Platform environment.
- An account in the environment's Microsoft Entra tenant.
- Permission to create a Microsoft Entra app registration, or support from an Entra administrator.
- A Dataverse application user for the integration.
- A security role that grants the application user the minimum required access to the Altus tables and operations.
Important
Use a dedicated Dataverse application user for unattended integrations. Do not use a named user's credentials or grant broader privileges than the integration requires.
Configure authentication
- In the Power Platform admin center, select the target environment and record its Dataverse URL, for example
https://contoso.crm6.dynamics.com. - In the Microsoft Entra admin center, create a single-tenant app registration for the integration. Record its application (client) ID and directory (tenant) ID.
- Create a client secret or configure a certificate for the app registration. Store the credential in a secure secret store.
- In the target environment, create an application user for the app registration and assign a security role with the required Dataverse table permissions.
For the full Microsoft procedure, see Authenticate to Dataverse with OAuth.
Obtain an access token
Use the OAuth 2.0 client credentials flow. Send a form-encoded POST request to the tenant token endpoint:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
Include the following values in the request body:
client_id={client-id}
client_secret={client-secret}
grant_type=client_credentials
scope=https://contoso.crm6.dynamics.com/.default
Use the returned access_token in the Authorization: Bearer {access-token}
header for calls to the Dataverse Web API.
Discover the Altus data model
The Dataverse environment is the source of truth for the available Altus tables, columns, relationships, and custom APIs. Do not assume that a table or custom API is present in every environment.
Query the table metadata and use the returned EntitySetName for Web API requests. For example, the following request finds Altus tables with a sensei_ logical-name prefix:
GET https://contoso.crm6.dynamics.com/api/data/v9.2/EntityDefinitions?$select=LogicalName,EntitySetName&$filter=startswith(LogicalName,'sensei_')
Authorization: Bearer {access-token}
Accept: application/json
The LogicalName is useful for identifying a table, while EntitySetName is the collection name required by OData requests. Confirm the columns and navigation properties you need from the environment metadata before building queries.
Read and write Altus data
Use the standard Dataverse Web API and OData query options. Replace {entity-set-name} and field names with values returned by metadata for the target environment.
Retrieve records and select only the columns required:
GET https://contoso.crm6.dynamics.com/api/data/v9.2/{entity-set-name}?$select=sensei_name&$top=10
Authorization: Bearer {access-token}
Accept: application/json
Create a record with a POST request:
POST https://contoso.crm6.dynamics.com/api/data/v9.2/{entity-set-name}
Authorization: Bearer {access-token}
Content-Type: application/json
{
"sensei_name": "New Project"
}
Use $filter, $expand, paging, optimistic concurrency, and batch requests
according to the Dataverse Web API documentation.
Note
Writing directly to an Altus table can invoke Dataverse plug-ins and business rules. Validate the supported operation and required fields in a non-production environment before deploying an integration.
Call Altus custom APIs
Altus custom APIs expose business operations that are not a simple table create, update, or delete. Call a custom API with a POST request to its unique name and provide the payload defined for that API:
POST https://contoso.crm6.dynamics.com/api/data/v9.2/{custom-api-name}
Authorization: Bearer {access-token}
Content-Type: application/json
{
"parameterName": "value"
}
Consult the Plugin Functions documentation for Altus-specific functions. Confirm the API name, parameters, response, and required permissions in the target environment before use.
Validate the connection
Use a tool such as Postman to validate the integration end to end:
- Obtain a client-credentials access token.
- Query
EntityDefinitionsto discover availablesensei_tables. - Use a returned
EntitySetNameto retrieve up to 10 records from a table the application user can read.
This confirms authentication, authorisation, security-role assignment, and Web API connectivity before the integration processes business data.