Destinations
Where a workflow's results can go — Dataverse rows, SQL tables, HTTP endpoints via connections, and email
5 endpoints in this category. All require X-API-Key header.
Dataverse: Create Rows
/api/DataverseCreateRows
1 token
Creates rows in a Dataverse (Dynamics 365 / Power Platform) table via a registry connection of type 'dataverse' owned by the calling client. The connection holds the org URL and credential — neither ever appears in the workflow definition.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId |
string | required | Registry connection id (conn_…) of type 'dataverse', owned by the calling client (manage/connections) |
entitySet |
string | required | Dataverse Web API entity set name — plural, lowercase (e.g. 'contacts', 'cr123_orders') |
rows |
array | required | Non-empty array of row objects; keys are Dataverse logical attribute names |
fieldMap |
object | optional | Maps submission field names to destination columns: {"surname": "lastname"}. When set, ONLY mapped fields are sent — unmapped keys are dropped, and a field a row does not carry contributes no attribute at all (never a null, which would clear the column). Omit it and rows pass through exactly as before. |
continueOnError |
boolean | optional |
Keep creating remaining rows after one fails (result reports per-row errors)
(default: false)
|
Request Example
{"connectionId": "conn_0123456789abcdef0123456789abcdef", "entitySet": "contacts", "rows": [{"firstname": "Ada", "lastname": "Lovelace"}]}
Response Example
{"success": true, "created": 1, "failed": 0, "results": [{"index": 0, "ok": true, "id": "guid"}]}
Code Examples
curl -X POST "https://docbutterfly.com/api/DataverseCreateRows" \
-H "X-API-Key: df_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"connectionId": "conn_0123456789abcdef0123456789abcdef", "entitySet": "contacts", "rows": [{"firstname": "Ada", "lastname": "Lovelace"}]}'using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "df_your_api_key_here");
var json = @"{""connectionId"": ""conn_0123456789abcdef0123456789abcdef"", ""entitySet"": ""contacts"", ""rows"": [{""firstname"": ""Ada"", ""lastname"": ""Lovelace""}]}";
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://docbutterfly.com/api/DataverseCreateRows", content);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);import requests
import json
url = "https://docbutterfly.com/api/DataverseCreateRows"
headers = {
"X-API-Key": "df_your_api_key_here",
"Content-Type": "application/json"
}
payload = json.loads('{"connectionId": "conn_0123456789abcdef0123456789abcdef", "entitySet": "contacts", "rows": [{"firstname": "Ada", "lastname": "Lovelace"}]}')
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
print(json.dumps(data, indent=2))┌─────────────────────────────────────────────┐
│ Power Automate - HTTP Action │
├─────────────────────────────────────────────┤
│ │
│ Method: POST │
│ URI: https://docbutterfly.com/api/DataverseCreateRows
│ │
│ Headers: │
│ X-API-Key: df_your_api_key_here │
│ Content-Type: application/json │
│ │
│ Body: │
│ {
│ "connectionId": "conn_0123456789abcdef0123456789abcdef",
│ "entitySet": "contacts",
│ "rows": [
│ {
│ "firstname": "Ada",
│ "lastname": "Lovelace"
│ }
│ ]
│ }
│ │
└─────────────────────────────────────────────┘
Steps:
1. Add an HTTP action to your flow
2. Set Method to "POST"
3. Set URI to "https://docbutterfly.com/api/DataverseCreateRows"
4. Add the headers shown above
5. Paste the Body JSON into the Body field
6. Replace placeholder values with dynamic content as neededSQL: Insert Rows
/api/SqlInsertRows
1 token
Inserts rows into a SQL table via a registry connection of type 'sqlserver', 'postgresql', or 'mysql' owned by the calling client. The dialect comes from the connection — the request is identical for all three. The connection holds the host, database, and credential; none of them ever appear in the workflow definition.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId |
string | required | Registry connection id (conn_…) of type 'sqlserver', 'postgresql', or 'mysql', owned by the calling client (manage/connections) |
table |
string | required | Target table name, optionally schema-qualified (e.g. 'invoices', 'dbo.Invoices', 'public.orders') |
rows |
array | required | Non-empty array of row objects (max 100 per call); keys are column names |
fieldMap |
object | optional | Maps submission field names to destination columns: {"Full Name": "full_name"}. When set, ONLY mapped fields are sent — unmapped keys are dropped, and a field a row does not carry contributes no column at all (never a null). Omit it and rows pass through exactly as before. |
continueOnError |
boolean | optional |
Keep inserting remaining rows after one fails (result reports per-row errors)
(default: false)
|
Request Example
{"connectionId": "conn_0123456789abcdef0123456789abcdef", "table": "dbo.Invoices", "rows": [{"customer": "Acme Corp", "total": 582.62}]}
Response Example
{"success": true, "created": 1, "failed": 0, "results": [{"index": 0, "ok": true}]}
Code Examples
curl -X POST "https://docbutterfly.com/api/SqlInsertRows" \
-H "X-API-Key: df_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"connectionId": "conn_0123456789abcdef0123456789abcdef", "table": "dbo.Invoices", "rows": [{"customer": "Acme Corp", "total": 582.62}]}'using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "df_your_api_key_here");
var json = @"{""connectionId"": ""conn_0123456789abcdef0123456789abcdef"", ""table"": ""dbo.Invoices"", ""rows"": [{""customer"": ""Acme Corp"", ""total"": 582.62}]}";
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://docbutterfly.com/api/SqlInsertRows", content);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);import requests
import json
url = "https://docbutterfly.com/api/SqlInsertRows"
headers = {
"X-API-Key": "df_your_api_key_here",
"Content-Type": "application/json"
}
payload = json.loads('{"connectionId": "conn_0123456789abcdef0123456789abcdef", "table": "dbo.Invoices", "rows": [{"customer": "Acme Corp", "total": 582.62}]}')
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
print(json.dumps(data, indent=2))┌─────────────────────────────────────────────┐
│ Power Automate - HTTP Action │
├─────────────────────────────────────────────┤
│ │
│ Method: POST │
│ URI: https://docbutterfly.com/api/SqlInsertRows
│ │
│ Headers: │
│ X-API-Key: df_your_api_key_here │
│ Content-Type: application/json │
│ │
│ Body: │
│ {
│ "connectionId": "conn_0123456789abcdef0123456789abcdef",
│ "table": "dbo.Invoices",
│ "rows": [
│ {
│ "customer": "Acme Corp",
│ "total": 582.62
│ }
│ ]
│ }
│ │
└─────────────────────────────────────────────┘
Steps:
1. Add an HTTP action to your flow
2. Set Method to "POST"
3. Set URI to "https://docbutterfly.com/api/SqlInsertRows"
4. Add the headers shown above
5. Paste the Body JSON into the Body field
6. Replace placeholder values with dynamic content as neededBlob: Write File
/api/BlobWriteFile
1 token
Writes a file into an Azure Blob Storage container via a registry connection of type 'blob' owned by the calling client. The connection holds the account URL and the SAS token or storage connection string — neither ever appears in the workflow definition.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId |
string | required | Registry connection id (conn_…) of type 'blob', owned by the calling client (manage/connections) |
path |
string | required | Blob name, optionally with folder segments (e.g. 'invoices/2026/inv-1.pdf'). Max 1024 characters; no leading slash, no '..', no control characters |
contentBase64 |
string | required | The file's bytes, base64-encoded (max 32 MB per call) |
container |
string | optional | Overrides the connection's default container. Azure naming rules: 3-63 lowercase alphanumerics and single dashes |
contentType |
string | optional |
MIME type stored on the blob
(default: application/octet-stream)
|
overwrite |
boolean | optional |
Replace an existing blob at that path instead of failing with 409
(default: false)
|
createContainer |
boolean | optional |
Create the container if it does not exist
(default: false)
|
Request Example
{"connectionId": "conn_0123456789abcdef0123456789abcdef", "path": "invoices/2026/inv-1.pdf", "contentBase64": "JVBERi0xLjcK...", "contentType": "application/pdf"}
Response Example
{"success": true, "container": "invoices", "path": "invoices/2026/inv-1.pdf", "url": "https://acmedocs.blob.core.windows.net/invoices/2026/inv-1.pdf", "etag": "\"0x8DC…\"", "sizeBytes": 20481, "contentType": "application/pdf"}
Code Examples
curl -X POST "https://docbutterfly.com/api/BlobWriteFile" \
-H "X-API-Key: df_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"connectionId": "conn_0123456789abcdef0123456789abcdef", "path": "invoices/2026/inv-1.pdf", "contentBase64": "JVBERi0xLjcK...", "contentType": "application/pdf"}'using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "df_your_api_key_here");
var json = @"{""connectionId"": ""conn_0123456789abcdef0123456789abcdef"", ""path"": ""invoices/2026/inv-1.pdf"", ""contentBase64"": ""JVBERi0xLjcK..."", ""contentType"": ""application/pdf""}";
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://docbutterfly.com/api/BlobWriteFile", content);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);import requests
import json
url = "https://docbutterfly.com/api/BlobWriteFile"
headers = {
"X-API-Key": "df_your_api_key_here",
"Content-Type": "application/json"
}
payload = json.loads('{"connectionId": "conn_0123456789abcdef0123456789abcdef", "path": "invoices/2026/inv-1.pdf", "contentBase64": "JVBERi0xLjcK...", "contentType": "application/pdf"}')
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
print(json.dumps(data, indent=2))┌─────────────────────────────────────────────┐
│ Power Automate - HTTP Action │
├─────────────────────────────────────────────┤
│ │
│ Method: POST │
│ URI: https://docbutterfly.com/api/BlobWriteFile
│ │
│ Headers: │
│ X-API-Key: df_your_api_key_here │
│ Content-Type: application/json │
│ │
│ Body: │
│ {
│ "connectionId": "conn_0123456789abcdef0123456789abcdef",
│ "path": "invoices/2026/inv-1.pdf",
│ "contentBase64": "JVBERi0xLjcK...",
│ "contentType": "application/pdf"
│ }
│ │
└─────────────────────────────────────────────┘
Steps:
1. Add an HTTP action to your flow
2. Set Method to "POST"
3. Set URI to "https://docbutterfly.com/api/BlobWriteFile"
4. Add the headers shown above
5. Paste the Body JSON into the Body field
6. Replace placeholder values with dynamic content as neededSFTP: Upload File
/api/SftpUploadFile
1 token
Uploads a file to an SFTP server via a registry connection of type 'sftp' owned by the calling client. The connection holds the host and the password or private key — neither ever appears in the workflow definition.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId |
string | required | Registry connection id (conn_…) of type 'sftp', owned by the calling client (manage/connections) |
path |
string | required | Remote path relative to the connection's rootPath (e.g. 'inbox/inv-1.pdf'). Max 1024 characters; absolute paths, '..', backslashes, empty segments and control characters are refused |
contentBase64 |
string | required | The file's bytes, base64-encoded (max 32 MB per call) |
overwrite |
boolean | optional |
Replace an existing file at that path instead of failing with 409
(default: false)
|
createDirectories |
boolean | optional |
Create the parent directories if they do not exist
(default: false)
|
Request Example
{"connectionId": "conn_0123456789abcdef0123456789abcdef", "path": "inbox/inv-1.pdf", "contentBase64": "JVBERi0xLjcK...", "createDirectories": true}
Response Example
{"success": true, "path": "/upload/inbox/inv-1.pdf", "sizeBytes": 20481, "host": "sftp.acme.example", "port": 22, "hostKeyFingerprint": "SHA256:9x…", "hostKeyPinned": true}
Code Examples
curl -X POST "https://docbutterfly.com/api/SftpUploadFile" \
-H "X-API-Key: df_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"connectionId": "conn_0123456789abcdef0123456789abcdef", "path": "inbox/inv-1.pdf", "contentBase64": "JVBERi0xLjcK...", "createDirectories": true}'using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "df_your_api_key_here");
var json = @"{""connectionId"": ""conn_0123456789abcdef0123456789abcdef"", ""path"": ""inbox/inv-1.pdf"", ""contentBase64"": ""JVBERi0xLjcK..."", ""createDirectories"": true}";
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://docbutterfly.com/api/SftpUploadFile", content);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);import requests
import json
url = "https://docbutterfly.com/api/SftpUploadFile"
headers = {
"X-API-Key": "df_your_api_key_here",
"Content-Type": "application/json"
}
payload = json.loads('{"connectionId": "conn_0123456789abcdef0123456789abcdef", "path": "inbox/inv-1.pdf", "contentBase64": "JVBERi0xLjcK...", "createDirectories": true}')
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
print(json.dumps(data, indent=2))┌─────────────────────────────────────────────┐
│ Power Automate - HTTP Action │
├─────────────────────────────────────────────┤
│ │
│ Method: POST │
│ URI: https://docbutterfly.com/api/SftpUploadFile
│ │
│ Headers: │
│ X-API-Key: df_your_api_key_here │
│ Content-Type: application/json │
│ │
│ Body: │
│ {
│ "connectionId": "conn_0123456789abcdef0123456789abcdef",
│ "path": "inbox/inv-1.pdf",
│ "contentBase64": "JVBERi0xLjcK...",
│ "createDirectories": true
│ }
│ │
└─────────────────────────────────────────────┘
Steps:
1. Add an HTTP action to your flow
2. Set Method to "POST"
3. Set URI to "https://docbutterfly.com/api/SftpUploadFile"
4. Add the headers shown above
5. Paste the Body JSON into the Body field
6. Replace placeholder values with dynamic content as neededService Bus: Send Messages
/api/ServiceBusSendMessages
1 token
Sends a batch of messages to an Azure Service Bus queue or topic via a registry connection of type 'servicebus' owned by the calling client. The connection holds the namespace and the connection string or SAS token — neither ever appears in the workflow definition.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
connectionId |
string | required | Registry connection id (conn_…) of type 'servicebus', owned by the calling client (manage/connections) |
messages |
array | required | 1-100 messages. Each is either a plain string, or an object { body, contentType?, timeToLiveSeconds?, properties?, messageId?, correlationId?, sessionId?, label?, partitionKey?, replyTo?, to? }. An object body is sent as JSON text |
queueOrTopic |
string | optional | Overrides the connection's default entity. May be hierarchical (e.g. 'orders/eu') |
Request Example
{"connectionId": "conn_0123456789abcdef0123456789abcdef", "queueOrTopic": "orders", "messages": [{"body": {"orderId": 42}, "label": "order-created", "contentType": "application/json", "properties": {"source": "docbutterfly"}}]}
Response Example
{"success": true, "sent": 1, "namespace": "acme.servicebus.windows.net", "entity": "orders", "sizeBytes": 118}
Code Examples
curl -X POST "https://docbutterfly.com/api/ServiceBusSendMessages" \
-H "X-API-Key: df_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"connectionId": "conn_0123456789abcdef0123456789abcdef", "queueOrTopic": "orders", "messages": [{"body": {"orderId": 42}, "label": "order-created", "contentType": "application/json", "properties": {"source": "docbutterfly"}}]}'using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "df_your_api_key_here");
var json = @"{""connectionId"": ""conn_0123456789abcdef0123456789abcdef"", ""queueOrTopic"": ""orders"", ""messages"": [{""body"": {""orderId"": 42}, ""label"": ""order-created"", ""contentType"": ""application/json"", ""properties"": {""source"": ""docbutterfly""}}]}";
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://docbutterfly.com/api/ServiceBusSendMessages", content);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);import requests
import json
url = "https://docbutterfly.com/api/ServiceBusSendMessages"
headers = {
"X-API-Key": "df_your_api_key_here",
"Content-Type": "application/json"
}
payload = json.loads('{"connectionId": "conn_0123456789abcdef0123456789abcdef", "queueOrTopic": "orders", "messages": [{"body": {"orderId": 42}, "label": "order-created", "contentType": "application/json", "properties": {"source": "docbutterfly"}}]}')
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
print(json.dumps(data, indent=2))┌─────────────────────────────────────────────┐
│ Power Automate - HTTP Action │
├─────────────────────────────────────────────┤
│ │
│ Method: POST │
│ URI: https://docbutterfly.com/api/ServiceBusSendMessages
│ │
│ Headers: │
│ X-API-Key: df_your_api_key_here │
│ Content-Type: application/json │
│ │
│ Body: │
│ {
│ "connectionId": "conn_0123456789abcdef0123456789abcdef",
│ "queueOrTopic": "orders",
│ "messages": [
│ {
│ "body": {
│ "orderId": 42
│ },
│ "label": "order-created",
│ "contentType": "application/json",
│ "properties": {
│ "source": "docbutterfly"
│ }
│ }
│ ]
│ }
│ │
└─────────────────────────────────────────────┘
Steps:
1. Add an HTTP action to your flow
2. Set Method to "POST"
3. Set URI to "https://docbutterfly.com/api/ServiceBusSendMessages"
4. Add the headers shown above
5. Paste the Body JSON into the Body field
6. Replace placeholder values with dynamic content as needed