Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
083a0de
Fixes in readme
magnurud Dec 5, 2025
2825abe
Attempts to return better error messages
magnurud Dec 8, 2025
aa81f19
First draft of wait and poll action
magnurud Jan 29, 2026
032af37
WIP
magnurud Jan 30, 2026
db303fb
Finally things are working
magnurud Feb 10, 2026
4b11f58
WIP
magnurud Feb 10, 2026
4699ad9
Great success
magnurud Feb 10, 2026
83cc63a
Cleaning up
magnurud Feb 11, 2026
1c045c5
Fix
magnurud Feb 11, 2026
4eba383
Update api-endpoint
magnurud Feb 11, 2026
fbd01ac
Add an extra line to the readme
magnurud Feb 11, 2026
d121158
A more complex backoff scheme
magnurud Feb 11, 2026
c0aecb3
Make it customizable
magnurud Feb 11, 2026
b2e3da2
Add missing description
magnurud Feb 11, 2026
add0b18
Fixes
magnurud Feb 11, 2026
5709678
Only max time, and lower case names
magnurud Feb 12, 2026
6028e5c
Update wording
magnurud Feb 12, 2026
aff8826
Fixes
magnurud Feb 12, 2026
9f46d26
Add missing description and x-ms-summary
magnurud Feb 16, 2026
83c92f3
Update description
magnurud Feb 16, 2026
82e2fc9
Avoid cache issues
magnurud Feb 16, 2026
c582e12
Try invalidating cache
magnurud Feb 17, 2026
926d649
Add an extra error message
magnurud Feb 19, 2026
8e939c4
Fix bug that arises when an action does not have any agent defined
magnurud Feb 20, 2026
bc477da
Fix readme
magnurud Feb 20, 2026
d555cd8
Update readme and add separate deployment instructions
magnurud Feb 20, 2026
ae65c45
Change wording
magnurud Feb 23, 2026
11a092c
Try adding actionId as a new header
magnurud Feb 24, 2026
fbffc6f
Explicitly set waitParameter to null for the trigger
magnurud Feb 25, 2026
12617ff
First draft of checking whether an action already exists
magnurud Feb 26, 2026
eddf9aa
Revert "First draft of checking whether an action already exists"
magnurud Feb 26, 2026
9d71693
Revert "Explicitly set waitParameter to null for the trigger"
magnurud Feb 26, 2026
8833f6b
Prepare api for only listing export actions that are either async or …
magnurud Feb 26, 2026
f9eb648
Prepare GetActions for only listing export actions that are either as…
magnurud Feb 26, 2026
67af641
Revert "Prepare api for only listing export actions that are either a…
magnurud Feb 26, 2026
057a7fb
Only get actions that corresonds to the async/sync flag
magnurud Feb 26, 2026
750ef1f
Make sure we only wait if the action is defined as sync
magnurud Feb 26, 2026
3ddae39
iterative testing
magnurud Feb 26, 2026
793e19a
iterative testing without results
magnurud Feb 26, 2026
9db71a1
Try removing parameters
magnurud Feb 26, 2026
c37699e
set parameters correctly
magnurud Feb 26, 2026
8811015
Revert "iterative testing without results"
magnurud Feb 26, 2026
5bcfd88
Use only dynamic-list
magnurud Feb 26, 2026
38edcd2
Set query parameters
magnurud Feb 26, 2026
a6fc903
Remove all dynamic-values when schema requires input parameters
magnurud Mar 2, 2026
d53a5af
Set waitForResult in extract action as well
magnurud Mar 2, 2026
a86b8ee
use query param instead of header
magnurud Mar 2, 2026
fa25ebf
Fixes
magnurud Mar 2, 2026
b92345f
First get query strings, then get agents (if necessary)
magnurud Mar 2, 2026
d731cce
Patching things up
magnurud Mar 2, 2026
1851287
Add actionId as a queryParameter to the polling location
magnurud Mar 2, 2026
473c443
Better isCompleted check
magnurud Mar 2, 2026
1e9080c
add query parameter to swaggerfile and early stopping when parsing ev…
magnurud Mar 2, 2026
eeae66b
Add patching to the poll action
magnurud Mar 4, 2026
037b24c
This was caught
magnurud Mar 4, 2026
879ef34
Final touches
magnurud Mar 4, 2026
b0b9ece
Rename polling endpoint to poll to separate it from the old Get Agent…
magnurud Mar 4, 2026
bb704b8
Revert "Rename polling endpoint to poll to separate it from the old G…
magnurud Mar 5, 2026
bf6d04e
Make the polling an internal method
magnurud Mar 5, 2026
cdaa0ed
Remove unused code
magnurud Mar 5, 2026
b6a49f1
wording and try invalidating cache from GetActions
magnurud Mar 5, 2026
e8d18b1
Patch the action if it is not enabled
magnurud Mar 5, 2026
c0624a2
Change wording in description
magnurud Mar 5, 2026
47886e0
Remove blacklisted words
magnurud Mar 5, 2026
b04e208
Fix secret header
magnurud Mar 10, 2026
8ffcc58
Set enabled to True when the setup is done for the trigger, and when …
magnurud Mar 11, 2026
ee51934
Fix
magnurud Mar 11, 2026
2c0f9c2
Try to create url for the flow in PA
magnurud Mar 11, 2026
f136e51
Do it correctly for both trigger and action
magnurud Mar 11, 2026
31c9d07
Patch action to waitForResult=False when setting up trigger
magnurud Mar 11, 2026
5d320eb
Better handling of errors when a document is invalid
magnurud Mar 16, 2026
d75e379
Use a query parameter to get the file name
magnurud Mar 16, 2026
91980f3
Try adding a header to the response
magnurud Mar 16, 2026
433a23c
Try route request
magnurud Mar 16, 2026
2eef2e5
remove policy that doesnt work
magnurud Mar 17, 2026
adbc8ff
First iteration of hmac signature validation
magnurud Mar 17, 2026
3a40bae
This time with the body and the method
magnurud Mar 17, 2026
8c3d621
Correctly sort the items
magnurud Mar 17, 2026
2dd8425
Fix
magnurud Mar 17, 2026
8268f56
Try adding properties to the validate action
magnurud Mar 17, 2026
beb9d39
Let all the input be defined in the same parameter
magnurud Mar 17, 2026
e3cce34
Use clientSecret if hmacSecret is not defined
magnurud Mar 17, 2026
90e84e3
Remove secret from header
magnurud Mar 17, 2026
fca3d28
Add better error handling
magnurud Mar 17, 2026
15e22ae
fix
magnurud Mar 17, 2026
e1411f7
Connect to dev
magnurud Mar 17, 2026
08e8bfe
Return error as a BadRequest instead of raising
magnurud Mar 17, 2026
b9c0e08
Make variables a query parameter so it can handle non-ascii characters;
magnurud Mar 17, 2026
b01c7b9
Update deployment instructions
magnurud Mar 17, 2026
44d7a3f
First attempt of writign a json serializer
magnurud Mar 17, 2026
7de00f9
Separate into two different inputs
magnurud Mar 17, 2026
236cda3
Revert "Separate into two different inputs"
magnurud Mar 18, 2026
5937e5d
Add a test script to make sure the hmacCalculation works
magnurud Mar 18, 2026
5d34858
Got the json serializer to work
magnurud Mar 18, 2026
2f496cf
Great success
magnurud Mar 18, 2026
515daca
Refactoring
magnurud Mar 18, 2026
5934473
Remove debug-statement
magnurud Mar 18, 2026
47c7825
Add some additional error handling
magnurud Mar 18, 2026
45552fc
Revert "Connect to dev"
magnurud Mar 18, 2026
8da84ee
An extra pass on the error messages
magnurud Mar 20, 2026
fa5ee6e
Cleaning up
magnurud Mar 20, 2026
3af8587
Add an additional Check
magnurud Mar 24, 2026
7df0796
Change wording
magnurud Mar 24, 2026
30c9c23
ApiKey -> Client Credentials
magnurud Mar 24, 2026
82d70d5
Fix
magnurud Mar 26, 2026
8323155
Fix validation
magnurud Mar 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions PowerAutomate/DEPLOYMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
## Deployment instructions

