curl --request PUT \
--url https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"sourceZipUrl": "https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip",
"sourceYaml": "<string>"
}
'import requests
url = "https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch"
payload = {
"sourceZipUrl": "https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip",
"sourceYaml": "<string>"
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sourceZipUrl: 'https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip',
sourceYaml: '<string>'
})
};
fetch('https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch', 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://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'sourceZipUrl' => 'https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip',
'sourceYaml' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-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://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch"
payload := strings.NewReader("{\n \"sourceZipUrl\": \"https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip\",\n \"sourceYaml\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
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.put("https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sourceZipUrl\": \"https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip\",\n \"sourceYaml\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceZipUrl\": \"https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip\",\n \"sourceYaml\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"projectId": "project-456",
"name": "read-accounts",
"provider": "salesforce",
"createTime": "2023-11-07T05:31:56Z",
"latestRevision": {
"id": "revision-id-1",
"specVersion": "1.0.0",
"createTime": "2023-11-07T05:31:56Z",
"content": {
"name": "<string>",
"provider": "<string>",
"displayName": "<string>",
"module": "<string>",
"read": {
"objects": [
{
"objectName": "<string>",
"destination": "<string>",
"schedule": "<string>",
"mapToName": "people",
"mapToDisplayName": "People",
"requiredFields": [
{
"fieldName": "<string>",
"mapToName": "account_id",
"mapToDisplayName": "Account ID"
}
],
"optionalFields": [
{
"fieldName": "<string>",
"mapToName": "account_id",
"mapToDisplayName": "Account ID"
}
],
"optionalFieldsAuto": "all",
"backfill": {
"defaultPeriod": {
"days": 30,
"fullHistory": false
}
},
"delivery": {
"mode": "auto",
"pageSize": 275
},
"enabled": "always"
}
]
},
"write": {
"objects": [
{
"objectName": "<string>",
"inheritMapping": true,
"valueDefaults": {
"allowAnyFields": true
}
}
]
},
"proxy": {
"enabled": true,
"useModule": true
},
"subscribe": {
"objects": [
{
"objectName": "<string>",
"destination": "<string>",
"inheritFieldsAndMapping": true,
"createEvent": {
"enabled": "always"
},
"updateEvent": {
"enabled": "always",
"watchFieldsAuto": "all",
"requiredWatchFields": [
[
"name",
"domain"
]
]
},
"deleteEvent": {
"enabled": "always"
},
"associationChangeEvent": {
"enabled": "always",
"includeFullRecords": true
},
"otherEvents": [
[
"object.merged",
"object.restored"
]
]
}
]
},
"watchSchema": {
"destination": "fieldWatchStream",
"allObjects": {
"fieldCreated": {
"enabled": "always"
},
"fieldDeleted": {
"enabled": "always"
},
"fieldChanged": {
"enabled": "always"
}
},
"schedule": "0 */6 * * *"
}
}
},
"updateTime": "2023-11-07T05:31:56Z"
}
]{
"type": "about:blank",
"href": "https://www.belgif.be/specification/rest/api-guide/#standardized-problem-types",
"title": "Bad Request",
"status": 400,
"detail": "The input message is incorrect",
"instance": "123456-1234-1235-4567489798",
"issues": [
{
"type": "about:blank",
"detail": "exampleNumericProperty should be numeric",
"in": "path",
"name": "exampleNumericProperty",
"value": "abc"
},
{
"type": "about:blank",
"title": "Input isn't valid with respect to schema",
"detail": "examplePropertyWithPattern a2345678901 doesn't match pattern '^\\d{11}$'",
"in": "body",
"name": "items[0].examplePropertyWithPattern",
"value": "a2345678901"
}
]
}{
"type": "urn:problem-type:exampleOrganization:exampleProblem",
"href": "https://www.belgif.be/specification/rest/api-guide/#standardized-problem-types",
"title": "Description of the type of problem that occurred",
"status": 400,
"detail": "Description of specific occurrence of the problem",
"instance": "urn:uuid:123e4567-e89b-12d3-a456-426614174000"
}Batch upsert a group of integrations
This endpoint is used by the Ampersand CLI to batch upsert integrations. We recommend using the CLI’s deploy command rather than this API endpoint directly.
curl --request PUT \
--url https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"sourceZipUrl": "https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip",
"sourceYaml": "<string>"
}
'import requests
url = "https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch"
payload = {
"sourceZipUrl": "https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip",
"sourceYaml": "<string>"
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sourceZipUrl: 'https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip',
sourceYaml: '<string>'
})
};
fetch('https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch', 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://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'sourceZipUrl' => 'https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip',
'sourceYaml' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-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://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch"
payload := strings.NewReader("{\n \"sourceZipUrl\": \"https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip\",\n \"sourceYaml\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
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.put("https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sourceZipUrl\": \"https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip\",\n \"sourceYaml\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations:batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceZipUrl\": \"https://storage.googleapis.com/my-bucket/source-files/integration-v1.2.3.zip\",\n \"sourceYaml\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"projectId": "project-456",
"name": "read-accounts",
"provider": "salesforce",
"createTime": "2023-11-07T05:31:56Z",
"latestRevision": {
"id": "revision-id-1",
"specVersion": "1.0.0",
"createTime": "2023-11-07T05:31:56Z",
"content": {
"name": "<string>",
"provider": "<string>",
"displayName": "<string>",
"module": "<string>",
"read": {
"objects": [
{
"objectName": "<string>",
"destination": "<string>",
"schedule": "<string>",
"mapToName": "people",
"mapToDisplayName": "People",
"requiredFields": [
{
"fieldName": "<string>",
"mapToName": "account_id",
"mapToDisplayName": "Account ID"
}
],
"optionalFields": [
{
"fieldName": "<string>",
"mapToName": "account_id",
"mapToDisplayName": "Account ID"
}
],
"optionalFieldsAuto": "all",
"backfill": {
"defaultPeriod": {
"days": 30,
"fullHistory": false
}
},
"delivery": {
"mode": "auto",
"pageSize": 275
},
"enabled": "always"
}
]
},
"write": {
"objects": [
{
"objectName": "<string>",
"inheritMapping": true,
"valueDefaults": {
"allowAnyFields": true
}
}
]
},
"proxy": {
"enabled": true,
"useModule": true
},
"subscribe": {
"objects": [
{
"objectName": "<string>",
"destination": "<string>",
"inheritFieldsAndMapping": true,
"createEvent": {
"enabled": "always"
},
"updateEvent": {
"enabled": "always",
"watchFieldsAuto": "all",
"requiredWatchFields": [
[
"name",
"domain"
]
]
},
"deleteEvent": {
"enabled": "always"
},
"associationChangeEvent": {
"enabled": "always",
"includeFullRecords": true
},
"otherEvents": [
[
"object.merged",
"object.restored"
]
]
}
]
},
"watchSchema": {
"destination": "fieldWatchStream",
"allObjects": {
"fieldCreated": {
"enabled": "always"
},
"fieldDeleted": {
"enabled": "always"
},
"fieldChanged": {
"enabled": "always"
}
},
"schedule": "0 */6 * * *"
}
}
},
"updateTime": "2023-11-07T05:31:56Z"
}
]{
"type": "about:blank",
"href": "https://www.belgif.be/specification/rest/api-guide/#standardized-problem-types",
"title": "Bad Request",
"status": 400,
"detail": "The input message is incorrect",
"instance": "123456-1234-1235-4567489798",
"issues": [
{
"type": "about:blank",
"detail": "exampleNumericProperty should be numeric",
"in": "path",
"name": "exampleNumericProperty",
"value": "abc"
},
{
"type": "about:blank",
"title": "Input isn't valid with respect to schema",
"detail": "examplePropertyWithPattern a2345678901 doesn't match pattern '^\\d{11}$'",
"in": "body",
"name": "items[0].examplePropertyWithPattern",
"value": "a2345678901"
}
]
}{
"type": "urn:problem-type:exampleOrganization:exampleProblem",
"href": "https://www.belgif.be/specification/rest/api-guide/#standardized-problem-types",
"title": "Description of the type of problem that occurred",
"status": 400,
"detail": "Description of specific occurrence of the problem",
"instance": "urn:uuid:123e4567-e89b-12d3-a456-426614174000"
}Authorizations
Path Parameters
The Ampersand project ID or project name.
Query Parameters
Defaults to false. This flag controls whether to perform destructive actions when deploying integrations, like pausing all read actions for an object that was removed in the latest revision.
Body
The source of the integrations to upsert. One of sourceZipUrl or sourceYaml is required.
Response
Upserted integrations.
The integration ID.
The Ampersand project ID.
"project-456"
The integration name.
"read-accounts"
The SaaS provider that this integration connects to.
"salesforce"
The time the integration was created.
Show child attributes
Show child attributes
The time the integration was last updated.
Was this page helpful?

