curl --request PUT \
--url https://api.synci.io/api/v1/webhooks/{webhookEndpointId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"description": "<string>",
"enabled": true,
"events": [],
"financial_accounts": [
123
]
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: '<string>',
description: '<string>',
enabled: true,
events: [],
financial_accounts: [123]
})
};
fetch('https://api.synci.io/api/v1/webhooks/{webhookEndpointId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.synci.io/api/v1/webhooks/{webhookEndpointId}"
payload = {
"url": "<string>",
"description": "<string>",
"enabled": True,
"events": [],
"financial_accounts": [123]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.synci.io/api/v1/webhooks/{webhookEndpointId}",
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([
'url' => '<string>',
'description' => '<string>',
'enabled' => true,
'events' => [
],
'financial_accounts' => [
123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.synci.io/api/v1/webhooks/{webhookEndpointId}"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"events\": [],\n \"financial_accounts\": [\n 123\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}{
"message": "Webhook endpoint updated.",
"data": {
"id": "<string>",
"url": "<string>",
"description": "<string>",
"enabled": "<string>",
"type": "<string>",
"omit_sensitive_identifiers": "<string>",
"events": "<string>",
"payload_version": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"financial_accounts": "<string>",
"health": {
"status": "<string>",
"integrator_message": "<string>",
"failure_count": "<string>",
"transient_message": "<string>",
"transient_failure_count": "<string>",
"last_attempt_at": "<string>"
},
"secret": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Update webhook endpoint
The payload_version field is pinned at creation and cannot be changed
here. Re-enabling a disabled endpoint is subject to your plan’s limit on
active endpoints (403 when exceeded).
curl --request PUT \
--url https://api.synci.io/api/v1/webhooks/{webhookEndpointId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"description": "<string>",
"enabled": true,
"events": [],
"financial_accounts": [
123
]
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: '<string>',
description: '<string>',
enabled: true,
events: [],
financial_accounts: [123]
})
};
fetch('https://api.synci.io/api/v1/webhooks/{webhookEndpointId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.synci.io/api/v1/webhooks/{webhookEndpointId}"
payload = {
"url": "<string>",
"description": "<string>",
"enabled": True,
"events": [],
"financial_accounts": [123]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.synci.io/api/v1/webhooks/{webhookEndpointId}",
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([
'url' => '<string>',
'description' => '<string>',
'enabled' => true,
'events' => [
],
'financial_accounts' => [
123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.synci.io/api/v1/webhooks/{webhookEndpointId}"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"description\": \"<string>\",\n \"enabled\": true,\n \"events\": [],\n \"financial_accounts\": [\n 123\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}{
"message": "Webhook endpoint updated.",
"data": {
"id": "<string>",
"url": "<string>",
"description": "<string>",
"enabled": "<string>",
"type": "<string>",
"omit_sensitive_identifiers": "<string>",
"events": "<string>",
"payload_version": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"financial_accounts": "<string>",
"health": {
"status": "<string>",
"integrator_message": "<string>",
"failure_count": "<string>",
"transient_message": "<string>",
"transient_failure_count": "<string>",
"last_attempt_at": "<string>"
},
"secret": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
The webhook endpoint ID
Body
The HTTPS URL that will receive event deliveries.
512Optional label to help you identify the endpoint.
255Whether the endpoint receives deliveries. Re-enabling is subject to your plan's limit on active endpoints.
The event types this endpoint should receive. Canonical names:
transactions.created, transactions.updated, balance.updated,
holdings.updated, account.created, account.updated,
account.deleted. Legacy aliases (bank_account.created,
bank_account.updated, bank_account.deleted) are accepted but
cannot be mixed in the same array with their canonical counterparts.
1transactions.created, transactions.updated, balance.updated, holdings.updated, account.created, account.updated, account.deleted, bank_account.created, bank_account.updated, bank_account.deleted, connection.created, connection.activated, connection.reauthorized, connection.expiring, connection.expired, connection.failing, connection.recovered, connection.disabled, connection.deleted Limit deliveries to these financial account IDs. Omit or pass null to receive events for all accounts.
WEBHOOK for a standard endpoint, ZAPIER for an endpoint used
with the Zapier integration, or N8N for an endpoint registered
by the Synci n8n trigger node.
WEBHOOK, ZAPIER, N8N When true, sensitive account identifiers (IBAN/BBAN) are omitted from delivered payloads. Must be true for Zapier endpoints.
yes, on, 1, 1, true, true