Skip to main content
POST
/
projects
/
{projectIdOrName}
/
integrations
Create a new integration.
curl --request POST \
  --url https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <api-key>' \
  --data '
{
  "name": "my-integration",
  "provider": "<string>",
  "latestRevision": {
    "specVersion": "1.0.0",
    "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",
            "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"
              ]
            ]
          }
        ]
      }
    }
  }
}
'
import requests

url = "https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations"

payload = {
"name": "my-integration",
"provider": "<string>",
"latestRevision": {
"specVersion": "1.0.0",
"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",
"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"]]
}
] }
}
}
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'my-integration',
provider: '<string>',
latestRevision: {
specVersion: '1.0.0',
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',
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']]
}
]
}
}
}
})
};

fetch('https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations', 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",
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([
'name' => 'my-integration',
'provider' => '<string>',
'latestRevision' => [
'specVersion' => '1.0.0',
'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',
'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'
]
]
]
]
]
]
]
]),
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"

payload := strings.NewReader("{\n \"name\": \"my-integration\",\n \"provider\": \"<string>\",\n \"latestRevision\": {\n \"specVersion\": \"1.0.0\",\n \"content\": {\n \"name\": \"<string>\",\n \"provider\": \"<string>\",\n \"displayName\": \"<string>\",\n \"module\": \"<string>\",\n \"read\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"destination\": \"<string>\",\n \"schedule\": \"<string>\",\n \"mapToName\": \"people\",\n \"mapToDisplayName\": \"People\",\n \"requiredFields\": [\n {\n \"fieldName\": \"<string>\",\n \"mapToName\": \"account_id\",\n \"mapToDisplayName\": \"Account ID\"\n }\n ],\n \"optionalFields\": [\n {\n \"fieldName\": \"<string>\",\n \"mapToName\": \"account_id\",\n \"mapToDisplayName\": \"Account ID\"\n }\n ],\n \"optionalFieldsAuto\": \"all\",\n \"delivery\": {\n \"mode\": \"auto\",\n \"pageSize\": 275\n },\n \"enabled\": \"always\"\n }\n ]\n },\n \"write\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"inheritMapping\": true,\n \"valueDefaults\": {\n \"allowAnyFields\": true\n }\n }\n ]\n },\n \"proxy\": {\n \"enabled\": true,\n \"useModule\": true\n },\n \"subscribe\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"destination\": \"<string>\",\n \"inheritFieldsAndMapping\": true,\n \"createEvent\": {\n \"enabled\": \"always\"\n },\n \"updateEvent\": {\n \"enabled\": \"always\",\n \"watchFieldsAuto\": \"all\",\n \"requiredWatchFields\": [\n [\n \"name\",\n \"domain\"\n ]\n ]\n },\n \"deleteEvent\": {\n \"enabled\": \"always\"\n },\n \"associationChangeEvent\": {\n \"enabled\": \"always\",\n \"includeFullRecords\": true\n },\n \"otherEvents\": [\n [\n \"object.merged\",\n \"object.restored\"\n ]\n ]\n }\n ]\n }\n }\n }\n}")

