Preview or execute updates to existing source rows only
curl --request POST \
--url https://app.azalt.co/api/v1/source-imports/amendments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"sourceAdapterDefinitionId": "<string>",
"adapterVersion": "<string>",
"sheets": [
{
"name": "<string>",
"rows": [
{}
]
}
],
"mode": "preview",
"allowMissingFormSiteCreation": false,
"context": {
"year": 2050,
"siteId": "<string>"
}
}
'import requests
url = "https://app.azalt.co/api/v1/source-imports/amendments"
payload = {
"sourceAdapterDefinitionId": "<string>",
"adapterVersion": "<string>",
"sheets": [
{
"name": "<string>",
"rows": [{}]
}
],
"mode": "preview",
"allowMissingFormSiteCreation": False,
"context": {
"year": 2050,
"siteId": "<string>"
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sourceAdapterDefinitionId: '<string>',
adapterVersion: '<string>',
sheets: [{name: '<string>', rows: [{}]}],
mode: 'preview',
allowMissingFormSiteCreation: false,
context: {year: 2050, siteId: '<string>'}
})
};
fetch('https://app.azalt.co/api/v1/source-imports/amendments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.azalt.co/api/v1/source-imports/amendments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sourceAdapterDefinitionId' => '<string>',
'adapterVersion' => '<string>',
'sheets' => [
[
'name' => '<string>',
'rows' => [
[
]
]
]
],
'mode' => 'preview',
'allowMissingFormSiteCreation' => false,
'context' => [
'year' => 2050,
'siteId' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.azalt.co/api/v1/source-imports/amendments"
payload := strings.NewReader("{\n \"sourceAdapterDefinitionId\": \"<string>\",\n \"adapterVersion\": \"<string>\",\n \"sheets\": [\n {\n \"name\": \"<string>\",\n \"rows\": [\n {}\n ]\n }\n ],\n \"mode\": \"preview\",\n \"allowMissingFormSiteCreation\": false,\n \"context\": {\n \"year\": 2050,\n \"siteId\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.azalt.co/api/v1/source-imports/amendments")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sourceAdapterDefinitionId\": \"<string>\",\n \"adapterVersion\": \"<string>\",\n \"sheets\": [\n {\n \"name\": \"<string>\",\n \"rows\": [\n {}\n ]\n }\n ],\n \"mode\": \"preview\",\n \"allowMissingFormSiteCreation\": false,\n \"context\": {\n \"year\": 2050,\n \"siteId\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.azalt.co/api/v1/source-imports/amendments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceAdapterDefinitionId\": \"<string>\",\n \"adapterVersion\": \"<string>\",\n \"sheets\": [\n {\n \"name\": \"<string>\",\n \"rows\": [\n {}\n ]\n }\n ],\n \"mode\": \"preview\",\n \"allowMissingFormSiteCreation\": false,\n \"context\": {\n \"year\": 2050,\n \"siteId\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"outcomes": {
"planned": {
"inserted": 1,
"updated": 1,
"replaced": 1,
"deleted": 1,
"skipped": 1,
"failed": 1,
"unknown": 1
},
"actual": {
"inserted": 1,
"updated": 1,
"replaced": 1,
"deleted": 1,
"skipped": 1,
"failed": 1,
"unknown": 1
}
},
"run": {
"id": "<string>",
"sourceAdapterDefinitionId": "<string>",
"organizationId": "<string>",
"userId": "<string>",
"mediaId": "<string>",
"fileName": "<string>",
"status": "pending",
"totalRows": 123,
"draftCount": 123,
"issueCount": 123,
"activityWriteCount": 123,
"formValueWriteCount": 123,
"error": "<string>",
"processedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"deletedAt": "<string>"
},
"adapterVersion": "<string>",
"counts": {
"total": 1,
"parsed": 1,
"ready": 1,
"imported": 1,
"reduced": 1,
"skipped": 1,
"failed": 1
},
"replayed": true,
"execution": {
"attempted": true,
"blocked": true,
"message": "<string>",
"readiness": {
"requiresMissingFormSiteConfirmation": true,
"missingFormSites": [
{
"formId": "<string>",
"formName": "<string>",
"siteId": "<string>",
"siteName": "<string>",
"year": 123,
"rowCount": 1,
"draftKinds": [
"activity"
],
"targetKeys": [
"<string>"
],
"rowIndexes": [
1
]
}
]
}
}
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Source imports
Preview or execute updates to existing source rows only
Creates an amendment import run from complete corrected source rows. Matches the configured business IDs within the same adapter and destination. Unmatched rows fail; no new destination records are inserted. Defaults to preview. Send a fresh Idempotency-Key for a correction and reuse it unchanged for retries. Inspect planned/actual outcomes and row results; execution may partially succeed. Does not accept an onExistingRow override or missing-form creation.
POST
/
source-imports
/
amendments
Preview or execute updates to existing source rows only
curl --request POST \
--url https://app.azalt.co/api/v1/source-imports/amendments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"sourceAdapterDefinitionId": "<string>",
"adapterVersion": "<string>",
"sheets": [
{
"name": "<string>",
"rows": [
{}
]
}
],
"mode": "preview",
"allowMissingFormSiteCreation": false,
"context": {
"year": 2050,
"siteId": "<string>"
}
}
'import requests
url = "https://app.azalt.co/api/v1/source-imports/amendments"
payload = {
"sourceAdapterDefinitionId": "<string>",
"adapterVersion": "<string>",
"sheets": [
{
"name": "<string>",
"rows": [{}]
}
],
"mode": "preview",
"allowMissingFormSiteCreation": False,
"context": {
"year": 2050,
"siteId": "<string>"
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sourceAdapterDefinitionId: '<string>',
adapterVersion: '<string>',
sheets: [{name: '<string>', rows: [{}]}],
mode: 'preview',
allowMissingFormSiteCreation: false,
context: {year: 2050, siteId: '<string>'}
})
};
fetch('https://app.azalt.co/api/v1/source-imports/amendments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.azalt.co/api/v1/source-imports/amendments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sourceAdapterDefinitionId' => '<string>',
'adapterVersion' => '<string>',
'sheets' => [
[
'name' => '<string>',
'rows' => [
[
]
]
]
],
'mode' => 'preview',
'allowMissingFormSiteCreation' => false,
'context' => [
'year' => 2050,
'siteId' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.azalt.co/api/v1/source-imports/amendments"
payload := strings.NewReader("{\n \"sourceAdapterDefinitionId\": \"<string>\",\n \"adapterVersion\": \"<string>\",\n \"sheets\": [\n {\n \"name\": \"<string>\",\n \"rows\": [\n {}\n ]\n }\n ],\n \"mode\": \"preview\",\n \"allowMissingFormSiteCreation\": false,\n \"context\": {\n \"year\": 2050,\n \"siteId\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.azalt.co/api/v1/source-imports/amendments")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sourceAdapterDefinitionId\": \"<string>\",\n \"adapterVersion\": \"<string>\",\n \"sheets\": [\n {\n \"name\": \"<string>\",\n \"rows\": [\n {}\n ]\n }\n ],\n \"mode\": \"preview\",\n \"allowMissingFormSiteCreation\": false,\n \"context\": {\n \"year\": 2050,\n \"siteId\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.azalt.co/api/v1/source-imports/amendments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceAdapterDefinitionId\": \"<string>\",\n \"adapterVersion\": \"<string>\",\n \"sheets\": [\n {\n \"name\": \"<string>\",\n \"rows\": [\n {}\n ]\n }\n ],\n \"mode\": \"preview\",\n \"allowMissingFormSiteCreation\": false,\n \"context\": {\n \"year\": 2050,\n \"siteId\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"outcomes": {
"planned": {
"inserted": 1,
"updated": 1,
"replaced": 1,
"deleted": 1,
"skipped": 1,
"failed": 1,
"unknown": 1
},
"actual": {
"inserted": 1,
"updated": 1,
"replaced": 1,
"deleted": 1,
"skipped": 1,
"failed": 1,
"unknown": 1
}
},
"run": {
"id": "<string>",
"sourceAdapterDefinitionId": "<string>",
"organizationId": "<string>",
"userId": "<string>",
"mediaId": "<string>",
"fileName": "<string>",
"status": "pending",
"totalRows": 123,
"draftCount": 123,
"issueCount": 123,
"activityWriteCount": 123,
"formValueWriteCount": 123,
"error": "<string>",
"processedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"deletedAt": "<string>"
},
"adapterVersion": "<string>",
"counts": {
"total": 1,
"parsed": 1,
"ready": 1,
"imported": 1,
"reduced": 1,
"skipped": 1,
"failed": 1
},
"replayed": true,
"execution": {
"attempted": true,
"blocked": true,
"message": "<string>",
"readiness": {
"requiresMissingFormSiteConfirmation": true,
"missingFormSites": [
{
"formId": "<string>",
"formName": "<string>",
"siteId": "<string>",
"siteName": "<string>",
"year": 123,
"rowCount": 1,
"draftKinds": [
"activity"
],
"targetKeys": [
"<string>"
],
"rowIndexes": [
1
]
}
]
}
}
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Required string length:
1 - 200Body
application/json
Required string length:
1 - 200Pattern:
^[a-f0-9]{64}$Required array length:
1 - 50 elementsShow child attributes
Show child attributes
Available options:
preview, execute Available options:
false Show child attributes
Show child attributes

