Update waiting room
Updates a configured waiting room.
Security
API Token
The preferred authorization scheme for interacting with the Cloudflare API. Create a token.
API Email + API Key
The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.
The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.
Accepted Permissions (at least one required)
Parameters
The host name to which the waiting room will be applied (no wildcards). Please do not include the scheme (http:// or https://). The host and path combination must be unique.
A unique name to identify the waiting room. Only alphanumeric characters, hyphens and underscores are allowed.
Sets the number of new users that will be let into the route every minute. This value is used as baseline for the number of users that are let in per minute. So it is possible that there is a little more or little less traffic coming to the route based on the traffic patterns at that time around the world.
Sets the total number of active user sessions on the route at a point in time. A route is a combination of host and path on which a waiting room is available. This value is used as a baseline for the total number of active user sessions on the route. It is possible to have a situation where there are more or less active users sessions on the route based on the traffic patterns at that time around the world.
Only available for the Waiting Room Advanced subscription. This is a template html file that will be rendered at the edge. If no custom_page_html is provided, the default waiting room will be used. The template is based on mustache ( https://mustache.github.io/ ). There are several variables that are evaluated by the Cloudflare edge:
- {{
waitTimeKnown}} Acts like a boolean value that indicates the behavior to take when wait time is not available, for instance when queue_all is true. - {{
waitTimeFormatted}} Estimated wait time for the user. For example, five minutes. Alternatively, you can use: - {{
waitTime}} Number of minutes of estimated wait for a user. - {{
waitTimeHours}} Number of hours of estimated wait for a user (Math.floor(waitTime/60)). - {{
waitTimeHourMinutes}} Number of minutes above thewaitTimeHoursvalue (waitTime%60). - {{
queueIsFull}} Changes to true when no more people can be added to the queue.
To view the full list of variables, look at the cfWaitingRoom object described under the json_response_enabled property in other Waiting Room API calls.
Only available for the Waiting Room Advanced subscription. Disables automatic renewal of session cookies. If true, an accepted user will have session_duration minutes to browse the site. After that, they will have to go through the waiting room again. If false, a user's session cookie will be automatically renewed on every request.
Only available for the Waiting Room Advanced subscription. If true, requests to the waiting room with the header Accept: application/json will receive a JSON response object with information on the user's status in the waiting room as opposed to the configured static HTML page. This JSON response object has one property cfWaitingRoom which is an object containing the following fields:
inWaitingRoom: Boolean indicating if the user is in the waiting room (always true).waitTimeKnown: Boolean indicating if the current estimated wait times are accurate. If false, they are not available.waitTime: Valid only whenwaitTimeKnownis true. Integer indicating the current estimated time in minutes the user will wait in the waiting room. WhenqueueingMethodis random, this is set towaitTime50Percentile.waitTime25Percentile: Valid only whenqueueingMethodis random andwaitTimeKnownis true. Integer indicating the current estimated maximum wait time for the 25% of users that gain entry the fastest (25th percentile).waitTime50Percentile: Valid only whenqueueingMethodis random andwaitTimeKnownis true. Integer indicating the current estimated maximum wait time for the 50% of users that gain entry the fastest (50th percentile). In other words, half of the queued users are expected to let into the origin website beforewaitTime50Percentileand half are expected to be let in after it.waitTime75Percentile: Valid only whenqueueingMethodis random andwaitTimeKnownis true. Integer indicating the current estimated maximum wait time for the 75% of users that gain entry the fastest (75th percentile).waitTimeFormatted: String displaying thewaitTimeformatted in English for users. IfwaitTimeKnownis false,waitTimeFormattedwill display unavailable.queueIsFull: Boolean indicating if the waiting room's queue is currently full and not accepting new users at the moment.queueAll: Boolean indicating if all users will be queued in the waiting room and no one will be let into the origin website.lastUpdated: String displaying the timestamp as an ISO 8601 string of the user's last attempt to leave the waiting room and be let into the origin website. The user is able to make another attempt afterrefreshIntervalSecondspast this time. If the user makes a request too soon, it will be ignored andlastUpdatedwill not change.refreshIntervalSeconds: Integer indicating the number of seconds afterlastUpdateduntil the user is able to make another attempt to leave the waiting room and be let into the origin website. When thequeueingMethodisreject, there is no specified refresh time —_it will always be zero.queueingMethod: The queueing method currently used by the waiting room. It is either fifo, random, passthrough, or reject.isFIFOQueue: Boolean indicating if the waiting room uses a FIFO (First-In-First-Out) queue.isRandomQueue: Boolean indicating if the waiting room uses a Random queue where users gain access randomly.isPassthroughQueue: Boolean indicating if the waiting room uses a passthrough queue. Keep in mind that when passthrough is enabled, this JSON response will only exist whenqueueAllis true orisEventPrequeueingis true because in all other cases requests will go directly to the origin.isRejectQueue: Boolean indicating if the waiting room uses a reject queue.isEventActive: Boolean indicating if an event is currently occurring. Events are able to change a waiting room's behavior during a specified period of time. For additional information, look at the event propertiesprequeue_start_time,event_start_time, andevent_end_timein the documentation for creating waiting room events. Events are considered active between these start and end times, as well as during the prequeueing period if it exists.isEventPrequeueing: Valid only whenisEventActiveis true. Boolean indicating if an event is currently prequeueing users before it starts.timeUntilEventStart: Valid only whenisEventPrequeueingis true. Integer indicating the number of minutes until the event starts.timeUntilEventStartFormatted: String displaying thetimeUntilEventStartformatted in English for users. IfisEventPrequeueingis false,timeUntilEventStartFormattedwill display unavailable.timeUntilEventEnd: Valid only whenisEventActiveis true. Integer indicating the number of minutes until the event ends.timeUntilEventEndFormatted: String displaying thetimeUntilEventEndformatted in English for users. IfisEventActiveis false,timeUntilEventEndFormattedwill display unavailable.shuffleAtEventStart: Valid only whenisEventActiveis true. Boolean indicating if the users in the prequeue are shuffled randomly when the event starts.turnstile: Empty when turnstile isn't enabled. String displaying an html tag to display the Turnstile widget. Please add the{{{turnstile}}}tag to thecustom_htmltemplate to ensure the Turnstile widget appears.infiniteQueue: Boolean indicating whether the response is for a user in the infinite queue.
An example cURL to a waiting room could be:
curl -X GET "https://example.com/waitingroom" \
-H "Accept: application/json"If json_response_enabled is true and the request hits the waiting room, an example JSON response when queueingMethod is fifo and no event is active could be:
{
"cfWaitingRoom": {
"inWaitingRoom": true,
"waitTimeKnown": true,
"waitTime": 10,
"waitTime25Percentile": 0,
"waitTime50Percentile": 0,
"waitTime75Percentile": 0,
"waitTimeFormatted": "10 minutes",
"queueIsFull": false,
"queueAll": false,
"lastUpdated": "2020-08-03T23:46:00.000Z",
"refreshIntervalSeconds": 20,
"queueingMethod": "fifo",
"isFIFOQueue": true,
"isRandomQueue": false,
"isPassthroughQueue": false,
"isRejectQueue": false,
"isEventActive": false,
"isEventPrequeueing": false,
"timeUntilEventStart": 0,
"timeUntilEventStartFormatted": "unavailable",
"timeUntilEventEnd": 0,
"timeUntilEventEndFormatted": "unavailable",
"shuffleAtEventStart": false
}
}If json_response_enabled is true and the request hits the waiting room, an example JSON response when queueingMethod is random and an event is active could be:
{
"cfWaitingRoom": {
"inWaitingRoom": true,
"waitTimeKnown": true,
"waitTime": 10,
"waitTime25Percentile": 5,
"waitTime50Percentile": 10,
"waitTime75Percentile": 15,
"waitTimeFormatted": "5 minutes to 15 minutes",
"queueIsFull": false,
"queueAll": false,
"lastUpdated": "2020-08-03T23:46:00.000Z",
"refreshIntervalSeconds": 20,
"queueingMethod": "random",
"isFIFOQueue": false,
"isRandomQueue": true,
"isPassthroughQueue": false,
"isRejectQueue": false,
"isEventActive": true,
"isEventPrequeueing": false,
"timeUntilEventStart": 0,
"timeUntilEventStartFormatted": "unavailable",
"timeUntilEventEnd": 15,
"timeUntilEventEndFormatted": "15 minutes",
"shuffleAtEventStart": true
}
}Sets the path within the host to enable the waiting room on. The waiting room will be enabled for all subpaths as well. If there are two waiting rooms on the same subpath, the waiting room for the most specific path will be chosen. Wildcards and query parameters are not supported.
If queue_all is true, all the traffic that is coming to a route will be sent to the waiting room. No new traffic can get to the route once this field is set and estimated time will become unavailable.
Lifetime of a cookie (in minutes) set by Cloudflare for users who get access to the route. If a user is not seen by Cloudflare again in that time period, they will be treated as a new user that visits the route.
Update waiting room
import os
from cloudflare import Cloudflare
client = Cloudflare(
api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted
)
waiting_room = client.waiting_rooms.update(
waiting_room_id="699d98642c564d2e855e9661899b7252",
zone_id="023e105f4ecef8ad9ca31a8372d0c353",
host="shop.example.com",
name="production_webinar",
new_users_per_minute=200,
total_active_users=200,
)
print(waiting_room.id){
"result": {
"id": "699d98642c564d2e855e9661899b7252",
"additional_routes": [
{
"host": "shop2.example.com",
"path": "/shop2/checkout"
}
],
"cookie_attributes": {
"samesite": "auto",
"secure": "auto"
},
"cookie_suffix": "abcd",
"created_on": "2014-01-01T05:20:00.12345Z",
"custom_page_html": "{{#waitTimeKnown}} {{waitTime}} mins {{/waitTimeKnown}} {{^waitTimeKnown}} Queue all enabled {{/waitTimeKnown}}",
"default_template_language": "es-ES",
"description": "Production - DO NOT MODIFY",
"disable_session_renewal": false,
"enabled_origin_commands": [
"revoke"
],
"host": "shop.example.com",
"json_response_enabled": false,
"modified_on": "2014-01-01T05:20:00.12345Z",
"name": "production_webinar",
"new_users_per_minute": 200,
"next_event_prequeue_start_time": "2021-09-28T15:00:00.000Z",
"next_event_start_time": "2021-09-28T15:00:00.000Z",
"path": "/shop/checkout",
"queue_all": true,
"queueing_method": "fifo",
"queueing_status_code": 202,
"session_duration": 1,
"suspended": true,
"total_active_users": 200,
"turnstile_action": "log",
"turnstile_mode": "off"
}
}Returns Examples
{
"result": {
"id": "699d98642c564d2e855e9661899b7252",
"additional_routes": [
{
"host": "shop2.example.com",
"path": "/shop2/checkout"
}
],
"cookie_attributes": {
"samesite": "auto",
"secure": "auto"
},
"cookie_suffix": "abcd",
"created_on": "2014-01-01T05:20:00.12345Z",
"custom_page_html": "{{#waitTimeKnown}} {{waitTime}} mins {{/waitTimeKnown}} {{^waitTimeKnown}} Queue all enabled {{/waitTimeKnown}}",
"default_template_language": "es-ES",
"description": "Production - DO NOT MODIFY",
"disable_session_renewal": false,
"enabled_origin_commands": [
"revoke"
],
"host": "shop.example.com",
"json_response_enabled": false,
"modified_on": "2014-01-01T05:20:00.12345Z",
"name": "production_webinar",
"new_users_per_minute": 200,
"next_event_prequeue_start_time": "2021-09-28T15:00:00.000Z",
"next_event_start_time": "2021-09-28T15:00:00.000Z",
"path": "/shop/checkout",
"queue_all": true,
"queueing_method": "fifo",
"queueing_status_code": 202,
"session_duration": 1,
"suspended": true,
"total_active_users": 200,
"turnstile_action": "log",
"turnstile_mode": "off"
}
}