Files
Validate donor data without persisting to database
POST
/
admin
/
import
/
donors
/
dry-run
Validate donor data without persisting to database
curl --request POST \
--url https://api.gratona.com/v1/admin/import/donors/dry-run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filename": "<string>",
"fields": {},
"program_id": 123,
"hysform_id": 123,
"household": true,
"householdColumn": "<string>",
"updateExisting": true,
"allowTypeTransitions": true,
"uniqueIdentifierColumn": "<string>",
"uniqueIdentifierField": "<string>",
"offset": 123
}
'import requests
url = "https://api.gratona.com/v1/admin/import/donors/dry-run"
payload = {
"filename": "<string>",
"fields": {},
"program_id": 123,
"hysform_id": 123,
"household": True,
"householdColumn": "<string>",
"updateExisting": True,
"allowTypeTransitions": True,
"uniqueIdentifierColumn": "<string>",
"uniqueIdentifierField": "<string>",
"offset": 123
}
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({
filename: '<string>',
fields: {},
program_id: 123,
hysform_id: 123,
household: true,
householdColumn: '<string>',
updateExisting: true,
allowTypeTransitions: true,
uniqueIdentifierColumn: '<string>',
uniqueIdentifierField: '<string>',
offset: 123
})
};
fetch('https://api.gratona.com/v1/admin/import/donors/dry-run', 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/import/donors/dry-run",
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([
'filename' => '<string>',
'fields' => [
],
'program_id' => 123,
'hysform_id' => 123,
'household' => true,
'householdColumn' => '<string>',
'updateExisting' => true,
'allowTypeTransitions' => true,
'uniqueIdentifierColumn' => '<string>',
'uniqueIdentifierField' => '<string>',
'offset' => 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.gratona.com/v1/admin/import/donors/dry-run"
payload := strings.NewReader("{\n \"filename\": \"<string>\",\n \"fields\": {},\n \"program_id\": 123,\n \"hysform_id\": 123,\n \"household\": true,\n \"householdColumn\": \"<string>\",\n \"updateExisting\": true,\n \"allowTypeTransitions\": true,\n \"uniqueIdentifierColumn\": \"<string>\",\n \"uniqueIdentifierField\": \"<string>\",\n \"offset\": 123\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/import/donors/dry-run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filename\": \"<string>\",\n \"fields\": {},\n \"program_id\": 123,\n \"hysform_id\": 123,\n \"household\": true,\n \"householdColumn\": \"<string>\",\n \"updateExisting\": true,\n \"allowTypeTransitions\": true,\n \"uniqueIdentifierColumn\": \"<string>\",\n \"uniqueIdentifierField\": \"<string>\",\n \"offset\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/import/donors/dry-run")
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 \"filename\": \"<string>\",\n \"fields\": {},\n \"program_id\": 123,\n \"hysform_id\": 123,\n \"household\": true,\n \"householdColumn\": \"<string>\",\n \"updateExisting\": true,\n \"allowTypeTransitions\": true,\n \"uniqueIdentifierColumn\": \"<string>\",\n \"uniqueIdentifierField\": \"<string>\",\n \"offset\": 123\n}"
response = http.request(request)
puts response.read_body{
"message": "Donor validation has been queued.",
"validation_job_id": 123
}Authorizations
bearerAuthapiKeyAuth
Passport bearer token authentication for legacy admin sessions.
Body
application/json
S3 filename of the CSV
Mapping of CSV columns to field keys
Program ID
Donor form ID
Enable household feature
Household column name
Update existing records instead of creating new ones
Allow reviewed donor rows to change between Individual and Organization
CSV column position for unique identifier
Database field name to query by for finding existing records
Header row offset
⌘I
Validate donor data without persisting to database
curl --request POST \
--url https://api.gratona.com/v1/admin/import/donors/dry-run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"filename": "<string>",
"fields": {},
"program_id": 123,
"hysform_id": 123,
"household": true,
"householdColumn": "<string>",
"updateExisting": true,
"allowTypeTransitions": true,
"uniqueIdentifierColumn": "<string>",
"uniqueIdentifierField": "<string>",
"offset": 123
}
'import requests
url = "https://api.gratona.com/v1/admin/import/donors/dry-run"
payload = {
"filename": "<string>",
"fields": {},
"program_id": 123,
"hysform_id": 123,
"household": True,
"householdColumn": "<string>",
"updateExisting": True,
"allowTypeTransitions": True,
"uniqueIdentifierColumn": "<string>",
"uniqueIdentifierField": "<string>",
"offset": 123
}
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({
filename: '<string>',
fields: {},
program_id: 123,
hysform_id: 123,
household: true,
householdColumn: '<string>',
updateExisting: true,
allowTypeTransitions: true,
uniqueIdentifierColumn: '<string>',
uniqueIdentifierField: '<string>',
offset: 123
})
};
fetch('https://api.gratona.com/v1/admin/import/donors/dry-run', 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/import/donors/dry-run",
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([
'filename' => '<string>',
'fields' => [
],
'program_id' => 123,
'hysform_id' => 123,
'household' => true,
'householdColumn' => '<string>',
'updateExisting' => true,
'allowTypeTransitions' => true,
'uniqueIdentifierColumn' => '<string>',
'uniqueIdentifierField' => '<string>',
'offset' => 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.gratona.com/v1/admin/import/donors/dry-run"
payload := strings.NewReader("{\n \"filename\": \"<string>\",\n \"fields\": {},\n \"program_id\": 123,\n \"hysform_id\": 123,\n \"household\": true,\n \"householdColumn\": \"<string>\",\n \"updateExisting\": true,\n \"allowTypeTransitions\": true,\n \"uniqueIdentifierColumn\": \"<string>\",\n \"uniqueIdentifierField\": \"<string>\",\n \"offset\": 123\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/import/donors/dry-run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"filename\": \"<string>\",\n \"fields\": {},\n \"program_id\": 123,\n \"hysform_id\": 123,\n \"household\": true,\n \"householdColumn\": \"<string>\",\n \"updateExisting\": true,\n \"allowTypeTransitions\": true,\n \"uniqueIdentifierColumn\": \"<string>\",\n \"uniqueIdentifierField\": \"<string>\",\n \"offset\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/import/donors/dry-run")
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 \"filename\": \"<string>\",\n \"fields\": {},\n \"program_id\": 123,\n \"hysform_id\": 123,\n \"household\": true,\n \"householdColumn\": \"<string>\",\n \"updateExisting\": true,\n \"allowTypeTransitions\": true,\n \"uniqueIdentifierColumn\": \"<string>\",\n \"uniqueIdentifierField\": \"<string>\",\n \"offset\": 123\n}"
response = http.request(request)
puts response.read_body{
"message": "Donor validation has been queued.",
"validation_job_id": 123
}