When we talk about Power Platform, we usually think of low-code applications, automations with Power Automate, or experiences built quickly with Canvas Apps.
However, one of the great strengths of the Microsoft ecosystem is that, when business needs grow, we can extend the platform with professional development capabilities without leaving Dataverse.
In this session at Power Platform Barcelona, we had the opportunity to delve into Dataverse’s Custom APIs. This feature lets you encapsulate business logic in C# code and expose it for use across different Power Platform components.

What are Custom APIs really?
A Custom API is, in essence, code that we deploy in Dataverse and that we can invoke whenever we need to. Unlike plugins, which automatically react to events such as the creation or updating of records, Custom APIs are explicitly called by our external applications, flows, or systems.
This allows us to centralize complex logic and reuse it from multiple points:
- Power Automate
- Canvas Apps
- Model-Driven Apps
- External applications connected to Dataverse
- Azure Functions
- Automation scenarios on and Copilot-based agents
The most important message: lose your fear of Pro Code
One of the messages I liked the most from the session was a very simple reflection:
Power Platform is still low code because we add code where it adds value.
For years, many teams have avoided developing extensions because the cost of entry was high. Today the reality is different. Tools such as GitHub Copilot allow you to generate the structure of plugins and Custom APIs in seconds, greatly reducing the time needed to build advanced solutions.
The question is no longer whether we know how to write all the code manually.
The question is: Are we taking advantage of the full potential of the platform to solve real business problems?

Use cases that deliver immediate value
During the demonstration we saw very practical examples of situations that many of us have encountered in projects:
- Convert XML to JSON.
- Process CSV files without relying on external connectors.
- Update Dataverse Rollup fields on demand.
- Manipulate PDF documents directly within the environment.
- Run complex queries to speed up integration processes.
- Generate dynamic HTML emails using reusable templates.
These are tasks that often end up being solved with multiple Power Automate actions, additional connectors, or external services. Encapsulating them in a single, reusable API greatly simplifies the architecture.
Spark Code: Reuse taken to the next level
The session also introduced Spark Code, an open-source library developed to bundle reusable functionalities based on Custom APIs. The philosophy behind the project is very simple:
Not reinventing the wheel in every project.
If a feature has already been developed, tested, and validated, it should be reusable in any Dataverse environment.
Something especially interesting is that the project incorporates good practices that we often forget when developing quick solutions
- Version Control
- Git Repository
- Unit Tests
- Validation automation
- Component reuse
An important reminder for all developers
There was one part of the conversation that deserves to be highlighted: It’s not enough to deploy an assembly in Dataverse.
The source code must be versioned and stored on GitHub, Azure DevOps or any suitable repository. All of us who have been working with Power Platform for a long time have inherited a solution where the plugin exists… but no one knows where the original code is.
And when that happens, the cost of maintenance skyrockets.
The conclusion
Custom APIs represent one of the most powerful tools to extend Dataverse and Power Platform in a controlled, reusable and scalable way. They do not replace low code. They complement it.
The best solutions aren’t the ones that use Power Automate alone, or the ones that solve everything with code.
The best solutions are those that find the balance between speed, reuse, governance, and maintenance.
And in that balance, Custom APIs have a lot to contribute.
Are you already using Custom APIs in your projects? What functionalities do you repeat over and over again, and would you like to turn into reusable components?