Create a trip
Creates or edits a trip within the authenticated organization. Name and slug must be unique within the organization; end_date must not precede start_date. Creating a trip also creates its fund entity and required program/form bindings; updating settings may update the shared Trip Participants program.
curl --request POST \
--url https://api.gratona.com/v1/admin/trips \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Follow up with trip participants",
"fundraising_goal": 40,
"status": "draft",
"slug": "uganda-service-trip",
"description": "Please review the updated trip details.",
"destination": "Kampala, Uganda",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"cover_image_id": 1,
"settings": {
"donor_hysform_id": 1,
"program_setting_id": 1,
"emailset_id": 1,
"show_donor_names": "full",
"default_participant_goal_mode": "equal_split",
"default_participant_goal_amount": 40,
"required_esign_templates": [
"<string>"
],
"background_check_validity_months": 1,
"background_check_cost_mode": "org",
"show_donation_amounts": false,
"allow_recurring_donations": false,
"completed_accept_donations": false,
"show_participant_goals": false,
"allow_anonymous_donations": false,
"sync_budget_to_goal": false,
"allow_participant_visibility_opt_out": false,
"request_to_join_enabled": false
}
}
'import requests
url = "https://api.gratona.com/v1/admin/trips"
payload = {
"name": "Follow up with trip participants",
"fundraising_goal": 40,
"status": "draft",
"slug": "uganda-service-trip",
"description": "Please review the updated trip details.",
"destination": "Kampala, Uganda",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"cover_image_id": 1,
"settings": {
"donor_hysform_id": 1,
"program_setting_id": 1,
"emailset_id": 1,
"show_donor_names": "full",
"default_participant_goal_mode": "equal_split",
"default_participant_goal_amount": 40,
"required_esign_templates": ["<string>"],
"background_check_validity_months": 1,
"background_check_cost_mode": "org",
"show_donation_amounts": False,
"allow_recurring_donations": False,
"completed_accept_donations": False,
"show_participant_goals": False,
"allow_anonymous_donations": False,
"sync_budget_to_goal": False,
"allow_participant_visibility_opt_out": False,
"request_to_join_enabled": False
}
}
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({
name: 'Follow up with trip participants',
fundraising_goal: 40,
status: 'draft',
slug: 'uganda-service-trip',
description: 'Please review the updated trip details.',
destination: 'Kampala, Uganda',
start_date: '2026-10-20T09:00:00Z',
end_date: '2026-10-20T09:00:00Z',
cover_image_id: 1,
settings: {
donor_hysform_id: 1,
program_setting_id: 1,
emailset_id: 1,
show_donor_names: 'full',
default_participant_goal_mode: 'equal_split',
default_participant_goal_amount: 40,
required_esign_templates: ['<string>'],
background_check_validity_months: 1,
background_check_cost_mode: 'org',
show_donation_amounts: false,
allow_recurring_donations: false,
completed_accept_donations: false,
show_participant_goals: false,
allow_anonymous_donations: false,
sync_budget_to_goal: false,
allow_participant_visibility_opt_out: false,
request_to_join_enabled: false
}
})
};
fetch('https://api.gratona.com/v1/admin/trips', 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/trips",
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([
'name' => 'Follow up with trip participants',
'fundraising_goal' => 40,
'status' => 'draft',
'slug' => 'uganda-service-trip',
'description' => 'Please review the updated trip details.',
'destination' => 'Kampala, Uganda',
'start_date' => '2026-10-20T09:00:00Z',
'end_date' => '2026-10-20T09:00:00Z',
'cover_image_id' => 1,
'settings' => [
'donor_hysform_id' => 1,
'program_setting_id' => 1,
'emailset_id' => 1,
'show_donor_names' => 'full',
'default_participant_goal_mode' => 'equal_split',
'default_participant_goal_amount' => 40,
'required_esign_templates' => [
'<string>'
],
'background_check_validity_months' => 1,
'background_check_cost_mode' => 'org',
'show_donation_amounts' => false,
'allow_recurring_donations' => false,
'completed_accept_donations' => false,
'show_participant_goals' => false,
'allow_anonymous_donations' => false,
'sync_budget_to_goal' => false,
'allow_participant_visibility_opt_out' => false,
'request_to_join_enabled' => false
]
]),
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/trips"
payload := strings.NewReader("{\n \"name\": \"Follow up with trip participants\",\n \"fundraising_goal\": 40,\n \"status\": \"draft\",\n \"slug\": \"uganda-service-trip\",\n \"description\": \"Please review the updated trip details.\",\n \"destination\": \"Kampala, Uganda\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"cover_image_id\": 1,\n \"settings\": {\n \"donor_hysform_id\": 1,\n \"program_setting_id\": 1,\n \"emailset_id\": 1,\n \"show_donor_names\": \"full\",\n \"default_participant_goal_mode\": \"equal_split\",\n \"default_participant_goal_amount\": 40,\n \"required_esign_templates\": [\n \"<string>\"\n ],\n \"background_check_validity_months\": 1,\n \"background_check_cost_mode\": \"org\",\n \"show_donation_amounts\": false,\n \"allow_recurring_donations\": false,\n \"completed_accept_donations\": false,\n \"show_participant_goals\": false,\n \"allow_anonymous_donations\": false,\n \"sync_budget_to_goal\": false,\n \"allow_participant_visibility_opt_out\": false,\n \"request_to_join_enabled\": false\n }\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/trips")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Follow up with trip participants\",\n \"fundraising_goal\": 40,\n \"status\": \"draft\",\n \"slug\": \"uganda-service-trip\",\n \"description\": \"Please review the updated trip details.\",\n \"destination\": \"Kampala, Uganda\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"cover_image_id\": 1,\n \"settings\": {\n \"donor_hysform_id\": 1,\n \"program_setting_id\": 1,\n \"emailset_id\": 1,\n \"show_donor_names\": \"full\",\n \"default_participant_goal_mode\": \"equal_split\",\n \"default_participant_goal_amount\": 40,\n \"required_esign_templates\": [\n \"<string>\"\n ],\n \"background_check_validity_months\": 1,\n \"background_check_cost_mode\": \"org\",\n \"show_donation_amounts\": false,\n \"allow_recurring_donations\": false,\n \"completed_accept_donations\": false,\n \"show_participant_goals\": false,\n \"allow_anonymous_donations\": false,\n \"sync_budget_to_goal\": false,\n \"allow_participant_visibility_opt_out\": false,\n \"request_to_join_enabled\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/trips")
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 \"name\": \"Follow up with trip participants\",\n \"fundraising_goal\": 40,\n \"status\": \"draft\",\n \"slug\": \"uganda-service-trip\",\n \"description\": \"Please review the updated trip details.\",\n \"destination\": \"Kampala, Uganda\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"cover_image_id\": 1,\n \"settings\": {\n \"donor_hysform_id\": 1,\n \"program_setting_id\": 1,\n \"emailset_id\": 1,\n \"show_donor_names\": \"full\",\n \"default_participant_goal_mode\": \"equal_split\",\n \"default_participant_goal_amount\": 40,\n \"required_esign_templates\": [\n \"<string>\"\n ],\n \"background_check_validity_months\": 1,\n \"background_check_cost_mode\": \"org\",\n \"show_donation_amounts\": false,\n \"allow_recurring_donations\": false,\n \"completed_accept_donations\": false,\n \"show_participant_goals\": false,\n \"allow_anonymous_donations\": false,\n \"sync_budget_to_goal\": false,\n \"allow_participant_visibility_opt_out\": false,\n \"request_to_join_enabled\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"status": "<string>",
"fundraising_goal": 123,
"total_raised": 123,
"progress_percent": 123,
"participant_count": 123,
"is_sample_trip": true,
"sample_seed_version": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"destination": "<string>",
"start_date": "2023-12-25",
"end_date": "2023-12-25"
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Body
Request fields accepted by this operation. Omitted optional properties retain the behavior described above.
Validation: required|string|max:255.
255"Follow up with trip participants"
Validation: required|numeric|min:0|max:999999999.99.
0 <= x <= 999999999.9940
Validation: required|in:draft,active,completed,archived,cancelled.
draft, active, completed, archived, cancelled "draft"
Unique within the organization; generated from name when omitted on create.
255^[a-z0-9-]+$"uganda-service-trip"
Validation: nullable|string|max:50000.
50000"Please review the updated trip details."
Validation: nullable|string|max:255.
255"Kampala, Uganda"
Validation: nullable|date.
"2026-10-20T09:00:00Z"
Trip end date; must be on or after start_date.
"2026-10-20T09:00:00Z"
Validation: nullable|integer.
1
Trip-specific settings merged with saved settings on update. Binding IDs must belong to this organization. background_check_validity_months is validated but stripped before storage; Checkr owns validity. sample_seed is preserved and cannot be supplied by callers.
Show child attributes
Show child attributes
Response
Create a trip response.
curl --request POST \
--url https://api.gratona.com/v1/admin/trips \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Follow up with trip participants",
"fundraising_goal": 40,
"status": "draft",
"slug": "uganda-service-trip",
"description": "Please review the updated trip details.",
"destination": "Kampala, Uganda",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"cover_image_id": 1,
"settings": {
"donor_hysform_id": 1,
"program_setting_id": 1,
"emailset_id": 1,
"show_donor_names": "full",
"default_participant_goal_mode": "equal_split",
"default_participant_goal_amount": 40,
"required_esign_templates": [
"<string>"
],
"background_check_validity_months": 1,
"background_check_cost_mode": "org",
"show_donation_amounts": false,
"allow_recurring_donations": false,
"completed_accept_donations": false,
"show_participant_goals": false,
"allow_anonymous_donations": false,
"sync_budget_to_goal": false,
"allow_participant_visibility_opt_out": false,
"request_to_join_enabled": false
}
}
'import requests
url = "https://api.gratona.com/v1/admin/trips"
payload = {
"name": "Follow up with trip participants",
"fundraising_goal": 40,
"status": "draft",
"slug": "uganda-service-trip",
"description": "Please review the updated trip details.",
"destination": "Kampala, Uganda",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"cover_image_id": 1,
"settings": {
"donor_hysform_id": 1,
"program_setting_id": 1,
"emailset_id": 1,
"show_donor_names": "full",
"default_participant_goal_mode": "equal_split",
"default_participant_goal_amount": 40,
"required_esign_templates": ["<string>"],
"background_check_validity_months": 1,
"background_check_cost_mode": "org",
"show_donation_amounts": False,
"allow_recurring_donations": False,
"completed_accept_donations": False,
"show_participant_goals": False,
"allow_anonymous_donations": False,
"sync_budget_to_goal": False,
"allow_participant_visibility_opt_out": False,
"request_to_join_enabled": False
}
}
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({
name: 'Follow up with trip participants',
fundraising_goal: 40,
status: 'draft',
slug: 'uganda-service-trip',
description: 'Please review the updated trip details.',
destination: 'Kampala, Uganda',
start_date: '2026-10-20T09:00:00Z',
end_date: '2026-10-20T09:00:00Z',
cover_image_id: 1,
settings: {
donor_hysform_id: 1,
program_setting_id: 1,
emailset_id: 1,
show_donor_names: 'full',
default_participant_goal_mode: 'equal_split',
default_participant_goal_amount: 40,
required_esign_templates: ['<string>'],
background_check_validity_months: 1,
background_check_cost_mode: 'org',
show_donation_amounts: false,
allow_recurring_donations: false,
completed_accept_donations: false,
show_participant_goals: false,
allow_anonymous_donations: false,
sync_budget_to_goal: false,
allow_participant_visibility_opt_out: false,
request_to_join_enabled: false
}
})
};
fetch('https://api.gratona.com/v1/admin/trips', 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/trips",
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([
'name' => 'Follow up with trip participants',
'fundraising_goal' => 40,
'status' => 'draft',
'slug' => 'uganda-service-trip',
'description' => 'Please review the updated trip details.',
'destination' => 'Kampala, Uganda',
'start_date' => '2026-10-20T09:00:00Z',
'end_date' => '2026-10-20T09:00:00Z',
'cover_image_id' => 1,
'settings' => [
'donor_hysform_id' => 1,
'program_setting_id' => 1,
'emailset_id' => 1,
'show_donor_names' => 'full',
'default_participant_goal_mode' => 'equal_split',
'default_participant_goal_amount' => 40,
'required_esign_templates' => [
'<string>'
],
'background_check_validity_months' => 1,
'background_check_cost_mode' => 'org',
'show_donation_amounts' => false,
'allow_recurring_donations' => false,
'completed_accept_donations' => false,
'show_participant_goals' => false,
'allow_anonymous_donations' => false,
'sync_budget_to_goal' => false,
'allow_participant_visibility_opt_out' => false,
'request_to_join_enabled' => false
]
]),
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/trips"
payload := strings.NewReader("{\n \"name\": \"Follow up with trip participants\",\n \"fundraising_goal\": 40,\n \"status\": \"draft\",\n \"slug\": \"uganda-service-trip\",\n \"description\": \"Please review the updated trip details.\",\n \"destination\": \"Kampala, Uganda\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"cover_image_id\": 1,\n \"settings\": {\n \"donor_hysform_id\": 1,\n \"program_setting_id\": 1,\n \"emailset_id\": 1,\n \"show_donor_names\": \"full\",\n \"default_participant_goal_mode\": \"equal_split\",\n \"default_participant_goal_amount\": 40,\n \"required_esign_templates\": [\n \"<string>\"\n ],\n \"background_check_validity_months\": 1,\n \"background_check_cost_mode\": \"org\",\n \"show_donation_amounts\": false,\n \"allow_recurring_donations\": false,\n \"completed_accept_donations\": false,\n \"show_participant_goals\": false,\n \"allow_anonymous_donations\": false,\n \"sync_budget_to_goal\": false,\n \"allow_participant_visibility_opt_out\": false,\n \"request_to_join_enabled\": false\n }\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/trips")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Follow up with trip participants\",\n \"fundraising_goal\": 40,\n \"status\": \"draft\",\n \"slug\": \"uganda-service-trip\",\n \"description\": \"Please review the updated trip details.\",\n \"destination\": \"Kampala, Uganda\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"cover_image_id\": 1,\n \"settings\": {\n \"donor_hysform_id\": 1,\n \"program_setting_id\": 1,\n \"emailset_id\": 1,\n \"show_donor_names\": \"full\",\n \"default_participant_goal_mode\": \"equal_split\",\n \"default_participant_goal_amount\": 40,\n \"required_esign_templates\": [\n \"<string>\"\n ],\n \"background_check_validity_months\": 1,\n \"background_check_cost_mode\": \"org\",\n \"show_donation_amounts\": false,\n \"allow_recurring_donations\": false,\n \"completed_accept_donations\": false,\n \"show_participant_goals\": false,\n \"allow_anonymous_donations\": false,\n \"sync_budget_to_goal\": false,\n \"allow_participant_visibility_opt_out\": false,\n \"request_to_join_enabled\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/trips")
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 \"name\": \"Follow up with trip participants\",\n \"fundraising_goal\": 40,\n \"status\": \"draft\",\n \"slug\": \"uganda-service-trip\",\n \"description\": \"Please review the updated trip details.\",\n \"destination\": \"Kampala, Uganda\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"cover_image_id\": 1,\n \"settings\": {\n \"donor_hysform_id\": 1,\n \"program_setting_id\": 1,\n \"emailset_id\": 1,\n \"show_donor_names\": \"full\",\n \"default_participant_goal_mode\": \"equal_split\",\n \"default_participant_goal_amount\": 40,\n \"required_esign_templates\": [\n \"<string>\"\n ],\n \"background_check_validity_months\": 1,\n \"background_check_cost_mode\": \"org\",\n \"show_donation_amounts\": false,\n \"allow_recurring_donations\": false,\n \"completed_accept_donations\": false,\n \"show_participant_goals\": false,\n \"allow_anonymous_donations\": false,\n \"sync_budget_to_goal\": false,\n \"allow_participant_visibility_opt_out\": false,\n \"request_to_join_enabled\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"status": "<string>",
"fundraising_goal": 123,
"total_raised": 123,
"progress_percent": 123,
"participant_count": 123,
"is_sample_trip": true,
"sample_seed_version": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"destination": "<string>",
"start_date": "2023-12-25",
"end_date": "2023-12-25"
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}