Skip to main content
PATCH
/
projects
/
{projectIdOrName}
/
provider-apps
/
{providerAppId}
Update a provider app
curl --request PATCH \
  --url https://api.withampersand.com/v1/projects/{projectIdOrName}/provider-apps/{providerAppId} \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <api-key>' \
  --data '
{
  "updateMask": [
    "externalRef",
    "clientId"
  ],
  "providerApp": {
    "externalRef": "external-id-123",
    "provider": "salesforce",
    "clientId": "client-id-123",
    "clientSecret": "client-secret-123",
    "scopes": [
      [
        "read",
        "write"
      ]
    ],
    "metadata": {
      "authQueryParams": {
        "optional_scope": [
          "automation.sequences.read"
        ]
      },
      "providerParams": {
        "packageInstallURL": "https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789",
        "gcpProjectId": "my-gcp-project",
        "gcpPubSubTopicName": "my-topic"
      }
    }
  }
}
'
import requests

url = "https://api.withampersand.com/v1/projects/{projectIdOrName}/provider-apps/{providerAppId}"

payload = {
"updateMask": ["externalRef", "clientId"],
"providerApp": {
"externalRef": "external-id-123",
"provider": "salesforce",
"clientId": "client-id-123",
"clientSecret": "client-secret-123",
"scopes": [["read", "write"]],
"metadata": {
"authQueryParams": { "optional_scope": ["automation.sequences.read"] },
"providerParams": {
"packageInstallURL": "https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789",
"gcpProjectId": "my-gcp-project",
"gcpPubSubTopicName": "my-topic"
}
}
}
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}

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

print(response.text)
const options = {
method: 'PATCH',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
updateMask: ['externalRef', 'clientId'],
providerApp: {
externalRef: 'external-id-123',
provider: 'salesforce',
clientId: 'client-id-123',
clientSecret: 'client-secret-123',
scopes: [['read', 'write']],
metadata: {
authQueryParams: {optional_scope: ['automation.sequences.read']},
providerParams: {
packageInstallURL: 'https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789',
gcpProjectId: 'my-gcp-project',
gcpPubSubTopicName: 'my-topic'
}
}
}
})
};

fetch('https://api.withampersand.com/v1/projects/{projectIdOrName}/provider-apps/{providerAppId}', 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}/provider-apps/{providerAppId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'updateMask' => [
'externalRef',
'clientId'
],
'providerApp' => [
'externalRef' => 'external-id-123',
'provider' => 'salesforce',
'clientId' => 'client-id-123',
'clientSecret' => 'client-secret-123',
'scopes' => [
[
'read',
'write'
]
],
'metadata' => [
'authQueryParams' => [
'optional_scope' => [
'automation.sequences.read'
]
],
'providerParams' => [
'packageInstallURL' => 'https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789',
'gcpProjectId' => 'my-gcp-project',
'gcpPubSubTopicName' => 'my-topic'
]
]
]
]),
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}/provider-apps/{providerAppId}"

payload := strings.NewReader("{\n \"updateMask\": [\n \"externalRef\",\n \"clientId\"\n ],\n \"providerApp\": {\n \"externalRef\": \"external-id-123\",\n \"provider\": \"salesforce\",\n \"clientId\": \"client-id-123\",\n \"clientSecret\": \"client-secret-123\",\n \"scopes\": [\n [\n \"read\",\n \"write\"\n ]\n ],\n \"metadata\": {\n \"authQueryParams\": {\n \"optional_scope\": [\n \"automation.sequences.read\"\n ]\n },\n \"providerParams\": {\n \"packageInstallURL\": \"https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789\",\n \"gcpProjectId\": \"my-gcp-project\",\n \"gcpPubSubTopicName\": \"my-topic\"\n }\n }\n }\n}")

req, _ := http.NewRequest("PATCH", 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.patch("https://api.withampersand.com/v1/projects/{projectIdOrName}/provider-apps/{providerAppId}")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"updateMask\": [\n \"externalRef\",\n \"clientId\"\n ],\n \"providerApp\": {\n \"externalRef\": \"external-id-123\",\n \"provider\": \"salesforce\",\n \"clientId\": \"client-id-123\",\n \"clientSecret\": \"client-secret-123\",\n \"scopes\": [\n [\n \"read\",\n \"write\"\n ]\n ],\n \"metadata\": {\n \"authQueryParams\": {\n \"optional_scope\": [\n \"automation.sequences.read\"\n ]\n },\n \"providerParams\": {\n \"packageInstallURL\": \"https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789\",\n \"gcpProjectId\": \"my-gcp-project\",\n \"gcpPubSubTopicName\": \"my-topic\"\n }\n }\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.withampersand.com/v1/projects/{projectIdOrName}/provider-apps/{providerAppId}")

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

request = Net::HTTP::Patch.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"updateMask\": [\n \"externalRef\",\n \"clientId\"\n ],\n \"providerApp\": {\n \"externalRef\": \"external-id-123\",\n \"provider\": \"salesforce\",\n \"clientId\": \"client-id-123\",\n \"clientSecret\": \"client-secret-123\",\n \"scopes\": [\n [\n \"read\",\n \"write\"\n ]\n ],\n \"metadata\": {\n \"authQueryParams\": {\n \"optional_scope\": [\n \"automation.sequences.read\"\n ]\n },\n \"providerParams\": {\n \"packageInstallURL\": \"https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789\",\n \"gcpProjectId\": \"my-gcp-project\",\n \"gcpPubSubTopicName\": \"my-topic\"\n }\n }\n }\n}"

response = http.request(request)
puts response.read_body
{
  "id": "provider-app-123",
  "projectId": "project-456",
  "provider": "salesforce",
  "clientId": "client-id-123",
  "createTime": "2023-11-07T05:31:56Z",
  "externalRef": "external-id-123",
  "scopes": [
    [
      "oauth",
      "offline",
      "crm.read"
    ]
  ],
  "metadata": {
    "authQueryParams": {
      "optional_scope": [
        "automation.sequences.read"
      ]
    },
    "providerParams": {
      "packageInstallURL": "https://login.salesforce.com/packaging/installPackage.apexp?p0=04t123456789",
      "gcpProjectId": "my-gcp-project",
      "gcpPubSubTopicName": "my-topic"
    }
  },
  "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

X-Api-Key
string
header
required

Path Parameters

projectIdOrName
string
required

The Ampersand project ID or project name.

providerAppId
string
required

ID of the provider app, returned by the CreateProviderApp call.

Body

application/json
updateMask
string[]
required

Array of field paths specifying which fields to update. Allowed values include:

  • externalRef
  • clientId
  • clientSecret
  • provider
  • scopes
  • metadata
Example:
["externalRef", "clientId"]
providerApp
object
required

The provider app fields to update. (Only include the fields you'd like to update.)

Response

The updated provider app

id
string
required

The provider app ID.

Example:

"provider-app-123"

projectId
string
required

The Ampersand project ID.

Example:

"project-456"

provider
string
required

The SaaS provider that this app connects to.

Example:

"salesforce"

clientId
string
required

The OAuth client ID for this app.

Example:

"client-id-123"

createTime
string<date-time>
required

The time the provider app was created.

externalRef
string

The ID used by the provider to identify the app (optional).

Example:

"external-id-123"

scopes
string[]

The OAuth scopes for this app.

metadata
Provider App Metadata · object

Provider-specific configuration that extends the standard OAuth flow.

updateTime
string<date-time>

The time the provider app was updated.