curl --request POST \
--url https://api.signupbreeze.com/v1/events/{event_id}/duplicate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"start_date": "2026-10-03"
}
'import requests
url = "https://api.signupbreeze.com/v1/events/{event_id}/duplicate"
payload = { "start_date": "2026-10-03" }
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({start_date: '2026-10-03'})
};
fetch('https://api.signupbreeze.com/v1/events/{event_id}/duplicate', 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.signupbreeze.com/v1/events/{event_id}/duplicate",
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([
'start_date' => '2026-10-03'
]),
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.signupbreeze.com/v1/events/{event_id}/duplicate"
payload := strings.NewReader("{\n \"start_date\": \"2026-10-03\"\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.signupbreeze.com/v1/events/{event_id}/duplicate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"start_date\": \"2026-10-03\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signupbreeze.com/v1/events/{event_id}/duplicate")
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 \"start_date\": \"2026-10-03\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "019ff256-ecdb-70e9-8466-a2c97262ffdc",
"title": "Adipisci quidem nostrum qui.",
"description": "Odit et et modi. Nostrum omnis autem et consequatur aut. Enim non facere tempora ex voluptatem laboriosam praesentium. Adipisci molestias fugit deleniti distinctio eum doloremque id.\n\nAliquam veniam corporis dolorem mollitia deleniti nemo. Quia officia est dignissimos neque. Odio veritatis excepturi doloribus delectus fugit qui repudiandae. Est alias tenetur ratione.",
"slug": "adipisci-quidem-nostrum-qui-854",
"location": "80483 Kovacek Causeway\nMoiseschester, AZ 60787-7092",
"is_virtual": false,
"start_date": "2026-09-22T05:51:00+00:00",
"end_date": "2026-09-22T11:24:51+00:00",
"timezone": "UTC",
"is_published": false,
"public_url": "http://localhost/e/adipisci-quidem-nostrum-qui-854",
"slots": [
{
"id": "019ff256-ecdc-727c-ac4a-2d32df7f5179",
"event_id": "019ff256-ecdb-70e9-8466-a2c97262ffdc",
"title": "Setup Team",
"location": null,
"is_virtual": false,
"start_time": "2026-09-24T16:30:44+00:00",
"end_time": "2026-09-24T18:30:44+00:00",
"capacity": 10,
"filled": 0,
"remaining": 10,
"created_at": "2026-08-11T19:40:10+00:00",
"updated_at": "2026-08-11T19:40:10+00:00"
}
],
"created_at": "2026-08-11T19:40:10+00:00",
"updated_at": "2026-08-11T19:40:10+00:00"
}
}{
"message": "Not found."
}{
"message": "The start date field is required.",
"errors": {
"start_date": [
"The start date field is required."
]
}
}Duplicate an event
Copies the event, its shifts, and its signup questions to a new start date. Shift times shift along with it, keeping their time of day. Signups are not copied.
The copy is always created unpublished, so it does not count against your plan’s active-event limit until you publish it. This is the endpoint to use for “set up the same signup for the next eight games”.
Requires the events:write scope.
curl --request POST \
--url https://api.signupbreeze.com/v1/events/{event_id}/duplicate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"start_date": "2026-10-03"
}
'import requests
url = "https://api.signupbreeze.com/v1/events/{event_id}/duplicate"
payload = { "start_date": "2026-10-03" }
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({start_date: '2026-10-03'})
};
fetch('https://api.signupbreeze.com/v1/events/{event_id}/duplicate', 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.signupbreeze.com/v1/events/{event_id}/duplicate",
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([
'start_date' => '2026-10-03'
]),
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.signupbreeze.com/v1/events/{event_id}/duplicate"
payload := strings.NewReader("{\n \"start_date\": \"2026-10-03\"\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.signupbreeze.com/v1/events/{event_id}/duplicate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"start_date\": \"2026-10-03\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signupbreeze.com/v1/events/{event_id}/duplicate")
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 \"start_date\": \"2026-10-03\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "019ff256-ecdb-70e9-8466-a2c97262ffdc",
"title": "Adipisci quidem nostrum qui.",
"description": "Odit et et modi. Nostrum omnis autem et consequatur aut. Enim non facere tempora ex voluptatem laboriosam praesentium. Adipisci molestias fugit deleniti distinctio eum doloremque id.\n\nAliquam veniam corporis dolorem mollitia deleniti nemo. Quia officia est dignissimos neque. Odio veritatis excepturi doloribus delectus fugit qui repudiandae. Est alias tenetur ratione.",
"slug": "adipisci-quidem-nostrum-qui-854",
"location": "80483 Kovacek Causeway\nMoiseschester, AZ 60787-7092",
"is_virtual": false,
"start_date": "2026-09-22T05:51:00+00:00",
"end_date": "2026-09-22T11:24:51+00:00",
"timezone": "UTC",
"is_published": false,
"public_url": "http://localhost/e/adipisci-quidem-nostrum-qui-854",
"slots": [
{
"id": "019ff256-ecdc-727c-ac4a-2d32df7f5179",
"event_id": "019ff256-ecdb-70e9-8466-a2c97262ffdc",
"title": "Setup Team",
"location": null,
"is_virtual": false,
"start_time": "2026-09-24T16:30:44+00:00",
"end_time": "2026-09-24T18:30:44+00:00",
"capacity": 10,
"filled": 0,
"remaining": 10,
"created_at": "2026-08-11T19:40:10+00:00",
"updated_at": "2026-08-11T19:40:10+00:00"
}
],
"created_at": "2026-08-11T19:40:10+00:00",
"updated_at": "2026-08-11T19:40:10+00:00"
}
}{
"message": "Not found."
}{
"message": "The start date field is required.",
"errors": {
"start_date": [
"The start date field is required."
]
}
}Authorizations
Create a token under Organization settings → API. Tokens are shown once, on creation. They belong to the organization, not to you, so they keep working if you leave the team. API access is included on every plan; the rate limit depends on the plan.
Path Parameters
The ID of the event.
The id of the event to copy.
Body
The new event's start date, as YYYY-MM-DD.
"2026-10-03"
Response
Show child attributes
Show child attributes

