Clone a trip
Creates a draft copy of a nonsample trip with a unique name. Optional switches control copying budgets, tasks, documents and settings, and whether copied task dates shift with the new start date. Trip creation entitlement applies.
curl --request POST \
--url https://api.gratona.com/v1/admin/trips/{id}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Follow up with trip participants",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"clone_budget_items": false,
"clone_tasks": false,
"clone_documents": false,
"clone_settings": false,
"shift_task_dates": false
}
'import requests
url = "https://api.gratona.com/v1/admin/trips/{id}/clone"
payload = {
"name": "Follow up with trip participants",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"clone_budget_items": False,
"clone_tasks": False,
"clone_documents": False,
"clone_settings": False,
"shift_task_dates": 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',
start_date: '2026-10-20T09:00:00Z',
end_date: '2026-10-20T09:00:00Z',
clone_budget_items: false,
clone_tasks: false,
clone_documents: false,
clone_settings: false,
shift_task_dates: false
})
};
fetch('https://api.gratona.com/v1/admin/trips/{id}/clone', 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/{id}/clone",
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',
'start_date' => '2026-10-20T09:00:00Z',
'end_date' => '2026-10-20T09:00:00Z',
'clone_budget_items' => false,
'clone_tasks' => false,
'clone_documents' => false,
'clone_settings' => false,
'shift_task_dates' => 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/{id}/clone"
payload := strings.NewReader("{\n \"name\": \"Follow up with trip participants\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"clone_budget_items\": false,\n \"clone_tasks\": false,\n \"clone_documents\": false,\n \"clone_settings\": false,\n \"shift_task_dates\": false\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/{id}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Follow up with trip participants\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"clone_budget_items\": false,\n \"clone_tasks\": false,\n \"clone_documents\": false,\n \"clone_settings\": false,\n \"shift_task_dates\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/trips/{id}/clone")
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 \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"clone_budget_items\": false,\n \"clone_tasks\": false,\n \"clone_documents\": false,\n \"clone_settings\": false,\n \"shift_task_dates\": false\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.
Path Parameters
Record ID within the organization and any parent resource in this route.
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: nullable|date.
"2026-10-20T09:00:00Z"
Trip end date; must be on or after start_date.
"2026-10-20T09:00:00Z"
Validation: boolean.
false
Validation: boolean.
false
Validation: boolean.
false
Validation: boolean.
false
Validation: boolean.
false
Response
Clone a trip response.
curl --request POST \
--url https://api.gratona.com/v1/admin/trips/{id}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Follow up with trip participants",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"clone_budget_items": false,
"clone_tasks": false,
"clone_documents": false,
"clone_settings": false,
"shift_task_dates": false
}
'import requests
url = "https://api.gratona.com/v1/admin/trips/{id}/clone"
payload = {
"name": "Follow up with trip participants",
"start_date": "2026-10-20T09:00:00Z",
"end_date": "2026-10-20T09:00:00Z",
"clone_budget_items": False,
"clone_tasks": False,
"clone_documents": False,
"clone_settings": False,
"shift_task_dates": 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',
start_date: '2026-10-20T09:00:00Z',
end_date: '2026-10-20T09:00:00Z',
clone_budget_items: false,
clone_tasks: false,
clone_documents: false,
clone_settings: false,
shift_task_dates: false
})
};
fetch('https://api.gratona.com/v1/admin/trips/{id}/clone', 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/{id}/clone",
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',
'start_date' => '2026-10-20T09:00:00Z',
'end_date' => '2026-10-20T09:00:00Z',
'clone_budget_items' => false,
'clone_tasks' => false,
'clone_documents' => false,
'clone_settings' => false,
'shift_task_dates' => 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/{id}/clone"
payload := strings.NewReader("{\n \"name\": \"Follow up with trip participants\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"clone_budget_items\": false,\n \"clone_tasks\": false,\n \"clone_documents\": false,\n \"clone_settings\": false,\n \"shift_task_dates\": false\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/{id}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Follow up with trip participants\",\n \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"clone_budget_items\": false,\n \"clone_tasks\": false,\n \"clone_documents\": false,\n \"clone_settings\": false,\n \"shift_task_dates\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/trips/{id}/clone")
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 \"start_date\": \"2026-10-20T09:00:00Z\",\n \"end_date\": \"2026-10-20T09:00:00Z\",\n \"clone_budget_items\": false,\n \"clone_tasks\": false,\n \"clone_documents\": false,\n \"clone_settings\": false,\n \"shift_task_dates\": false\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."
}