Replace booking blackout dates
Replaces the location’s whole list of blackout windows: days or part-days when it takes no reservations, such as a private event. Maple enforces them for native and provider-managed locations alike: availability omits the slots, and a quote taken earlier is refused when held, booked, or used for a change (409 slot_unavailable natively, 422 date_blocked for provider-managed locations). Existing bookings inside a new window are not cancelled, and walk-ins and waitlist seating are not blocked: a blackout stops reservations only. The venue edits the same list in its dashboard: read blackout_dates and blackout_dates_revision on the booking profile, and send the revision as expected_revision so a list changed since answers 409 stale_blackout_dates instead of being overwritten. Invalid ranges answer 400 invalid_blackout_dates. Requires bookings:configure.
curl --request PUT \
--url https://api.maple.inc/v1/locations/{locationId}/booking_blackouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"blackout_dates": [
{
"start_date": "<string>",
"end_date": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"reason": "<string>"
}
],
"expected_revision": "<string>"
}
'import requests
url = "https://api.maple.inc/v1/locations/{locationId}/booking_blackouts"
payload = {
"blackout_dates": [
{
"start_date": "<string>",
"end_date": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"reason": "<string>"
}
],
"expected_revision": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
blackout_dates: [
{
start_date: '<string>',
end_date: '<string>',
start_time: '<string>',
end_time: '<string>',
reason: '<string>'
}
],
expected_revision: '<string>'
})
};
fetch('https://api.maple.inc/v1/locations/{locationId}/booking_blackouts', 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.maple.inc/v1/locations/{locationId}/booking_blackouts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'blackout_dates' => [
[
'start_date' => '<string>',
'end_date' => '<string>',
'start_time' => '<string>',
'end_time' => '<string>',
'reason' => '<string>'
]
],
'expected_revision' => '<string>'
]),
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.maple.inc/v1/locations/{locationId}/booking_blackouts"
payload := strings.NewReader("{\n \"blackout_dates\": [\n {\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\",\n \"reason\": \"<string>\"\n }\n ],\n \"expected_revision\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.maple.inc/v1/locations/{locationId}/booking_blackouts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"blackout_dates\": [\n {\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\",\n \"reason\": \"<string>\"\n }\n ],\n \"expected_revision\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maple.inc/v1/locations/{locationId}/booking_blackouts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"blackout_dates\": [\n {\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\",\n \"reason\": \"<string>\"\n }\n ],\n \"expected_revision\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"object": "booking_blackouts",
"location_id": "<string>",
"blackout_dates": [
{
"start_date": "<string>",
"end_date": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"reason": "<string>"
}
],
"revision": "<string>"
}{
"_tag": "DeveloperApiBadRequest",
"message": "<string>",
"feedback": "<string>",
"code": "<string>"
}{
"_tag": "DeveloperApiUnauthorized",
"message": "<string>",
"feedback": "<string>"
}{
"_tag": "DeveloperApiForbidden",
"code": "insufficient_scope",
"message": "<string>",
"feedback": "<string>"
}{
"_tag": "DeveloperApiNotFound",
"message": "<string>",
"feedback": "<string>"
}{
"_tag": "DeveloperApiConflict",
"message": "<string>",
"feedback": "<string>",
"code": "<string>",
"details": {}
}{
"_tag": "DeveloperApiUnprocessable",
"code": "<string>",
"message": "<string>",
"feedback": "<string>",
"details": {}
}{
"_tag": "DeveloperApiRateLimited",
"message": "<string>",
"retry_after": 123,
"feedback": "<string>"
}Authorizations
API key — mpk_test_… for the sandbox, mpk_live_… for production. Issued by Maple during partner onboarding.
Path Parameters
Body
The location’s whole list, at most 100 ranges. An empty list clears every blackout.
Show child attributes
Show child attributes
The blackout_dates_revision (or revision) you last read. A list changed since answers 409 stale_blackout_dates and nothing is written. Omit it to replace the list regardless.
Response
Success
booking_blackouts In start order.
Show child attributes
Show child attributes
The list’s revision. Send it as expected_revision on your next write to refuse one that would overwrite a change made since.
Was this page helpful?
curl --request PUT \
--url https://api.maple.inc/v1/locations/{locationId}/booking_blackouts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"blackout_dates": [
{
"start_date": "<string>",
"end_date": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"reason": "<string>"
}
],
"expected_revision": "<string>"
}
'import requests
url = "https://api.maple.inc/v1/locations/{locationId}/booking_blackouts"
payload = {
"blackout_dates": [
{
"start_date": "<string>",
"end_date": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"reason": "<string>"
}
],
"expected_revision": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
blackout_dates: [
{
start_date: '<string>',
end_date: '<string>',
start_time: '<string>',
end_time: '<string>',
reason: '<string>'
}
],
expected_revision: '<string>'
})
};
fetch('https://api.maple.inc/v1/locations/{locationId}/booking_blackouts', 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.maple.inc/v1/locations/{locationId}/booking_blackouts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'blackout_dates' => [
[
'start_date' => '<string>',
'end_date' => '<string>',
'start_time' => '<string>',
'end_time' => '<string>',
'reason' => '<string>'
]
],
'expected_revision' => '<string>'
]),
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.maple.inc/v1/locations/{locationId}/booking_blackouts"
payload := strings.NewReader("{\n \"blackout_dates\": [\n {\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\",\n \"reason\": \"<string>\"\n }\n ],\n \"expected_revision\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.maple.inc/v1/locations/{locationId}/booking_blackouts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"blackout_dates\": [\n {\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\",\n \"reason\": \"<string>\"\n }\n ],\n \"expected_revision\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maple.inc/v1/locations/{locationId}/booking_blackouts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"blackout_dates\": [\n {\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\",\n \"reason\": \"<string>\"\n }\n ],\n \"expected_revision\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"object": "booking_blackouts",
"location_id": "<string>",
"blackout_dates": [
{
"start_date": "<string>",
"end_date": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"reason": "<string>"
}
],
"revision": "<string>"
}{
"_tag": "DeveloperApiBadRequest",
"message": "<string>",
"feedback": "<string>",
"code": "<string>"
}{
"_tag": "DeveloperApiUnauthorized",
"message": "<string>",
"feedback": "<string>"
}{
"_tag": "DeveloperApiForbidden",
"code": "insufficient_scope",
"message": "<string>",
"feedback": "<string>"
}{
"_tag": "DeveloperApiNotFound",
"message": "<string>",
"feedback": "<string>"
}{
"_tag": "DeveloperApiConflict",
"message": "<string>",
"feedback": "<string>",
"code": "<string>",
"details": {}
}{
"_tag": "DeveloperApiUnprocessable",
"code": "<string>",
"message": "<string>",
"feedback": "<string>",
"details": {}
}{
"_tag": "DeveloperApiRateLimited",
"message": "<string>",
"retry_after": 123,
"feedback": "<string>"
}