curl --request PATCH \
--url https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"overrides": {}
}
'import requests
url = "https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}"
payload = { "overrides": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({overrides: {}})
};
fetch('https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}', 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.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}",
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([
'overrides' => [
]
]),
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.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}"
payload := strings.NewReader("{\n \"overrides\": {}\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"overrides\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"overrides\": {}\n}"
response = http.request(request)
puts response.read_body{
"attempts": 123,
"columns": {},
"email": {
"body": "<string>",
"subject": "<string>",
"to": "<string>"
},
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"input": {},
"last_error": "<string>",
"not_ready_reason": "<string>",
"output": {},
"overrides": {},
"row_number": 123,
"send_attempts": 123,
"send_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sent_at": "2023-11-07T05:31:56Z",
"sent_from": "<string>",
"skip_reason": "operator",
"status": "pending",
"task_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"task_version": 123,
"to_email": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}Patch Email Batch Recipient
Edit cells on one row before it is sent.
overrides is merged over the uploaded and generated values at send time and
stored apart from both, so what the model wrote stays readable underneath.
Sending an empty value clears that edit rather than sending an empty field —
the way to send nothing is to skip the row. A queued row is still editable
and goes out as edited; one a send has already taken cannot be.
curl --request PATCH \
--url https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"overrides": {}
}
'import requests
url = "https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}"
payload = { "overrides": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({overrides: {}})
};
fetch('https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}', 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.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}",
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([
'overrides' => [
]
]),
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.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}"
payload := strings.NewReader("{\n \"overrides\": {}\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"overrides\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.talqing.com/v1/email/batches/{batch_id}/recipients/{recipient_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"overrides\": {}\n}"
response = http.request(request)
puts response.read_body{
"attempts": 123,
"columns": {},
"email": {
"body": "<string>",
"subject": "<string>",
"to": "<string>"
},
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"input": {},
"last_error": "<string>",
"not_ready_reason": "<string>",
"output": {},
"overrides": {},
"row_number": 123,
"send_attempts": 123,
"send_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sent_at": "2023-11-07T05:31:56Z",
"sent_from": "<string>",
"skip_reason": "operator",
"status": "pending",
"task_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"task_version": 123,
"to_email": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}{
"detail": {
"errors": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
One human edit, merged over what the CSV and the model produced.
Keys are column names in the merged space; an empty string clears an
override and falls back to whatever was underneath it. Stored apart from
output so "what the model wrote" and "what we actually sent" are both
answerable afterwards.
Show child attributes
Show child attributes
Response
Successful Response
One row of the review spreadsheet.
columns is the merged space — input, then output, then overrides —
which is what the three mapped fields resolve against and what the table
renders. The three halves are returned beside it so an edited cell can be
marked and "what the model wrote" stays readable under the edit.
The email this row sends, as it stands now.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
operator, duplicate_recipient, unfillable pending, drafting, draft, draft_failed, skipped, sending, sent, send_failed, queued, canceled