req, _ := http.NewRequest("POST", 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.post("https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"my-integration\",\n \"provider\": \"<string>\",\n \"latestRevision\": {\n \"specVersion\": \"1.0.0\",\n \"content\": {\n \"name\": \"<string>\",\n \"provider\": \"<string>\",\n \"displayName\": \"<string>\",\n \"module\": \"<string>\",\n \"read\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"destination\": \"<string>\",\n \"schedule\": \"<string>\",\n \"mapToName\": \"people\",\n \"mapToDisplayName\": \"People\",\n \"requiredFields\": [\n {\n \"fieldName\": \"<string>\",\n \"mapToName\": \"account_id\",\n \"mapToDisplayName\": \"Account ID\"\n }\n ],\n \"optionalFields\": [\n {\n \"fieldName\": \"<string>\",\n \"mapToName\": \"account_id\",\n \"mapToDisplayName\": \"Account ID\"\n }\n ],\n \"optionalFieldsAuto\": \"all\",\n \"delivery\": {\n \"mode\": \"auto\",\n \"pageSize\": 275\n },\n \"enabled\": \"always\"\n }\n ]\n },\n \"write\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"inheritMapping\": true,\n \"valueDefaults\": {\n \"allowAnyFields\": true\n }\n }\n ]\n },\n \"proxy\": {\n \"enabled\": true,\n \"useModule\": true\n },\n \"subscribe\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"destination\": \"<string>\",\n \"inheritFieldsAndMapping\": true,\n \"createEvent\": {\n \"enabled\": \"always\"\n },\n \"updateEvent\": {\n \"enabled\": \"always\",\n \"watchFieldsAuto\": \"all\",\n \"requiredWatchFields\": [\n [\n \"name\",\n \"domain\"\n ]\n ]\n },\n \"deleteEvent\": {\n \"enabled\": \"always\"\n },\n \"associationChangeEvent\": {\n \"enabled\": \"always\",\n \"includeFullRecords\": true\n },\n \"otherEvents\": [\n [\n \"object.merged\",\n \"object.restored\"\n ]\n ]\n }\n ]\n }\n }\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.withampersand.com/v1/projects/{projectIdOrName}/integrations")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"my-integration\",\n \"provider\": \"<string>\",\n \"latestRevision\": {\n \"specVersion\": \"1.0.0\",\n \"content\": {\n \"name\": \"<string>\",\n \"provider\": \"<string>\",\n \"displayName\": \"<string>\",\n \"module\": \"<string>\",\n \"read\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"destination\": \"<string>\",\n \"schedule\": \"<string>\",\n \"mapToName\": \"people\",\n \"mapToDisplayName\": \"People\",\n \"requiredFields\": [\n {\n \"fieldName\": \"<string>\",\n \"mapToName\": \"account_id\",\n \"mapToDisplayName\": \"Account ID\"\n }\n ],\n \"optionalFields\": [\n {\n \"fieldName\": \"<string>\",\n \"mapToName\": \"account_id\",\n \"mapToDisplayName\": \"Account ID\"\n }\n ],\n \"optionalFieldsAuto\": \"all\",\n \"delivery\": {\n \"mode\": \"auto\",\n \"pageSize\": 275\n },\n \"enabled\": \"always\"\n }\n ]\n },\n \"write\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"inheritMapping\": true,\n \"valueDefaults\": {\n \"allowAnyFields\": true\n }\n }\n ]\n },\n \"proxy\": {\n \"enabled\": true,\n \"useModule\": true\n },\n \"subscribe\": {\n \"objects\": [\n {\n \"objectName\": \"<string>\",\n \"destination\": \"<string>\",\n \"inheritFieldsAndMapping\": true,\n \"createEvent\": {\n \"enabled\": \"always\"\n },\n \"updateEvent\": {\n \"enabled\": \"always\",\n \"watchFieldsAuto\": \"all\",\n \"requiredWatchFields\": [\n [\n \"name\",\n \"domain\"\n ]\n ]\n },\n \"deleteEvent\": {\n \"enabled\": \"always\"\n },\n \"associationChangeEvent\": {\n \"enabled\": \"always\",\n \"includeFullRecords\": true\n },\n \"otherEvents\": [\n [\n \"object.merged\",\n \"object.restored\"\n ]\n ]\n }\n ]\n }\n }\n }\n}"

response = http.request(request)
puts response.read_body
This response has no body data.
{
"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": "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

X-Api-Key
string
header
required

Path Parameters

projectIdOrName
string
required

The Ampersand project ID or project name.

Body

application/json
name
string
required

The integration name.

Example:

"my-integration"

provider
string
required

The provider name (e.g. "salesforce", "hubspot")

latestRevision
object
required

Response