curl --request PUT \
--url https://api.erdo.ai/v1/dataset-notifications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"after": "<string>",
"dataset": "<string>",
"exclusion": {
"when": "<string>"
},
"recipients": [
"<string>"
],
"skip_when": "<string>",
"timestamp_column": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/dataset-notifications"
payload = {
"after": "<string>",
"dataset": "<string>",
"exclusion": { "when": "<string>" },
"recipients": ["<string>"],
"skip_when": "<string>",
"timestamp_column": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
after: '<string>',
dataset: '<string>',
exclusion: {when: '<string>'},
recipients: ['<string>'],
skip_when: '<string>',
timestamp_column: '<string>'
})
};
fetch('https://api.erdo.ai/v1/dataset-notifications', 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.erdo.ai/v1/dataset-notifications",
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([
'after' => '<string>',
'dataset' => '<string>',
'exclusion' => [
'when' => '<string>'
],
'recipients' => [
'<string>'
],
'skip_when' => '<string>',
'timestamp_column' => '<string>'
]),
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.erdo.ai/v1/dataset-notifications"
payload := strings.NewReader("{\n \"after\": \"<string>\",\n \"dataset\": \"<string>\",\n \"exclusion\": {\n \"when\": \"<string>\"\n },\n \"recipients\": [\n \"<string>\"\n ],\n \"skip_when\": \"<string>\",\n \"timestamp_column\": \"<string>\"\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))
}HttpResponse<String> response = Unirest.put("https://api.erdo.ai/v1/dataset-notifications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"after\": \"<string>\",\n \"dataset\": \"<string>\",\n \"exclusion\": {\n \"when\": \"<string>\"\n },\n \"recipients\": [\n \"<string>\"\n ],\n \"skip_when\": \"<string>\",\n \"timestamp_column\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/dataset-notifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"after\": \"<string>\",\n \"dataset\": \"<string>\",\n \"exclusion\": {\n \"when\": \"<string>\"\n },\n \"recipients\": [\n \"<string>\"\n ],\n \"skip_when\": \"<string>\",\n \"timestamp_column\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"after": "<string>",
"dataset": "<string>",
"enabled": true,
"exclusion": {
"when": "<string>"
},
"job_id": "<string>",
"recipients": [
"<string>"
],
"skip_when": "<string>",
"timestamp_column": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}SetDatasetNotificationAPI replaces the email recipients and optional durable
exclusion rule for a dataset. Empty recipients turn email off; the declaration is removed only when exclusion is absent too.
curl --request PUT \
--url https://api.erdo.ai/v1/dataset-notifications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"after": "<string>",
"dataset": "<string>",
"exclusion": {
"when": "<string>"
},
"recipients": [
"<string>"
],
"skip_when": "<string>",
"timestamp_column": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/dataset-notifications"
payload = {
"after": "<string>",
"dataset": "<string>",
"exclusion": { "when": "<string>" },
"recipients": ["<string>"],
"skip_when": "<string>",
"timestamp_column": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
after: '<string>',
dataset: '<string>',
exclusion: {when: '<string>'},
recipients: ['<string>'],
skip_when: '<string>',
timestamp_column: '<string>'
})
};
fetch('https://api.erdo.ai/v1/dataset-notifications', 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.erdo.ai/v1/dataset-notifications",
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([
'after' => '<string>',
'dataset' => '<string>',
'exclusion' => [
'when' => '<string>'
],
'recipients' => [
'<string>'
],
'skip_when' => '<string>',
'timestamp_column' => '<string>'
]),
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.erdo.ai/v1/dataset-notifications"
payload := strings.NewReader("{\n \"after\": \"<string>\",\n \"dataset\": \"<string>\",\n \"exclusion\": {\n \"when\": \"<string>\"\n },\n \"recipients\": [\n \"<string>\"\n ],\n \"skip_when\": \"<string>\",\n \"timestamp_column\": \"<string>\"\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))
}HttpResponse<String> response = Unirest.put("https://api.erdo.ai/v1/dataset-notifications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"after\": \"<string>\",\n \"dataset\": \"<string>\",\n \"exclusion\": {\n \"when\": \"<string>\"\n },\n \"recipients\": [\n \"<string>\"\n ],\n \"skip_when\": \"<string>\",\n \"timestamp_column\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/dataset-notifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"after\": \"<string>\",\n \"dataset\": \"<string>\",\n \"exclusion\": {\n \"when\": \"<string>\"\n },\n \"recipients\": [\n \"<string>\"\n ],\n \"skip_when\": \"<string>\",\n \"timestamp_column\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"after": "<string>",
"dataset": "<string>",
"enabled": true,
"exclusion": {
"when": "<string>"
},
"job_id": "<string>",
"recipients": [
"<string>"
],
"skip_when": "<string>",
"timestamp_column": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Body
notification waits for, so the email can say what that declaration found out about the row. Without it the two run at the same instant off the same write and the message is composed before the answer exists.
Show child attributes
Show child attributes
the declaration remains active when durable exclusion is configured.
get an alert email. The criterion is data, not policy: the platform judges each new row against whatever the caller wrote, with the MX lookup's answer supplied as evidence rather than acted on as a verdict.
detected; set it when the dataset names that column unconventionally. It must hold timestamps: the notification starts from the newest value already in that column and compares later rows against it as text, so a column of free-text answers is refused rather than accepted into a notification that would email nobody.

