Donors
Retry post-merge donor refresh work
Queues an idempotent retry of donor totals and cache refreshes for committed merge operations whose ancillary refresh has not completed. Completed batches recalculate active primary donors and refresh the full donor cache set; undone batches recalculate all active primary and secondary donors. This never repeats donor merge mutations. Requires permission: duplicates_manage (also satisfied by donors_manage).
POST
/
admin
/
duplicates
/
merge
/
batches
/
{batch_id}
/
retry-refresh
Retry post-merge donor refresh work
curl --request POST \
--url https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"hysform_id": 42
}
'import requests
url = "https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh"
payload = { "hysform_id": 42 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({hysform_id: 42})
};
fetch('https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh', 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.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh",
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([
'hysform_id' => 42
]),
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.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh"
payload := strings.NewReader("{\n \"hysform_id\": 42\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"hysform_id\": 42\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"hysform_id\": 42\n}"
response = http.request(request)
puts response.read_body{
"message": "Donor totals refresh queued.",
"batch_id": 88,
"queued": true,
"ancillary_failed_count": 1,
"ancillary_pending_count": 0,
"needs_refresh": true
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}{
"message": "Failed to queue donor totals refresh."
}⌘I
Retry post-merge donor refresh work
curl --request POST \
--url https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"hysform_id": 42
}
'import requests
url = "https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh"
payload = { "hysform_id": 42 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({hysform_id: 42})
};
fetch('https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh', 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.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh",
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([
'hysform_id' => 42
]),
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.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh"
payload := strings.NewReader("{\n \"hysform_id\": 42\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"hysform_id\": 42\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/duplicates/merge/batches/{batch_id}/retry-refresh")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"hysform_id\": 42\n}"
response = http.request(request)
puts response.read_body{
"message": "Donor totals refresh queued.",
"batch_id": 88,
"queued": true,
"ancillary_failed_count": 1,
"ancillary_pending_count": 0,
"needs_refresh": true
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}{
"message": "Failed to queue donor totals refresh."
}