curl --request GET \
--url https://api.marzipan.co/v1/events/recurring/{product}/dates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.marzipan.co/v1/events/recurring/{product}/dates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.marzipan.co/v1/events/recurring/{product}/dates', 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.marzipan.co/v1/events/recurring/{product}/dates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.marzipan.co/v1/events/recurring/{product}/dates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.marzipan.co/v1/events/recurring/{product}/dates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.marzipan.co/v1/events/recurring/{product}/dates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "9a2b3c4d-5e6f-4071-8a9b-0c1d2e3f4a5b",
"date": "2026-08-15",
"startDate": "2026-08-15",
"endDate": "2026-08-15",
"startTime": "19:00",
"endTime": "22:00",
"location": "The Grand Hall",
"status": "active",
"ticketsAvailable": 42,
"isSoldOut": false,
"formattedDateTime": "Sat 15 Aug 2026, 7:00 PM"
}
]
}{
"message": "No query results for model [Product]."
}Get Recurring Event Dates
List the upcoming active occurrences for a recurring event product within an optional date range. If the product is not a recurring event, an empty list is returned with an explanatory message. An event can be confined to one or more date ranges, and this endpoint reads the materialised occurrences, so no dates are returned for the gaps between them. Treat the returned dates as authoritative rather than re-deriving them from recurrenceType and a start date.
curl --request GET \
--url https://api.marzipan.co/v1/events/recurring/{product}/dates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.marzipan.co/v1/events/recurring/{product}/dates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.marzipan.co/v1/events/recurring/{product}/dates', 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.marzipan.co/v1/events/recurring/{product}/dates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.marzipan.co/v1/events/recurring/{product}/dates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.marzipan.co/v1/events/recurring/{product}/dates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.marzipan.co/v1/events/recurring/{product}/dates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "9a2b3c4d-5e6f-4071-8a9b-0c1d2e3f4a5b",
"date": "2026-08-15",
"startDate": "2026-08-15",
"endDate": "2026-08-15",
"startTime": "19:00",
"endTime": "22:00",
"location": "The Grand Hall",
"status": "active",
"ticketsAvailable": 42,
"isSoldOut": false,
"formattedDateTime": "Sat 15 Aug 2026, 7:00 PM"
}
]
}{
"message": "No query results for model [Product]."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your API token.
Path Parameters
The unique identifier of the event product.
Query Parameters
Start of the date range (YYYY-MM-DD). Defaults to today.
End of the date range (YYYY-MM-DD). Defaults to three months from today.
Response
The list of available occurrence dates.
Show child attributes
Show child attributes