The deployment pipeline normally takes around 14 days.
1. First Microsoft verifies the package (1-2 days)
2. Testing in a preview environment that Microsoft creates for us
a. Make sure you login to the preview account. Username and password will be sent to you in two separate emails
b. Select the right environment to test the new connector. It is not the one called "Microsoft (default)", but the other one.
c. Start a free trial to give permission to test the new connector since it is a premium feature. [https://learn.microsoft.com/en-us/power-platform/admin/power-automate-licensing/deep-dive-on-specific-license#power-automate-trial-license](docs).
d. Test that your connector works in a flow or two.
3. Press the "Go live" button in the partner center (10-14 days before the connector is rolled out to all regions)

As of 20.02.2026 These are the necessary steps to create the package:
```
# Create two solutions in Power Automate. One that contains only the connector, and another that contains the connector and one or more example flows.
# Export the two solutions, lets call them ConnectorSolution.zip and FlowSolution.zip
mkdir CradlConnector
cd CradlConnector
mkdir PkgAssets
cp /path/to/readme.md intro.md
cp /path/to/ConnectorSolution.zip PkgAssets
cp /path/to/FlowSolution.zip PkgAssets
zip -r package.zip PkgAssets/
zip -r SubmissionPackage.zip intro.md package.zip
# Upload SubmissionPackage.zip to Azure
# Rightclick and choose Generate SAS
# Make sure to set the expiry date to at least 15 days from now
# Paste the URL into your Marketplace offer
```

78 changes: 31 additions & 47 deletions PowerAutomate/Readme.md
Original file line number Diff line number Diff line change
@@ -1,75 +1,78 @@
## Cradl AI

Cradl AI is a no-code AI platform for automating internal document workflows. Cradl AI enables you to:
Cradl AI empowers organizations to automate any document workflow with purpose-built AI agents. Fast, flexible and zero code.

🚀️ Create custom AI agents to extract structured data from any document type. <br />
👍 Route low-confidence AI predictions to a built-in human-in-the-loop validation interface. <br />
🎉️ Continuously improve your *agent* using feedback from end users. <br />

🚀️ Create customized AI models for any document type in any Latin-based language. <br />
👍 Deploy a fully fledged *human-in-the-loop* validation UI with one click <br />
🎉️ Automatically re-train and improve your model based on feedback from end users.<br />

## Publisher: Cradl AI

## Prerequisites

A free Cradl AI account. If you don't already have one, you can sign up for free [here](https://cradl.ai/).

## Supported Operations
## Supported operations

This connector supports the following operations:

### Extract Data From Document
Extract data from documents like invoices, receipts, order confirmations.
### Extract data from document
Extract data from documents like invoices, receipts, order confirmations.
Toggle waitForResult to False if you want to run this operation asynchronously and handle the result in another flow.
Use the trigger "Extracted Data from Document" to handle the result asynchronously in another flow.

### Extracted Data From Document
### Extracted data from document
Trigger that runs when data is extracted from a document.

### Validate Trigger Output
### Validate trigger output
Validate output from trigger, to make sure that the output originates from Cradl.

### Get Document
### Get document
Get the content of a document.

### Get Document Metadata
### Get document metadata
Get metadata like name and content-type from a document.

### Create Document (deprecated)
### Create document (deprecated)
Create a new document.

### Parse Document with Human-in-the-Loop (deprecated)
### Parse document with Human-in-the-Loop (deprecated)

Parse a document with *Flows*. This operation runs asynchronous.

### Parse Document (deprecated)
### Parse document (deprecated)

Parse a document by calling the model directly. This operation runs synchronously.

## Obtaining Credentials

Log into Cradl AI, and in your *Flow* select either a Power Automate trigger or export and copy `Credentials` to the *Client Credentials* field.
Log into Cradl AI, and in your *agent* select either a Power Automate trigger or export and copy `Credentials` to the *Client Credentials* field.

## Getting Started

This quick start guide aims to provide a basic overview how Cradl AI can be integrated in a Power Automate workflow. Please refer to the [official documentation](https://docs.cradl.ai/) for up-to-date documentation.
This quick start guide aims to provide a basic overview how Cradl AI can be integrated in a Power Automate Flow. Please refer to the [official documentation](https://docs.cradl.ai/) for up-to-date documentation.

#### 1. Set up an Agent
### 1. Set up an Agent

*Cradl AI Agents* enables you to automate internal document processes in a simple, effective and unified way.
It reduces the risk of using AI models in production since you can send uncertain documents to a *human-in-the-loop* when necessary.
*Cradl AI agents* enables you to automate internal document processes in a simple, effective and unified way.
It reduces the risk of using AI agents in production since you can send uncertain documents to a *human-in-the-loop* when necessary.
By adjusting *confidence thresholds* of your agent, you can decide when a document should be sent to manual verification and when it's allowed to pass straight through.

### 2. Configure a Power Automate Trigger
### 2. Configure a Power Automate trigger

Open the workflow of your Cradl AI Agent, in the *Trigger* section, select *Power Automate* from the list of available integrations.
Navigate to your Cradl AI agent, in the *Trigger* section, select *Power Automate* from the list of available integrations.
Create a new Flow in Power Automate, and select the action "Extract Data from Document" from Cradl AI.
Open the dropdown menu for the parameter *Agent* and choose the Agent you just modified in Cradl AI.
Open the dropdown menu for the parameter *agent* and choose the agent you just modified in Cradl AI.
Make sure you have a Trigger in your Power Automate Flow that has a valid file as output.

### 3. Configure a Power Automate Export
### 3. Configure a Power Automate export

Open the workflow of your Cradl AI Agent, in the *Export* section, select *Power Automate* from the list of available integrations.
navigate to your Cradl AI agent, in the *Export* section, select *Power Automate* from the list of available integrations.
Create a new Flow in Power Automate, and select the trigger "Extracted Data from Document" from Cradl AI.
Open the dropdown menu for the parameter *Export Action* and choose the Action you just created in Cradl AI.

## Known Issues and Limitations
## Known issues and limitations

See [API Limits](https://docs.cradl.ai/reference/quotas).

Expand All @@ -79,33 +82,14 @@ See [API Limits](https://docs.cradl.ai/reference/quotas).

JPEG, PNG, PDF, WEBP and TIFF.

### How many models do I need?
### How many `agents` do I need?

One per _document process_. For example, if you want to automate an expense approval process where you process receipts, invoices and airline tickets, we recommend using one model even if you process multiple document types with different layouts.
One per _document process_. For example, if you want to automate an expense approval process where you process receipts, invoices and airline tickets, we recommend using one `agent` even if you process multiple document types with different layouts.

### Where is my data stored?

Please refer to our to our [Data Processing Agreement](https://docs.cradl.ai/legal/dpa) and [Privacy Policy](https://docs.cradl.ai/legal/privacy-policy) for more information about how personal data is processed.

## Deployment Instructions
## Deployment instructions

Refer the documentation [here](https://learn.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as a custom connector in Microsoft Power Automate and Power Apps.

As of 17.09.2025 These are the necessary steps:
```
# Create two solutions in Power Automate. One that contains only the connector, and another that contains the connector and one or more example flows.
# Export the two solutions, lets call them ConnectorSolution.zip and FlowSolution.zip
mkdir CradlConnector
cd CradlConnector
mkdir PkgAssets
cp /path/to/readme.md intro.md
cp /path/to/ConnectorSolution.zip PkgAssets
cp /path/to/FlowSolution.zip PkgAssets
zip -r package.zip PkgAssets/
zip -r SubmissionPackage.zip intro.md package.zip
# Upload SubmissionPackage.zip to Azure
# Rightclick and choose Generate SAS
# Make sure to set the expiry date to at least 15 days from now
# Paste the URL into your Marketplace offer
```

Loading