Badge claimed: Stairway to Heaven
With our solution being a hybrid solution, combining both Power Platform and other resources for the best of both worlds, we use multiple APIs to tie it all together.
Dataverse Web API
Data going back and forth between our Azure Functions backend-for-frontend and Dataverse is handled by the Dataverse Web API. We query and update our Dataverse tables using OData, which is parsed and transformed into DTOs used between our frontend and backend, all with proper authorization logic, making sure the data is secure.
...
var resourceTypeRequestUrl = $"{dataverseBaseUrl}/api/data/v9.2/creep_resourcetypes?$filter=creep_resourcetypeid eq {resourceTypeId}";
var resourceTypeResponse = await client.GetAsync(resourceTypeRequestUrl);
...
var result = new ChunkWithResourceTypeDto(
Id: chunk.creep_spawnchunkid.ToString(),
Name: chunk.creep_spawnchunk ?? string.Empty,
ResourceTypeId: chunk._creep_resourcetype_value,
LocationId: chunk._creep_spawnlocationid_value,
MinerId: chunk._creep_miner_value,
Amount: chunk.creep_amount,
StatusCode: chunk.statuscode,
ResourceType: resourceTypeDto);
return new OkObjectResult(result);
...
Entra ID
To make sure our different resources only has access to the necessary data, we use Managed Identities for authentication. In our Azure Functions app we request properly scoped access tokens for use with the Dataverse Web API.
...
TokenCredential credential = new DefaultAzureCredential();
var scope = $"{dataverseBaseUrl}/.default";
var accessToken = await credential.GetTokenAsync(
new TokenRequestContext(new[] { scope }),
CancellationToken.None);
...
Copilot Studio
To allow our Power Automate flows to communicate with Copilot Studio, we have configured Dataverse connectors, using flow actions to trigger our Copilot agents.

Azure Resource Manager
Our CI/CD configuration handles building and deployment from our repositories in Azure DevOps to our Azure resources. Azure Pipelines deploys using an Azure Resource Manager service connection and tasks/CLI that call Azure’s management (ARM) APIs.