{"note":"OpenAPI conversion -- returning structured metadata","name":"cloudflare","description":"Cloudflare API","version":"4.0.0","base_url":"https://api.cloudflare.com/client/v4","endpoints":3540,"raw":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Cloudflare API\n@base https://api.cloudflare.com/client/v4\n@version 4.0.0\n@auth ApiKey X-Auth-Email in header | ApiKey X-Auth-Key in header | Bearer bearer | ApiKey X-Auth-User-Service-Key in header\n@endpoints 3540\n@hint download_for_search\n@toc accounts(2487), analytics(3), api(1), billing(2), certificates(4), internal(1), ips(1), live(1), memberships(4), oauth(1), organizations(17), pages(3), radar(279), ready(1), signed-url(1), tenants(8), user(55), workers(1), zones(670)\n\n@group accounts\n@endpoint GET /accounts\n@desc List Accounts\n@optional {name: str, page: num=1, per_page: num=20, direction: str(asc/desc)}\n@returns(200) List Accounts response\n@errors {4XX: List Accounts response failure}\n\n@endpoint POST /accounts\n@desc Create an Account\n@required {name: str # Account name}\n@optional {Idempotency-Key: str # Optional key that identifies an Account-creation request. Free Account creation can require exactly one valid key, so API clients should send a key with every Account-creation request. Reuse the same key when retrying the same request., standalone: bool # Set to `true` and omit `unit` to create a standalone Free Account. If provided, this field must be `true`., type: any(standard/enterprise), unit: map{id: str} # Information related to the tenant unit. Provide its ID and omit `standalone` to create the Account within an Organization. See https://developers.cloudflare.com/tenant/how-to/manage-accounts/.}\n@returns(200) Account Creation Success Response\n@errors {4XX: Account Creation Failure Response}\n\n@endpoint POST /accounts/move\n@desc Batch move accounts\n@required {account_ids: [str] # Move these accounts to the destination organization., destination_organization_id: str # Move accounts to this organization ID.}\n@returns(200) {errors: [map], messages: [map], result: map{statuses: map{message: str, moved: bool, tag: str}}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /accounts/{accountId}/v1/images\n@desc Get a list of images\n@required {accountId: str # Account identifier.}\n@optional {per_page: int=1000 # Number of items per page, continuation_token: str # Continuation token for a next page. List images V2 returns continuation_token, creator: str # Internal user ID set within the creator field. Setting to empty string will return images where creator field is not set, sort_order: str(asc/desc)=desc # Sorting order by upload time}\n@returns(200) {result: map{continuation_token: str?, images: [map]}, success: bool} # Upload an image response\n@errors {4XX: Upload an image response failure}\n\n@endpoint POST /accounts/{accountId}/v1/images\n@desc Upload a new Image\n@required {accountId: str # Account identifier.}\n@returns(200) {result: map{creator: str, filename: str, id: str, meta: map, requireSignedURLs: bool, uploaded: str(date-time), variants: [str]}, success: bool} # Upload an image response\n@errors {4XX: Upload an image response failure}\n\n@endpoint DELETE /accounts/{accountId}/v1/images/{imageId}\n@desc Delete an image\n@required {accountId: str # Account identifier., imageId: str # Image identifier.}\n@returns(200) {result: map, success: bool} # Delete image response\n@errors {4XX: Delete an image response failure}\n\n@endpoint GET /accounts/{accountId}/v1/images/{imageId}\n@desc Get an image data\n@required {accountId: str # Account identifier., imageId: str # Image identifier.}\n@returns(200) {result: map{creator: str, filename: str, id: str, meta: map, requireSignedURLs: bool, uploaded: str(date-time), variants: [str]}, success: bool} # Image details response\n@errors {4XX: Image details response failure}\n\n@endpoint PATCH /accounts/{accountId}/v1/images/{imageId}\n@desc Update an image\n@required {accountId: str # Account identifier., imageId: str # Image identifier.}\n@optional {creator: str # Image creator, metadata: any # Image metadata, requireSignedURLs: bool # Required signed url}\n@returns(200) {result: map, success: bool} # Edit image response\n@errors {4XX: Edit image response failure}\n\n@endpoint PUT /accounts/{accountId}/v1/images/{imageId}\n@desc Direct upload a new Image\n@required {accountId: str # Account identifier., imageId: str # Image identifier.}\n@returns(200) {result: map{creator: str, filename: str, id: str, meta: map, requireSignedURLs: bool, uploaded: str(date-time), variants: [str]}, success: bool} # Upload an image response\n@errors {4XX: Upload an image response failure}\n\n@endpoint GET /accounts/{accountId}/v1/images/{imageId}/blob\n@desc Get an image\n@required {accountId: str # Account identifier., imageId: str # Image identifier.}\n@returns(200) Get image response\n@errors {4XX: Get image response failure}\n\n@endpoint GET /accounts/{accountId}/v2/images\n@desc Get a list of images\n@required {accountId: str # Account identifier.}\n@optional {per_page: int=1000 # Number of items per page, continuation_token: str # Continuation token for a next page. List images V2 returns continuation_token, creator: str # Internal user ID set within the creator field. Setting to empty string will return images where creator field is not set, sort_order: str(asc/desc)=desc # Sorting order by upload time}\n@returns(200) {result: map{continuation_token: str?, images: [map]}, success: bool} # Upload an image response\n@errors {4XX: Upload an image response failure}\n\n@endpoint POST /accounts/{accountId}/v2/images/direct_upload\n@desc Create authenticated direct upload URL\n@required {accountId: str # Account identifier.}\n@returns(200) {result: map{id: str, uploadURL: str}, success: bool} # Create an authenticated direct upload url response\n@errors {4XX: Create an authenticated direct upload url response failure}\n\n@endpoint GET /accounts/{accountId}/zones/{zoneId}/v1/images/flows\n@desc Get transformation flows\n@required {accountId: str # Account identifier., zoneId: str # Zone identifier.}\n@returns(200) {result: map{etag: str, flows: [any], version: num}, success: bool} # Get flows config\n@errors {4XX: Get flows config failure}\n\n@endpoint PUT /accounts/{accountId}/zones/{zoneId}/v1/images/flows\n@desc Update transformation flows\n@required {accountId: str # Account identifier., zoneId: str # Zone identifier., flows: [any], version: num}\n@optional {etag: str}\n@returns(200) {result: map{etag: str, flows: [any], version: num}, success: bool} # Update flows config\n@errors {4XX: Update flows config failure}\n\n@endpoint GET /accounts/{account_identifier}/custom_pages\n@desc List custom pages\n@required {account_identifier: str}\n@returns(200) List custom pages response\n@errors {4XX: List custom pages response failure}\n\n@endpoint GET /accounts/{account_identifier}/custom_pages/assets\n@desc List custom assets\n@required {account_identifier: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) List custom assets response\n@errors {4XX: List custom assets response failure}\n\n@endpoint POST /accounts/{account_identifier}/custom_pages/assets\n@desc Create a custom asset\n@required {account_identifier: str, description: str # A short description of the custom asset., name: str # The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_)., url: str(uri) # The URL where the asset content is fetched from.}\n@returns(200) Create custom asset response\n@errors {4XX: Create custom asset response failure}\n\n@endpoint DELETE /accounts/{account_identifier}/custom_pages/assets/{asset_name}\n@desc Delete a custom asset\n@required {asset_name: str, account_identifier: str}\n@returns(204) Delete a custom asset response\n@errors {4XX: Delete a custom asset response failure}\n\n@endpoint GET /accounts/{account_identifier}/custom_pages/assets/{asset_name}\n@desc Get a custom asset\n@required {asset_name: str, account_identifier: str}\n@returns(200) Get a custom asset response\n@errors {4XX: Get a custom asset response failure}\n\n@endpoint PUT /accounts/{account_identifier}/custom_pages/assets/{asset_name}\n@desc Update a custom asset\n@required {asset_name: str, account_identifier: str, description: str # A short description of the custom asset., url: str(uri) # The URL where the asset content is fetched from.}\n@returns(200) Update a custom asset response\n@errors {4XX: Update a custom asset response failure}\n\n@endpoint POST /accounts/{account_identifier}/custom_pages/preview_tokens\n@desc Create a preview token\n@required {account_identifier: str, act: str # The preview action type. Required for request parsing but not used in token generation. Typically set to \"preview\"., target: str # The target custom page type to preview (e.g. \"block:waf\"). Encoded as the \"endpoint\" claim in the resulting JWT., url: str(uri) # The URL of the custom page content to preview. Encoded as the \"zone\" claim in the resulting JWT.}\n@returns(200) Create preview token response\n@errors {4XX: Create preview token response failure}\n\n@endpoint GET /accounts/{account_identifier}/custom_pages/{identifier}\n@desc Get a custom page\n@required {identifier: str, account_identifier: str}\n@returns(200) Get a custom page response\n@errors {4XX: Get a custom page response failure}\n\n@endpoint PUT /accounts/{account_identifier}/custom_pages/{identifier}\n@desc Update a custom page\n@required {identifier: str, account_identifier: str, state: str(default/customized) # The custom page state., url: str(uri)= # The URL associated with the custom page.}\n@returns(200) Update a custom page response\n@errors {4XX: Update a custom page response failure}\n\n@endpoint DELETE /accounts/{account_id}\n@desc Delete a specific account\n@required {account_id: str}\n@returns(200) Account Deletion Success Response\n@errors {4XX: Account Deletion Failure Response}\n\n@endpoint GET /accounts/{account_id}\n@desc Account Details\n@required {account_id: any}\n@returns(200) Account Details response\n@errors {4XX: Account Details response failure}\n\n@endpoint PUT /accounts/{account_id}\n@desc Update Account\n@required {account_id: any}\n@returns(200) Update Account response\n@errors {4XX: Update Account response failure}\n\n@endpoint GET /accounts/{account_id}/abuse-reports\n@desc List abuse reports\n@required {account_id: str # Cloudflare Account ID}\n@optional {page: int # Where in pagination to start listing abuse reports, per_page: int # How many abuse reports per page to list, sort: str # A property to sort by, followed by the order (id, cdate, domain, type, status), domain: str # Filter by domain name related to the abuse report, created_before: str # Returns reports created before the specified date, created_after: str # Returns reports created after the specified date, status: str # Filter by the status of the report., type: str # Filter by the type of the report., mitigation_status: str # Filter reports that have any mitigations in the given status.}\n@returns(200) {errors: [map], messages: [map], result: map{reports: [map]}, result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Abuse report list successful\n@errors {401: The request is not authorized. Missing or invalid credentials may be rejected with the standard Cloudflare API authentication error. If credentials are valid, the API token does not have the Abuse Reports read permission required for this account., 500: Failed to retrieve abuse reports}\n\n@endpoint GET /accounts/{account_id}/abuse-reports/submitted\n@desc List submitted abuse reports\n@required {account_id: str # Cloudflare Account ID}\n@optional {page: int=1 # Page of submitted reports to return., per_page: int=100 # Number of submitted reports per page., sort: str # A property and direction to sort by (id, cdate, domain, type, status)., id: str # Filter by report code., domain: [str] # Filter by reported domain. This parameter can be specified multiple times., created_before: str(date-time) # Return reports submitted before this time., created_after: str(date-time) # Return reports submitted after this time., status: [str] # Filter by submitter-facing status. This parameter can be specified multiple times., type: [str] # Filter by report type. This parameter can be specified multiple times.}\n@returns(200) {errors: [map], messages: [map], result: map{reports: [map]}, result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Submitted abuse reports listed successfully.\n@errors {400: Invalid account or query parameters., 401: The request is not authorized to read abuse reports for this account., 500: Failed to retrieve submitted abuse reports.}\n\n@endpoint GET /accounts/{account_id}/abuse-reports/submitted/{report_id}\n@desc Get a submitted abuse report\n@required {account_id: str # Cloudflare Account ID, report_id: str # Public report code.}\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Submitted abuse report found.\n@errors {400: Invalid account or report code., 401: The request is not authorized to read abuse reports for this account., 404: No matching submitted report was found for the account., 500: Failed to retrieve the submitted abuse report.}\n\n@endpoint GET /accounts/{account_id}/abuse-reports/submitted/{report_id}/emails\n@desc List emails sent to an abuse report submitter\n@required {account_id: str # Cloudflare Account ID, report_id: str # Public report code.}\n@optional {page: int # Page number to retrieve (default 1)., per_page: int # Number of emails per page (default 20, max 100).}\n@returns(200) {errors: [map], messages: [map], result: map{emails: [map]}, result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Submitted abuse report emails listed successfully.\n@errors {400: Invalid account, report, or query parameters., 401: The request is not authorized to read abuse reports for this account., 404: Submitted abuse report not found for the selected account., 500: Failed to retrieve submitted abuse report emails.}\n\n@endpoint GET /accounts/{account_id}/abuse-reports/{report_id}/appeals/eligibility\n@desc Check whether a report can be appealed\n@required {account_id: str # Cloudflare Account ID, report_id: str # Abuse Report ID}\n@returns(200) {errors: [map], messages: [map], result: map{appeal_count: int, appealable: bool, has_appealable_mitigations: bool, has_open_appeal: bool, max_appeals: int}, success: bool} # Appeal eligibility for the report\n@errors {401: The request is not authorized. Missing or invalid credentials may be rejected with the standard Cloudflare API authentication error. If credentials are valid, the API token does not have the Abuse Reports read permission required for this account., 404: The report was not found, or does not support appeals., 500: Failed to check appeal eligibility.}\n\n@endpoint GET /accounts/{account_id}/abuse-reports/{report_id}/emails\n@desc List abuse report emails\n@required {account_id: str # Cloudflare Account ID, report_id: str # Abuse Report ID}\n@optional {page: int # Page number to retrieve (default 1), per_page: int # Number of emails per page (default 20, max 100)}\n@returns(200) {errors: [map], messages: [map], result: map{emails: [map]}, result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # List abuse report emails successful\n@errors {400: Bad request - invalid parameters or report not found, 401: The request is not authorized. Missing or invalid credentials may be rejected with the standard Cloudflare API authentication error. If credentials are valid, the API token does not have the Abuse Reports read permission required for this account., 500: Failed to list abuse report emails}\n\n@endpoint GET /accounts/{account_id}/abuse-reports/{report_id}/mitigations\n@desc List abuse report mitigations\n@required {account_id: str # Cloudflare Account ID, report_id: str # Abuse Report ID}\n@optional {page: int # Where in pagination to start listing abuse reports, per_page: int # How many abuse reports per page to list, sort: str(type,asc/type,desc/effective_date,asc/effective_date,desc/status,asc/status,desc/entity_type,asc/entity_type,desc) # A property to sort by, followed by the order, type: str # Filter by the type of mitigation. This filter parameter can be specified multiple times to include multiple types of mitigations in the result set., effective_before: str # Returns mitigations that were dispatched before the given date, effective_after: str # Returns mitigation that were dispatched after the given date, status: str # Filter by the status of the mitigation., entity_type: str # Filter by the type of entity the mitigation impacts.}\n@returns(200) {errors: [map], messages: [map], result: map{mitigations: [map]}, result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # List abuse report mitigations successful\n@errors {401: The request is not authorized. Missing or invalid credentials may be rejected with the standard Cloudflare API authentication error. If credentials are valid, the API token does not have the Abuse Reports read permission required for this account., 500: Failed to list abuse report mitigations}\n\n@endpoint POST /accounts/{account_id}/abuse-reports/{report_id}/mitigations/appeal\n@desc Request review on mitigations\n@required {account_id: str # Cloudflare Account ID, report_id: str # Abuse Report ID}\n@optional {appeals: [map{id!: str, reason!: str}] # List of mitigations to appeal., data: map{city!: str, company: str, counter_notice_response: str, country!: str, email!: str(email), full_name!: str, jurisdiction_consent!: bool, perjury_attestation!: bool, phone_number!: str, signature!: str, state!: str, street_address!: str, urls!: [str(uri)], zip_code!: str} # Counter-notice details supporting an appeal., type: str(counter_notice/content_removed) # The type of appeal being submitted.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Mitigation appeals received, including idempotent replays of unresolved appeals.\n@returns(207) {errors: [map], messages: [map], result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Some mitigation appeals were accepted while others were invalid or cannot be appealed.\n@errors {401: The request is not authorized. Missing or invalid credentials may be rejected with the standard Cloudflare API authentication error. If credentials are valid, the API token does not have the Abuse Reports edit permission required for this account., 500: Failed to request review on delayed action.}\n\n@endpoint GET /accounts/{account_id}/abuse-reports/{report_param}\n@desc Abuse Report Details\n@required {account_id: str # Cloudflare Account ID, report_param: str # Identifier of the abuse report}\n@returns(200) {errors: [map], messages: [map], result: map{cdate: str, domain: str, id: str, justification: str, mitigation_summary: map{accepted_url_count: int, active_count: int, external_host_notified: bool, in_review_count: int, pending_count: int}, original_work: str, status: str, submitter: map{company: str, email: str, name: str, telephone: str}, type: str, urls: [str]}, success: bool} # Report submitted successfully\n@errors {400: Report submitted with an error, 401: The request is not authorized. Missing or invalid credentials may be rejected with the standard Cloudflare API authentication error. If credentials are valid, the API token does not have the Abuse Reports read permission required for this account., 500: Report submitted with an error}\n\n@endpoint POST /accounts/{account_id}/abuse-reports/{report_param}\n@desc Submit an abuse report\n@required {account_id: str # Cloudflare Account ID, report_param: str # The report type to be submitted. Example: abuse_general}\n@returns(200) {abuse_rand: str, request: map{act: str}, result: str} # Report submitted successfully\n@errors {400: Report submitted with an error, 401: The request is not authorized to submit abuse reports. Missing or invalid credentials may be rejected with the standard Cloudflare API authentication error. If credentials are valid, this is most commonly because the account does not have the abuse-reports entitlement (Enterprise accounts have it by default; other accounts must request access), or because the API token is missing the `Account > Abuse Reports > Edit` permission. Entitlement failures return the message `Not entitled to use feature: Abuse Report API`., 500: Report submitted with an error}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/analytics/portals/{portal_id}/tool-calls/timeseries\n@desc Per-portal MCP tool-call timeseries\n@required {account_id: str, portal_id: str}\n@optional {granularity: str(daily/monthly)=daily, aggregate: str(true/false)=false, tz: str=utc, days: int # Daily trailing-window size; defaults to 7 and is ignored for monthly}\n@returns(200) {result: map{aggregate: bool, end: int, granularity: str, series: [map], start: int, total: int, tz: str}, success: bool} # Per-day tool/call counts across all servers in a portal over the selected window\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/analytics/servers/{server_id}/tool-calls/timeseries\n@desc Per-server MCP tool-call timeseries\n@required {account_id: str, server_id: str}\n@optional {granularity: str(daily/monthly)=daily, aggregate: str(true/false)=false, tz: str=utc, days: int # Daily trailing-window size; defaults to 7 and is ignored for monthly}\n@returns(200) {result: map{aggregate: bool, end: int, granularity: str, series: [map], start: int, total: int, tz: str}, success: bool} # Per-day tool/call counts for a single server over the selected window\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/analytics/tool-calls/timeseries\n@desc Account-global MCP tool-call timeseries\n@required {account_id: str}\n@optional {granularity: str(daily/monthly)=daily, aggregate: str(true/false)=false, tz: str=utc, days: int # Daily trailing-window size; defaults to 7 and is ignored for monthly}\n@returns(200) {result: map{aggregate: bool, end: int, granularity: str, series: [map], start: int, total: int, tz: str}, success: bool} # Per-day tool/call counts across the whole account over the selected window\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/portals\n@desc List MCP Portals\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/access/ai-controls/mcp/portals\n@desc Create a new MCP Portal\n@required {account_id: str, hostname: str # Hostname where the MCP portal is available., id: str # Unique identifier for the MCP portal., name: str # Display name for the MCP portal.}\n@optional {allow_code_mode: bool # Deprecated: use `code_mode` for new integrations. `true` maps to any non-off Code Mode policy; `false` maps to `code_mode: off`. If both fields are sent, they must be consistent or the request returns a 400., code_mode: str(off/opt_in/default_on/enforced) # Code Mode policy for this portal. `off`: Code Mode is unavailable; query parameters are ignored. `opt_in`: Code Mode is off by default; clients turn it on with `?codemode=search_and_execute`. `default_on`: Code Mode is on by default; clients can opt out with `?codemode=off`. `enforced`: Code Mode is always on; query parameters are ignored. Defaults to `opt_in` when omitted on create. If both `code_mode` and `allow_code_mode` are sent, they must be consistent or the request returns a 400., description: str # Optional description of the MCP portal., secure_web_gateway: bool=false # Route outbound MCP traffic through Zero Trust Secure Web Gateway., servers: [map{default_disabled: bool, on_behalf: bool, server_id!: str, updated_prompts: [map], updated_tools: [map]}] # MCP servers attached to the portal and their portal-specific settings.}\n@returns(201) {result: map{allow_code_mode: bool, code_mode: str, created_at: str(date-time), created_by: str, description: str, hostname: str, id: str, modified_at: str(date-time), modified_by: str, name: str, secure_web_gateway: bool, servers: [map]}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint DELETE /accounts/{account_id}/access/ai-controls/mcp/portals/{id}\n@desc Delete an MCP Portal\n@required {account_id: str, id: str}\n@returns(200) {result: map{allow_code_mode: bool, code_mode: str, created_at: str(date-time), created_by: str, description: str, hostname: str, id: str, modified_at: str(date-time), modified_by: str, name: str, secure_web_gateway: bool}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/portals/{id}\n@desc Read details of an MCP Portal\n@required {id: str, account_id: str}\n@returns(200) {result: map{allow_code_mode: bool, code_mode: str, created_at: str(date-time), created_by: str, description: str, hostname: str, id: str, modified_at: str(date-time), modified_by: str, name: str, secure_web_gateway: bool, servers: [map]}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint PUT /accounts/{account_id}/access/ai-controls/mcp/portals/{id}\n@desc Update an MCP Portal\n@required {id: str, account_id: str}\n@optional {allow_code_mode: bool # Deprecated: use `code_mode` for new integrations. `true` maps to any non-off Code Mode policy; `false` maps to `code_mode: off`. If both fields are sent, they must be consistent or the request returns a 400., code_mode: str(off/opt_in/default_on/enforced) # Code Mode policy for this portal. `off`: Code Mode is unavailable; query parameters are ignored. `opt_in`: Code Mode is off by default; clients turn it on with `?codemode=search_and_execute`. `default_on`: Code Mode is on by default; clients can opt out with `?codemode=off`. `enforced`: Code Mode is always on; query parameters are ignored. Defaults to `opt_in` when omitted on create. If both `code_mode` and `allow_code_mode` are sent, they must be consistent or the request returns a 400., description: str # Optional description of the MCP portal., hostname: str # Hostname where the MCP portal is available., name: str # Display name for the MCP portal., secure_web_gateway: bool=false # Route outbound MCP traffic through Zero Trust Secure Web Gateway., servers: [map{default_disabled: bool, on_behalf: bool, server_id!: str, updated_prompts: [map], updated_tools: [map]}] # MCP servers attached to the portal and their portal-specific settings.}\n@returns(200) {result: map{allow_code_mode: bool, code_mode: str, created_at: str(date-time), created_by: str, description: str, hostname: str, id: str, modified_at: str(date-time), modified_by: str, name: str, secure_web_gateway: bool, servers: [map]}, success: bool} # Returns the updated Object\n@errors {400: Input Validation Error, 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/portals/{portal_id}/servers/{server_id}/effective-redirect-uri\n@desc Resolve an MCP server OAuth redirect URI\n@required {portal_id: str, server_id: str, account_id: str}\n@returns(200) {result: map{redirect_uri: str(uri), source: str}, success: bool} # Returns the effective redirect URI and its source.\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/servers\n@desc List MCP Servers\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/access/ai-controls/mcp/servers\n@desc Create a new MCP Server\n@required {account_id: str, auth_type: str(oauth/bearer/unauthenticated) # Authentication method used to connect to the upstream MCP server., hostname: str(uri) # URL of the upstream MCP endpoint., id: str # Unique identifier for the MCP server., name: str # Display name for the MCP server.}\n@optional {auth_credentials: str # Static credential for the upstream MCP server. For auth_type \"bearer\", either a raw token string (e.g. \"sk-abc123\"), which is wrapped server-side as `Authorization: Bearer `, or a JSON-encoded object of the form `{\"headers\":{\"Header-Name\":\"value\",...}}` for custom or multiple static headers (e.g. Cloudflare Access service tokens: `{\"headers\":{\"cf-access-client-id\":\"...\",\"cf-access-client-secret\":\"...\"}}`)., client_secret: str # Pre-registered OAuth client_secret. Write-only - accepted on create/update when auth_credentials.auth_mode is 'manual'. Stored AES-GCM-encrypted in server_oauth_secrets; never returned by read endpoints., description: str # Optional description of the MCP server., is_shared_oauth_callback_enabled: bool=false # When true, the gateway worker uses the shared Cloudflare-owned OAuth callback endpoint as the redirect_uri for upstream on-behalf OAuth, instead of the customer portal hostname. Defaults to false (off); opt in per server by setting true., secure_web_gateway: bool=false # Route outbound traffic to this MCP server through Zero Trust Secure Web Gateway., updated_prompts: [map{alias: str, description: str, enabled: bool, name!: str}] # Server-wide prompt capability overrides., updated_tools: [map{alias: str, description: str, enabled: bool, name!: str}] # Server-wide tool capability overrides.}\n@returns(201) {result: map{auth_config_summary: map{auth_mode: str, client_secret_version: num, config: map{authorization_endpoint: str, issuer: str, resource: str, revocation_endpoint: str, token_endpoint: str}, has_client_secret: bool, registration_info: map{client_id: str, redirect_uris: [str], scope: str, token_endpoint_auth_method: str}}, auth_type: str, authentication_status: str, created_at: str(date-time), created_by: str, description: str?, error: str, error_details: map{cause: str, is_upstream: bool, mcp_code: num, retryable: bool, status_code: num}, hostname: str(uri), id: str, is_shared_oauth_callback_enabled: bool, last_successful_sync: str(date-time), last_synced: str(date-time), modified_at: str(date-time), modified_by: str, name: str, prompts: [map], secure_web_gateway: bool, status: str, tools: [map], updated_prompts: [map], updated_tools: [map]}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint DELETE /accounts/{account_id}/access/ai-controls/mcp/servers/{id}\n@desc Delete an MCP Server\n@required {account_id: str, id: str}\n@returns(200) {result: map{auth_config_summary: map{auth_mode: str, client_secret_version: num, config: map{authorization_endpoint: str, issuer: str, resource: str, revocation_endpoint: str, token_endpoint: str}, has_client_secret: bool, registration_info: map{client_id: str, redirect_uris: [str], scope: str, token_endpoint_auth_method: str}}, auth_type: str, authentication_status: str, created_at: str(date-time), created_by: str, description: str?, error: str, error_details: map{cause: str, is_upstream: bool, mcp_code: num, retryable: bool, status_code: num}, hostname: str(uri), id: str, is_shared_oauth_callback_enabled: bool, last_successful_sync: str(date-time), last_synced: str(date-time), modified_at: str(date-time), modified_by: str, name: str, prompts: [map], secure_web_gateway: bool, status: str, tools: [map], updated_prompts: [map], updated_tools: [map]}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/access/ai-controls/mcp/servers/{id}\n@desc Read the details of an MCP Server\n@required {account_id: str, id: str}\n@returns(200) {result: map{auth_config_summary: map{auth_mode: str, client_secret_version: num, config: map{authorization_endpoint: str, issuer: str, resource: str, revocation_endpoint: str, token_endpoint: str}, has_client_secret: bool, registration_info: map{client_id: str, redirect_uris: [str], scope: str, token_endpoint_auth_method: str}}, auth_type: str, authentication_status: str, created_at: str(date-time), created_by: str, description: str?, error: str, error_details: map{cause: str, is_upstream: bool, mcp_code: num, retryable: bool, status_code: num}, hostname: str(uri), id: str, is_shared_oauth_callback_enabled: bool, last_successful_sync: str(date-time), last_synced: str(date-time), modified_at: str(date-time), modified_by: str, name: str, prompts: [map], secure_web_gateway: bool, status: str, tools: [map], updated_prompts: [map], updated_tools: [map]}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint PUT /accounts/{account_id}/access/ai-controls/mcp/servers/{id}\n@desc Update an MCP Server\n@required {id: str, account_id: str}\n@optional {auth_credentials: str # Static credential for the upstream MCP server. For auth_type \"bearer\", either a raw token string (e.g. \"sk-abc123\"), which is wrapped server-side as `Authorization: Bearer `, or a JSON-encoded object of the form `{\"headers\":{\"Header-Name\":\"value\",...}}` for custom or multiple static headers (e.g. Cloudflare Access service tokens: `{\"headers\":{\"cf-access-client-id\":\"...\",\"cf-access-client-secret\":\"...\"}}`)., client_secret: str # Pre-registered OAuth client_secret. Write-only - accepted on create/update when auth_credentials.auth_mode is 'manual'. Stored AES-GCM-encrypted in server_oauth_secrets; never returned by read endpoints., description: str # Optional description of the MCP server., is_shared_oauth_callback_enabled: bool=false # When true, the gateway worker uses the shared Cloudflare-owned OAuth callback endpoint as the redirect_uri for upstream on-behalf OAuth, instead of the customer portal hostname. Defaults to false (off); opt in per server by setting true., name: str # Display name for the MCP server., secure_web_gateway: bool=false # Route outbound traffic to this MCP server through Zero Trust Secure Web Gateway., updated_prompts: [map{alias: str, description: str, enabled: bool, name!: str}] # Server-wide prompt capability overrides., updated_tools: [map{alias: str, description: str, enabled: bool, name!: str}] # Server-wide tool capability overrides.}\n@returns(200) {result: map{auth_config_summary: map{auth_mode: str, client_secret_version: num, config: map{authorization_endpoint: str, issuer: str, resource: str, revocation_endpoint: str, token_endpoint: str}, has_client_secret: bool, registration_info: map{client_id: str, redirect_uris: [str], scope: str, token_endpoint_auth_method: str}}, auth_type: str, authentication_status: str, created_at: str(date-time), created_by: str, description: str?, error: str, error_details: map{cause: str, is_upstream: bool, mcp_code: num, retryable: bool, status_code: num}, hostname: str(uri), id: str, is_shared_oauth_callback_enabled: bool, last_successful_sync: str(date-time), last_synced: str(date-time), modified_at: str(date-time), modified_by: str, name: str, prompts: [map], secure_web_gateway: bool, status: str, tools: [map], updated_prompts: [map], updated_tools: [map]}, success: bool} # Returns the updated Object\n@errors {400: Input Validation Error, 404: Not Found}\n\n@endpoint POST /accounts/{account_id}/access/ai-controls/mcp/servers/{id}/sync\n@desc Sync MCP Server Capabilities\n@required {id: str, account_id: str}\n@returns(200) {result: map{error: str, error_details: map{cause: str, is_upstream: bool, mcp_code: num, retryable: bool, status_code: num}, status: str}, success: bool} # Sync completed. Check result.status and result.error_details for outcome.\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/access/apps\n@desc List Access applications\n@required {account_id: str}\n@optional {name: str, domain: str, aud: str, target_attributes: str, exact: bool, search: str, page: int=1, per_page: int=1000}\n@returns(200) List Access applications response\n@errors {4XX: List Access applications response failure}\n\n@endpoint POST /accounts/{account_id}/access/apps\n@desc Add an Access application\n@required {account_id: str}\n@returns(201) Add an Access application response\n@errors {4XX: Add an Access application response failure}\n\n@endpoint GET /accounts/{account_id}/access/apps/ca\n@desc List short-lived certificate CAs\n@required {account_id: str}\n@optional {page: int=1, per_page: int=100}\n@returns(200) List short-lived certificate CAs response\n@errors {4XX: List short-lived certificate CAs response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/apps/{app_id}\n@desc Delete an Access application\n@required {app_id: any, account_id: str}\n@returns(202) Delete an Access application response\n@errors {4XX: Delete an Access application response failure}\n\n@endpoint GET /accounts/{account_id}/access/apps/{app_id}\n@desc Get an Access application\n@required {app_id: any, account_id: str}\n@returns(200) Get an Access application response\n@errors {4XX: Get an Access application response failure}\n\n@endpoint PUT /accounts/{account_id}/access/apps/{app_id}\n@desc Update an Access application\n@required {app_id: any, account_id: str}\n@returns(200) Update an Access application response\n@errors {4XX: Update an Access application response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/apps/{app_id}/ca\n@desc Delete a short-lived certificate CA\n@required {app_id: str, account_id: str}\n@returns(202) Delete a short-lived certificate CA response\n@errors {4XX: Delete a short-lived certificate CA response failure}\n\n@endpoint GET /accounts/{account_id}/access/apps/{app_id}/ca\n@desc Get a short-lived certificate CA\n@required {app_id: str, account_id: str}\n@returns(200) Get a short-lived certificate CA response\n@errors {4XX: Get a short-lived certificate CA response failure}\n\n@endpoint POST /accounts/{account_id}/access/apps/{app_id}/ca\n@desc Create a short-lived certificate CA\n@required {app_id: str, account_id: str}\n@returns(200) Create a short-lived certificate CA response\n@errors {4XX: Create a short-lived certificate CA response failure}\n\n@endpoint GET /accounts/{account_id}/access/apps/{app_id}/policies\n@desc List Access application policies\n@required {app_id: str # The application ID., account_id: str}\n@optional {page: int=1, per_page: int=200}\n@returns(200) List Access application policies response\n@errors {4XX: List Access application policies response failure}\n\n@endpoint POST /accounts/{account_id}/access/apps/{app_id}/policies\n@desc Create an Access application policy\n@required {app_id: str # The application ID., account_id: str}\n@returns(201) Create an Access application policy response.\n@errors {4XX: Create an Access application policy response failure.}\n\n@endpoint DELETE /accounts/{account_id}/access/apps/{app_id}/policies/{policy_id}\n@desc Delete an Access application policy\n@required {app_id: str # The application ID., policy_id: str # The policy ID., account_id: str}\n@returns(202) Delete an Access application policy response.\n@errors {4XX: Delete an Access application policy response failure.}\n\n@endpoint GET /accounts/{account_id}/access/apps/{app_id}/policies/{policy_id}\n@desc Get an Access application policy\n@required {app_id: str # The application ID., policy_id: str # The policy ID., account_id: str}\n@returns(200) Get an Access policy response.\n@errors {4XX: Get an Access policy response failure.}\n\n@endpoint PUT /accounts/{account_id}/access/apps/{app_id}/policies/{policy_id}\n@desc Update an Access application policy\n@required {app_id: str # The application ID., policy_id: str # The policy ID., account_id: str}\n@returns(200) Update an Access application policy response.\n@errors {4XX: Update an Access application policy response failure.}\n@example_request {\"decision\":\"allow\",\"include\":[{\"everyone\":{}}],\"mfa_config\":{\"allowed_authenticators\":[\"ssh_fido2_key\"]},\"name\":\"Allow SSH users with a FIDO2 key\"}\n\n@endpoint PUT /accounts/{account_id}/access/apps/{app_id}/policies/{policy_id}/make_reusable\n@desc Convert an Access application policy to a reusable policy\n@required {app_id: str # The application ID., policy_id: str # The policy ID., account_id: str}\n@returns(200) Convert an Access application policy to a reusable policy\n@errors {4XX: Convert an Access application policy to a reusable policy failure.}\n\n@endpoint POST /accounts/{account_id}/access/apps/{app_id}/revoke_tokens\n@desc Revoke application tokens\n@required {app_id: any, account_id: str}\n@returns(202) Revoke application tokens response\n@errors {4XX: Revoke application tokens response failure}\n\n@endpoint PATCH /accounts/{account_id}/access/apps/{app_id}/settings\n@desc Update Access application settings\n@required {app_id: any, account_id: str}\n@optional {allow_iframe: bool # Enables loading application content in an iFrame., skip_interstitial: bool # Enables automatic authentication through cloudflared.}\n@returns(202) Update Access application settings response\n@errors {4XX: Update Access application settings response failure}\n\n@endpoint PUT /accounts/{account_id}/access/apps/{app_id}/settings\n@desc Update Access application settings\n@required {app_id: any, account_id: str}\n@optional {allow_iframe: bool # Enables loading application content in an iFrame., skip_interstitial: bool # Enables automatic authentication through cloudflared.}\n@returns(202) Update Access application settings response\n@errors {4XX: Update Access application settings response failure}\n\n@endpoint GET /accounts/{account_id}/access/apps/{app_id}/user_policy_checks\n@desc Test Access policies\n@required {app_id: any, account_id: str}\n@returns(200) Test Access policies response\n@errors {4XX: Test Access policies response failure}\n\n@endpoint GET /accounts/{account_id}/access/authenticator_device_aaguids\n@desc List authenticator device AAGUIDs\n@required {account_id: str}\n@returns(200) List authenticator device AAGUIDs response\n@errors {4XX: List authenticator device AAGUIDs response failure}\n\n@endpoint GET /accounts/{account_id}/access/bookmarks\n@desc List Bookmark applications\n@required {account_id: str}\n@returns(200) List Bookmark applications response\n@errors {4XX: List Bookmark applications response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/bookmarks/{bookmark_id}\n@desc Delete a Bookmark application\n@required {bookmark_id: str, account_id: str}\n@returns(200) Delete a Bookmark application response\n@errors {4XX: Delete a Bookmark application response failure}\n\n@endpoint GET /accounts/{account_id}/access/bookmarks/{bookmark_id}\n@desc Get a Bookmark application\n@required {bookmark_id: str, account_id: str}\n@returns(200) Get a Bookmark application response\n@errors {4XX: Get a Bookmark application response failure}\n\n@endpoint POST /accounts/{account_id}/access/bookmarks/{bookmark_id}\n@desc Create a Bookmark application\n@required {bookmark_id: str, account_id: str}\n@returns(200) Create a Bookmark application response\n@errors {4XX: Create a Bookmark application response failure}\n\n@endpoint PUT /accounts/{account_id}/access/bookmarks/{bookmark_id}\n@desc Update a Bookmark application\n@required {bookmark_id: str, account_id: str}\n@returns(200) Update a Bookmark application response\n@errors {4XX: Update a Bookmark application response failure}\n\n@endpoint GET /accounts/{account_id}/access/certificates\n@desc List mTLS certificates\n@required {account_id: str}\n@optional {page: int=1, per_page: int=50}\n@returns(200) List mTLS certificates response\n@errors {4XX: List mTLS certificates response failure}\n\n@endpoint POST /accounts/{account_id}/access/certificates\n@desc Add an mTLS certificate\n@required {account_id: str, certificate: str # The certificate content., name: str # The name of the certificate.}\n@optional {associated_hostnames: [str] # The hostnames of the applications that will use this certificate.}\n@returns(201) Add an mTLS certificate response\n@errors {4XX: Add an mTLS certificate response failure}\n\n@endpoint GET /accounts/{account_id}/access/certificates/settings\n@desc List all mTLS hostname settings\n@required {account_id: str}\n@returns(200) List mTLS hostname settings response\n@errors {4XX: List mTLS hostname settings response failure}\n\n@endpoint PUT /accounts/{account_id}/access/certificates/settings\n@desc Update an mTLS certificate's hostname settings\n@required {account_id: str, settings: [map{china_network!: bool, client_certificate_forwarding!: bool, hostname!: str}]}\n@returns(202) Update an mTLS certificates hostname settings response\n@errors {4XX: Update an mTLS certificates hostname settings failure}\n\n@endpoint DELETE /accounts/{account_id}/access/certificates/{certificate_id}\n@desc Delete an mTLS certificate\n@required {certificate_id: str, account_id: str}\n@returns(200) Delete an mTLS certificate response\n@errors {4XX: Delete an mTLS certificate response failure}\n\n@endpoint GET /accounts/{account_id}/access/certificates/{certificate_id}\n@desc Get an mTLS certificate\n@required {certificate_id: str, account_id: str}\n@returns(200) Get an mTLS certificate response\n@errors {4XX: Get an mTLS certificate response failure}\n\n@endpoint PUT /accounts/{account_id}/access/certificates/{certificate_id}\n@desc Update an mTLS certificate\n@required {certificate_id: str, account_id: str, associated_hostnames: [str] # The hostnames of the applications that will use this certificate.}\n@optional {name: str # The name of the certificate.}\n@returns(200) Update an mTLS certificate response\n@errors {4XX: Update an mTLS certificate response failure}\n\n@endpoint GET /accounts/{account_id}/access/custom_pages\n@desc List custom pages\n@required {account_id: str}\n@optional {page: int=1, per_page: int=50}\n@returns(200) List custom pages response\n@errors {4XX: List custom pages response failure}\n\n@endpoint POST /accounts/{account_id}/access/custom_pages\n@desc Create a custom page\n@required {account_id: str, custom_html: str # Custom page HTML., name: str # Custom page name., type: str(identity_denied/forbidden/login/interstitial) # Custom page type.}\n@optional {app_count: int # Number of apps the custom page is assigned to., contract_version: int # Contract version of the page's Liquid template. Present (>= 1) marks a sanitized template; absent or 0 marks a legacy page served verbatim., created_at: any, uid: str # UUID., updated_at: any}\n@returns(201) Create a custom page response\n@errors {422: Template failed content validation; the verdict rides in the result., 4XX: Create a custom page response failure}\n\n@endpoint POST /accounts/{account_id}/access/custom_pages/validate\n@desc Validate a custom page template\n@required {account_id: str, template: str # The Liquid template to validate., type: str(identity_denied/forbidden/login/interstitial) # Custom page type.}\n@optional {version: int # Contract version to validate against; omit for the latest.}\n@returns(200) Validate a custom page template response\n@errors {4XX: Validate a custom page template response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/custom_pages/{custom_page_id}\n@desc Delete a custom page\n@required {custom_page_id: str, account_id: str}\n@returns(202) Delete a custom page response\n@errors {4XX: Delete a custom page response failure}\n\n@endpoint GET /accounts/{account_id}/access/custom_pages/{custom_page_id}\n@desc Get a custom page\n@required {custom_page_id: str, account_id: str}\n@returns(200) Get a custom page response\n@errors {4XX: Get a custom page response failure}\n\n@endpoint PUT /accounts/{account_id}/access/custom_pages/{custom_page_id}\n@desc Update a custom page\n@required {custom_page_id: str, account_id: str, custom_html: str # Custom page HTML., name: str # Custom page name., type: str(identity_denied/forbidden/login/interstitial) # Custom page type.}\n@optional {app_count: int # Number of apps the custom page is assigned to., contract_version: int # Contract version of the page's Liquid template. Present (>= 1) marks a sanitized template; absent or 0 marks a legacy page served verbatim., created_at: any, uid: str # UUID., updated_at: any}\n@returns(200) Update a custom page response\n@errors {422: Template failed content validation; the verdict rides in the result., 4XX: Update a custom page response failure}\n\n@endpoint GET /accounts/{account_id}/access/gateway_ca\n@desc List SSH Certificate Authorities (CA)\n@required {account_id: str}\n@returns(200) List SSH Certificate Authorities (CA) response\n@errors {4XX: List SSH Certificate Authorities (CA) response failure}\n\n@endpoint POST /accounts/{account_id}/access/gateway_ca\n@desc Add a new SSH Certificate Authority (CA)\n@required {account_id: str}\n@returns(201) Add a new SSH Certificate Authority (CA) response\n@errors {4XX: Add a new SSH Certificate Authority (CA) response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/gateway_ca/{certificate_id}\n@desc Delete an SSH Certificate Authority (CA)\n@required {certificate_id: str, account_id: str}\n@returns(200) Delete an SSH Certificate Authority (CA) response\n@errors {4XX: Delete an SSH Certificate Authority (CA) response failure}\n\n@endpoint GET /accounts/{account_id}/access/groups\n@desc List Access groups\n@required {account_id: str}\n@optional {name: str, search: str, page: int=1, per_page: int=1000}\n@returns(200) List Access groups response\n@errors {4XX: List Access groups response failure}\n\n@endpoint POST /accounts/{account_id}/access/groups\n@desc Create an Access group\n@required {account_id: str, include: [map] # Rules evaluated with an OR logical operator. A user needs to meet only one of the Include rules., name: str # The name of the Access group.}\n@optional {exclude: [map] # Rules evaluated with a NOT logical operator. To match a policy, a user cannot meet any of the Exclude rules., is_default: bool # Whether this is the default group, require: [map] # Rules evaluated with an AND logical operator. To match a policy, a user must meet all of the Require rules.}\n@returns(201) Create an Access group response\n@errors {4XX: Create an Access group response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/groups/{group_id}\n@desc Delete an Access group\n@required {group_id: str, account_id: str}\n@returns(202) Delete an Access group response\n@errors {4XX: Delete an Access group response failure}\n\n@endpoint GET /accounts/{account_id}/access/groups/{group_id}\n@desc Get an Access group\n@required {group_id: str, account_id: str}\n@returns(200) Get an Access group response\n@errors {4XX: Get an Access group response failure}\n\n@endpoint PUT /accounts/{account_id}/access/groups/{group_id}\n@desc Update an Access group\n@required {group_id: str, account_id: str, include: [map] # Rules evaluated with an OR logical operator. A user needs to meet only one of the Include rules., name: str # The name of the Access group.}\n@optional {exclude: [map] # Rules evaluated with a NOT logical operator. To match a policy, a user cannot meet any of the Exclude rules., is_default: bool # Whether this is the default group, require: [map] # Rules evaluated with an AND logical operator. To match a policy, a user must meet all of the Require rules.}\n@returns(200) Update an Access group response\n@errors {4XX: Update an Access group response failure}\n\n@endpoint GET /accounts/{account_id}/access/identity_providers\n@desc List Access identity providers\n@required {account_id: str}\n@optional {scim_enabled: str, page: int=1, per_page: int=200}\n@returns(200) List Access identity providers response\n@errors {4XX: List Access identity providers response failure}\n\n@endpoint POST /accounts/{account_id}/access/identity_providers\n@desc Add an Access identity provider\n@required {account_id: str}\n@returns(201) Add an Access identity provider response\n@errors {4XX: Add an Access identity provider response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/identity_providers/{identity_provider_id}\n@desc Delete an Access identity provider\n@required {identity_provider_id: str, account_id: str}\n@returns(202) Delete an Access identity provider response\n@errors {4XX: Delete an Access identity provider response failure}\n\n@endpoint GET /accounts/{account_id}/access/identity_providers/{identity_provider_id}\n@desc Get an Access identity provider\n@required {identity_provider_id: str, account_id: str}\n@returns(200) Get an Access identity provider response\n@errors {4XX: Get an Access identity provider response failure}\n\n@endpoint PUT /accounts/{account_id}/access/identity_providers/{identity_provider_id}\n@desc Update an Access identity provider\n@required {identity_provider_id: str, account_id: str}\n@returns(200) Update an Access identity provider response\n@errors {4XX: Update an Access identity provider response failure}\n\n@endpoint POST /accounts/{account_id}/access/identity_providers/{identity_provider_id}/saml_certificate\n@desc Create SAML encryption certificate for Identity Provider\n@required {account_id: str, identity_provider_id: str}\n@returns(200) IdP already has a certificate set assigned (idempotent)\n@returns(201) SAML certificate set created and assigned to IdP\n@errors {403: SAML encryption not enabled for organization, 404: Identity provider not found, 4XX: Create SAML certificate for IdP response failure}\n\n@endpoint GET /accounts/{account_id}/access/identity_providers/{identity_provider_id}/scim/groups\n@desc List SCIM Group resources\n@required {identity_provider_id: str, account_id: str}\n@optional {cf_resource_id: [str], idp_resource_id: [str], name: str, page: int=1, per_page: int=100}\n@returns(200) List SCIM Group resources response\n@errors {4XX: List SCIM Group resources response failure}\n\n@endpoint GET /accounts/{account_id}/access/identity_providers/{identity_provider_id}/scim/users\n@desc List SCIM User resources\n@required {identity_provider_id: str, account_id: str}\n@optional {cf_resource_id: [str], idp_resource_id: [str], username: str, email: str, name: str, page: int=1, per_page: int=100}\n@returns(200) List SCIM User resources response\n@errors {4XX: List SCIM User resources response failure}\n\n@endpoint GET /accounts/{account_id}/access/idp_federation_grants\n@desc List IdP federation grants\n@required {account_id: str}\n@returns(200) List IdP federation grants response\n@errors {4XX: List IdP federation grants response failure}\n\n@endpoint POST /accounts/{account_id}/access/idp_federation_grants\n@desc Create an IdP federation grant\n@required {account_id: str, idp_id: str(uuid) # UID of the identity provider to federate. Must be an existing identity provider in this account. One-time pin and Cloudflare-managed identity providers cannot be federated.}\n@returns(201) Create IdP federation grant response\n@errors {4XX: Create IdP federation grant response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/idp_federation_grants/{grant_id}\n@desc Delete an IdP federation grant\n@required {account_id: str, grant_id: str # UID of the IdP federation grant.}\n@returns(202) Delete IdP federation grant response\n@errors {404: IdP federation grant does not exist, 4XX: Delete IdP federation grant response failure}\n\n@endpoint GET /accounts/{account_id}/access/idp_federation_grants/{grant_id}\n@desc Get an IdP federation grant\n@required {account_id: str, grant_id: str # UID of the IdP federation grant.}\n@returns(200) Get IdP federation grant response\n@errors {404: IdP federation grant does not exist, 4XX: Get IdP federation grant response failure}\n\n@endpoint GET /accounts/{account_id}/access/keys\n@desc Get the Access key configuration\n@required {account_id: str}\n@returns(200) Get the Access key configuration response\n@errors {4XX: Get the Access key configuration response failure}\n\n@endpoint PUT /accounts/{account_id}/access/keys\n@desc Update the Access key configuration\n@required {account_id: str, key_rotation_interval_days: num # The number of days between key rotations.}\n@returns(200) Update the Access key configuration response\n@errors {4XX: Update the Access key configuration response failure}\n\n@endpoint POST /accounts/{account_id}/access/keys/rotate\n@desc Rotate Access keys\n@required {account_id: str}\n@returns(200) Rotate Access keys response\n@errors {4XX: Rotate Access keys response failure}\n\n@endpoint GET /accounts/{account_id}/access/logs/access_requests\n@desc Get Access authentication logs\n@required {account_id: str}\n@optional {limit: int=25 # The maximum number of log entries to retrieve., direction: str(desc/asc)=desc # The chronological sorting order for the logs., since: str(date-time) # The earliest event timestamp to query., until: str(date-time) # The latest event timestamp to query., page: int=1, per_page: int=25, email: str(email) # Filter by user email. Match mode is controlled by `emailOp` (preferred) or the legacy `email_exact` flag. - Default (no `emailOp`, `email_exact=false` or unset): substring match — `email=@example.com` returns all events with that domain. - Exact match: set `emailOp=eq` (preferred) or `email_exact=true` — e.g. `email=user@example.com&email_exact=true` returns only that user. - Explicit substring match: set `emailOp=contains` (without `email_exact=true`). When both are set, `email_exact=true` takes precedence and the match is exact. - Exclusion: set `emailOp=neq`. With `email_exact=true` this is an exact-value exclusion; without it, a fuzzy substring exclusion., email_exact: bool=false # When true, `email` is matched exactly instead of substring matching., user_id: str(uuid) # Deprecated. Accepted for backward compatibility but no longer applied as a filter. Use `email` instead., allowedOp: str(eq/neq)=eq # Operator for the `allowed` filter., country_codeOp: str(eq/neq)=eq # Operator for the `country_code` filter., app_typeOp: str(eq/neq)=eq # Operator for the `app_type` filter., app_uidOp: str(eq/neq)=eq # Operator for the `app_uid` filter., ray_idOp: str(eq/neq)=eq # Operator for the `ray_id` filter., emailOp: str(eq/neq/contains)=eq # Operator for the `email` filter. `contains` performs a substring (case-sensitive) match. When `email_exact=true` is also set, `email_exact` takes precedence and `contains` is ignored., idpOp: str(eq/neq)=eq # Operator for the `idp` filter., non_identityOp: str(eq/neq)=eq # Operator for the `non_identity` filter., user_idOp: str(eq/neq)=eq # Deprecated. Accepted for backward compatibility but no longer applied as a filter (the `user_id` parameter is itself deprecated)., fields: str # Comma-separated list of fields to include in the response. When omitted, all fields are returned.}\n@returns(200) Get Access authentication logs response\n@errors {4XX: Get Access authentication logs response failure}\n\n@endpoint GET /accounts/{account_id}/access/logs/jit_requests\n@desc List Access JIT request logs\n@required {account_id: str}\n@optional {page: int=1, per_page: int=25, status: str, search: str # Case-insensitive search over request ID, requester email, application audience, and application hostname., since: str(date-time) # The earliest request timestamp to query. Defaults to 366 days before the current time., until: str(date-time) # The latest request timestamp to query. Defaults to the current time.}\n@returns(200) Access JIT request logs response\n@errors {4XX: Access JIT request logs response failure}\n\n@endpoint GET /accounts/{account_id}/access/logs/jit_requests/{knock_request_id}\n@desc Get an Access JIT request log\n@required {account_id: str, knock_request_id: str(uuid)}\n@returns(200) Access JIT request log detail response\n@errors {404: Access JIT request log not found, 4XX: Access JIT request log detail response failure}\n\n@endpoint GET /accounts/{account_id}/access/logs/scim/updates\n@desc List Access SCIM update logs\n@required {account_id: str, idp_id: [str]}\n@optional {limit: int, direction: str, since: str(date-time), until: str(date-time), status: [str], resource_type: [str], request_method: [str], resource_user_email: [str(email)], resource_group_name: [str], cf_resource_id: [str], idp_resource_id: [str], page: int=1, per_page: int=20}\n@returns(200) Get Access SCIM update logs response\n@errors {4XX: Get Access SCIM update logs response failure}\n\n@endpoint GET /accounts/{account_id}/access/organizations\n@desc Get your Zero Trust organization\n@required {account_id: str}\n@returns(200) Get your Zero Trust organization response\n@errors {4XX: Get your Zero Trust organization response failure}\n\n@endpoint POST /accounts/{account_id}/access/organizations\n@desc Create your Zero Trust organization\n@required {account_id: str, auth_domain: str # The unique subdomain assigned to your Zero Trust organization., name: str # The name of your Zero Trust organization.}\n@optional {allow_authenticate_via_warp: bool=false # When set to true, users can authenticate via WARP for any application in your organization. Application settings will take precedence over this value., auto_redirect_to_identity: bool=false # When set to `true`, users skip the identity provider selection step during login., deny_unmatched_requests: bool # Determines whether to deny all requests to Cloudflare-protected resources that lack an associated Access application. If enabled, you must explicitly configure an Access application and policy to allow traffic to your Cloudflare-protected resources. For domains you want to be public across all subdomains, add the domain to the `deny_unmatched_requests_exempted_zone_names` array., deny_unmatched_requests_exempted_zone_names: [str] # Contains zone names to exempt from the `deny_unmatched_requests` feature. Requests to a subdomain in an exempted zone will block unauthenticated traffic by default if there is a configured Access application and policy that matches the request., is_ui_read_only: bool=false # Lock all settings as Read-Only in the Dashboard, regardless of user permission. Updates may only be made via the API or Terraform for this account when enabled., login_design: map{background_color: str, footer_text: str, header_text: str, logo_path: str, text_color: str}, mfa_config: map{allowed_authenticators: [str], amr_matching_session_duration: str, required_aaguids: str(uuid), session_duration: str} # Configures multi-factor authentication (MFA) settings for an organization., mfa_piv_key_requirements: map{pin_policy: str, require_fips_device: bool, ssh_key_size: [int], ssh_key_type: [str], touch_policy: str} # Configures PIV key requirements for MFA using hardware security keys., mfa_required_for_all_apps: bool=false # Determines whether global MFA settings apply to applications by default. The organization must have MFA enabled with at least one authentication method and a session duration configured. Note: 'allowed_authenticators' cannot contain only the infrastructure SSH authenticators ('piv_key' and 'ssh_fido2_key') if the organization has any non-infrastructure applications., session_duration: str # The amount of time that tokens issued for applications will be valid. Must be in the format `300ms` or `2h45m`. Valid time units are: ns, us (or µs), ms, s, m, h., ui_read_only_toggle_reason: str # A description of the reason why the UI read only field is being toggled., user_seat_expiration_inactive_time: str # The amount of time a user seat is inactive before it expires. When the user seat exceeds the set time of inactivity, the user is removed as an active seat and no longer counts against your Teams seat count.  Minimum value for this setting is 1 month (730h). Must be in the format `300ms` or `2h45m`. Valid time units are: `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`., warp_auth_non_browser_401: bool=false # When enabled, unsuccessful WARP authentication requests with a non-HTML Accept header return a 401 response instead of redirecting to the login page., warp_auth_session_duration: str # The amount of time that tokens issued for applications will be valid. Must be in the format `30m` or `2h45m`. Valid time units are: m, h.}\n@returns(201) Create your Zero Trust organization response\n@errors {4XX: Create your Zero Trust organization response failure}\n\n@endpoint PUT /accounts/{account_id}/access/organizations\n@desc Update your Zero Trust organization\n@required {account_id: str}\n@optional {allow_authenticate_via_warp: bool=false # When set to true, users can authenticate via WARP for any application in your organization. Application settings will take precedence over this value., auth_domain: str # The unique subdomain assigned to your Zero Trust organization., auto_redirect_to_identity: bool=false # When set to `true`, users skip the identity provider selection step during login., custom_pages: map{forbidden: str, identity_denied: str}, deny_unmatched_requests: bool # Determines whether to deny all requests to Cloudflare-protected resources that lack an associated Access application. If enabled, you must explicitly configure an Access application and policy to allow traffic to your Cloudflare-protected resources. For domains you want to be public across all subdomains, add the domain to the `deny_unmatched_requests_exempted_zone_names` array., deny_unmatched_requests_exempted_zone_names: [str] # Contains zone names to exempt from the `deny_unmatched_requests` feature. Requests to a subdomain in an exempted zone will block unauthenticated traffic by default if there is a configured Access application and policy that matches the request., is_ui_read_only: bool=false # Lock all settings as Read-Only in the Dashboard, regardless of user permission. Updates may only be made via the API or Terraform for this account when enabled., login_design: map{background_color: str, footer_text: str, header_text: str, logo_path: str, text_color: str}, mfa_config: map{allowed_authenticators: [str], amr_matching_session_duration: str, required_aaguids: str(uuid), session_duration: str} # Configures multi-factor authentication (MFA) settings for an organization., mfa_piv_key_requirements: map{pin_policy: str, require_fips_device: bool, ssh_key_size: [int], ssh_key_type: [str], touch_policy: str} # Configures PIV key requirements for MFA using hardware security keys., mfa_required_for_all_apps: bool=false # Determines whether global MFA settings apply to applications by default. The organization must have MFA enabled with at least one authentication method and a session duration configured. Note: 'allowed_authenticators' cannot contain only the infrastructure SSH authenticators ('piv_key' and 'ssh_fido2_key') if the organization has any non-infrastructure applications., name: str # The name of your Zero Trust organization., session_duration: str # The amount of time that tokens issued for applications will be valid. Must be in the format `300ms` or `2h45m`. Valid time units are: ns, us (or µs), ms, s, m, h., ui_read_only_toggle_reason: str # A description of the reason why the UI read only field is being toggled., user_seat_expiration_inactive_time: str # The amount of time a user seat is inactive before it expires. When the user seat exceeds the set time of inactivity, the user is removed as an active seat and no longer counts against your Teams seat count.  Minimum value for this setting is 1 month (730h). Must be in the format `300ms` or `2h45m`. Valid time units are: `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`., warp_auth_non_browser_401: bool=false # When enabled, unsuccessful WARP authentication requests with a non-HTML Accept header return a 401 response instead of redirecting to the login page., warp_auth_session_duration: str # The amount of time that tokens issued for applications will be valid. Must be in the format `30m` or `2h45m`. Valid time units are: m, h.}\n@returns(200) Update your Zero Trust organization response\n@errors {4XX: Update your Zero Trust organization response failure}\n\n@endpoint GET /accounts/{account_id}/access/organizations/doh\n@desc Get your Zero Trust organization DoH settings\n@required {account_id: str}\n@returns(200) Get your Zero Trust organization DoH settings response\n@errors {4XX: Get your Zero Trust organization DoH settings response failure}\n\n@endpoint PUT /accounts/{account_id}/access/organizations/doh\n@desc Update your Zero Trust organization DoH settings\n@required {account_id: str}\n@optional {doh_jwt_duration: str # The duration the DoH JWT is valid for. Must be in the format `300ms` or `2h45m`. Valid time units are: ns, us (or µs), ms, s, m, h.  Note that the maximum duration for this setting is the same as the key rotation period on the account. Default expiration is 24h, service_token_id: str # The uuid of the service token you want to use for DoH authentication}\n@returns(201) Update your Zero Trust organization DoH settings response\n@errors {4XX: Update your Zero Trust organization DoH settings response failure}\n\n@endpoint POST /accounts/{account_id}/access/organizations/revoke_user\n@desc Revoke all Access tokens for a user\n@required {account_id: str, email: str # The email of the user to revoke.}\n@optional {devices: bool # When set to `true`, all devices associated with the user will be revoked., devices: bool # When set to `true`, all devices associated with the user will be revoked., user_uid: str # The uuid of the user to revoke., warp_session_reauth: bool # When set to `true`, the user will be required to re-authenticate to WARP for all Gateway policies that enforce a WARP client session duration. When `false`, the user’s WARP session will remain active}\n@returns(200) Revoke all Access tokens for a user response\n@errors {4XX: Revoke all Access tokens for a user response failure}\n\n@endpoint GET /accounts/{account_id}/access/policies\n@desc List Access reusable policies\n@required {account_id: str}\n@optional {page: int=1, per_page: int=100}\n@returns(200) List Access reusable policies response.\n@errors {4XX: List Access reusable policies response failure.}\n\n@endpoint POST /accounts/{account_id}/access/policies\n@desc Create an Access reusable policy\n@required {account_id: str}\n@optional {approval_groups: [map{approvals_needed!: num, email_addresses: [str], email_list_uuid: str}] # Administrators who can approve a temporary authentication request., approval_required: bool # Requires the user to request access from an administrator at the start of each session., connection_rules: map{rdp: map} # The rules that define how users may connect to targets secured by your application., isolation_required: bool # Require this application to be served in an isolated browser for users matching this policy. 'Client Web Isolation' must be on for the account in order to use this feature., mfa_config: map{allowed_authenticators: [str], mfa_disabled: bool, session_duration: str} # Configures multi-factor authentication (MFA) settings., purpose_justification_prompt: str # A custom message that will appear on the purpose justification screen., purpose_justification_required: bool # Require users to enter a justification when they log in to the application., session_duration: str # The amount of time that tokens issued for the application will be valid. Must be in the format `300ms` or `2h45m`. Valid time units are: ns, us (or µs), ms, s, m, h.}\n@returns(201) Create an Access reusable policy response.\n@errors {4XX: Create an Access reusable policy response failure.}\n\n@endpoint DELETE /accounts/{account_id}/access/policies/{policy_id}\n@desc Delete an Access reusable policy\n@required {account_id: str, policy_id: str}\n@returns(202) Delete an Access reusable policy response.\n@errors {4XX: Delete an Access reusable policy response failure.}\n\n@endpoint GET /accounts/{account_id}/access/policies/{policy_id}\n@desc Get an Access reusable policy\n@required {account_id: str, policy_id: str}\n@returns(200) Get an Access reusable policy response.\n@errors {4XX: Get an Access reusable policy response failure.}\n\n@endpoint PUT /accounts/{account_id}/access/policies/{policy_id}\n@desc Update an Access reusable policy\n@required {account_id: str, policy_id: str}\n@optional {approval_groups: [map{approvals_needed!: num, email_addresses: [str], email_list_uuid: str}] # Administrators who can approve a temporary authentication request., approval_required: bool # Requires the user to request access from an administrator at the start of each session., connection_rules: map{rdp: map} # The rules that define how users may connect to targets secured by your application., isolation_required: bool # Require this application to be served in an isolated browser for users matching this policy. 'Client Web Isolation' must be on for the account in order to use this feature., mfa_config: map{allowed_authenticators: [str], mfa_disabled: bool, session_duration: str} # Configures multi-factor authentication (MFA) settings., purpose_justification_prompt: str # A custom message that will appear on the purpose justification screen., purpose_justification_required: bool # Require users to enter a justification when they log in to the application., session_duration: str # The amount of time that tokens issued for the application will be valid. Must be in the format `300ms` or `2h45m`. Valid time units are: ns, us (or µs), ms, s, m, h.}\n@returns(200) Update an Access reusable policy response.\n@errors {4XX: Update an Access reusable policy response failure.}\n\n@endpoint POST /accounts/{account_id}/access/policy-tests\n@desc Start Access policy test\n@required {account_id: str}\n@optional {policies: [any]}\n@returns(200) Start Access policy test response.\n@errors {400: Start Access policy test response failure.}\n\n@endpoint GET /accounts/{account_id}/access/policy-tests/{policy_test_id}\n@desc Get the current status of a given Access policy test\n@required {account_id: str, policy_test_id: str}\n@returns(200) Get an Access policy test update response.\n@errors {400: Get an Access policy test update response failure.}\n\n@endpoint GET /accounts/{account_id}/access/policy-tests/{policy_test_id}/users\n@desc Get an Access policy test users page\n@required {account_id: str, policy_test_id: str}\n@optional {page: int=1, per_page: int=25, status: str(success/fail/error) # Filter users by their policy evaluation status.}\n@returns(200) Get an Access policy tester users page response.\n@errors {400: Get an Access policy tester users page response failure.}\n\n@endpoint GET /accounts/{account_id}/access/saml_certificates\n@desc List SAML certificate sets\n@required {account_id: str}\n@optional {page: int=1 # Page number of paginated results., per_page: int=25 # Maximum number of results per page., id: str # Filter by SAML certificate set UID. Accepts a comma-separated list of UIDs.}\n@returns(200) List SAML certificate sets response\n@errors {4XX: List SAML certificate sets response failure}\n\n@endpoint GET /accounts/{account_id}/access/saml_certificates/{saml_cert_set_id}\n@desc Get SAML certificate set\n@required {account_id: str, saml_cert_set_id: str # UID of the SAML certificate set.}\n@returns(200) Get SAML certificate set response\n@errors {404: SAML certificate set does not exist, 4XX: Get SAML certificate set response failure}\n\n@endpoint GET /accounts/{account_id}/access/saml_certificates/{saml_cert_set_id}/pem\n@desc Download current certificate in PEM format\n@required {account_id: str, saml_cert_set_id: str # UID of the SAML certificate set.}\n@returns(200) PEM certificate file\n@errors {404: SAML certificate set does not exist, 4XX: Get PEM certificate response failure}\n\n@endpoint POST /accounts/{account_id}/access/saml_certificates/{saml_cert_set_id}/rotate\n@desc Rotate SAML certificate\n@required {account_id: str, saml_cert_set_id: str # UID of the SAML certificate set to rotate.}\n@returns(200) Rotate SAML certificate response\n@errors {404: SAML certificate set does not exist, 4XX: Rotate SAML certificate response failure}\n\n@endpoint PATCH /accounts/{account_id}/access/seats\n@desc Update a user seat\n@required {account_id: any}\n@returns(200) Update a user seat response\n@errors {4XX: Update a user seat response failure}\n\n@endpoint GET /accounts/{account_id}/access/service_tokens\n@desc List service tokens\n@required {account_id: str}\n@optional {name: str, search: str, page: int=1, per_page: int=1000}\n@returns(200) List service tokens response\n@errors {4XX: List service tokens response failure}\n\n@endpoint POST /accounts/{account_id}/access/service_tokens\n@desc Create a service token\n@required {account_id: str, name: str # The name of the service token.}\n@optional {client_secret_version: num=1 # A version number identifying the current `client_secret` associated with the service token. Incrementing it triggers a rotation; the previous secret will still be accepted until the time indicated by `previous_client_secret_expires_at`., duration: str=8760h # The duration for how long the service token will be valid. Must be in the format `300ms` or `2h45m`, or the special value `forever` for non-expiring tokens. Valid time units are: ns, us (or µs), ms, s, m, h. The default is 1 year in hours (8760h)., enabled: bool # Whether the service token is enabled. A disabled service token cannot be used to authenticate; both its current and previous `client_secret` stop being accepted, but the token itself is preserved and can be re-enabled at any time. Defaults to enabled when omitted on create., previous_client_secret_expires_at: str(date-time) # The expiration of the previous `client_secret`. This can be modified at any point after a rotation. For example, you may extend it further into the future if you need more time to update services with the new secret; or move it into the past to immediately invalidate the previous token in case of compromise.}\n@returns(201) Create a service token response\n@errors {4XX: Create a service token response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/service_tokens/{service_token_id}\n@desc Delete a service token\n@required {service_token_id: str, account_id: str}\n@returns(200) Delete a service token response\n@errors {4XX: Delete a service token response failure}\n\n@endpoint GET /accounts/{account_id}/access/service_tokens/{service_token_id}\n@desc Get a service token\n@required {service_token_id: str, account_id: str}\n@returns(200) Get a service token response\n@errors {4XX: Get a service token response failure}\n\n@endpoint PUT /accounts/{account_id}/access/service_tokens/{service_token_id}\n@desc Update a service token\n@required {service_token_id: str, account_id: str}\n@optional {client_secret_version: num=1 # A version number identifying the current `client_secret` associated with the service token. Incrementing it triggers a rotation; the previous secret will still be accepted until the time indicated by `previous_client_secret_expires_at`., duration: str=8760h # The duration for how long the service token will be valid. Must be in the format `300ms` or `2h45m`, or the special value `forever` for non-expiring tokens. Valid time units are: ns, us (or µs), ms, s, m, h. The default is 1 year in hours (8760h)., enabled: bool # Whether the service token is enabled. A disabled service token cannot be used to authenticate; both its current and previous `client_secret` stop being accepted, but the token itself is preserved and can be re-enabled at any time. Defaults to enabled when omitted on create., name: str # The name of the service token., previous_client_secret_expires_at: str(date-time) # The expiration of the previous `client_secret`. This can be modified at any point after a rotation. For example, you may extend it further into the future if you need more time to update services with the new secret; or move it into the past to immediately invalidate the previous token in case of compromise.}\n@returns(200) Update a service token response\n@errors {4XX: Update a service token response failure}\n\n@endpoint POST /accounts/{account_id}/access/service_tokens/{service_token_id}/refresh\n@desc Refresh a service token\n@required {service_token_id: str, account_id: str}\n@returns(200) Refresh a service token response\n@errors {4XX: Refresh a service token response failure}\n\n@endpoint POST /accounts/{account_id}/access/service_tokens/{service_token_id}/rotate\n@desc Rotate a service token\n@required {service_token_id: str, account_id: str}\n@optional {previous_client_secret_expires_at: str(date-time) # The expiration of the previous `client_secret`. If not provided, it defaults to the current timestamp in order to immediately expire the previous secret.}\n@returns(200) Rotate a service token response\n@errors {4XX: Rotate a service token response failure}\n\n@endpoint GET /accounts/{account_id}/access/tags\n@desc List tags\n@required {account_id: str}\n@optional {page: int=1, per_page: int=50}\n@returns(200) List tags response\n@errors {4XX: List tags response failure}\n\n@endpoint POST /accounts/{account_id}/access/tags\n@desc Create a tag\n@required {account_id: str}\n@optional {name: str # The name of the tag}\n@returns(201) Create a tag response\n@errors {4XX: Create a tag response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/tags/{tag_name}\n@desc Delete a tag\n@required {account_id: str, tag_name: str}\n@returns(202) Delete a tag response\n@errors {4XX: Delete a tag response failure}\n\n@endpoint GET /accounts/{account_id}/access/tags/{tag_name}\n@desc Get a tag\n@required {account_id: str, tag_name: str}\n@returns(200) Get a tag response\n@errors {4XX: Get a tag response failure}\n\n@endpoint PUT /accounts/{account_id}/access/tags/{tag_name}\n@desc Update a tag\n@required {account_id: str, tag_name: str, name: str # The name of the tag}\n@optional {created_at: any, updated_at: any}\n@returns(200) Update a tag response\n@errors {4XX: Update a tag response failure}\n\n@endpoint GET /accounts/{account_id}/access/users\n@desc Get users\n@required {account_id: str}\n@optional {name: str, email: str, search: str, page: int=1, per_page: int=1000}\n@returns(200) Get users response\n@errors {4XX: Get users response failure}\n\n@endpoint POST /accounts/{account_id}/access/users\n@desc Create a user\n@required {account_id: str, email: str(email) # The email of the user.}\n@optional {name: str # The name of the user.}\n@returns(201) Create user response\n@errors {4XX: Create user response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/users/{user_id}\n@desc Delete a user\n@required {user_id: str, account_id: str}\n@returns(202) Delete user response\n@errors {4XX: Delete user response failure}\n\n@endpoint GET /accounts/{account_id}/access/users/{user_id}\n@desc Get a user\n@required {user_id: str, account_id: str}\n@returns(200) Get user response\n@errors {4XX: Get user response failure}\n\n@endpoint PUT /accounts/{account_id}/access/users/{user_id}\n@desc Update a user\n@required {user_id: str, account_id: str, email: str(email) # The email of the user., name: str # The name of the user.}\n@returns(200) Update user response\n@errors {4XX: Update user response failure}\n\n@endpoint GET /accounts/{account_id}/access/users/{user_id}/active_sessions\n@desc Get active sessions\n@required {user_id: str, account_id: str}\n@returns(200) Get active sessions response\n@errors {4XX: Get active sessions response failure}\n\n@endpoint GET /accounts/{account_id}/access/users/{user_id}/active_sessions/{nonce}\n@desc Get single active session\n@required {user_id: str, account_id: str, nonce: str}\n@returns(200) Get active session response\n@errors {4XX: Get active session response failure}\n\n@endpoint GET /accounts/{account_id}/access/users/{user_id}/failed_logins\n@desc Get failed logins\n@required {user_id: str, account_id: str}\n@returns(200) Get failed logins response\n@errors {4XX: Get failed logins response failure}\n\n@endpoint GET /accounts/{account_id}/access/users/{user_id}/last_seen_identity\n@desc Get last seen identity\n@required {user_id: str, account_id: str}\n@returns(200) Get active session response\n@errors {4XX: Get active session response failure}\n\n@endpoint DELETE /accounts/{account_id}/access/users/{user_id}/mfa_authenticators/{authenticator_id}\n@desc Delete a user's MFA device\n@required {user_id: str, account_id: str, authenticator_id: str}\n@returns(200) Delete authenticator response.\n@errors {4XX: Delete authenticator response failure.}\n\n@endpoint GET /accounts/{account_id}/addressing/address_maps\n@desc List Address Maps\n@required {account_id: str}\n@returns(200) List Address Maps response\n@errors {4XX: List Address Maps response failure}\n\n@endpoint POST /accounts/{account_id}/addressing/address_maps\n@desc Create Address Map\n@required {account_id: str}\n@optional {description: str # An optional description field which may be used to describe the types of IPs or zones on the map., enabled: bool=false # Whether the Address Map is enabled or not. Cloudflare's DNS will not respond with IP addresses on an Address Map until the map is enabled., ips: [str], memberships: [map{identifier: str, kind: str}] # Zones and Accounts which will be assigned IPs on this Address Map. A zone membership will take priority over an account membership.}\n@returns(200) Create Address Map response\n@errors {4XX: Create Address Map response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/address_maps/{address_map_id}\n@desc Delete Address Map\n@required {address_map_id: str, account_id: str}\n@returns(200) Delete Address Map response\n@errors {4XX: Delete Address Map response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/address_maps/{address_map_id}\n@desc Address Map Details\n@required {address_map_id: str, account_id: str}\n@returns(200) Address Map Details response\n@errors {4XX: Address Map Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/addressing/address_maps/{address_map_id}\n@desc Update Address Map\n@required {address_map_id: str, account_id: str}\n@optional {default_sni: str # If you have legacy TLS clients which do not send the TLS server name indicator, then you can specify one default SNI on the map. If Cloudflare receives a TLS handshake from a client without an SNI, it will respond with the default SNI on those IPs. The default SNI can be any valid zone or subdomain owned by the account., description: str # An optional description field which may be used to describe the types of IPs or zones on the map., enabled: bool=false # Whether the Address Map is enabled or not. Cloudflare's DNS will not respond with IP addresses on an Address Map until the map is enabled.}\n@returns(200) Update Address Map response\n@errors {4XX: Update Address Map response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/address_maps/{address_map_id}/accounts/{member_account_id}\n@desc Remove an account membership from an Address Map\n@required {account_id: str, address_map_id: str, member_account_id: str}\n@returns(200) Remove an account membership from an Address Map response\n@errors {4XX: Remove an account membership from an Address Map response failure}\n\n@endpoint PUT /accounts/{account_id}/addressing/address_maps/{address_map_id}/accounts/{member_account_id}\n@desc Add an account membership to an Address Map\n@required {account_id: str, address_map_id: str, member_account_id: str}\n@returns(200) Add an account membership to an Address Map response\n@errors {4XX: Add an account membership to an Address Map response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/address_maps/{address_map_id}/ips/{ip_address}\n@desc Remove an IP from an Address Map\n@required {ip_address: str, address_map_id: str, account_id: str}\n@returns(200) Remove an IP from an Address Map response\n@errors {4XX: Remove an IP from an Address Map response failure}\n\n@endpoint PUT /accounts/{account_id}/addressing/address_maps/{address_map_id}/ips/{ip_address}\n@desc Add an IP to an Address Map\n@required {ip_address: str, address_map_id: str, account_id: str}\n@returns(200) Add an IP to an Address Map response\n@errors {4XX: Add an IP to an Address Map response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/address_maps/{address_map_id}/zones/{zone_id}\n@desc Remove a zone membership from an Address Map\n@required {zone_id: str, address_map_id: str, account_id: str}\n@returns(200) Remove a zone membership from an Address Map response\n@errors {4XX: Remove a zone membership from an Address Map response failure}\n\n@endpoint PUT /accounts/{account_id}/addressing/address_maps/{address_map_id}/zones/{zone_id}\n@desc Add a zone membership to an Address Map\n@required {zone_id: str, address_map_id: str, account_id: str}\n@returns(200) Add a zone membership to an Address Map response\n@errors {4XX: Add a zone membership to an Address Map response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/leases\n@desc List Leases\n@required {account_id: str}\n@returns(200) List Leases response\n@errors {4XX: List Leases response failure}\n\n@endpoint POST /accounts/{account_id}/addressing/loa_documents\n@desc Upload LOA Document\n@required {account_id: str}\n@returns(201) Upload LOA Document response\n@errors {4XX: Upload LOA Document response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/loa_documents/{loa_document_id}/download\n@desc Download LOA Document\n@required {loa_document_id: str, account_id: str}\n@returns(200) Download LOA Document response\n@errors {4XX: Download LOA Document response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes\n@desc List Prefixes\n@required {account_id: str}\n@returns(200) List Prefixes response\n@errors {4XX: List Prefixes response failure}\n\n@endpoint POST /accounts/{account_id}/addressing/prefixes\n@desc Add Prefix\n@required {account_id: str, asn: int # Autonomous System Number (ASN) the prefix will be advertised under., cidr: str # IP Prefix in Classless Inter-Domain Routing format.}\n@optional {delegate_loa_creation: bool=false # Whether Cloudflare is allowed to generate the LOA document on behalf of the prefix owner., description: str # Description of the prefix., loa_document_id: str # Identifier for the uploaded LOA document.}\n@returns(201) Add Prefix response\n@errors {4XX: Add Prefix response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/prefixes/{prefix_id}\n@desc Delete Prefix\n@required {prefix_id: str, account_id: str}\n@returns(200) Delete Prefix response\n@errors {4XX: Delete Prefix response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes/{prefix_id}\n@desc Prefix Details\n@required {prefix_id: str, account_id: str}\n@returns(200) Prefix Details response\n@errors {4XX: Prefix Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/addressing/prefixes/{prefix_id}\n@desc Update Prefix Description\n@required {prefix_id: str, account_id: str, description: str # Description of the prefix.}\n@returns(200) Update Prefix Description response\n@errors {4XX: Update Prefix Description response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes/{prefix_id}/bgp/prefixes\n@desc List BGP Prefixes\n@required {account_id: str, prefix_id: str}\n@returns(200) List BGP Prefixes response\n@errors {4XX: List BGP Prefixes response failure}\n\n@endpoint POST /accounts/{account_id}/addressing/prefixes/{prefix_id}/bgp/prefixes\n@desc Create BGP Prefix\n@required {account_id: str, prefix_id: str, cidr: str # IP Prefix in Classless Inter-Domain Routing format.}\n@returns(200) Create BGP Prefix response\n@errors {4XX: Create BGP Prefix response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/prefixes/{prefix_id}/bgp/prefixes/{bgp_prefix_id}\n@desc Delete BGP Prefix\n@required {account_id: str, prefix_id: str, bgp_prefix_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete BGP Prefix response\n@errors {4XX: Delete BGP Prefix response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes/{prefix_id}/bgp/prefixes/{bgp_prefix_id}\n@desc Fetch BGP Prefix\n@required {account_id: str, prefix_id: str, bgp_prefix_id: str}\n@returns(200) Fetch BGP Prefix response\n@errors {4XX: Fetch BGP Prefix response failure}\n\n@endpoint PATCH /accounts/{account_id}/addressing/prefixes/{prefix_id}/bgp/prefixes/{bgp_prefix_id}\n@desc Update BGP Prefix\n@required {account_id: str, prefix_id: str, bgp_prefix_id: str}\n@optional {asn_prepend_count: int=0 # Number of times to prepend the Cloudflare ASN to the BGP AS-Path attribute, auto_advertise_withdraw: bool=false # Determines if Cloudflare advertises a BYOIP BGP prefix even when there is no matching BGP prefix in the Magic routing table. When true, Cloudflare will automatically withdraw the BGP prefix when there are no matching BGP routes, and will resume advertising when there is at least one matching BGP route., on_demand: map{advertised: bool}}\n@returns(200) Update BGP Prefix response\n@errors {4XX: Update BGP Prefix response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes/{prefix_id}/bgp/status\n@desc Get Advertisement Status\n@required {prefix_id: str, account_id: str}\n@returns(200) Get Advertisement Status response\n@errors {4XX: Get Advertisement Status response failure}\n\n@endpoint PATCH /accounts/{account_id}/addressing/prefixes/{prefix_id}/bgp/status\n@desc Update Prefix Dynamic Advertisement Status\n@required {prefix_id: str, account_id: str, advertised: bool # Advertisement status of the prefix. If `true`, the BGP route for the prefix is advertised to the Internet. If  `false`, the BGP route is withdrawn.}\n@returns(200) Update Prefix Dynamic Advertisement Status response\n@errors {4XX: Update Prefix Dynamic Advertisement Status response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes/{prefix_id}/bindings\n@desc List Service Bindings\n@required {account_id: str, prefix_id: str}\n@returns(200) Service Bindings attached to the Prefix\n@errors {4XX: List Service Bindings response failure}\n\n@endpoint POST /accounts/{account_id}/addressing/prefixes/{prefix_id}/bindings\n@desc Create Service Binding\n@required {account_id: str, prefix_id: str, cidr: str # IP Prefix in Classless Inter-Domain Routing format., service_id: str # Identifier of a Service on the Cloudflare network. Available services and their IDs may be found in the **List Services** endpoint.}\n@returns(201) The created Service Binding\n@errors {4XX: Create Service Binding response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/prefixes/{prefix_id}/bindings/{binding_id}\n@desc Delete Service Binding\n@required {account_id: str, prefix_id: str, binding_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Service Binding deleted\n@errors {4XX: Delete Service Binding response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes/{prefix_id}/bindings/{binding_id}\n@desc Get Service Binding\n@required {account_id: str, prefix_id: str, binding_id: str}\n@returns(200) The Service Binding with the requested ID\n@errors {4XX: Get Service Binding response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/prefixes/{prefix_id}/delegations\n@desc List Prefix Delegations\n@required {prefix_id: str, account_id: str}\n@returns(200) List Prefix Delegations response\n@errors {4XX: List Prefix Delegations response failure}\n\n@endpoint POST /accounts/{account_id}/addressing/prefixes/{prefix_id}/delegations\n@desc Create Prefix Delegation\n@required {prefix_id: str, account_id: str, cidr: str # IP Prefix in Classless Inter-Domain Routing format., delegated_account_id: str # Account identifier for the account to which prefix is being delegated.}\n@returns(200) Create Prefix Delegation response\n@errors {4XX: Create Prefix Delegation response failure}\n\n@endpoint DELETE /accounts/{account_id}/addressing/prefixes/{prefix_id}/delegations/{delegation_id}\n@desc Delete Prefix Delegation\n@required {delegation_id: str, prefix_id: str, account_id: str}\n@returns(200) Delete Prefix Delegation response\n@errors {4XX: Delete Prefix Delegation response failure}\n\n@endpoint POST /accounts/{account_id}/addressing/prefixes/{prefix_id}/validate\n@desc Validate Prefix\n@required {prefix_id: str, account_id: str}\n@returns(202) Validate Prefix response\n@errors {4XX: Validate Prefix response failure}\n\n@endpoint GET /accounts/{account_id}/addressing/regional_hostnames/regions\n@desc List Regions\n@required {account_id: str}\n@returns(200) List regions response\n@errors {4XX: Failure to list regions}\n\n@endpoint GET /accounts/{account_id}/addressing/services\n@desc List Services\n@required {account_id: str}\n@returns(200) Service names and IDs\n@errors {4XX: List Services response failure}\n\n@endpoint GET /accounts/{account_id}/agent-memory/namespaces\n@desc List namespaces\n@optional {per_page: int, order: str(id/name), direction: str(asc/desc), cursor: str}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str, per_page: int}, success: bool} # A List of namespaces.\n@errors {4XX: Error response.}\n\n@endpoint POST /accounts/{account_id}/agent-memory/namespaces\n@desc Create a namespace\n@required {name: str # Namespace name.}\n@returns(201) {errors: [map], messages: [map], result: map{created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}, success: bool} # Namespace created.\n@errors {4XX: Error response.}\n\n@endpoint DELETE /accounts/{account_id}/agent-memory/namespaces/{namespace_name}\n@desc Delete a namespace\n@required {namespace_name: str}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Namespace deleted.\n@errors {4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/agent-memory/namespaces/{namespace_name}\n@desc Get a namespace\n@required {namespace_name: str}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}, success: bool} # The requested namespace.\n@errors {4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles\n@desc List profiles\n@required {namespace_name: str}\n@optional {per_page: int, cursor: str}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str, per_page: int}, success: bool} # A page of profiles.\n@errors {4XX: Error response.}\n\n@endpoint DELETE /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}\n@desc Delete a profile\n@required {namespace_name: str, profile_name: str}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Profile deleted.\n@errors {4XX: Error response.}\n\n@endpoint POST /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/ingest\n@desc Ingest messages\n@required {namespace_name: str, profile_name: str, messages: [map{content!: str, role!: str, timestamp: str}] # Conversation messages to extract memories from.}\n@optional {sessionId: str # Session identifier.}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Conversation ingested.\n@errors {4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/memories\n@desc List memories\n@required {namespace_name: str, profile_name: str}\n@optional {per_page: int, cursor: str, session_id: str, type: str(fact/event/instruction/task)}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str, per_page: int}, success: bool} # A page of memory metadata.\n@errors {4XX: Error response.}\n\n@endpoint DELETE /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/memories/{memory_id}\n@desc Delete a memory\n@required {namespace_name: str, profile_name: str, memory_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{content: str, createdAt: str(date-time), id: str, sessionId: str?, summary: str, type: str, updatedAt: str(date-time)}, success: bool} # The deleted memory.\n@errors {4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/memories/{memory_id}\n@desc Get a memory\n@required {namespace_name: str, profile_name: str, memory_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{content: str, createdAt: str(date-time), id: str, sessionId: str?, summary: str, type: str, updatedAt: str(date-time)}, success: bool} # The requested memory.\n@errors {4XX: Error response.}\n\n@endpoint POST /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/recall\n@desc Recall memories\n@required {namespace_name: str, profile_name: str, query: str # Natural-language query to match against stored memories.}\n@optional {referenceDate: str # Temporal anchor for relative date references in the query., responseLength: str(short/medium/long) # Verbosity of the synthesized answer. Defaults to 'medium'., thinkingLevel: str(low/medium/high) # Recall intensity / search depth. Defaults to 'low'.}\n@returns(200) {errors: [map], messages: [map], result: map{answer: str, candidates: [map], count: num}, success: bool} # Recall result.\n@errors {4XX: Error response.}\n\n@endpoint POST /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/remember\n@desc Remember a memory\n@required {namespace_name: str, profile_name: str, content: str # Raw memory content to store.}\n@optional {sessionId: str # Session identifier.}\n@returns(200) {errors: [map], messages: [map], result: map{content: str, createdAt: str(date-time), id: str, sessionId: str?, summary: str, type: str, updatedAt: str(date-time)}, success: bool} # Memory stored.\n@errors {4XX: Error response.}\n\n@endpoint DELETE /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/sessions/{session_id}\n@desc Delete a session\n@required {namespace_name: str, profile_name: str, session_id: str # Session identifier.}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Session deleted.\n@errors {4XX: Error response.}\n\n@endpoint POST /accounts/{account_id}/agent-memory/namespaces/{namespace_name}/profiles/{profile_name}/summary\n@desc Get a profile summary\n@required {namespace_name: str, profile_name: str}\n@optional {sessionId: str # Session identifier.}\n@returns(200) {errors: [map], messages: [map], result: map{summary: str}, success: bool} # Profile summary.\n@errors {4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/billing/credit-balance\n@desc Get credit balance\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: map{balance: num, first_topup_success: bool, has_default_payment_method: bool, payment_method: map?{brand: str, last4: str}, topup_config: map{amount: num?, disabledReason: str?, error: str?, lastFailedAt: num?, threshold: num?}}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Credit balance retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/billing/invoice-history\n@desc Get invoice history\n@required {account_id: str # Cloudflare account ID.}\n@optional {type: str(auto/all/manual)=all # Filter invoice type: auto, manual, or all.}\n@returns(200) {errors: [map], messages: [map], result: map{invoices: [map], pagination: map{has_more: bool, page: num, per_page: num, total_count: num}}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Invoice history retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/billing/invoice-preview\n@desc Get invoice preview\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: map{amount_due: num, amount_paid: num, amount_remaining: num, currency: str, id: str, invoice_lines: [map], period_end: num, period_start: num, status: str}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Invoice preview retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/billing/spending-limit\n@desc Delete spending limit\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: map, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Spending limit deleted.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/billing/spending-limit\n@desc Get spending limit\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: map{config: map{amount: num?, duration: str?, strategy: str?}, enabled: bool}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Spending limit configuration retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/billing/spending-limit\n@desc Set spending limit (deprecated)\n@required {account_id: str # Cloudflare account ID., amount: int # Spending limit amount in cents (min 100)., duration: str(daily/weekly/monthly) # Spending limit duration., strategy: str(fixed/sliding) # Spending limit strategy.}\n@returns(201) {errors: [map], messages: [map], result: map, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Spending limit created.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/billing/topup\n@desc Create a top-up\n@required {account_id: str # Cloudflare account ID., amount: int # Top-up amount in cents (min 1000).}\n@returns(200) {errors: [map], messages: [map], result: map{brand: str, client_secret: str?, last4: str, onboarding: bool, payment_intent_id: str}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Top-up initiated successfully.\n@errors {400: Bad request., 402: Payment required — the payment method was declined., 403: Forbidden., 404: Not found.}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/billing/topup/config\n@desc Delete auto top-up configuration\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: map, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Auto top-up configuration deleted.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/billing/topup/config\n@desc Get auto top-up configuration\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: map{amount: num?, disabledReason: str?, error: str?, lastFailedAt: num?, threshold: num?}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Auto top-up configuration retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/billing/topup/config\n@desc Set auto top-up configuration\n@required {account_id: str # Cloudflare account ID., amount: int # Auto top-up amount in cents (min 1000)., threshold: int # Balance threshold in cents that triggers auto top-up (min 500).}\n@returns(200) {errors: [map], messages: [map], result: map{amount: num, threshold: num}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Auto top-up configuration saved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/billing/topup/eligibility\n@desc Get top-up eligibility\n@required {account_id: str # Cloudflare account ID.}\n@optional {payment_methods: [map{default: bool, last_four: str, type: str}] # Account-level payment methods, forwarded by the dashboard.}\n@returns(200) {errors: [map], messages: [map], result: map{account_payment_method_state: str, aig_customer_state: str, aig_default_payment_method_state: str, display_payment_method: map?{brand: str, last4: str}, eligible: bool, reason: str, recommended_action: str, recoverable: bool}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Eligibility determined.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/billing/topup/limits\n@desc Get account top-up limits\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: map{currency: str, max_cents: int, min_cents: int}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Top-up limits retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/billing/topup/status\n@desc Check top-up status\n@required {account_id: str # Cloudflare account ID., payment_intent_id: str # Stripe invoice ID to check status for.}\n@returns(200) {errors: [map], messages: [map], result: map{payment_intent_id: str, status: str}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Top-up status retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/billing/usage-history\n@desc Get usage history\n@required {account_id: str # Cloudflare account ID., value_grouping_window: str(day/hour) # Grouping window for usage data.}\n@optional {start_time: num # Start time as Unix timestamp in milliseconds., end_time: num # End time as Unix timestamp in milliseconds.}\n@returns(200) {errors: [map], messages: [map], result: map{history: [map]}, result_info: map{has_more: bool, page: num, per_page: num, total_count: num}, success: bool} # Usage history retrieved.\n@errors {400: Bad request., 403: Forbidden., 404: Not found.}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/custom-providers\n@desc List Account Providers\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, beta: bool, enable: bool, search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/custom-providers\n@desc Create a new Account Provider\n@required {account_id: str, base_url: str(uri), name: str, slug: str}\n@optional {beta: bool, curl_example: str, description: str, enable: bool, headers: str, js_example: str, link: str, position: int}\n@returns(200) {result: map{base_url: str(uri), beta: bool, created_at: str(date-time), curl_example: str, description: str, enable: bool, headers: str, id: str(uuid), js_example: str, link: str, logo: str, modified_at: str(date-time), name: str, position: int, slug: str}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/custom-providers/costs\n@desc List Account Provider Costs\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, enable: bool, account_provider_id: str(uuid), model_rule: str(equals/starts-with/contains)=equals, cost_type: str=tokens, search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/custom-providers/costs\n@desc Create a new Account Provider Cost\n@required {account_id: str, account_provider_id: str(uuid), model: str}\n@optional {cost_in: num, cost_out: num, cost_type: str=tokens, enable: bool, model_rule: str(equals/starts-with/contains)=equals, token_pricing: map{input_audio_tokens: num, input_cache_creation_tokens: num, input_cached_tokens: num, input_image_count: num, input_image_tokens: num, input_text_tokens: num, input_tokens: num, input_video_tokens: num, output_image_count: num, output_reasoning_tokens: num, output_tokens: num, total_tokens: num}}\n@returns(200) {result: map{account_provider_id: str(uuid), changed_by: str, cost_in: num, cost_out: num, cost_type: str, created_at: str(date-time), enable: bool, id: str(uuid), model: str, model_rule: str, modified_at: str(date-time), token_pricing: str, weight: int}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/custom-providers/costs/{id}\n@desc Delete a Account Provider Cost\n@required {account_id: str, id: str(uuid)}\n@returns(200) {result: map{account_provider_id: str(uuid), changed_by: str, cost_in: num, cost_out: num, cost_type: str, created_at: str(date-time), enable: bool, id: str(uuid), model: str, model_rule: str, modified_at: str(date-time), token_pricing: str, weight: int}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/custom-providers/costs/{id}\n@desc Fetch a Account Provider Cost\n@required {account_id: str, id: str(uuid)}\n@returns(200) {result: map{account_provider_id: str(uuid), changed_by: str, cost_in: num, cost_out: num, cost_type: str, created_at: str(date-time), enable: bool, id: str(uuid), model: str, model_rule: str, modified_at: str(date-time), token_pricing: str, weight: int}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint PATCH /accounts/{account_id}/ai-gateway/custom-providers/costs/{id}\n@desc Update a Account Provider Cost\n@required {account_id: str, id: str(uuid)}\n@optional {cost_in: num, cost_out: num, cost_type: str=tokens, enable: bool, model: str, model_rule: str(equals/starts-with/contains)=equals, token_pricing: map{input_audio_tokens: num, input_cache_creation_tokens: num, input_cached_tokens: num, input_image_count: num, input_image_tokens: num, input_text_tokens: num, input_tokens: num, input_video_tokens: num, output_image_count: num, output_reasoning_tokens: num, output_tokens: num, total_tokens: num}}\n@returns(200) {result: map{account_provider_id: str(uuid), changed_by: str, cost_in: num, cost_out: num, cost_type: str, created_at: str(date-time), enable: bool, id: str(uuid), model: str, model_rule: str, modified_at: str(date-time), token_pricing: str, weight: int}, success: bool} # Returns the updated Object\n@errors {400: Input Validation Error, 404: Not Found}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/custom-providers/{id}\n@desc Delete a Account Provider\n@required {account_id: str, id: str(uuid)}\n@returns(200) {result: map{base_url: str(uri), beta: bool, created_at: str(date-time), curl_example: str, description: str, enable: bool, headers: str, id: str(uuid), js_example: str, link: str, logo: str, modified_at: str(date-time), name: str, position: int, slug: str}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/custom-providers/{id}\n@desc Fetch a Account Provider\n@required {account_id: str, id: str(uuid)}\n@returns(200) {result: map{base_url: str(uri), beta: bool, created_at: str(date-time), curl_example: str, description: str, enable: bool, headers: str, id: str(uuid), js_example: str, link: str, logo: str, modified_at: str(date-time), name: str, position: int, slug: str}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint PATCH /accounts/{account_id}/ai-gateway/custom-providers/{id}\n@desc Update a Account Provider\n@required {account_id: str, id: str(uuid)}\n@optional {base_url: str(uri), beta: bool, curl_example: str, description: str, enable: bool, headers: str, js_example: str, link: str, logo: str, name: str, position: int, slug: str}\n@returns(200) {result: map{base_url: str(uri), beta: bool, created_at: str(date-time), curl_example: str, description: str, enable: bool, headers: str, id: str(uuid), js_example: str, link: str, logo: str, modified_at: str(date-time), name: str, position: int, slug: str}, success: bool} # Returns the updated Object\n@errors {400: Input Validation Error, 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/evaluation-types\n@desc List Evaluators\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, order_by: str=mandatory, order_by_direction: str(asc/desc)=desc}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # Returns a list of Evaluators\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways\n@desc List Gateways\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways\n@desc Create a new Gateway\n@required {account_id: str, cache_invalidate_on_update: bool, cache_ttl: int, collect_logs: bool, id: str # gateway id, rate_limiting_interval: int, rate_limiting_limit: int}\n@optional {authentication: bool, byok_only: bool # Requires customer-provided provider credentials and prevents fallback to Unified Billing., log_management: int, log_management_strategy: str(STOP_INSERTING/DELETE_OLDEST), logpush: bool, logpush_public_key: str, rate_limiting_technique: str(fixed/sliding), retry_backoff: str(constant/linear/exponential) # Backoff strategy for retry delays, retry_delay: int # Delay between retry attempts in milliseconds (0-60000), retry_max_attempts: int # Maximum number of retry attempts for failed requests (1-5), store_id: str, workers_ai_billing_mode: str(postpaid/unified)=postpaid # Controls how Workers AI inference calls routed through this gateway are billed. 'postpaid' bills the account directly through Workers AI; 'unified' deducts credits via AI Gateway using neuron-based pricing and delegates billing to AI Gateway., zdr: bool}\n@returns(200) {result: map{authentication: bool, byok_only: bool, cache_invalidate_on_update: bool, cache_ttl: int?, collect_logs: bool, created_at: str(date-time), dlp: any, guardrails: map?{prompt: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}, response: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}}, id: str, is_default: bool, log_classification: bool, log_management: int?, log_management_strategy: str?, logpush: bool, logpush_public_key: str?, modified_at: str(date-time), otel: [map]?, rate_limiting_interval: int?, rate_limiting_limit: int?, rate_limiting_technique: str?, retry_backoff: str?, retry_delay: int?, retry_max_attempts: int?, spend_limits: map?{enabled: bool, rules: [map]}, store_id: str?, stripe: map?{authorization: str, usage_events: [map]}, workers_ai_billing_mode: str, zdr: bool}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/custom-domains\n@desc List Custom Domains\n@required {account_id: str, gateway_id: str}\n@optional {page: int=1, per_page: int=20, status: str(initializing/pending_dcv/active/blocked/error), search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/custom-domains\n@desc Create a custom domain for a gateway\n@required {account_id: str, gateway_id: str, domain: str # the customer-owned custom hostname, zone_id: str # Cloudflare Zone ID owning the custom hostname}\n@optional {minTLS: str(1.0/1.1/1.2/1.3)}\n@returns(200) {result: map{cname_target: str, created_at: int, gateway_id: str, hostname: str, modified_at: int, status: str}, success: bool} # The created custom domain and the CNAME target to configure.\n@errors {400: Bad Request}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/custom-domains/{hostname}\n@desc Delete a Custom Domain\n@required {account_id: str, gateway_id: str, hostname: str}\n@returns(200) {result: map{created_at: int, gateway_id: str, hostname: str, modified_at: int, ssl_hostname_id: str?, status: str}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/custom-domains/{hostname}\n@desc Fetch a Custom Domain\n@required {account_id: str, gateway_id: str, hostname: str}\n@returns(200) {result: map{created_at: int, gateway_id: str, hostname: str, modified_at: int, ssl_hostname_id: str?, status: str}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/datasets\n@desc List Datasets\n@required {account_id: str, gateway_id: str}\n@optional {page: int=1, per_page: int=20, name: str, enable: bool, search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/datasets\n@desc Create a new Dataset\n@required {gateway_id: str, account_id: str, enable: bool, filters: [map{key!: str, operator!: str, value!: [any]}], name: str}\n@returns(200) {result: map{created_at: str(date-time), enable: bool, filters: [map], gateway_id: str, id: str, modified_at: str(date-time), name: str}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/datasets/{id}\n@desc Delete a Dataset\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {result: map{created_at: str(date-time), enable: bool, filters: [map], gateway_id: str, id: str, modified_at: str(date-time), name: str}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/datasets/{id}\n@desc Fetch a Dataset\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {result: map{created_at: str(date-time), enable: bool, filters: [map], gateway_id: str, id: str, modified_at: str(date-time), name: str}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint PUT /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/datasets/{id}\n@desc Update a Dataset\n@required {account_id: str, gateway_id: str, id: str, enable: bool, filters: [map{key!: str, operator!: str, value!: [any]}], name: str}\n@returns(200) {result: map{created_at: str(date-time), enable: bool, filters: [map], gateway_id: str, id: str, modified_at: str(date-time), name: str}, success: bool} # Returns the updated Object\n@errors {400: Input Validation Error, 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/evaluations\n@desc List Evaluations\n@required {account_id: str, gateway_id: str}\n@optional {page: int=1, per_page: int=20, name: str, processed: bool, search: str}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/evaluations\n@desc Create a new Evaluation\n@required {gateway_id: str, account_id: str, dataset_ids: [str], evaluation_type_ids: [str], name: str}\n@returns(200) {result: map{created_at: str(date-time), datasets: [map], gateway_id: str, id: str, modified_at: str(date-time), name: str, processed: bool, results: [map], total_logs: num}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/evaluations/{id}\n@desc Delete a Evaluation\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {result: map{created_at: str(date-time), datasets: [map], gateway_id: str, id: str, modified_at: str(date-time), name: str, processed: bool, results: [map], total_logs: num}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/evaluations/{id}\n@desc Fetch a Evaluation\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {result: map{created_at: str(date-time), datasets: [map], gateway_id: str, id: str, modified_at: str(date-time), name: str, processed: bool, results: [map], total_logs: num}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs\n@desc Delete Gateway Logs\n@required {account_id: str, gateway_id: str}\n@optional {order_by: str(created_at/provider/model/model_type/success/cached/cost/tokens_in/tokens_out/duration/feedback)=created_at, order_by_direction: str(asc/desc)=asc, filters: [map], limit: int=10000}\n@returns(200) {success: bool} # Returns if the delete was successful\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs\n@desc List Gateway Logs\n@required {account_id: str, gateway_id: str}\n@optional {search: str, page: int=1, per_page: int=20, order_by: str(created_at/provider/model/model_type/success/cached)=created_at, order_by_direction: str(asc/desc)=desc, filters: [map], meta_info: bool, direction: str(asc/desc), start_date: str(date-time), end_date: str(date-time), min_cost: num, max_cost: num, min_tokens_in: num, max_tokens_in: num, min_tokens_out: num, max_tokens_out: num, min_total_tokens: num, max_total_tokens: num, min_duration: num, max_duration: num, feedback: any, success: bool, cached: bool, model: str, model_type: str, provider: str, request_content_type: str, response_content_type: str}\n@returns(200) {result: [map], result_info: map{count: num, max_cost: num, max_duration: num, max_tokens_in: num, max_tokens_out: num, max_total_tokens: num, min_cost: num, min_duration: num, min_tokens_in: num, min_tokens_out: num, min_total_tokens: num, page: num, per_page: num, total_count: num}, success: bool} # Returns a list of Gateway Logs\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs/{id}\n@desc Get Gateway Log Detail\n@required {id: str, gateway_id: str, account_id: str}\n@returns(200) {result: map{cached: bool, cost: num, created_at: str(date-time), custom_cost: bool, duration: int, id: str, metadata: str, model: str, model_type: str, path: str, provider: str, request_content_type: str, request_head: str, request_head_complete: bool, request_size: int, request_type: str, response_content_type: str, response_head: str, response_head_complete: bool, response_size: int, status_code: int, step: int, success: bool, tokens_in: int?, tokens_out: int?}, success: bool} # Returns the log details\n@errors {404: Not Found}\n\n@endpoint PATCH /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs/{id}\n@desc Patch Gateway Log\n@required {id: str, gateway_id: str, account_id: str}\n@optional {feedback: num, metadata: map, score: num}\n@returns(200) {result: map, success: bool} # Returns the log details\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs/{id}/request\n@desc Get Gateway Log Request\n@required {id: str, gateway_id: str, account_id: str}\n@returns(200) Returns the request body from a specific log\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/logs/{id}/response\n@desc Get Gateway Log Response\n@required {id: str, gateway_id: str, account_id: str}\n@returns(200) Returns the response body from a specific log\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/provider_configs\n@desc List Provider Configs\n@required {account_id: str, gateway_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) {result: [map], success: bool} # List objects\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/provider_configs\n@desc Create a new Provider Configs\n@required {account_id: str, gateway_id: str, alias: str, default_config: bool, provider_slug: str}\n@optional {rate_limit: num, rate_limit_period: num=60, secret: str, secret_id: str}\n@returns(200) {result: map{alias: str, default_config: bool, gateway_id: str, id: str, modified_at: str(date-time), provider_slug: str, rate_limit: num, rate_limit_period: num, secret_id: str, secret_preview: str}, success: bool} # Returns the created Object\n@errors {400: Input Validation Error}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/provider_configs/{id}\n@desc Delete a Provider Configs\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {result: map{alias: str, default_config: bool, gateway_id: str, id: str, modified_at: str(date-time), provider_slug: str, rate_limit: num, rate_limit_period: num, secret_id: str, secret_preview: str}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint PUT /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/provider_configs/{id}\n@desc Update a Provider Configs\n@required {account_id: str, gateway_id: str, id: str, secret: str}\n@returns(200) {result: map{alias: str, default_config: bool, gateway_id: str, id: str, modified_at: str(date-time), provider_slug: str, rate_limit: num, rate_limit_period: num, secret_id: str, secret_preview: str}, success: bool} # Returns the updated Object\n@errors {400: Input Validation Error, 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes\n@desc List all AI Gateway Dynamic Routes.\n@required {account_id: str, gateway_id: str}\n@optional {page: int # Page number, per_page: int # Number of routes per page}\n@returns(200) {data: map{order_by: str, order_by_direction: str, page: num, per_page: num, routes: [map]}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes\n@desc Create a new AI Gateway Dynamic Route.\n@required {account_id: str, gateway_id: str, elements: [any], name: str}\n@returns(200) {result: map{created_at: str(date-time), deployment: map{created_at: str, deployment_id: str, version_id: str}, elements: [any], gateway_id: str, id: str, modified_at: str(date-time), name: str, version: map{active: str, created_at: str, data: str, is_valid: bool, version_id: str}}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}\n@desc Delete an AI Gateway Dynamic Route.\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {result: map{created_at: str(date-time), elements: [any], gateway_id: str, id: str, modified_at: str(date-time), name: str}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}\n@desc Get an AI Gateway Dynamic Route.\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {result: map{created_at: str(date-time), deployment: map{created_at: str, deployment_id: str, version_id: str}, elements: [any], gateway_id: str, id: str, modified_at: str(date-time), name: str, version: map{active: str, created_at: str, data: str, is_valid: bool, version_id: str}}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint PATCH /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}\n@desc Update an AI Gateway Dynamic Route.\n@required {account_id: str, gateway_id: str, id: str, name: str}\n@returns(200) {route: map{account_tag: str, created_at: str(date-time), deployment: map{created_at: str, deployment_id: str, version_id: str}, elements: [any], gateway_id: str, id: str, modified_at: str(date-time), name: str, version: map{active: str, created_at: str, data: str, is_valid: bool, version_id: str}}, success: bool} # Success\n@errors {400: Input Error}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}/deployments\n@desc List all AI Gateway Dynamic Route Deployments.\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {data: map{deployments: [map], order_by: str, order_by_direction: str, page: num, per_page: num}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}/deployments\n@desc Create a new AI Gateway Dynamic Route Deployment.\n@required {account_id: str, gateway_id: str, id: str, version_id: str}\n@returns(200) {result: map{created_at: str(date-time), elements: [any], gateway_id: str, id: str, modified_at: str(date-time), name: str}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}/versions\n@desc List all AI Gateway Dynamic Route Versions.\n@required {account_id: str, gateway_id: str, id: str}\n@returns(200) {data: map{order_by: str, order_by_direction: str, page: num, per_page: num, versions: [map]}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}/versions\n@desc Create a new AI Gateway Dynamic Route Version.\n@required {account_id: str, gateway_id: str, id: str, elements: [any]}\n@returns(200) {result: map{created_at: str(date-time), elements: [any], gateway_id: str, id: str, modified_at: str(date-time), name: str}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/routes/{id}/versions/{version_id}\n@desc Get an AI Gateway Dynamic Route Version.\n@required {account_id: str, gateway_id: str, id: str, version_id: str}\n@returns(200) {result: map{active: str, created_at: str, data: str, elements: [any], gateway_id: str, id: str, is_valid: bool, modified_at: str(date-time), name: str, version_id: str}, success: bool} # Success\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{gateway_id}/url/{provider}\n@desc Get Gateway URL\n@required {gateway_id: str, account_id: str, provider: str}\n@returns(200) {result: str, success: bool} # Returns the log details\n@errors {400: Bad Request}\n\n@endpoint DELETE /accounts/{account_id}/ai-gateway/gateways/{id}\n@desc Delete a Gateway\n@required {account_id: str, id: str}\n@returns(200) {result: map{authentication: bool, byok_only: bool, cache_invalidate_on_update: bool, cache_ttl: int?, collect_logs: bool, created_at: str(date-time), dlp: any, guardrails: map?{prompt: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}, response: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}}, id: str, is_default: bool, log_classification: bool, log_management: int?, log_management_strategy: str?, logpush: bool, logpush_public_key: str?, modified_at: str(date-time), otel: [map]?, rate_limiting_interval: int?, rate_limiting_limit: int?, rate_limiting_technique: str?, retry_backoff: str?, retry_delay: int?, retry_max_attempts: int?, spend_limits: map?{enabled: bool, rules: [map]}, store_id: str?, stripe: map?{authorization: str, usage_events: [map]}, workers_ai_billing_mode: str, zdr: bool}, success: bool} # Returns the Object if it was successfully deleted\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/gateways/{id}\n@desc Fetch a Gateway\n@required {account_id: str, id: str}\n@returns(200) {result: map{authentication: bool, byok_only: bool, cache_invalidate_on_update: bool, cache_ttl: int?, collect_logs: bool, created_at: str(date-time), dlp: any, guardrails: map?{prompt: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}, response: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}}, id: str, is_default: bool, log_classification: bool, log_management: int?, log_management_strategy: str?, logpush: bool, logpush_public_key: str?, modified_at: str(date-time), otel: [map]?, rate_limiting_interval: int?, rate_limiting_limit: int?, rate_limiting_technique: str?, retry_backoff: str?, retry_delay: int?, retry_max_attempts: int?, spend_limits: map?{enabled: bool, rules: [map]}, store_id: str?, stripe: map?{authorization: str, usage_events: [map]}, workers_ai_billing_mode: str, zdr: bool}, success: bool} # Returns a single object if found\n@errors {404: Not Found}\n\n@endpoint PUT /accounts/{account_id}/ai-gateway/gateways/{id}\n@desc Update a Gateway\n@required {account_id: str, id: str, cache_invalidate_on_update: bool, cache_ttl: int, collect_logs: bool, rate_limiting_interval: int, rate_limiting_limit: int}\n@optional {authentication: bool, byok_only: bool # Requires customer-provided provider credentials and prevents fallback to Unified Billing., dlp: any, guardrails: map{prompt!: map, response!: map}, log_classification: bool, log_management: int, log_management_strategy: str(STOP_INSERTING/DELETE_OLDEST), logpush: bool, logpush_public_key: str, otel: [map{authorization: str, content_type: str, headers!: map, url!: str(uri)}], rate_limiting_technique: str(fixed/sliding), retry_backoff: str(constant/linear/exponential) # Backoff strategy for retry delays, retry_delay: int # Delay between retry attempts in milliseconds (0-60000), retry_max_attempts: int # Maximum number of retry attempts for failed requests (1-5), spend_limits: map{enabled: bool, rules: [map]}, store_id: str, stripe: map{authorization!: str, usage_events!: [map]}, workers_ai_billing_mode: str(postpaid/unified)=postpaid # Controls how Workers AI inference calls routed through this gateway are billed. 'postpaid' bills the account directly through Workers AI; 'unified' deducts credits via AI Gateway using neuron-based pricing and delegates billing to AI Gateway., zdr: bool}\n@returns(200) {result: map{authentication: bool, byok_only: bool, cache_invalidate_on_update: bool, cache_ttl: int?, collect_logs: bool, created_at: str(date-time), dlp: any, guardrails: map?{prompt: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}, response: map{P1: str, S1: str, S10: str, S11: str, S12: str, S13: str, S2: str, S3: str, S4: str, S5: str, S6: str, S7: str, S8: str, S9: str}}, id: str, is_default: bool, log_classification: bool, log_management: int?, log_management_strategy: str?, logpush: bool, logpush_public_key: str?, modified_at: str(date-time), otel: [map]?, rate_limiting_interval: int?, rate_limiting_limit: int?, rate_limiting_technique: str?, retry_backoff: str?, retry_delay: int?, retry_max_attempts: int?, spend_limits: map?{enabled: bool, rules: [map]}, store_id: str?, stripe: map?{authorization: str, usage_events: [map]}, workers_ai_billing_mode: str, zdr: bool}, success: bool} # Returns the updated Object\n@errors {400: Input Validation Error, 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-gateway/logging-state\n@desc Get AI Gateway logging state\n@required {account_id: str}\n@returns(200) {result: map{migrated_at: int?, migration_available: bool, platform: str}, success: bool} # Returns the account logging state\n@errors {400: Bad Request, 503: Logging state is temporarily unavailable}\n\n@endpoint PATCH /accounts/{account_id}/ai-gateway/logging-state\n@desc Migrate AI Gateway logging to Workers Observability\n@required {account_id: str}\n@returns(200) {result: map{migrated_at: int?, migration_available: bool, platform: str}, success: bool} # Returns the migrated account logging state\n@errors {409: Migration is not available for this account, 503: Logging state is temporarily unavailable}\n\n@endpoint GET /accounts/{account_id}/ai-search/instances\n@desc List AI Search instances.\n@required {account_id: str}\n@optional {page: int=1 # Page number (1-indexed)., per_page: int=20 # Number of results per page., search: str # Filter instances whose id contains this string (case-insensitive)., namespace: str # Filter by namespace., order_by: str=created_at # Field to order results by., order_by_direction: str(asc/desc)=desc # Order direction.}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # List of instances.\n@errors {400: Input Validation Error}\n\n@endpoint POST /accounts/{account_id}/ai-search/instances\n@desc Create an AI Search instance.\n@required {account_id: str, id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores.}\n@optional {ai_gateway_id: str, ai_search_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., cache: bool=true, cache_threshold: str(super_strict_match/close_enough/flexible_friend/anything_goes)=close_enough, cache_ttl: any=172800 # Cache entry TTL in seconds. Allowed values: 600 (10min), 1800 (30min), 3600 (1h), 7200 (2h), 21600 (6h), 43200 (12h), 86400 (24h), 172800 (48h), 259200 (72h), 518400 (6d)., chunk: bool=true, chunk_overlap: int=10, chunk_size: int, custom_metadata: [map{data_type!: str, field_name!: str}], embedding_model: str, fusion_method: str(max/rrf)=rrf, hybrid_search_enabled: bool=false # Deprecated — use index_method instead., index_method: map{keyword!: bool, vector!: bool}=[object Object] # Controls which storage backends are used during indexing. Defaults to vector-only., indexing_options: map{keyword_tokenizer: str, use_ocr: bool}, max_num_results: int=10, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map, custom_domains: [str], default_domain_enabled: bool, enabled: bool, mcp: map, rate_limit: map, search_endpoint: map}, reranking: bool=false, reranking_model: str, retrieval_options: map{boost_by: [map], keyword_match_mode: str}, rewrite_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., rewrite_query: bool=false, score_threshold: num=0.4, source: str, source_params: map{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map}, sync_interval: any=21600 # Interval between automatic syncs, in seconds. Allowed values: 900 (15min), 1800 (30min), 3600 (1h), 7200 (2h), 14400 (4h), 21600 (6h), 43200 (12h), 86400 (24h)., token_id: str(uuid), type: str(r2/web-crawler)}\n@returns(201) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the new instance.\n@errors {400: Ai search instance invalid token., 403: Max instances reached.}\n\n@endpoint DELETE /accounts/{account_id}/ai-search/instances/{id}\n@desc Delete an AI Search instance.\n@required {account_id: str, id: str}\n@returns(200) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the deleted instance.\n@errors {404: Ai search not found., 409: Instance status modified concurrently please retry.}\n\n@endpoint GET /accounts/{account_id}/ai-search/instances/{id}\n@desc Get an AI Search instance.\n@required {account_id: str, id: str}\n@returns(200) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the instance.\n@errors {404: Ai search not found.}\n\n@endpoint PUT /accounts/{account_id}/ai-search/instances/{id}\n@desc Update an AI Search instance.\n@required {account_id: str, id: str}\n@optional {ai_gateway_id: str, ai_search_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., cache: bool=true, cache_threshold: str(super_strict_match/close_enough/flexible_friend/anything_goes)=close_enough, cache_ttl: any=172800 # Cache entry TTL in seconds. Allowed values: 600 (10min), 1800 (30min), 3600 (1h), 7200 (2h), 21600 (6h), 43200 (12h), 86400 (24h), 172800 (48h), 259200 (72h), 518400 (6d)., chunk: bool=true, chunk_overlap: int=10, chunk_size: int, custom_metadata: [map{data_type!: str, field_name!: str}], embedding_model: str, fusion_method: str(max/rrf)=rrf, index_method: map{keyword!: bool, vector!: bool}=[object Object] # Controls which storage backends are used during indexing. Defaults to vector-only., indexing_options: map{keyword_tokenizer: str, use_ocr: bool}, max_num_results: int=10, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, paused: bool=false, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map, custom_domains: [str], default_domain_enabled: bool, enabled: bool, mcp: map, rate_limit: map, search_endpoint: map}, reranking: bool=false, reranking_model: str, retrieval_options: map{boost_by: [map], keyword_match_mode: str}, rewrite_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., rewrite_query: bool=false, score_threshold: num=0.4, source: str, source_params: map{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map}, summarization: bool=false, summarization_model: str, sync_interval: any=21600 # Interval between automatic syncs, in seconds. Allowed values: 900 (15min), 1800 (30min), 3600 (1h), 7200 (2h), 14400 (4h), 21600 (6h), 43200 (12h), 86400 (24h)., system_prompt_ai_search: str, system_prompt_index_summarization: str, system_prompt_rewrite_query: str, token_id: str(uuid)}\n@returns(200) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the updated instance.\n@errors {400: Ai search instance invalid token., 404: Ai search not found., 409: Instance status modified concurrently please retry.}\n\n@endpoint POST /accounts/{account_id}/ai-search/instances/{id}/chat/completions\n@desc Chat Completions\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, messages: [map{content!: any, role!: str}]}\n@optional {ai_search_options: map{cache: map, custom_metadata: map, query_rewrite: map, reranking: map, retrieval: map}, model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., stream: bool}\n@returns(200) {choices: [map], chunks: [map], id: str, model: str, object: str} # Returns the chat completions results with retrieved files.\n@errors {400: Metadata filter unknown field., 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-search/instances/{id}/jobs\n@desc List Jobs\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns a list of AI Search Jobs.\n@errors {400: Input Validation Error, 404: Ai search not found., 503: Unable to connect to ai search.}\n\n@endpoint POST /accounts/{account_id}/ai-search/instances/{id}/jobs\n@desc Create new job\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str}\n@optional {description: str}\n@returns(200) {result: map{description: str, end_reason: str, ended_at: str, id: str, last_seen_at: str, source: str, started_at: str}, success: bool} # Returns the AI Search job id.\n@errors {400: Input Validation Error, 404: Ai search not found., 429: Sync in cooldown., 503: Unable to connect to ai search.}\n\n@endpoint GET /accounts/{account_id}/ai-search/instances/{id}/jobs/{job_id}\n@desc Get a Job Details\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., job_id: str, account_id: str}\n@returns(200) {result: map{description: str, end_reason: str, ended_at: str, id: str, last_seen_at: str, source: str, started_at: str}, success: bool} # Returns a AI Search Job Details.\n@errors {404: Job not found., 503: Unable to connect to ai search.}\n\n@endpoint PATCH /accounts/{account_id}/ai-search/instances/{id}/jobs/{job_id}\n@desc Cancel an indexing job.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., job_id: str, account_id: str, action: str}\n@returns(200) {result: map{description: str, end_reason: str, ended_at: str, id: str, last_seen_at: str, source: str, started_at: str}, success: bool} # Returns the updated AI Search Job.\n@errors {400: Job cannot be cancelled., 404: Job not found., 503: Unable to connect to ai search.}\n\n@endpoint GET /accounts/{account_id}/ai-search/instances/{id}/jobs/{job_id}/logs\n@desc List Job Logs\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., job_id: str, account_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns a list of AI Search Job Logs.\n@errors {400: Input Validation Error, 404: Ai search not found., 503: Unable to connect to ai search.}\n\n@endpoint POST /accounts/{account_id}/ai-search/instances/{id}/search\n@desc Search\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str}\n@optional {ai_search_options: map{cache: map, custom_metadata: map, query_rewrite: map, reranking: map, retrieval: map}, messages: [map{content!: any, role!: str}] # OpenAI-compatible message array. For multimodal queries, set the last user message's `content` to an array of typed parts: `[{type:'text', text:'…'}, {type:'image_url', image_url:{url:'…'}}]`. Image inputs require the RAG's embedding_model to declare 'image' in supported_modalities., query: str # A simple text query string. Alternative to 'messages' — provide either this or 'messages', not both.}\n@returns(200) {result: map{chunks: [map], query_kind: str, search_query: str}, success: bool} # Returns the search results.\n@errors {400: Metadata filter unknown field., 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-search/instances/{id}/stats\n@desc Get instance statistics.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str}\n@returns(200) {result: map{completed: int, degraded: bool, engine: map{r2: map{metadataSizeBytes: int, objectCount: int, payloadSizeBytes: int}, vectorize: map{dimensions: int, vectorsCount: int}}, error: int, file_embed_errors: map, index_source_errors: map, last_activity: str(date-time), outdated: int, queued: int, running: int, skipped: int}, success: bool} # Returns the AI Search stats.\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces\n@desc List namespaces\n@required {account_id: str}\n@optional {page: int=1 # Page number (1-indexed)., per_page: int=20 # Number of results per page., search: str # Filter namespaces whose name or description contains this string (case-insensitive).}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # List of namespaces.\n@errors {400: Input Validation Error}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces\n@desc Create a namespace\n@required {account_id: str, name: str}\n@optional {description: str # Optional description for the namespace. Max 256 characters., public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map, custom_domains: [str], default_domain_enabled: bool, enabled: bool, instances_allowed: [str], mcp: map, rate_limit: map, search_endpoint: map}}\n@returns(201) {result: map{created_at: str(date-time)?, description: str?, name: str, public_endpoint_id: str?, public_endpoint_params: map?{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, instances_allowed: [str], mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}}, success: bool} # Namespace created.\n@errors {400: Instances allowed contains unknown instances., 403: Max namespaces reached., 409: Namespace already exists.}\n\n@endpoint DELETE /accounts/{account_id}/ai-search/namespaces/{name}\n@desc Delete a namespace\n@required {account_id: str, name: str}\n@returns(200) {result: map, success: bool} # Namespace deleted.\n@errors {400: Namespace not empty., 404: Namespace not found.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}\n@desc Get a namespace\n@required {account_id: str, name: str}\n@returns(200) {result: map{created_at: str(date-time)?, description: str?, name: str, public_endpoint_id: str?, public_endpoint_params: map?{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, instances_allowed: [str], mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}}, success: bool} # Namespace details.\n@errors {404: Namespace not found.}\n\n@endpoint PUT /accounts/{account_id}/ai-search/namespaces/{name}\n@desc Update a namespace\n@required {account_id: str, name: str}\n@optional {description: str # Optional description for the namespace. Max 256 characters., public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map, custom_domains: [str], default_domain_enabled: bool, enabled: bool, instances_allowed: [str], mcp: map, rate_limit: map, search_endpoint: map}}\n@returns(200) {result: map{created_at: str(date-time)?, description: str?, name: str, public_endpoint_id: str?, public_endpoint_params: map?{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, instances_allowed: [str], mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}}, success: bool} # Returns the updated namespace.\n@errors {400: Instances allowed contains unknown instances., 404: Namespace not found., 409: Namespace modified concurrently please retry.}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/chat/completions\n@desc Multi-Instance Chat Completions\n@required {account_id: str, name: str # Namespace name, ai_search_options: map{cache: map, custom_metadata: map, instance_ids!: [str], query_rewrite: map, reranking: map, retrieval: map}, messages: [map{content!: any, role!: str}]}\n@optional {model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., stream: bool}\n@returns(200) {choices: [map], chunks: [map], errors: [map], id: str, model: str, object: str} # Returns the chat completion result with merged chunks from all instances.\n@errors {400: Metadata filter unknown field., 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances\n@desc List AI Search instances.\n@required {account_id: str, name: str # Namespace name}\n@optional {page: int=1 # Page number (1-indexed)., per_page: int=20 # Number of results per page., search: str # Filter instances whose id contains this string (case-insensitive)., namespace: str # Filter by namespace., order_by: str=created_at # Field to order results by., order_by_direction: str(asc/desc)=desc # Order direction.}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # List of instances.\n@errors {400: Input Validation Error}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/instances\n@desc Create an AI Search instance.\n@required {account_id: str, name: str # Namespace name, id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores.}\n@optional {ai_gateway_id: str, ai_search_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., cache: bool=true, cache_threshold: str(super_strict_match/close_enough/flexible_friend/anything_goes)=close_enough, cache_ttl: any=172800 # Cache entry TTL in seconds. Allowed values: 600 (10min), 1800 (30min), 3600 (1h), 7200 (2h), 21600 (6h), 43200 (12h), 86400 (24h), 172800 (48h), 259200 (72h), 518400 (6d)., chunk: bool=true, chunk_overlap: int=10, chunk_size: int, custom_metadata: [map{data_type!: str, field_name!: str}], embedding_model: str, fusion_method: str(max/rrf)=rrf, hybrid_search_enabled: bool=false # Deprecated — use index_method instead., index_method: map{keyword!: bool, vector!: bool}=[object Object] # Controls which storage backends are used during indexing. Defaults to vector-only., indexing_options: map{keyword_tokenizer: str, use_ocr: bool}, max_num_results: int=10, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map, custom_domains: [str], default_domain_enabled: bool, enabled: bool, mcp: map, rate_limit: map, search_endpoint: map}, reranking: bool=false, reranking_model: str, retrieval_options: map{boost_by: [map], keyword_match_mode: str}, rewrite_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., rewrite_query: bool=false, score_threshold: num=0.4, source: str, source_params: map{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map}, sync_interval: any=21600 # Interval between automatic syncs, in seconds. Allowed values: 900 (15min), 1800 (30min), 3600 (1h), 7200 (2h), 14400 (4h), 21600 (6h), 43200 (12h), 86400 (24h)., token_id: str(uuid), type: str(r2/web-crawler)}\n@returns(201) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the new instance.\n@errors {400: Ai search instance invalid token., 403: Max instances reached.}\n\n@endpoint DELETE /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}\n@desc Delete an AI Search instance.\n@required {account_id: str, id: str, name: str # Namespace name}\n@returns(200) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the deleted instance.\n@errors {404: Ai search not found., 409: Instance status modified concurrently please retry.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}\n@desc Get an AI Search instance.\n@required {account_id: str, id: str, name: str # Namespace name}\n@returns(200) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the instance.\n@errors {404: Ai search not found.}\n\n@endpoint PATCH /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}\n@desc Move an instance to a different namespace.\n@required {account_id: str, name: str # Current namespace of the instance., id: str # Instance id., new_namespace: str # Target namespace to move the instance into.}\n@returns(200) {result: map, success: bool} # Instance moved.\n@errors {400: Ai search with this name already exist., 404: Ai search not found.}\n\n@endpoint PUT /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}\n@desc Update an AI Search instance.\n@required {account_id: str, id: str, name: str # Namespace name}\n@optional {ai_gateway_id: str, ai_search_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., cache: bool=true, cache_threshold: str(super_strict_match/close_enough/flexible_friend/anything_goes)=close_enough, cache_ttl: any=172800 # Cache entry TTL in seconds. Allowed values: 600 (10min), 1800 (30min), 3600 (1h), 7200 (2h), 21600 (6h), 43200 (12h), 86400 (24h), 172800 (48h), 259200 (72h), 518400 (6d)., chunk: bool=true, chunk_overlap: int=10, chunk_size: int, custom_metadata: [map{data_type!: str, field_name!: str}], embedding_model: str, fusion_method: str(max/rrf)=rrf, index_method: map{keyword!: bool, vector!: bool}=[object Object] # Controls which storage backends are used during indexing. Defaults to vector-only., indexing_options: map{keyword_tokenizer: str, use_ocr: bool}, max_num_results: int=10, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, paused: bool=false, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map, custom_domains: [str], default_domain_enabled: bool, enabled: bool, mcp: map, rate_limit: map, search_endpoint: map}, reranking: bool=false, reranking_model: str, retrieval_options: map{boost_by: [map], keyword_match_mode: str}, rewrite_model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., rewrite_query: bool=false, score_threshold: num=0.4, source: str, source_params: map{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map}, summarization: bool=false, summarization_model: str, sync_interval: any=21600 # Interval between automatic syncs, in seconds. Allowed values: 900 (15min), 1800 (30min), 3600 (1h), 7200 (2h), 14400 (4h), 21600 (6h), 43200 (12h), 86400 (24h)., system_prompt_ai_search: str, system_prompt_index_summarization: str, system_prompt_rewrite_query: str, token_id: str(uuid)}\n@returns(200) {result: map{ai_gateway_id: str?, ai_search_model: str?, cache: bool, cache_threshold: str, cache_ttl: any, chunk_overlap: int, chunk_size: int, created_at: str(date-time), created_by: str?, custom_metadata: [map], embedding_model: str?, enable: bool, engine_version: num, fusion_method: str, hybrid_search_enabled: bool, id: str, index_method: map{keyword: bool, vector: bool}, indexing_options: map?{keyword_tokenizer: str, use_ocr: bool}, last_activity: str(date-time)?, max_num_results: int, metadata: map{created_from_aisearch_wizard: bool, worker_domain: str}, modified_at: str(date-time), modified_by: str?, namespace: str?, paused: bool, public_endpoint_id: str?, public_endpoint_params: map{authorized_hosts: [str], chat_completions_endpoint: map{disabled: bool}, custom_domains: [str]?, default_domain_enabled: bool, enabled: bool, mcp: map{description: str, disabled: bool}, rate_limit: map{period_ms: int, requests: int, technique: str}, search_endpoint: map{disabled: bool}}, reranking: bool, reranking_model: str?, retrieval_options: map?{boost_by: [map], keyword_match_mode: str}, rewrite_model: str?, rewrite_query: bool, score_threshold: num, source: str?, source_params: map?{exclude_items: [str], include_items: [str], prefix: str, r2_jurisdiction: str, web_crawler: map{discover_options: map, parse_options: map, parse_type: str}}, status: str, sync_interval: any, token_id: str(uuid), type: str?}, success: bool} # Returns the updated instance.\n@errors {400: Ai search instance invalid token., 404: Ai search not found., 409: Instance status modified concurrently please retry.}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/chat/completions\n@desc Chat Completions\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name, messages: [map{content!: any, role!: str}]}\n@optional {ai_search_options: map{cache: map, custom_metadata: map, query_rewrite: map, reranking: map, retrieval: map}, model: str # A Workers AI model ID or an AI Gateway model ID compatible with the OpenAI Chat Completions API. An empty string uses the configured or default model., stream: bool}\n@returns(200) {choices: [map], chunks: [map], id: str, model: str, object: str} # Returns the chat completions results with retrieved files.\n@errors {400: Metadata filter unknown field., 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items\n@desc Items List.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name}\n@optional {page: int=1, per_page: int=20, search: str, sort_by: str(status/modified_at)=status # Sort order for items. \"status\" (default) sorts by status priority then last_seen_at. \"modified_at\" sorts by file modification time (most recent first), falling back to created_at., status: str(queued/running/completed/error/skipped/outdated), source: str # Filter items by source_id. Use \"builtin\" for uploaded files, or a source identifier like \"web-crawler:https://example.com\"., metadata_filter: str # JSON-encoded metadata filter using Vectorize filter syntax. Examples: {\"folder\":\"reports/\"}, {\"timestamp\":{\"$gte\":1700000000000}}, {\"folder\":{\"$in\":[\"docs/\",\"reports/\"]}}, item_id: str # Filter items by their unique ID. Returns at most one item., key: str # Filter items by their exact key (object key / filename). Keys are unique per source, so combine with `source` to disambiguate across data sources.}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns the AI Search items.\n@errors {400: Metadata filter unknown field., 404: Ai search not found., 503: Unable to connect to ai search.}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items\n@desc Upload Item.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name}\n@returns(200) {result: map{checksum: str, chunks_count: int?, created_at: str(date-time), error: str, file_size: num?, id: str, key: str, last_seen_at: str(date-time), metadata: map?, namespace: str, next_action: str?, source_id: str?, status: str, warnings: [any]}, success: bool} # Item uploaded successfully.\n@errors {400: Invalid metadata format., 404: Ai search not found., 409: Item key already exist., 413: File exceeds maximum size., 429: Item write rate limited.}\n\n@endpoint PUT /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items\n@desc Create or Update Item.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name, key: str # Item key / filename. Must not exceed 128 characters., next_action: str}\n@optional {wait_for_completion: bool=false # Wait for indexing to fully complete before responding. On RAGs with vector indexing enabled, this additionally waits for Vectorize ingestion confirmation (up to 40s) so the returned item reflects a queryable state. On timeout the item is returned in `running` state and the background alarm continues polling. Defaults to false.}\n@returns(200) {result: map{checksum: str, chunks_count: int?, created_at: str(date-time), error: str, file_size: num?, id: str, key: str, last_seen_at: str(date-time), metadata: map?, namespace: str, next_action: str?, source_id: str?, status: str}, success: bool} # Returns a AI Search Item detail.\n@errors {400: Filename exceeds maximum length., 404: Ai search not found., 409: Item key already exist., 503: Unable to sync item.}\n\n@endpoint DELETE /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items/{item_id}\n@desc Delete Item.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., item_id: str, account_id: str, name: str # Namespace name}\n@returns(200) {result: map{key: str}, success: bool} # Item deleted successfully.\n@errors {400: This operation requires a managed instance., 404: Item not found.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items/{item_id}\n@desc Get Item.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., item_id: str, account_id: str, name: str # Namespace name}\n@returns(200) {result: map{checksum: str, chunks_count: int?, created_at: str(date-time), error: str, file_size: num?, id: str, key: str, last_seen_at: str(date-time), metadata: map?, namespace: str, next_action: str?, source_id: str?, status: str}, success: bool} # Returns a AI Search Item detail.\n@errors {404: Job not found., 503: Unable to connect to ai search.}\n\n@endpoint PATCH /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items/{item_id}\n@desc Sync Item.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., item_id: str, account_id: str, name: str # Namespace name, next_action: str}\n@optional {wait_for_completion: bool=false # Wait for indexing to fully complete before responding. On RAGs with vector indexing enabled, this additionally waits for Vectorize ingestion confirmation (up to 40s) so the returned item reflects a queryable state. On timeout the item is returned in `running` state and the background alarm continues polling. Defaults to false.}\n@returns(200) {result: map{checksum: str, chunks_count: int?, created_at: str(date-time), error: str, file_size: num?, id: str, key: str, last_seen_at: str(date-time), metadata: map?, namespace: str, next_action: str?, source_id: str?, status: str}, success: bool} # Returns a AI Search Item detail.\n@errors {400: Input Validation Error, 404: Ai search not found., 503: Unable to sync item.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items/{item_id}/chunks\n@desc List Item Chunks.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., item_id: str, account_id: str, name: str # Namespace name}\n@optional {limit: int=20, offset: int=0}\n@returns(200) {result: [map], result_info: map{count: int, limit: int, offset: int, total: int}, success: bool} # Returns the AI Search item chunks with text content.\n@errors {400: Input Validation Error, 404: Item not found., 503: Unable to connect to ai search.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items/{item_id}/download\n@desc Download Item Content.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., item_id: str, account_id: str, name: str # Namespace name}\n@returns(200) Raw file content.\n@errors {400: Content download not available for external source items., 403: Items in this instance were crawled from a public site for search and AI input only. Full page content isn't available for download; use the search endpoint to retrieve cited excerpts., 404: Item not found., 503: Unable to connect to ai search.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/items/{item_id}/logs\n@desc Item Logs.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., item_id: str, account_id: str, name: str # Namespace name}\n@optional {limit: int=50, cursor: str}\n@returns(200) {result: [map], result_info: map{count: int, cursor: str?, per_page: int, truncated: bool}, success: bool} # Returns the AI Search item logs.\n@errors {400: Input Validation Error, 404: Item not found., 503: Unable to connect to ai search.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/jobs\n@desc List Jobs\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name}\n@optional {page: int=1, per_page: int=20}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns a list of AI Search Jobs.\n@errors {400: Input Validation Error, 404: Ai search not found., 503: Unable to connect to ai search.}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/jobs\n@desc Create new job\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name}\n@optional {description: str}\n@returns(200) {result: map{description: str, end_reason: str, ended_at: str, id: str, last_seen_at: str, source: str, started_at: str}, success: bool} # Returns the AI Search job id.\n@errors {400: Input Validation Error, 404: Ai search not found., 429: Sync in cooldown., 503: Unable to connect to ai search.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/jobs/{job_id}\n@desc Get a Job Details\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., job_id: str, account_id: str, name: str # Namespace name}\n@returns(200) {result: map{description: str, end_reason: str, ended_at: str, id: str, last_seen_at: str, source: str, started_at: str}, success: bool} # Returns a AI Search Job Details.\n@errors {404: Job not found., 503: Unable to connect to ai search.}\n\n@endpoint PATCH /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/jobs/{job_id}\n@desc Cancel an indexing job.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., job_id: str, account_id: str, name: str # Namespace name, action: str}\n@returns(200) {result: map{description: str, end_reason: str, ended_at: str, id: str, last_seen_at: str, source: str, started_at: str}, success: bool} # Returns the updated AI Search Job.\n@errors {400: Job cannot be cancelled., 404: Job not found., 503: Unable to connect to ai search.}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/jobs/{job_id}/logs\n@desc List Job Logs\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., job_id: str, account_id: str, name: str # Namespace name}\n@optional {page: int=1, per_page: int=20}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns a list of AI Search Job Logs.\n@errors {400: Input Validation Error, 404: Ai search not found., 503: Unable to connect to ai search.}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/purge_cache\n@desc Purge search cache.\n@required {account_id: str, id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., name: str # Namespace name}\n@returns(200) {success: bool} # Cache purged successfully.\n@errors {404: Ai search not found.}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/search\n@desc Search\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name}\n@optional {ai_search_options: map{cache: map, custom_metadata: map, query_rewrite: map, reranking: map, retrieval: map}, messages: [map{content!: any, role!: str}] # OpenAI-compatible message array. For multimodal queries, set the last user message's `content` to an array of typed parts: `[{type:'text', text:'…'}, {type:'image_url', image_url:{url:'…'}}]`. Image inputs require the RAG's embedding_model to declare 'image' in supported_modalities., query: str # A simple text query string. Alternative to 'messages' — provide either this or 'messages', not both.}\n@returns(200) {result: map{chunks: [map], query_kind: str, search_query: str}, success: bool} # Returns the search results.\n@errors {400: Metadata filter unknown field., 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-search/namespaces/{name}/instances/{id}/stats\n@desc Get instance statistics.\n@required {id: str # AI Search instance ID. Lowercase alphanumeric, hyphens, and underscores., account_id: str, name: str # Namespace name}\n@returns(200) {result: map{completed: int, degraded: bool, engine: map{r2: map{metadataSizeBytes: int, objectCount: int, payloadSizeBytes: int}, vectorize: map{dimensions: int, vectorsCount: int}}, error: int, file_embed_errors: map, index_source_errors: map, last_activity: str(date-time), outdated: int, queued: int, running: int, skipped: int}, success: bool} # Returns the AI Search stats.\n@errors {404: Not Found}\n\n@endpoint POST /accounts/{account_id}/ai-search/namespaces/{name}/search\n@desc Multi-Instance Search\n@required {account_id: str, name: str # Namespace name, ai_search_options: map{cache: map, custom_metadata: map, instance_ids!: [str], query_rewrite: map, reranking: map, retrieval: map}}\n@optional {messages: [map{content!: any, role!: str}] # OpenAI-compatible message array. For multimodal queries, set the last user message's `content` to an array of typed parts: `[{type:'text', text:'…'}, {type:'image_url', image_url:{url:'…'}}]`. Image inputs require the RAG's embedding_model to declare 'image' in supported_modalities., query: str # A simple text query string. Alternative to 'messages' — provide either this or 'messages', not both.}\n@returns(200) {result: map{chunks: [map], errors: [map], query_kind: str, search_query: str}, success: bool} # Returns the merged search results from all instances.\n@errors {400: Metadata filter unknown field., 404: Not Found}\n\n@endpoint GET /accounts/{account_id}/ai-search/tokens\n@desc List tokens\n@required {account_id: str}\n@optional {page: int=1 # Page number (1-indexed)., per_page: int=20 # Number of results per page., search: str # Filter tokens whose name contains this string (case-insensitive).}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # List of tokens.\n@errors {400: Input Validation Error}\n\n@endpoint POST /accounts/{account_id}/ai-search/tokens\n@desc Create a token\n@required {account_id: str, cf_api_id: str, cf_api_key: str, name: str}\n@optional {legacy: bool=true}\n@returns(201) {result: map{cf_api_id: str, created_at: str(date-time), created_by: str?, enabled: bool, id: str(uuid), legacy: bool, modified_at: str(date-time), modified_by: str?, name: str}, success: bool} # Token created.\n@errors {400: Ai search instance invalid token.}\n\n@endpoint DELETE /accounts/{account_id}/ai-search/tokens/{id}\n@desc Delete a token\n@required {account_id: str, id: str(uuid)}\n@returns(200) {result: map, success: bool} # Token deleted.\n@errors {400: Input Validation Error, 404: Token not found., 409: Token in use by instances.}\n\n@endpoint GET /accounts/{account_id}/ai-search/tokens/{id}\n@desc Get a token\n@required {account_id: str, id: str(uuid)}\n@returns(200) {result: map{cf_api_id: str, created_at: str(date-time), created_by: str?, enabled: bool, id: str(uuid), legacy: bool, modified_at: str(date-time), modified_by: str?, name: str}, success: bool} # Token details.\n@errors {400: Input Validation Error, 404: Token not found.}\n\n@endpoint PUT /accounts/{account_id}/ai-search/tokens/{id}\n@desc Update a token\n@required {account_id: str, id: str(uuid), cf_api_id: str, cf_api_key: str, name: str}\n@optional {legacy: bool=true}\n@returns(200) {result: map{cf_api_id: str, created_at: str(date-time), created_by: str?, enabled: bool, id: str(uuid), legacy: bool, modified_at: str(date-time), modified_by: str?, name: str}, success: bool} # Returns the updated token.\n@errors {400: Ai search instance invalid token., 404: Token not found.}\n\n@endpoint GET /accounts/{account_id}/ai/authors/search\n@desc Author Search\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [str], result: [map], success: bool} # Returns a list of authors.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/ai/finetunes\n@desc List Finetunes\n@required {account_id: str}\n@returns(200) {result: map{created_at: str(date-time), description: str, id: str(uuid), model: str, modified_at: str(date-time), name: str}, success: bool} # Returns all finetunes.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/ai/finetunes\n@desc Create a new Finetune\n@required {account_id: str, model: str, name: str}\n@optional {description: str, public: bool=false}\n@returns(200) {result: map{created_at: str(date-time), description: str, id: str(uuid), model: str, modified_at: str(date-time), name: str, public: bool}, success: bool} # Returns the created finetune.\n@errors {400: Finetune creation failed.}\n\n@endpoint GET /accounts/{account_id}/ai/finetunes/public\n@desc List Public Finetunes\n@required {account_id: str}\n@optional {limit: num=20 # Pagination Limit., offset: num=0 # Pagination Offset., orderBy: str # Order By Column Name.}\n@returns(200) {result: [map], success: bool} # Returns all public finetunes.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/ai/finetunes/{finetune_id}\n@desc Delete a Finetune\n@required {account_id: str, finetune_id: str}\n@returns(200) {result: map{id: str(uuid), name: str}, success: bool} # Finetune deleted successfully.\n@errors {404: Finetune not found.}\n\n@endpoint POST /accounts/{account_id}/ai/finetunes/{finetune_id}/finetune-assets\n@desc Upload a Finetune Asset\n@required {account_id: str, finetune_id: str}\n@returns(200) {success: bool} # Returns successfully if finetunes were uploaded.\n@errors {400: Finetune creation failed.}\n\n@endpoint GET /accounts/{account_id}/ai/finetunes/{finetune_id}/finetune-assets/{file_name}\n@desc Download a Finetune Asset\n@required {account_id: str, finetune_id: str, file_name: str}\n@returns(200) {result: map{file_name: str, file_url: str}, success: bool} # Pre-signed download URL.\n@errors {404: Finetune or asset not found.}\n\n@endpoint GET /accounts/{account_id}/ai/models/schema\n@desc Get Model Schema\n@required {account_id: str, model: str # Model Name}\n@returns(200) {result: map{input: map{additionalProperties: bool, description: str, type: str}, output: map{additionalProperties: bool, description: str, type: str}}, success: bool} # Model Schema\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai/models/search\n@desc Model Search\n@required {account_id: str}\n@optional {per_page: int=100, page: int=1, task: str= # Filter by Task Name., author: str= # Filter by Author., source: num # Filter by Source Id., hide_experimental: bool=false # Filter to hide experimental models., search: str= # Search., include_deprecated: bool=false # If true, include models for up to three months after their deprecation date. Defaults to false., format: str # If set, return models in the requested marketplace format instead of the default response.}\n@returns(200) Returns a list of models. Default shape is the standard envelope; when `format` is supplied the marketplace-specific shape is returned instead.\n@errors {404: Object not found.}\n\n@endpoint POST /accounts/{account_id}/ai/run\n@desc Execute AI Model (Generic)\n@required {account_id: str, input: map # Model-specific input data. Format varies by model type., model: str # The AI model to execute (e.g., openai/gpt-5.5, anthropic/claude-opus-4.7)}\n@optional {options: map{extraHeaders: map, gateway: map}}\n@returns(200) {errors: [map], messages: [map], result: map, success: bool} # Model response\n@errors {400: Bad request - missing required fields or invalid input}\n\n@endpoint POST /accounts/{account_id}/ai/run/{model_name}\n@desc Execute AI model\n@required {account_id: str, model_name: str}\n@returns(200) {result: map} # Model response\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai/tasks/search\n@desc Task Search\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [str], result: [map], success: bool} # Returns a list of tasks\n@errors {404: Object not found.}\n\n@endpoint POST /accounts/{account_id}/ai/tomarkdown\n@desc Convert Files into Markdown\n@required {account_id: str}\n@returns(200) {result: [map], success: bool} # Model Schema\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/ai/tomarkdown/supported\n@desc Get all converted formats supported\n@required {account_id: str}\n@returns(200) {result: [map], success: bool} # Successful response\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/available_alerts\n@desc Get Alert Types\n@required {account_id: str}\n@returns(200) Get Alert Types response\n@errors {4XX: Get Alert Types response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/destinations/eligible\n@desc Get delivery mechanism eligibility\n@required {account_id: str}\n@returns(200) Get delivery mechanism eligibility response\n@errors {4XX: Get delivery mechanism eligibility response failure}\n\n@endpoint DELETE /accounts/{account_id}/alerting/v3/destinations/pagerduty\n@desc Delete PagerDuty Services\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete PagerDuty Services response\n@errors {4XX: Delete PagerDuty Services response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/destinations/pagerduty\n@desc List PagerDuty services\n@required {account_id: str}\n@returns(200) List PagerDuty services response\n@errors {4XX: List PagerDuty services response failure}\n\n@endpoint POST /accounts/{account_id}/alerting/v3/destinations/pagerduty/connect\n@desc Create PagerDuty integration token\n@required {account_id: str}\n@returns(201) Token for PagerDuty integration\n@errors {4XX: Create a token for PagerDuty integration failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/destinations/pagerduty/connect/{token_id}\n@desc Connect PagerDuty\n@required {account_id: str, token_id: str}\n@returns(200) Create a Notification policy response\n@errors {4XX: Create a Notification policy response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/destinations/webhooks\n@desc List webhooks\n@required {account_id: str}\n@returns(200) List webhooks response\n@errors {4XX: List webhooks response failure}\n\n@endpoint POST /accounts/{account_id}/alerting/v3/destinations/webhooks\n@desc Create a webhook\n@required {account_id: str, name: str # The name of the webhook destination. This will be included in the request body when you receive a webhook notification., url: str # The POST endpoint to call when dispatching a notification.}\n@optional {secret: str # Optional secret that will be passed in the `cf-webhook-auth` header when dispatching generic webhook notifications or formatted for supported destinations. Secrets are not returned in any API response body.}\n@returns(201) Create a webhook response\n@errors {4XX: Create a webhook response failure}\n\n@endpoint DELETE /accounts/{account_id}/alerting/v3/destinations/webhooks/{webhook_id}\n@desc Delete a webhook\n@required {webhook_id: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete a webhook response\n@errors {4XX: Delete a webhook response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/destinations/webhooks/{webhook_id}\n@desc Get a webhook\n@required {account_id: str, webhook_id: str}\n@returns(200) Get a webhook response\n@errors {4XX: Get a webhook response failure}\n\n@endpoint PUT /accounts/{account_id}/alerting/v3/destinations/webhooks/{webhook_id}\n@desc Update a webhook\n@required {webhook_id: str, account_id: str, name: str # The name of the webhook destination. This will be included in the request body when you receive a webhook notification., url: str # The POST endpoint to call when dispatching a notification.}\n@optional {secret: str # Optional secret that will be passed in the `cf-webhook-auth` header when dispatching generic webhook notifications or formatted for supported destinations. Secrets are not returned in any API response body.}\n@returns(200) Update a webhook response\n@errors {4XX: Update a webhook response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/history\n@desc List History\n@required {account_id: str}\n@optional {per_page: num, before: str(date-time), page: num=1, since: str(date-time)}\n@returns(200) List History response\n@errors {4XX: List History response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/policies\n@desc List Notification policies\n@required {account_id: str}\n@returns(200) List Notification policies response\n@errors {4XX: List Notification policies response failure}\n\n@endpoint POST /accounts/{account_id}/alerting/v3/policies\n@desc Create a Notification policy\n@required {account_id: str, alert_type: str(abuse_report_alert/access_custom_certificate_expiration_type/advanced_ddos_attack_l4_alert/advanced_ddos_attack_l7_alert/advanced_http_alert_error/bgp_hijack_notification/billing_usage_alert/block_notification_block_removed/block_notification_new_block/block_notification_review_rejected/bot_traffic_basic_alert/brand_protection_alert/brand_protection_digest/clickhouse_alert_fw_anomaly/clickhouse_alert_fw_ent_anomaly/cloudforce_one_request_notification/cni_maintenance_notification/custom_analytics/custom_bot_detection_alert/custom_ssl_certificate_event_type/dedicated_ssl_certificate_event_type/device_connectivity_anomaly_alert/dos_attack_l4/dos_attack_l7/expiring_service_token_alert/failing_logpush_job_disabled_alert/fbm_auto_advertisement/fbm_dosd_attack/fbm_volumetric_attack/health_check_status_notification/hostname_aop_custom_certificate_expiration_type/http_alert_edge_error/http_alert_origin_error/image_notification/image_resizing_notification/incident_alert/load_balancing_health_alert/load_balancing_pool_enablement_alert/logo_match_alert/magic_tunnel_health_check_event/magic_wan_tunnel_health/maintenance_event_notification/mtls_certificate_store_certificate_expiration_type/pages_event_alert/radar_notification/real_origin_monitoring/scriptmonitor_alert_new_code_change_detections/scriptmonitor_alert_new_hosts/scriptmonitor_alert_new_malicious_hosts/scriptmonitor_alert_new_malicious_scripts/scriptmonitor_alert_new_malicious_url/scriptmonitor_alert_new_max_length_resource_url/scriptmonitor_alert_new_resources/secondary_dns_all_primaries_failing/secondary_dns_primaries_failing/secondary_dns_warning/secondary_dns_zone_successfully_updated/secondary_dns_zone_validation_warning/security_insights_alert/sentinel_alert/stream_live_notifications/synthetic_test_latency_alert/synthetic_test_low_availability_alert/traffic_anomalies_alert/tunnel_health_event/tunnel_update_event/universal_ssl_event_type/web_analytics_metrics_update/zone_aop_custom_certificate_expiration_type) # Refers to which event will trigger a Notification dispatch. You can use the endpoint to get available alert types which then will give you a list of possible values., enabled: bool=true # Whether or not the Notification policy is enabled., mechanisms: map{email: [map], pagerduty: [map], webhooks: [map]} # List of IDs that will be used when dispatching a notification. IDs for email type will be the email address., name: str # Name of the policy.}\n@optional {alert_interval: str # Optional specification of how often to re-alert from the same incident, not support on all alert types., description: str # Optional description for the Notification policy., filters: map{actions: [str], affected_asns: [str], affected_components: [str], affected_locations: [str], airport_code: [str], alert_trigger_preferences: [str], alert_trigger_preferences_value: [str], enabled: [str], environment: [str], event: [str], event_source: [str], event_type: [str], group_by: [str], health_check_id: [str], incident_impact: [str], input_id: [str], insight_class: [str], limit: [str], logo_tag: [str], megabits_per_second: [str], new_health: [str], new_status: [str], packets_per_second: [str], pool_id: [str], pop_names: [str], product: [str], project_id: [str], protocol: [str], query_tag: [str], requests_per_second: [str], selectors: [str], services: [str], slo: [str], status: [str], target_hostname: [str], target_ip: [str], target_zone_name: [str], traffic_exclusions: [str], tunnel_id: [str], tunnel_name: [str], type: [str], where: [str], zones: [str]} # Optional filters that allow you to be alerted only on a subset of events for that alert type based on some criteria. This is only available for select alert types. See alert type documentation for more details.}\n@returns(200) Create a Notification policy response\n@errors {4XX: Create a Notification policy response failure}\n\n@endpoint DELETE /accounts/{account_id}/alerting/v3/policies/{policy_id}\n@desc Delete a Notification policy\n@required {account_id: str, policy_id: str}\n@returns(200) Delete a Notification policy response\n@errors {4XX: Delete a Notification policy response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/policies/{policy_id}\n@desc Get a Notification policy\n@required {account_id: str, policy_id: str}\n@returns(200) Get a Notification policy response\n@errors {4XX: Get a Notification policy response failure}\n\n@endpoint PUT /accounts/{account_id}/alerting/v3/policies/{policy_id}\n@desc Update a Notification policy\n@required {account_id: str, policy_id: str}\n@optional {alert_interval: str # Optional specification of how often to re-alert from the same incident, not support on all alert types., alert_type: str(abuse_report_alert/access_custom_certificate_expiration_type/advanced_ddos_attack_l4_alert/advanced_ddos_attack_l7_alert/advanced_http_alert_error/bgp_hijack_notification/billing_usage_alert/block_notification_block_removed/block_notification_new_block/block_notification_review_rejected/bot_traffic_basic_alert/brand_protection_alert/brand_protection_digest/clickhouse_alert_fw_anomaly/clickhouse_alert_fw_ent_anomaly/cloudforce_one_request_notification/cni_maintenance_notification/custom_analytics/custom_bot_detection_alert/custom_ssl_certificate_event_type/dedicated_ssl_certificate_event_type/device_connectivity_anomaly_alert/dos_attack_l4/dos_attack_l7/expiring_service_token_alert/failing_logpush_job_disabled_alert/fbm_auto_advertisement/fbm_dosd_attack/fbm_volumetric_attack/health_check_status_notification/hostname_aop_custom_certificate_expiration_type/http_alert_edge_error/http_alert_origin_error/image_notification/image_resizing_notification/incident_alert/load_balancing_health_alert/load_balancing_pool_enablement_alert/logo_match_alert/magic_tunnel_health_check_event/magic_wan_tunnel_health/maintenance_event_notification/mtls_certificate_store_certificate_expiration_type/pages_event_alert/radar_notification/real_origin_monitoring/scriptmonitor_alert_new_code_change_detections/scriptmonitor_alert_new_hosts/scriptmonitor_alert_new_malicious_hosts/scriptmonitor_alert_new_malicious_scripts/scriptmonitor_alert_new_malicious_url/scriptmonitor_alert_new_max_length_resource_url/scriptmonitor_alert_new_resources/secondary_dns_all_primaries_failing/secondary_dns_primaries_failing/secondary_dns_warning/secondary_dns_zone_successfully_updated/secondary_dns_zone_validation_warning/security_insights_alert/sentinel_alert/stream_live_notifications/synthetic_test_latency_alert/synthetic_test_low_availability_alert/traffic_anomalies_alert/tunnel_health_event/tunnel_update_event/universal_ssl_event_type/web_analytics_metrics_update/zone_aop_custom_certificate_expiration_type) # Refers to which event will trigger a Notification dispatch. You can use the endpoint to get available alert types which then will give you a list of possible values., description: str # Optional description for the Notification policy., enabled: bool=true # Whether or not the Notification policy is enabled., filters: map{actions: [str], affected_asns: [str], affected_components: [str], affected_locations: [str], airport_code: [str], alert_trigger_preferences: [str], alert_trigger_preferences_value: [str], enabled: [str], environment: [str], event: [str], event_source: [str], event_type: [str], group_by: [str], health_check_id: [str], incident_impact: [str], input_id: [str], insight_class: [str], limit: [str], logo_tag: [str], megabits_per_second: [str], new_health: [str], new_status: [str], packets_per_second: [str], pool_id: [str], pop_names: [str], product: [str], project_id: [str], protocol: [str], query_tag: [str], requests_per_second: [str], selectors: [str], services: [str], slo: [str], status: [str], target_hostname: [str], target_ip: [str], target_zone_name: [str], traffic_exclusions: [str], tunnel_id: [str], tunnel_name: [str], type: [str], where: [str], zones: [str]} # Optional filters that allow you to be alerted only on a subset of events for that alert type based on some criteria. This is only available for select alert types. See alert type documentation for more details., mechanisms: map{email: [map], pagerduty: [map], webhooks: [map]} # List of IDs that will be used when dispatching a notification. IDs for email type will be the email address., name: str # Name of the policy.}\n@returns(200) Update a Notification policy response\n@errors {4XX: Update a Notification policy response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/policies/{policy_id}/email/unsubscribe\n@desc Show email unsubscribe details\n@required {account_id: str, policy_id: str, email: str(email), token: str}\n@returns(200) Show email unsubscribe details response\n@errors {4XX: Show email unsubscribe details response failure}\n\n@endpoint POST /accounts/{account_id}/alerting/v3/policies/{policy_id}/email/unsubscribe\n@desc Unsubscribe email from a Notification policy\n@required {account_id: str, policy_id: str, email: str(email), token: str}\n@returns(200) Unsubscribe email from Notification policy response\n@errors {4XX: Unsubscribe email from Notification policy response failure}\n\n@endpoint POST /accounts/{account_id}/alerting/v3/policies/{policy_id}/test\n@desc Test a Notification policy\n@required {account_id: str, policy_id: str}\n@optional {severity: int(0/1/2/3/4) # Severity level for the test alert. Defaults to INFO (1) if omitted., source: str # Source identifier for the test alert., state_correlation_id: str # Correlation ID for stateful test alerts. Required when state_event is set., state_event: int(0/1/2) # State event type for stateful test alerts. Use with state_correlation_id.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Test a Notification policy response\n@errors {4XX: Test a Notification policy response failure. Common causes include an invalid or non-existent policy ID, or a delivery mechanism that is unreachable.}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/silences\n@desc List Silences\n@required {account_id: str}\n@returns(200) List Silences response\n@errors {4XX: List Silences response failure}\n\n@endpoint POST /accounts/{account_id}/alerting/v3/silences\n@desc Create Silences\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Create Silences response\n@errors {4XX: Create Silences response failure}\n\n@endpoint PUT /accounts/{account_id}/alerting/v3/silences\n@desc Update Silences\n@required {account_id: str}\n@returns(200) Update Silences response\n@errors {4XX: Update Silences response failure}\n\n@endpoint DELETE /accounts/{account_id}/alerting/v3/silences/{silence_id}\n@desc Delete Silence\n@required {account_id: str, silence_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete Silence response\n@errors {4XX: Delete Silence response failure}\n\n@endpoint GET /accounts/{account_id}/alerting/v3/silences/{silence_id}\n@desc Get Silence\n@required {account_id: str, silence_id: str}\n@returns(200) Get Silence response\n@errors {4XX: Get Silence response failure}\n\n@endpoint POST /accounts/{account_id}/analytics/query/data-security/content-findings/top-n\n@desc Top integrations by content findings\n@required {account_id: str # Cloudflare account identifier., filters: [map{name!: str, op!: str, values!: [any]}] # Filters to apply. `findingType = content` is applied automatically for CASB data., from: str(date-time) # Start of the query time range (inclusive). RFC3339., n: int(int64) # Maximum number of integrations to return., to: str(date-time) # End of the query time range (exclusive). RFC3339.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Top integrations result.\n@errors {400: Invalid request body. Common causes: missing required fields, invalid timestamp format (must be RFC3339), or unknown dataset/column/stat names., 401: Authentication required. Provide a valid API token or key., 403: Insufficient permissions. The authenticated user does not have access to the requested dataset or account.}\n@example_request {\"filters\":[],\"from\":\"2024-11-01T00:00:00Z\",\"n\":10,\"to\":\"2024-11-08T00:00:00Z\"}\n\n@endpoint POST /accounts/{account_id}/analytics/query/data-security/findings/summary\n@desc Data security findings summary\n@required {account_id: str # Cloudflare account identifier., filters: [map{name!: str, op!: str, values!: [any]}] # Filters to apply., from: str(date-time) # Start of the query time range (inclusive). RFC3339., to: str(date-time) # End of the query time range (exclusive). RFC3339.}\n@returns(200) {errors: [map], messages: [map], result: map{currentTotal: [map], previousTotal: [map]}, success: bool} # Findings summary result.\n@errors {400: Invalid request body. Common causes: missing required fields, invalid timestamp format (must be RFC3339), or unknown dataset/column/stat names., 401: Authentication required. Provide a valid API token or key., 403: Insufficient permissions. The authenticated user does not have access to the requested dataset or account.}\n@example_request {\"filters\":[],\"from\":\"2024-11-01T00:00:00Z\",\"to\":\"2024-11-08T00:00:00Z\"}\n\n@endpoint POST /accounts/{account_id}/analytics/query/data-security/findings/timeseries\n@desc Data security findings timeseries\n@required {account_id: str # Cloudflare account identifier., filters: [map{name!: str, op!: str, values!: [any]}] # Filters to apply., from: str(date-time) # Start of the query time range (inclusive). RFC3339., to: str(date-time) # End of the query time range (exclusive). RFC3339.}\n@returns(200) {errors: [map], messages: [map], result: map{resolution: str?, slots: [map]}, success: bool} # Findings timeseries result.\n@errors {400: Invalid request body. Common causes: missing required fields, invalid timestamp format (must be RFC3339), or unknown dataset/column/stat names., 401: Authentication required. Provide a valid API token or key., 403: Insufficient permissions. The authenticated user does not have access to the requested dataset or account.}\n@example_request {\"filters\":[],\"from\":\"2024-11-01T00:00:00Z\",\"to\":\"2024-11-08T00:00:00Z\"}\n\n@endpoint POST /accounts/{account_id}/analytics/query/{dataset}/summary\n@desc Query analytics summary\n@required {account_id: str # Cloudflare account identifier., dataset: str # Dataset name to query. Examples: `access-logins`, `gateway-http`, `gateway-dns`, `gateway-http`, `shadow-it`.}\n@returns(200) {errors: [map], messages: [map], result: map{currentTotal: [map], previousTotal: [map]}, success: bool} # Summary query result.\n@errors {400: Invalid request body. Common causes: missing required fields, invalid timestamp format (must be RFC3339), or unknown dataset/column/stat names., 401: Authentication required. Provide a valid API token or key., 403: Insufficient permissions. The authenticated user does not have access to the requested dataset or account.}\n@example_request {\"filters\":[],\"from\":\"2024-11-01T00:00:00Z\",\"groupBy\":[],\"stats\":[\"attemptsTotal\"],\"to\":\"2024-11-08T00:00:00Z\"}\n\n@endpoint POST /accounts/{account_id}/analytics/query/{dataset}/timeseries\n@desc Query analytics timeseries\n@required {account_id: str # Cloudflare account identifier., dataset: str # Dataset name to query. Examples: `access-logins`, `gateway-http`, `gateway-dns`, `gateway-http`, `shadow-it`.}\n@returns(200) {errors: [map], messages: [map], result: map{resolution: str, slots: [map]}, success: bool} # Timeseries query result.\n@errors {400: Invalid request body. Common causes: missing required fields, invalid timestamp format (must be RFC3339), or unknown dataset/column/stat names., 401: Authentication required. Provide a valid API token or key., 403: Insufficient permissions. The authenticated user does not have access to the requested dataset or account.}\n@example_request {\"filters\":[{\"name\":\"allowed\",\"op\":\"eq\",\"values\":[true]}],\"from\":\"2024-11-01T00:00:00Z\",\"groupBy\":[\"country\",\"allowed\"],\"resolution\":\"day\",\"stats\":[\"attemptsTotal\"],\"to\":\"2024-11-08T00:00:00Z\"}\n\n@endpoint POST /accounts/{account_id}/analytics/query/{dataset}/top-n\n@desc Query analytics top-N\n@required {account_id: str # Cloudflare account identifier., dataset: str # Dataset name to query. Examples: `access-logins`, `gateway-http`, `gateway-dns`, `gateway-http`, `shadow-it`.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Top-N query result.\n@errors {400: Invalid request body. Common causes: missing required fields, invalid timestamp format (must be RFC3339), or unknown dataset/column/stat names., 401: Authentication required. Provide a valid API token or key., 403: Insufficient permissions. The authenticated user does not have access to the requested dataset or account.}\n@example_request {\"filters\":[],\"from\":\"2024-11-05T00:00:00Z\",\"groupBy\":[\"appName\",\"appCategory\"],\"n\":10,\"orderBy\":\"bytesTotal\",\"stats\":[\"bytesTotal\",\"requestsTotal\"],\"to\":\"2024-11-06T00:00:00Z\"}\n\n@endpoint GET /accounts/{account_id}/analytics_engine/sql\n@desc Execute an Analytics Engine SQL query via query parameter\n@required {query: str # Supply a SQL query to run against your Analytics Engine datasets. Use only SELECT statements. The service validates the query against a restricted SQL grammar before execution.}\n@returns(200) {data: [map], meta: [map], rows: int} # Query executed successfully. Results are returned as newline-delimited JSON (NDJSON) by default. Each line is a JSON object representing one row of results. If the FORMAT JSON clause is used in the query, the response is a single JSON object with data, meta, and rows fields.\n@errors {400: Bad request. The query parameter or request body is missing or malformed., 403: Forbidden. Authentication failed, the account does not have access to Analytics Engine, or the provided token does not have the required permissions. This service returns 403 for all authentication and authorization failures (missing token, invalid token, audience mismatch, account mismatch, or insufficient entitlements)., 422: Unprocessable Entity. The SQL query failed validation. Common causes include syntax errors, references to unknown columns, unsupported SQL features (JOINs, non-SELECT statements), type mismatches in expressions, and GROUP BY violations., 429: Too Many Requests. The account has exceeded the concurrent query limit, the global query pool is full, or a resource limit was hit (query too slow, too much memory, result too large)., 500: Internal Server Error. An unexpected error occurred during query execution. This may indicate a transient backend issue. Retrying the request after a brief delay is recommended., 503: Service Unavailable. The query queue wait timeout expired before a processing slot became available. This occurs under heavy load when per-account or global concurrency limits are saturated. Retry the request after a brief delay., 504: Gateway Timeout. The query exceeded the 60-second execution timeout. Simplify the query, narrow the time range, or add more restrictive filters to reduce execution time.}\n\n@endpoint POST /accounts/{account_id}/analytics_engine/sql\n@desc Execute an Analytics Engine SQL query via request body\n@returns(200) {data: [map], meta: [map], rows: int} # Query executed successfully. Results are returned as newline-delimited JSON (NDJSON) by default. Each line is a JSON object representing one row of results. If the FORMAT JSON clause is used in the query, the response is a single JSON object with data, meta, and rows fields.\n@errors {400: Bad request. The query parameter or request body is missing or malformed., 403: Forbidden. Authentication failed, the account does not have access to Analytics Engine, or the provided token does not have the required permissions. This service returns 403 for all authentication and authorization failures (missing token, invalid token, audience mismatch, account mismatch, or insufficient entitlements)., 422: Unprocessable Entity. The SQL query failed validation. Common causes include syntax errors, references to unknown columns, unsupported SQL features (JOINs, non-SELECT statements), type mismatches in expressions, and GROUP BY violations., 429: Too Many Requests. The account has exceeded the concurrent query limit, the global query pool is full, or a resource limit was hit (query too slow, too much memory, result too large)., 500: Internal Server Error. An unexpected error occurred during query execution. This may indicate a transient backend issue. Retrying the request after a brief delay is recommended., 503: Service Unavailable. The query queue wait timeout expired before a processing slot became available. This occurs under heavy load when per-account or global concurrency limits are saturated. Retry the request after a brief delay., 504: Gateway Timeout. The query exceeded the 60-second execution timeout. Simplify the query, narrow the time range, or add more restrictive filters to reduce execution time.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces\n@desc List namespaces\n@optional {limit: int=100, cursor: str}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: any, success: bool} # Namespaces.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/artifacts/namespaces\n@desc Create a namespace\n@required {namespace: str}\n@optional {jurisdiction: str(unrestricted/us/eu/fedramp)=unrestricted}\n@returns(201) {errors: [map], messages: [map], result: map{created_at: str(date-time), jurisdiction: str, namespace: str, repo_count: int, updated_at: str(date-time)}, result_info: any, success: bool} # Namespace created.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 409: Operation conflict., 500: Internal server error.}\n\n@endpoint DELETE /accounts/{account_id}/artifacts/namespaces/{namespace}\n@desc Delete a namespace\n@required {namespace: str # Artifacts namespace name.}\n@returns(204) Namespace deleted.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 409: Operation conflict., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}\n@desc Get a namespace\n@required {namespace: str # Artifacts namespace name.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str(date-time), jurisdiction: str, namespace: str, repo_count: int, updated_at: str(date-time)}, result_info: any, success: bool} # Namespace.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos\n@desc List repositories\n@required {namespace: str # Artifacts namespace name.}\n@optional {limit: int=50, cursor: str, search: str, sort: str(created_at/updated_at/last_push_at/name)=created_at, direction: str(asc/desc)=desc}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: any, success: bool} # Repositories.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/artifacts/namespaces/{namespace}/repos\n@desc Create a repository\n@required {namespace: str # Artifacts namespace name., name: str}\n@optional {default_branch: str # Git branch name. Must match /^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/, must not contain '..', and must not end with '/' or '.'., description: str, read_only: bool}\n@returns(201) {errors: [map], messages: [map], result: map{default_branch: str, description: str?, id: str, name: str, remote: str, token: str}, result_info: any, success: bool} # Repository created.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 409: Operation conflict., 500: Internal server error.}\n\n@endpoint DELETE /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}\n@desc Delete a repository\n@required {namespace: str # Artifacts namespace name., name: str # Repository name.}\n@returns(202) {errors: [map], messages: [map], result: map{id: str}, result_info: any, success: bool} # Delete accepted.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}\n@desc Get a repository\n@required {namespace: str # Artifacts namespace name., name: str # Repository name.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str(date-time), default_branch: str, description: str?, id: str, last_push_at: str(date-time)?, name: str, read_only: bool, remote: str, source: str?, updated_at: str(date-time)}, result_info: any, success: bool} # Repository.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 409: Operation conflict., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/blob/{hash}\n@desc Read a Git blob\n@required {namespace: str # Artifacts namespace name., name: str # Repository name., hash: str # 40-character lowercase hexadecimal Git object hash.}\n@returns(200) Blob bytes.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 413: Request entity too large., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/commit/{hash}\n@desc Read a Git commit\n@required {namespace: str # Artifacts namespace name., name: str # Repository name., hash: str # 40-character lowercase hexadecimal Git object hash.}\n@returns(200) {errors: [map], messages: [map], result: map{author: map{email: str, name: str}, authoredAt: int, committedAt: int, committer: map{email: str, name: str}, hash: str, message: str, parents: [str], treeHash: str}, result_info: any, success: bool} # Commit metadata.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/file\n@desc Read a file\n@required {namespace: str # Artifacts namespace name., name: str # Repository name., ref: str # Git ref, branch, tag, or commit hash., path: str # File path.}\n@returns(200) File bytes.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 413: Request entity too large., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/fork\n@desc Fork a repository\n@required {namespace: str # Artifacts namespace name., name: str # Repository name., name: str}\n@optional {default_branch_only: bool, description: str, read_only: bool}\n@returns(201) {errors: [map], messages: [map], result: map{default_branch: str, description: str?, id: str, name: str, objects: int, remote: str, token: str}, result_info: any, success: bool} # Repository forked.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 409: Operation conflict., 500: Internal server error., 503: Service unavailable.}\n\n@endpoint POST /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/import\n@desc Import a repository\n@required {namespace: str # Artifacts namespace name., name: str # Repository name., url: str(uri)}\n@optional {branch: str # Git branch name. Must match /^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/, must not contain '..', and must not end with '/' or '.'., depth: int, read_only: bool}\n@returns(201) {errors: [map], messages: [map], result: map{default_branch: str, description: str?, id: str, name: str, remote: str, token: str}, result_info: any, success: bool} # Repository import started.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 409: Operation conflict., 413: Request entity too large., 422: Unprocessable entity., 500: Internal server error., 502: Upstream unavailable., 503: Service unavailable., 504: Gateway timeout.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/log\n@desc Read commit history\n@required {namespace: str # Artifacts namespace name., name: str # Repository name.}\n@optional {ref: str # Git ref, branch, tag, or commit hash. Defaults to HEAD., limit: int, offset: int}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: any, success: bool} # Commits.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/raw/{ref}/{path}\n@desc Read a raw file with content type\n@required {namespace: str # Artifacts namespace name., name: str # Repository name., ref: str # Git ref, branch, tag, or 40-character commit hash., path: str # File path. May contain slashes.}\n@returns(200) File bytes with sniffed Content-Type and browser-safe response headers.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 413: Request entity too large., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/tokens\n@desc List repository tokens\n@required {namespace: str # Artifacts namespace name., name: str # Repository name.}\n@optional {state: str(active/expired/revoked/all)=active, page: int=1, per_page: int=30}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: any, success: bool} # Tokens.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 409: Operation conflict., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/artifacts/namespaces/{namespace}/repos/{name}/tree/{hash}\n@desc Read a Git tree\n@required {namespace: str # Artifacts namespace name., name: str # Repository name., hash: str # 40-character lowercase hexadecimal Git object hash.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: any, success: bool} # Tree entries.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/artifacts/namespaces/{namespace}/tokens\n@desc Create a repository token\n@required {namespace: str # Artifacts namespace name., repo: str}\n@optional {scope: str(read/write), ttl: int}\n@returns(201) {errors: [map], messages: [map], result: map{expires_at: str(date-time), id: str, plaintext: str, scope: str}, result_info: any, success: bool} # Token created.\n@errors {400: Bad request., 401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 409: Operation conflict., 500: Internal server error.}\n\n@endpoint DELETE /accounts/{account_id}/artifacts/namespaces/{namespace}/tokens/{id}\n@desc Revoke a token\n@required {namespace: str # Artifacts namespace name., id: str # Token ID. Must match /^[0-9a-z]{16}$/.}\n@returns(200) {errors: [map], messages: [map], result: map{id: str}, result_info: any, success: bool} # Token revoked.\n@errors {401: Authentication required., 403: Insufficient permissions., 404: Resource not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/audit_logs\n@desc Get account audit logs\n@required {account_id: str}\n@optional {id: str, export: bool, action.type: str, actor.ip: str, actor.email: str(email), since: any, before: any, zone.name: str, direction: str(desc/asc)=desc, per_page: num=100, page: num=1, hide_user_logs: bool=false}\n@returns(200) Get account audit logs response\n@errors {4XX: Get account audit logs response failure}\n\n@endpoint POST /accounts/{account_id}/autorag/rags/{id}/ai-search\n@desc AI Search\n@required {id: str # rag id, account_id: str, query: str}\n@optional {filters: any, max_num_results: int=10, model: any, ranking_options: map{ranker: str, score_threshold: num}=[object Object], reranking: map{enabled: bool, model: any}, rewrite_query: bool=false, stream: bool=false, system_prompt: str}\n@returns(200) {result: map{data: [map], has_more: bool, next_page: str?, object: str, response: str, search_query: str}, success: bool} # Returns the log details\n@errors {404: Not Found}\n\n@endpoint GET /accounts/{account_id}/autorag/rags/{id}/files\n@desc Files\n@required {id: str # rag id, account_id: str}\n@optional {page: int=1, per_page: int=20, search: str, status: str(completed/queued/running/error)}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns the AI Search files\n@errors {404: autorag_not_found, 503: unable_to_connect_to_autorag}\n\n@endpoint GET /accounts/{account_id}/autorag/rags/{id}/jobs\n@desc List Jobs\n@required {id: str # rag id, account_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns a list of AutoRAG Jobs\n@errors {404: autorag_not_found, 503: unable_to_connect_to_autorag}\n\n@endpoint GET /accounts/{account_id}/autorag/rags/{id}/jobs/{job_id}\n@desc Get a Job Details\n@required {id: str # rag id, job_id: str, account_id: str}\n@returns(200) {result: map{end_reason: str, ended_at: str, id: str, last_seen_at: str, source: str, started_at: str}, success: bool} # Returns a AutoRAG Job Details\n@errors {404: job_not_found, 503: unable_to_connect_to_autorag}\n\n@endpoint GET /accounts/{account_id}/autorag/rags/{id}/jobs/{job_id}/logs\n@desc List Job Logs\n@required {id: str # rag id, job_id: str, account_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Returns a list of AutoRAG Job Logs\n@errors {404: autorag_not_found, 503: unable_to_connect_to_autorag}\n\n@endpoint POST /accounts/{account_id}/autorag/rags/{id}/search\n@desc Search\n@required {id: str # rag id, account_id: str, query: str}\n@optional {filters: any, max_num_results: int=10, ranking_options: map{ranker: str, score_threshold: num}=[object Object], reranking: map{enabled: bool, model: any}, rewrite_query: bool=false}\n@returns(200) {result: map{data: [map], has_more: bool, next_page: str?, object: str, search_query: str}, success: bool} # Returns the log details\n@errors {404: Not Found}\n\n@endpoint PATCH /accounts/{account_id}/autorag/rags/{id}/sync\n@desc Sync\n@required {id: str # rag id, account_id: str}\n@returns(200) {result: map{job_id: str}, success: bool} # Returns the autorag sync status\n@errors {400: autorag_is_paused, 404: autorag_not_found, 429: sync_in_cooldown, 503: unable_to_connect_to_autorag}\n\n@endpoint GET /accounts/{account_id}/billable-usage\n@desc Get Account Billable Usage (Version 1, Alpha)\n@required {account_id: str # Identifies the Cloudflare account.}\n@optional {from: str(date) # Start date for the usage query (ISO 8601). The provided time range must include the subscription billing cycle anchor day, otherwise no usage data is returned. Use the info endpoint to retrieve the subscription anchor day., to: str(date) # End date for the usage query (ISO 8601).}\n@returns(200) {errors: [map]?, messages: [map]?, result: [map], success: bool} # Indicates account usage data was successfully retrieved.\n@errors {4XX: Indicates the request failed.}\n\n@endpoint GET /accounts/{account_id}/billable-usage/info\n@desc Get Account Billable Usage Info (Version 1, Alpha)\n@required {account_id: str # Identifies the Cloudflare account.}\n@returns(200) {errors: [map]?, messages: [map]?, result: map{covered: bool, subscriptions: [map]}, success: bool} # Indicates account usage data was successfully retrieved.\n@errors {4XX: Indicates the request failed.}\n\n@endpoint GET /accounts/{account_id}/billable/usage\n@desc Get Account Usage (Version 2, Alpha, Restricted)\n@required {account_id: str # Identifies the Cloudflare account.}\n@optional {from: str(date) # Start date for the usage query (ISO 8601). Required if `to` is set. When omitted along with `to`, defaults to the start of the current month. Filters by charge period (when consumption happened), not billing period. The maximum date range is 31 days., to: str(date) # End date for the usage query (ISO 8601). Required if `from` is set. When omitted along with `from`, defaults to today. Filters by charge period (when consumption happened), not billing period. The maximum date range is 31 days.}\n@returns(200) {errors: [map]?, messages: [map]?, result: [map], success: bool} # Account usage data was successfully retrieved.\n@errors {4XX: Indicates the request failed.}\n\n@endpoint POST /accounts/{account_id}/billable/usage\n@desc Query Account Usage (Version 2, Alpha, Restricted)\n@required {account_id: str # Identifies the Cloudflare account.}\n@optional {FilterBy: map{MetricIds: [str], ProductFamilyIds: [str(uuid)], Tags: [map]} # Usage filters. Filters of different kinds are combined with AND, so a record must match every filter present to be returned., GroupBy: [map{Key!: str, Type!: str}] # Customer resource tags used to split result rows. At most two unique tag keys may be supplied., TimePeriod: map{From: str(date-time), To: str(date-time)} # Charge period to query, i.e. when consumption happened, not when it was billed. `From` is inclusive and `To` is exclusive. `From` and `To` must be supplied together; supplying one without the other is an error. When both are omitted the range defaults to the start of the current month through today.}\n@returns(200) {errors: [map]?, messages: [map]?, result: [map], success: bool} # Account usage data was successfully retrieved.\n@errors {4XX: Indicates the request failed.}\n\n@endpoint GET /accounts/{account_id}/billable/usage/billable-metrics\n@desc List Account Billable Metrics (Version 2, Alpha, Restricted)\n@required {account_id: str # Identifies the Cloudflare account.}\n@optional {from: str(date) # Start date for the usage query (ISO 8601). Required if `to` is set. When omitted along with `to`, defaults to the start of the current month. Filters by charge period (when consumption happened), not billing period. The maximum date range is 31 days., to: str(date) # End date for the usage query (ISO 8601). Required if `from` is set. When omitted along with `from`, defaults to today. Filters by charge period (when consumption happened), not billing period. The maximum date range is 31 days.}\n@returns(200) {errors: [map]?, messages: [map]?, result: [map], success: bool} # Account billable metrics were successfully retrieved.\n@errors {4XX: Indicates the request failed.}\n\n@endpoint GET /accounts/{account_id}/billing/bad-debt\n@desc Get Account Bad Debt\n@required {account_id: str}\n@returns(200) Get Account Bad Debt response\n@errors {4XX: Get Account Bad Debt response failure}\n\n@endpoint GET /accounts/{account_id}/billing/credits\n@desc Get Account Credits\n@required {account_id: str}\n@returns(200) Get Account Credits response\n@errors {4XX: Get Account Credits response failure}\n\n@endpoint GET /accounts/{account_id}/billing/history\n@desc Get Account Billing History\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, status: str}\n@returns(200) Get Account Billing History response\n@errors {4XX: Get Account Billing History response failure}\n\n@endpoint DELETE /accounts/{account_id}/billing/profile\n@desc Delete Billing Profile\n@required {account_id: str}\n@returns(204) Delete Billing Profile response\n@errors {4XX: Delete Billing Profile response failure}\n\n@endpoint GET /accounts/{account_id}/billing/profile\n@desc Get Billing Profile\n@required {account_id: str}\n@returns(200) Billing Profile Details response\n@errors {4XX: Billing Profile Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/billing/profile\n@desc Update Billing Email\n@required {account_id: str}\n@optional {billing_email: str, preferred_locale: str, secondary_billing_email: str}\n@returns(200) Update Billing Email response\n@errors {4XX: Update Billing Email response failure}\n\n@endpoint POST /accounts/{account_id}/billing/profile\n@desc Create Billing Profile\n@required {account_id: str}\n@optional {address: str # Street address line 1., address2: str # Street address line 2 (apt, suite, etc.)., billing_email: str # Primary billing email address., buying_rate_plan: str # Rate plan being purchased right after profile setup., captcha_challenge_jwt: str # Captcha challenge JWT issued during onboarding., cf_turnstile_response: str # Cloudflare Turnstile response., city: str # City on the billing profile., company: str # Company name on the billing profile., country: str # ISO 3166-1 alpha-2 country code., first_name: str # First name on the billing profile., h_captcha_response: str # hCaptcha response., last_name: str # Last name on the billing profile., preferred_locale: str # Preferred locale for invoice rendering (BCP 47)., secondary_billing_email: str # Secondary billing email address for CC on invoices., state: str # State or region on the billing profile., tax_id_type: str # Type of tax ID provided., telephone: str # Contact phone number., vat: str # VAT identifier., zipcode: str # ZIP or postal code.}\n@returns(200) Create Billing Profile response\n@errors {4XX: Create Billing Profile response failure}\n\n@endpoint PUT /accounts/{account_id}/billing/profile\n@desc Update Billing Profile\n@required {account_id: str}\n@optional {address: str # Street address line 1., address2: str # Street address line 2 (apt, suite, etc.)., billing_email: str # Primary billing email address., buying_rate_plan: str # Rate plan being purchased right after profile setup., captcha_challenge_jwt: str # Captcha challenge JWT issued during onboarding., cf_turnstile_response: str # Cloudflare Turnstile response., city: str # City on the billing profile., company: str # Company name on the billing profile., country: str # ISO 3166-1 alpha-2 country code., first_name: str # First name on the billing profile., h_captcha_response: str # hCaptcha response., last_name: str # Last name on the billing profile., preferred_locale: str # Preferred locale for invoice rendering (BCP 47)., secondary_billing_email: str # Secondary billing email address for CC on invoices., state: str # State or region on the billing profile., tax_id_type: str # Type of tax ID provided., telephone: str # Contact phone number., vat: str # VAT identifier., zipcode: str # ZIP or postal code.}\n@returns(200) Update Billing Profile response\n@errors {4XX: Update Billing Profile response failure}\n\n@endpoint POST /accounts/{account_id}/billing/profile/payment-method\n@desc Create Payment Intent for Billing Profile\n@required {account_id: str}\n@returns(200) Create Payment Intent response\n@errors {4XX: Create Payment Intent response failure}\n\n@endpoint GET /accounts/{account_id}/billing/unpaid-invoice\n@desc Get Unpaid Invoices\n@required {account_id: str}\n@returns(200) Get Unpaid Invoices response\n@errors {4XX: Get Unpaid Invoices response failure}\n\n@endpoint GET /accounts/{account_id}/billing/usage\n@desc Get account billing usage\n@required {account_id: str # Standard Cloudflare hex account identifier. The API gateway translates this to an internal numeric ID before forwarding to the backend service.}\n@optional {metrics: str # Comma-separated list of metrics to include in the response. Available metrics depend on the endpoint. Billing usage supports: streamMinutesViewed, rateLimitingRequestsAllowed, loadBalancingQueries, argoAcceleratedBytes, workersRequests, workersKVReads, imageResizingRequests, spectrumBytesTransferred, mediaUniqueTransformations. Stream/media usage supports: streamMinutesViewed., since: str(date-time) # Start of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to 6 hours before the current time., until: str(date-time) # End of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to the current time., time_delta: str(hour/day/week/month/quarter/year)=hour # Time unit to aggregate usage observations into. Data retention is approximately 18 months. The effective number of data points returned depends on the time range and granularity selected. For example, requesting hourly granularity over 18 months could produce up to ~13,000 data points; use the limit parameter to cap results and be aware that responses may be truncated., limit: int=100 # Maximum number of data points to return. The actual number of results depends on the interaction between the time range (since/until) and time_delta granularity. Results are truncated to this limit without error if the time range produces more data points than the limit allows., filters: str # Filter expressions to apply to the query. Format: field==value. Multiple filters can be combined.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Usage analytics response.\n@errors {400: Bad request - invalid parameters or query., 401: Authentication required., 403: Insufficient permissions to access this resource.}\n\n@endpoint GET /accounts/{account_id}/botnet_feed/asn/{asn_id}/day_report\n@desc Get daily report\n@required {account_id: str, asn_id: int}\n@optional {date: str(date-time)}\n@returns(200) Get botnet feed report for day\n@errors {4XX: Get botnet feed report for day response failure}\n\n@endpoint GET /accounts/{account_id}/botnet_feed/asn/{asn_id}/full_report\n@desc Get full report\n@required {account_id: str, asn_id: int}\n@returns(200) Get full botnet feed report\n@errors {4XX: Get full botnet feed report response failure}\n\n@endpoint GET /accounts/{account_id}/botnet_feed/configs/asn\n@desc Get list of ASNs\n@required {account_id: str}\n@returns(200) Get list of ASNs response\n@errors {4XX: Get list of ASNs response failure}\n\n@endpoint DELETE /accounts/{account_id}/botnet_feed/configs/asn/{asn_id}\n@desc Delete an ASN\n@required {account_id: str, asn_id: int}\n@returns(200) Delete ASN response\n@errors {4XX: Delete ASN response failure}\n\n@endpoint GET /accounts/{account_id}/brand-protection/alerts\n@desc Read all alerts on submitted domains\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/alerts\n@desc Update alerts on submitted domains by ID\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/alerts/clear\n@desc Update verification statuses of tracked URLs to awaiting by ID\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/alerts/refute\n@desc Update verification statuses of tracked URLs to disproven by ID\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/alerts/verify\n@desc Update verification statuses of tracked URLs to confirmed by ID\n\n@endpoint DELETE /accounts/{account_id}/brand-protection/brands\n@desc Delete brands by ID\n\n@endpoint GET /accounts/{account_id}/brand-protection/brands\n@desc Read all brands\n\n@endpoint POST /accounts/{account_id}/brand-protection/brands\n@desc Create new brands\n\n@endpoint DELETE /accounts/{account_id}/brand-protection/brands/patterns\n@desc Delete patterns for brands by ID\n\n@endpoint GET /accounts/{account_id}/brand-protection/brands/patterns\n@desc Read patterns for brands by ID\n\n@endpoint POST /accounts/{account_id}/brand-protection/brands/patterns\n@desc Create new patterns for brands by ID\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/clear\n@desc Update verification statuses of submitted URLs to awaiting by ID\n\n@endpoint GET /accounts/{account_id}/brand-protection/domain-info\n@desc Read submitted domains by ID\n\n@endpoint GET /accounts/{account_id}/brand-protection/logo-matches\n@desc Read matches for logo queries by ID\n@optional {logo_id: [str], offset: str, limit: str}\n@returns(200) {matches: [map], total: int} # OK\n@errors {422: Unprocessable Content}\n\n@endpoint GET /accounts/{account_id}/brand-protection/logo-matches/download\n@desc Download matches for logo queries by ID\n@optional {logo_id: [str], offset: str, limit: str}\n@returns(200) {matches: [map], total: int} # OK\n@errors {422: Unprocessable Content}\n\n@endpoint GET /accounts/{account_id}/brand-protection/logos\n@desc Read all saved logo queries\n\n@endpoint POST /accounts/{account_id}/brand-protection/logos\n@desc Create new saved logo queries from image files\n@optional {tag: str, match_type: str, threshold: num}\n@returns(201) {id: int, tag: str, upload_path: str} # Created\n@errors {422: Unprocessable Content}\n\n@endpoint DELETE /accounts/{account_id}/brand-protection/logos/{logo_id}\n@desc Delete saved logo queries by ID\n@returns(204) No Content\n\n@endpoint GET /accounts/{account_id}/brand-protection/logos/{logo_id}\n@desc Read saved logo queries by ID\n\n@endpoint GET /accounts/{account_id}/brand-protection/matches\n@desc Read matches for string queries by ID\n@optional {id: str, offset: int, limit: int, include_domain_id: bool, include_dismissed: bool}\n@returns(200) {matches: [map], total: int} # OK\n@errors {422: Unprocessable Content}\n\n@endpoint GET /accounts/{account_id}/brand-protection/matches/download\n@desc Download matches for string queries by ID\n@optional {id: str, offset: int, limit: int, include_domain_id: bool, include_dismissed: bool}\n@returns(200) {matches: [map], total: int} # OK\n@errors {422: Unprocessable Content}\n\n@endpoint DELETE /accounts/{account_id}/brand-protection/queries\n@desc Delete saved string queries by ID\n@optional {id: str, tag: str, scan: bool}\n@returns(204) No Content\n@errors {422: Unprocessable Content}\n\n@endpoint GET /accounts/{account_id}/brand-protection/queries\n@desc Read string queries by ID\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/queries\n@desc Update saved string queries by ID\n@optional {id: int # The query ID to update (required when updating tag or scan), scan: bool # Whether to scan matches, string_matches: [map{max_edit_distance: num, pattern!: str}] # Updated pattern match constraints. When provided, replaces the existing string_matches., tag: str # Query tag. Required as identifier when updating string_matches.}\n\n@endpoint POST /accounts/{account_id}/brand-protection/queries\n@desc Create new saved string queries\n@optional {id: str, tag: str, scan: bool, max_time: str(date-time), min_time: str(date-time), scan: bool, string_matches: any, tag: str}\n@returns(204) No Content\n@errors {422: Unprocessable Content}\n\n@endpoint POST /accounts/{account_id}/brand-protection/queries/bulk\n@desc Create new saved string queries in bulk\n@optional {queries: [map]}\n@returns(204) No Content\n@errors {422: Unprocessable Content}\n\n@endpoint POST /accounts/{account_id}/brand-protection/queries/{query_id}/matches/{domain_id}/dismiss\n@desc Dismiss a match for a saved string query\n\n@endpoint POST /accounts/{account_id}/brand-protection/queries/{query_id}/matches/{domain_id}/undismiss\n@desc Undismiss a match for a saved string query\n\n@endpoint GET /accounts/{account_id}/brand-protection/recent-submissions\n@desc Read recent URL submissions\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/refute\n@desc Update verification statuses of submitted URLs to disproven by ID\n\n@endpoint POST /accounts/{account_id}/brand-protection/scan-logo\n@desc Create new logo queries from image files\n\n@endpoint POST /accounts/{account_id}/brand-protection/scan-page\n@desc Create new logo queries from URLs\n\n@endpoint POST /accounts/{account_id}/brand-protection/search\n@desc Create new string queries\n\n@endpoint GET /accounts/{account_id}/brand-protection/submission-info\n@desc Read URL submissions by ID\n\n@endpoint POST /accounts/{account_id}/brand-protection/submit\n@desc Create new URL submissions\n@returns(201) {skipped_urls: [map], submitted_urls: [map]} # Created\n\n@endpoint GET /accounts/{account_id}/brand-protection/total-queries\n@desc Read the total number of saved string queries\n\n@endpoint GET /accounts/{account_id}/brand-protection/tracked-domains\n@desc Read submitted domains by pattern\n\n@endpoint GET /accounts/{account_id}/brand-protection/url-info\n@desc Read submitted URLs by ID\n@returns(200) {result: [map]} # OK\n\n@endpoint PATCH /accounts/{account_id}/brand-protection/verify\n@desc Update verification statuses of submitted URLs to confirmed by ID\n\n@endpoint DELETE /accounts/{account_id}/browser-extension/config\n@desc Delete browser extension configuration\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Browser extension configuration deleted.\n@errors {400: Invalid request body or account ID., 401: Authentication failed., 403: The authenticated user is not authorized to access this account, the Browser Extension service is not enabled for this account, or service availability could not be verified for this account., 404: Resource not found., 500: Internal server error., 503: Browser Extension service availability could not be verified.}\n\n@endpoint GET /accounts/{account_id}/browser-extension/config\n@desc Get browser extension configuration\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Browser extension configuration response.\n@errors {401: Authentication failed., 403: The authenticated user is not authorized to access this account, the Browser Extension service is not enabled for this account, or service availability could not be verified for this account., 404: Resource not found., 500: Internal server error., 503: Browser Extension service availability could not be verified.}\n\n@endpoint POST /accounts/{account_id}/browser-extension/config\n@desc Create browser extension configuration\n@required {config: map{min_extension_version: str, team_name!: str}}\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Browser extension configuration created.\n@errors {400: Invalid request body or account ID., 401: Authentication failed., 403: The authenticated user is not authorized to access this account, the Browser Extension service is not enabled for this account, or service availability could not be verified for this account., 409: Configuration already exists for this account., 500: Internal server error., 503: Browser Extension service availability could not be verified.}\n\n@endpoint PUT /accounts/{account_id}/browser-extension/config\n@desc Update browser extension configuration\n@required {config: map{min_extension_version: str, team_name!: str}}\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Browser extension configuration updated.\n@errors {400: Invalid request body or account ID., 401: Authentication failed., 403: The authenticated user is not authorized to access this account, the Browser Extension service is not enabled for this account, or service availability could not be verified for this account., 404: Resource not found., 500: Internal server error., 503: Browser Extension service availability could not be verified.}\n\n@endpoint GET /accounts/{account_id}/browser-extension/config/inventories\n@desc List browser extension inventories\n@optional {cursor: str # Opaque cursor from a previous response to fetch the next page., per_page: int=50 # Number of results per page (default 50, max 200).}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{cursor: str?, per_page: int}, success: bool} # Browser extension inventories response.\n@errors {401: Authentication failed., 403: The authenticated user is not authorized to access this account, the Browser Extension service is not enabled for this account, or service availability could not be verified for this account., 500: Internal server error., 503: Browser Extension service availability could not be verified.}\n\n@endpoint GET /accounts/{account_id}/browser-extension/config/inventories/{registration_id}\n@desc Get a single browser extension inventory\n@returns(200) {errors: [map], messages: [map], result: map{account_id: str, created_at: str(date-time), installed_extensions: [map], observed_at: str(date-time), physical_device_id: str?, registration_id: str, updated_at: str(date-time)}, success: bool} # Browser extension inventory response.\n@errors {401: Authentication failed., 403: The authenticated user is not authorized to access this account, the Browser Extension service is not enabled for this account, or service availability could not be verified for this account., 404: Resource not found., 500: Internal server error., 503: Browser Extension service availability could not be verified.}\n\n@endpoint POST /accounts/{account_id}/browser-extension/config/logs/extension-events/search\n@desc Search browser extension event logs\n@required {from: str(date-time), to: str(date-time)}\n@optional {fields: [str], filters: [map{field!: str, op!: str, value!: any}], includeTotal: bool=false, limit: int=50, page: int=1}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Browser extension event log search response.\n@errors {400: Invalid request body or account ID., 401: Authentication failed., 403: The authenticated user is not authorized to access this account, the Browser Extension service is not enabled for this account, or service availability could not be verified for this account., 413: Invalid request body or account ID., 500: Internal server error., 502: Internal server error., 503: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/accessibilityTree\n@desc Get accessibility tree page\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., interestingOnly: bool, rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., root: str, setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], meta: map{finalUrl: str, headers: map, redirectChain: [map], status: num, title: str}, result: map{accessibilityTree: any}, success: bool} # Returns the requested formats information.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/content\n@desc Get HTML content.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], meta: map{finalUrl: str, headers: map, redirectChain: [map], status: num, title: str}, result: str, success: bool} # Returns the page's content.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/crawl\n@desc Crawl websites.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable.}\n@returns(200) {errors: [map], result: str, success: bool} # Returns the ID for the started crawl job.\n@errors {400: The request contains errors or didn't properly encode content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint DELETE /accounts/{account_id}/browser-rendering/crawl/{job_id}\n@desc Cancel a crawl job.\n@required {account_id: str # Account ID., job_id: str # The ID of the crawl job to cancel.}\n@returns(200) {errors: [map], result: map{job_id: str, message: str}, success: bool} # Crawl job cancelled successfully.\n@errors {400: Job is already in final status and cannot be cancelled., 404: Crawl job not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/crawl/{job_id}\n@desc Get crawl result.\n@required {account_id: str # Account ID., job_id: str # Crawl job ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., status: str(queued/errored/completed/disallowed/skipped/cancelled) # Filter by URL status., cursor: num=0 # Cursor for pagination., limit: num=50 # Limit for pagination.}\n@returns(200) {errors: [map], result: map{browserSecondsUsed: num, cursor: str, finished: num, id: str, records: [map], skipped: num, status: str, total: num}, success: bool} # Returns the result of a crawl job.\n@errors {400: The request contains errors or didn't properly encode content., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser\n@desc Acquire and connect to browser session.\n@required {account_id: str # Account ID.}\n@optional {keep_alive: num=60000 # Keep-alive time in ms (only valid when acquiring new session)., lab: bool=false # Use experimental browser., recording: bool=false, cf-brapi-guardrails: str # Optional base64url-encoded JSON session guardrails (allowedDomains and allowedDomainSets)}\n@errors {101: WebSocket connection established successfully., 400: Bad request., 429: Request failed due to rate limiting., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/devtools/browser\n@desc Get a browser session ID.\n@required {account_id: str # Account ID.}\n@optional {keep_alive: num=60000 # Keep-alive time in milliseconds., lab: bool=false # Use experimental browser., targets: bool=false # Include browser targets in response., liveViewUrlExpiresInMs: num=300000 # How long the live view URL remains valid, in milliseconds (max 60 minutes). Only used when targets is true., recording: bool=false, guardrails: map{allowedDomainSets: [str], allowedDomains: [str]}}\n@returns(200) {sessionId: str, webSocketDebuggerUrl: str} # Returns a session ID ready to be connected to.\n@errors {429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request.}\n\n@endpoint DELETE /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}\n@desc Close browser session.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID to close.}\n@returns(200) {status: str} # Browser session closing or already closed.\n@errors {404: Browser session not found.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}\n@desc Connect to browser session.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID to connect to.}\n@optional {keep_alive: num=60000 # Keep-alive time in ms (only valid when acquiring new session)., lab: bool=false # Use experimental browser., recording: bool=false, cf-brapi-guardrails: str # Optional base64url-encoded JSON connection guardrails (mode)}\n@errors {101: WebSocket connection established successfully., 400: Bad request., 429: Request failed due to rate limiting., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json\n@desc List targets.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID.}\n@optional {liveViewUrlExpiresInMs: num=300000 # How long the live view URLs remain valid, in milliseconds (max 60 minutes)}\n@returns(200) List of targets.\n@errors {400: Bad request., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/activate/{target_id}\n@desc Activate a browser target.\n@required {session_id: str(uuid) # Browser session ID., account_id: str # Account ID., target_id: str # Target ID to activate.}\n@returns(200) {message: str} # Target activated successfully.\n@errors {400: Bad request., 404: Target not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/close/{target_id}\n@desc Close a browser target.\n@required {session_id: str(uuid) # Browser session ID., account_id: str # Account ID., target_id: str # Target ID to close.}\n@returns(200) {message: str} # Target is closing.\n@errors {400: Bad request., 404: Target not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/list\n@desc List targets.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID.}\n@optional {liveViewUrlExpiresInMs: num=300000 # How long the live view URLs remain valid, in milliseconds (max 60 minutes)}\n@returns(200) List of targets.\n@errors {400: Bad request., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/list/{target_id}\n@desc Get a target by ID.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID., target_id: str # Target ID.}\n@returns(200) {description: str, devtoolsFrontendUrl: str, id: str, title: str, type: str, url: str, webSocketDebuggerUrl: str} # The target with the given ID.\n@errors {400: Bad request., 404: Target not found., 500: Internal server error.}\n\n@endpoint PUT /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/new\n@desc Open a new browser tab.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID.}\n@optional {url: str(uri), liveViewUrlExpiresInMs: num=300000 # How long the live view URL remains valid, in milliseconds (max 60 minutes)}\n@returns(200) {description: str, devtoolsFrontendUrl: str, id: str, title: str, type: str, url: str, webSocketDebuggerUrl: str} # Information about the newly created tab.\n@errors {400: Bad request., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/protocol\n@desc Get Chrome DevTools Protocol schema.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID.}\n@returns(200) {domains: [map], version: map{major: str, minor: str}} # Chrome DevTools Protocol schema.\n@errors {400: Bad request., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/version\n@desc Get browser version metadata.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID.}\n@returns(200) {Browser: str, Protocol-Version: str, User-Agent: str, V8-Version: str, WebKit-Version: str, webSocketDebuggerUrl: str} # Browser version information.\n@errors {400: Bad request., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/live_view\n@desc Mint live view URLs for a browser session\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID}\n@optional {expiresInMs: num=300000 # How long the live view URLs remain valid, in milliseconds. Default: 5 minutes. Max: 60 minutes., guardrails: map{mode!: str} # Connection guardrails. Use `{ mode: 'readonly' }` to generate a view-only link., mode: str(devtools/tab/full)=devtools # UI mode: 'devtools' (Chrome DevTools), 'tab' (single tab view), 'full' (multi-tab browser), targetId: str # Target ID (page) to connect to. If omitted, auto-resolves to the first active page.}\n@returns(200) {devtoolsFrontendUrl: str(uri), id: str, options: map{guardrails: map{mode: str}, mode: str}, webSocketDebuggerUrl: str(uri)} # Live view URLs generated successfully\n@errors {400: Bad request - invalid parameters, 404: Browser session or target not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/page/{target_id}\n@desc Connect to a specific Chrome DevTools page.\n@required {account_id: str # Account ID., session_id: str(uuid) # Browser session ID., target_id: str # Target ID, e.g. page ID.}\n@optional {cf-brapi-guardrails: str # Optional base64url-encoded JSON connection guardrails (mode)}\n@errors {101: WebSocket connection established successfully., 400: Bad request., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/session\n@desc List sessions.\n@required {account_id: str # Account ID.}\n@optional {limit: num=200, offset: num=0}\n@returns(200) Returns the account's sessions.\n@errors {400: Bad request., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/browser-rendering/devtools/session/{session_id}\n@desc Get session details.\n@required {account_id: str # Account ID., session_id: str(uuid) # Session ID.}\n@returns(200) {closeReason: num, closeReasonText: str, connectionEndTime: num, connectionId: str, connectionStartTime: num, devtoolsFrontendUrl: str, endTime: num, lastUpdated: num, sessionId: str(uuid), startTime: num, webSocketDebuggerUrl: str} # Returns the session details.\n@errors {404: Session not found.}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/json\n@desc Get json.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., custom_ai: [map{authorization: str, model!: str}] # Optional list of custom AI models to use for the request. The models will be tried in the order provided, and in case a model returns an error, the next one will be used as fallback., emulateMediaType: str, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., prompt: str, rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., response_format: map{json_schema: map, type!: str}, setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], meta: map{finalUrl: str, headers: map, redirectChain: [map], status: num, title: str}, result: map, success: bool} # Returns the JSON based on a user prompt or JSON schema.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/links\n@desc Get Links.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, excludeExternalLinks: bool=false, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., visibleLinksOnly: bool=false, waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], meta: map{finalUrl: str, headers: map, redirectChain: [map], status: num, title: str}, result: [str], success: bool} # Returns the links.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/markdown\n@desc Get markdown.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], meta: map{finalUrl: str, headers: map, redirectChain: [map], status: num, title: str}, result: str, success: bool} # Returns the page markdown.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/pdf\n@desc Get PDF.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., pdfOptions: map{displayHeaderFooter: bool, footerTemplate: str, format: str, headerTemplate: str, height: any, landscape: bool, margin: map, omitBackground: bool, outline: bool, pageRanges: str, preferCSSPageSize: bool, printBackground: bool, scale: num, tagged: bool, timeout: num, width: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.pdfoptions)., rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) Returns the PDF.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/scrape\n@desc Scrape elements.\n@required {account_id: str # Account ID., elements: [map{selector!: str}]}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], meta: map{finalUrl: str, headers: map, redirectChain: [map], status: num, title: str}, result: [map], success: bool} # Returns the scraped elements.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"elements\":[{\"selector\":\"h1\"}],\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/screenshot\n@desc Get screenshot.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., screenshotOptions: map{captureBeyondViewport: bool, clip: map, encoding: any, fromSurface: bool, fullPage: bool, omitBackground: bool, optimizeForSpeed: bool, quality: num, type: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.screenshotoptions)., scrollPage: bool, selector: str, setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], success: bool} # Returns the screenshot.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"url\":\"https://www.example.com/\"}\n\n@endpoint POST /accounts/{account_id}/browser-rendering/snapshot\n@desc Get HTML content and screenshot.\n@required {account_id: str # Account ID.}\n@optional {cacheTTL: num=5 # Cache TTL default is 5s. Set to 0 to disable., actionTimeout: num # The maximum duration allowed for the browser action to complete after the page has loaded (such as taking screenshots, extracting content, or generating PDFs). If this time limit is exceeded, the action stops and returns a timeout error., addScriptTag: [map{content: str, id: str, type: str, url: str(uri)}] # Adds a script element into the page with the desired URL or content., addStyleTag: [map{content: str, url: str(uri)}] # Adds a `` tag into the page with the desired URL or a `` tag with the content., allowRequestPattern: [str] # Only allow requests that match the provided regex patterns, eg. '/^.*\\.(css)'. Reject rules are applied first., allowResourceTypes: [any] # Only allow requests that match the provided resource types, eg. 'image' or 'script'. Reject rules are applied first., authenticate: map{password!: str, username!: str} # Provide credentials for HTTP authentication., bestAttempt: bool # Attempt to proceed when 'awaited' events fail or timeout., cookies: [map{domain: str, expires: num, httpOnly: bool, name!: str, partitionKey: str, path: str, priority: any, sameParty: bool, sameSite: any, secure: bool, sourcePort: num, sourceScheme: any, url: str, value!: str}] # Check [options](https://pptr.dev/api/puppeteer.page.setcookie)., emulateMediaType: str, formats: [str]=content,screenshot, gotoOptions: map{referer: str, referrerPolicy: str, timeout: num, waitUntil: any}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.gotooptions)., html: str # Set the content of the page, eg: `Hello World!!`. Either `html` or `url` must be set., rejectRequestPattern: [str] # Block undesired requests that match the provided regex patterns, eg. '/^.*\\.(css)'., rejectResourceTypes: [any] # Block undesired requests that match the provided resource types, eg. 'image' or 'script'., screenshotOptions: map{captureBeyondViewport: bool, clip: map, fromSurface: bool, fullPage: bool, omitBackground: bool, optimizeForSpeed: bool, quality: num, type: any}=[object Object], setExtraHTTPHeaders: map, setJavaScriptEnabled: bool, url: str(uri) # URL to navigate to, eg. `https://example.com`., userAgent: str=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36, viewport: map{deviceScaleFactor: num, hasTouch: bool, height!: num, isLandscape: bool, isMobile: bool, width!: num}=[object Object] # Check [options](https://pptr.dev/api/puppeteer.page.setviewport)., waitForSelector: map{hidden: bool, selector!: str, timeout: num, visible: bool} # Wait for the selector to appear in page. Check [options](https://pptr.dev/api/puppeteer.page.waitforselector)., waitForTimeout: num # Waits for a specified timeout before continuing.}\n@returns(200) {errors: [map], meta: map{finalUrl: str, headers: map, redirectChain: [map], status: num, title: str}, result: map{accessibilityTree: map{autocomplete: str, checked: any, children: [map], description: str, disabled: bool, expanded: bool, focused: bool, haspopup: str, invalid: str, keyshortcuts: str, level: num, modal: bool, multiline: bool, multiselectable: bool, name: str, orientation: str, pressed: any, readonly: bool, required: bool, role: str, roledescription: str, selected: bool, value: any, valuemax: num, valuemin: num, valuetext: str}, content: str, markdown: str, screenshot: str}, success: bool} # Returns the requested formats information.\n@errors {400: The request contains errors or didn't properly encode content., 422: Request failed due to site-related issues such as timeouts, SSL errors, or inaccessible content., 429: Request failed due to rate limiting. The Retry-After header indicates when the client should retry the request., 500: Internal server error.}\n@example_request {\"formats\":[\"content\",\"screenshot\"],\"url\":\"https://www.example.com/\"}\n\n@endpoint GET /accounts/{account_id}/builds/account/limits\n@desc Get build-minute availability\n@required {account_id: str}\n@returns(200) Account limits retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint GET /accounts/{account_id}/builds/builds\n@desc Get builds by Worker version\n@required {account_id: str, version_ids: str}\n@returns(200) Builds retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint GET /accounts/{account_id}/builds/builds/latest\n@desc Get latest builds by script IDs\n@required {account_id: str, external_script_ids: str}\n@returns(200) Latest builds retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint GET /accounts/{account_id}/builds/builds/{build_uuid}\n@desc Get a Workers build\n@required {account_id: str, build_uuid: str(uuid)}\n@returns(200) Build retrieved successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint PUT /accounts/{account_id}/builds/builds/{build_uuid}/cancel\n@desc Cancel a Workers build\n@required {account_id: str, build_uuid: str(uuid)}\n@returns(200) Build canceled successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint GET /accounts/{account_id}/builds/builds/{build_uuid}/logs\n@desc Get Workers build logs\n@required {account_id: str, build_uuid: str(uuid)}\n@optional {cursor: str}\n@returns(200) Build logs retrieved successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint PUT /accounts/{account_id}/builds/repos/connections\n@desc Create or update a repository connection\n@required {account_id: str, provider_account_id: str # Provider-specific identifier of the account or namespace that owns the repository., provider_account_name: str # Human-readable name of the account or namespace that owns the repository., provider_type: str(github/gitlab/gitlab_internal/origin) # Source control provider., repo_id: str # Provider-specific repository identifier., repo_name: str # Human-readable repository name.}\n@returns(200) Repository connection upserted successfully\n@errors {401: Authentication required}\n\n@endpoint DELETE /accounts/{account_id}/builds/repos/connections/{repo_connection_uuid}\n@desc Delete a repository connection\n@required {account_id: str, repo_connection_uuid: str(uuid)}\n@returns(200) {errors: [map], messages: [str], result: map?, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # Operation successful\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint GET /accounts/{account_id}/builds/repos/{provider_type}/{provider_account_id}/{repo_id}/config_autofill\n@desc Get repository configuration autofill\n@required {account_id: str, provider_type: str # SCM provider type, provider_account_id: str, repo_id: str, branch: str}\n@optional {root_directory: str}\n@returns(200) Configuration autofill data retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint GET /accounts/{account_id}/builds/tokens\n@desc List build tokens\n@required {account_id: str}\n@optional {page: int=1 # Page number for pagination, per_page: int=50 # Number of items per page}\n@returns(200) Build tokens retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint POST /accounts/{account_id}/builds/tokens\n@desc Create build token\n@required {account_id: str, build_token_name: str, build_token_secret: str, cloudflare_token_id: str}\n@returns(200) Build token created successfully\n@errors {401: Authentication required}\n\n@endpoint DELETE /accounts/{account_id}/builds/tokens/{build_token_uuid}\n@desc Delete a build token\n@required {account_id: str, build_token_uuid: str(uuid)}\n@returns(200) {errors: [map], messages: [str], result: map?, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # Operation successful\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint POST /accounts/{account_id}/builds/triggers\n@desc Create a build trigger\n@required {account_id: str, branch_excludes: [str] # Branch patterns that must not start builds., branch_includes: [str] # Branch patterns that can start builds., build_command: str # Command to build the Worker., build_token_uuid: str(uuid) # UUID of the build token used when deploying the Worker., deploy_command: str # Command to deploy the Worker., external_script_id: str # System-generated tag of the Worker. This is not the Worker name., path_excludes: [str] # Path patterns that must not start builds., path_includes: [str]=* # Path patterns that can start builds., repo_connection_uuid: str(uuid) # Repository connection UUID., root_directory: str # Repository directory in which build and deploy commands run., trigger_name: str # Human-readable name of the build trigger.}\n@optional {build_caching_enabled: bool=false # Whether builds reuse cached dependencies and build artifacts.}\n@returns(200) Trigger created successfully\n@errors {401: Authentication required}\n\n@endpoint DELETE /accounts/{account_id}/builds/triggers/{trigger_uuid}\n@desc Delete a build trigger\n@required {account_id: str, trigger_uuid: str(uuid)}\n@returns(200) {errors: [map], messages: [str], result: map?, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # Operation successful\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint PATCH /accounts/{account_id}/builds/triggers/{trigger_uuid}\n@desc Update a build trigger\n@required {account_id: str, trigger_uuid: str(uuid)}\n@optional {branch_excludes: [str] # Branch patterns that must not start builds., branch_includes: [str] # Branch patterns that can start builds., build_caching_enabled: bool=false # Whether builds reuse cached dependencies and build artifacts., build_command: str # Command to build the Worker., build_token_uuid: str(uuid) # UUID of the build token used when deploying the Worker., deploy_command: str # Command to deploy the Worker., path_excludes: [str] # Path patterns that must not start builds., path_includes: [str]=* # Path patterns that can start builds., root_directory: str # Repository directory in which build and deploy commands run., trigger_name: str # Human-readable name of the build trigger.}\n@returns(200) Trigger updated successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint POST /accounts/{account_id}/builds/triggers/{trigger_uuid}/builds\n@desc Start a Workers build\n@required {account_id: str, trigger_uuid: str(uuid)}\n@optional {branch: any # Git branch name (required if commit_hash not provided), commit_hash: any # Git commit hash (required if branch not provided), seed_repo: any # Optional repository and file overrides used to seed this build.}\n@returns(200) Build created successfully\n@errors {401: Authentication required}\n\n@endpoint GET /accounts/{account_id}/builds/triggers/{trigger_uuid}/environment_variables\n@desc List build variables\n@required {account_id: str, trigger_uuid: str(uuid)}\n@returns(200) Environment variables retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint PATCH /accounts/{account_id}/builds/triggers/{trigger_uuid}/environment_variables\n@desc Set build variables\n@required {account_id: str, trigger_uuid: str(uuid)}\n@returns(200) Environment variables updated successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint DELETE /accounts/{account_id}/builds/triggers/{trigger_uuid}/environment_variables/{environment_variable_key}\n@desc Delete a build variable\n@required {account_id: str, trigger_uuid: str(uuid), environment_variable_key: str}\n@returns(200) {errors: [map], messages: [str], result: map?, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # Operation successful\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint POST /accounts/{account_id}/builds/triggers/{trigger_uuid}/purge_build_cache\n@desc Purge a trigger's build cache\n@required {account_id: str, trigger_uuid: str(uuid)}\n@returns(200) {errors: [map], messages: [str], result: map?, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # Operation successful\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint POST /accounts/{account_id}/builds/workers\n@desc Create Worker build configuration\n@required {account_id: str, git_repository: any, production_settings: map{build_caching_enabled: any, build_command!: str, build_token_uuid!: str(uuid), deploy_command!: str, environment_variables: map, path_excludes: [str], path_includes: [str], root_directory: any} # Build and deploy settings when creating a Worker build configuration, script_tag: str # System-generated tag of the Worker. This is not the Worker name.}\n@returns(201) Worker build configuration created successfully\n@errors {400: Invalid request, 401: Authentication required, 404: Resource not found, 409: Conflict - duplicate resource}\n@example_request {\"git_repository\":{\"branch\":\"main\",\"provider_account_id\":\"cloudflare\",\"provider_account_name\":\"Cloudflare\",\"provider_type\":\"github\",\"repo_id\":\"workers-sdk\",\"repo_name\":\"workers-sdk\"},\"production_settings\":{\"build_caching_enabled\":true,\"build_command\":\"npm run build\",\"build_token_uuid\":\"4b1e4d0f-6f2a-4c9d-9a3b-7c5e2f8a1d64\",\"deploy_command\":\"npx wrangler deploy\",\"environment_variables\":{},\"path_excludes\":[\"*.md\"],\"path_includes\":[\"*\"],\"root_directory\":\"/\"},\"script_tag\":\"my-worker\"}\n\n@endpoint GET /accounts/{account_id}/builds/workers/{external_script_id}/builds\n@desc List builds for a Worker\n@required {account_id: str, external_script_id: str}\n@optional {page: int=1 # Page number for pagination, per_page: int=50 # Number of items per page}\n@returns(200) Builds retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint GET /accounts/{account_id}/builds/workers/{external_script_id}/triggers\n@desc List triggers for a Worker\n@required {account_id: str, external_script_id: str}\n@returns(200) Triggers retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint GET /accounts/{account_id}/builds/workers/{script_name}/deploy_hooks\n@desc List deploy hooks\n@required {account_id: str, script_name: str # Human-readable name of the worker.}\n@returns(200) Deploy hooks retrieved successfully\n@errors {401: Authentication required}\n\n@endpoint POST /accounts/{account_id}/builds/workers/{script_name}/deploy_hooks\n@desc Create a deploy hook\n@required {account_id: str, script_name: str # Human-readable name of the worker., branch: str # Git branch name., deploy_hook_name: str # Deploy hook name (1-58 characters).}\n@returns(200) Deploy hook created successfully\n@errors {400: Invalid request, 401: Authentication required, 404: Resource not found, 409: Conflict - duplicate resource}\n\n@endpoint DELETE /accounts/{account_id}/builds/workers/{script_name}/deploy_hooks/{deploy_hook_uuid}\n@desc Delete a deploy hook\n@required {account_id: str, script_name: str # Human-readable name of the worker., deploy_hook_uuid: str(uuid) # Deploy hook UUID}\n@returns(200) Deploy hook deleted successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint GET /accounts/{account_id}/builds/workers/{script_name}/deploy_hooks/{deploy_hook_uuid}\n@desc Get a deploy hook\n@required {account_id: str, script_name: str # Human-readable name of the worker., deploy_hook_uuid: str(uuid) # Deploy hook UUID}\n@returns(200) Deploy hook retrieved successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint PUT /accounts/{account_id}/builds/workers/{script_name}/deploy_hooks/{deploy_hook_uuid}\n@desc Update a deploy hook\n@required {account_id: str, script_name: str # Human-readable name of the worker., deploy_hook_uuid: str(uuid) # Deploy hook UUID, branch: str # Git branch name., deploy_hook_name: str # Deploy hook name (1-58 characters).}\n@returns(200) Deploy hook updated successfully\n@errors {400: Invalid request, 401: Authentication required, 404: Resource not found, 409: Conflict - duplicate resource}\n\n@endpoint DELETE /accounts/{account_id}/builds/workers/{script_tag}\n@desc Delete Worker build configuration\n@required {account_id: str, script_tag: str # The Worker script tag (external script ID)}\n@returns(200) Worker build configuration deleted successfully.\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint GET /accounts/{account_id}/builds/workers/{script_tag}\n@desc Get Worker build configuration\n@required {account_id: str, script_tag: str # The Worker script tag (external script ID)}\n@returns(200) Worker build configuration retrieved successfully\n@errors {401: Authentication required, 404: Resource not found}\n\n@endpoint PATCH /accounts/{account_id}/builds/workers/{script_tag}\n@desc Update Worker build configuration\n@required {account_id: str, script_tag: str # The Worker script tag (external script ID)}\n@optional {git_repository: map{branch: str} # Git repository settings to update, production_settings: map{build_caching_enabled: bool, build_command: str, build_token_uuid: str(uuid), deploy_command: str, environment_variables: map, path_excludes: [str], path_includes: [str], root_directory: str} # Partial build settings for updating a Worker build configuration}\n@returns(200) Worker build configuration updated successfully\n@errors {400: Invalid request, 401: Authentication required, 404: Resource not found}\n@example_request {\"production_settings\":{\"build_command\":\"npm run build:production\",\"deploy_command\":\"npx wrangler deploy --env production\"}}\n\n@endpoint POST /accounts/{account_id}/bulk/subscriptions\n@desc Create Subscriptions\n@required {account_id: str}\n@optional {idemp_key: str, coupon_code: str, payment_hold_id: int(int64), subscriptions: [map{app: map, component_values: [map], currency: str, current_period_end: str(date-time), current_period_start: str(date-time), frequency: str, id: str, price: num, rate_plan: map, state: str, zone: map}], user_is_on_session: bool}\n@returns(200) Create Subscriptions response\n@errors {4XX: Create Subscriptions response failure}\n\n@endpoint GET /accounts/{account_id}/calls/apps\n@desc List apps\n@required {account_id: str}\n@returns(200) List apps response\n@errors {4XX: List apps response failure}\n\n@endpoint POST /accounts/{account_id}/calls/apps\n@desc Create a new app\n@required {account_id: str}\n@optional {name: str= # A short description of Calls app, not shown to end users.}\n@returns(201) Created a new app\n@errors {4XX: Create app response failure}\n\n@endpoint DELETE /accounts/{account_id}/calls/apps/{app_id}\n@desc Delete app\n@required {app_id: str, account_id: str}\n@returns(200) Delete app response\n@errors {4XX: Delete app response failure}\n\n@endpoint GET /accounts/{account_id}/calls/apps/{app_id}\n@desc Retrieve app details\n@required {app_id: str, account_id: str}\n@returns(200) Retrieve app details response\n@errors {4XX: Retrieve app details response failure}\n\n@endpoint PUT /accounts/{account_id}/calls/apps/{app_id}\n@desc Edit app details\n@required {app_id: str, account_id: str}\n@optional {name: str= # A short description of Calls app, not shown to end users.}\n@returns(200) Edit app details response\n@errors {4XX: Edit app details response failure}\n\n@endpoint GET /accounts/{account_id}/calls/turn_keys\n@desc List TURN Keys\n@required {account_id: str}\n@returns(200) List TURN key response\n@errors {4XX: List TURN key response failure}\n\n@endpoint POST /accounts/{account_id}/calls/turn_keys\n@desc Create a new TURN key\n@required {account_id: str}\n@optional {name: str= # A short description of a TURN key, not shown to end users.}\n@returns(201) Created a new TURN key\n@errors {4XX: Create TURN key response failure}\n\n@endpoint DELETE /accounts/{account_id}/calls/turn_keys/{key_id}\n@desc Delete TURN key\n@required {key_id: str, account_id: str}\n@returns(200) Delete TURN key response\n@errors {4XX: Delete TURN key response failure}\n\n@endpoint GET /accounts/{account_id}/calls/turn_keys/{key_id}\n@desc Retrieve TURN key details\n@required {key_id: str, account_id: str}\n@returns(200) Retrieve TURN key details response\n@errors {4XX: Retrieve TURN key details failure}\n\n@endpoint PUT /accounts/{account_id}/calls/turn_keys/{key_id}\n@desc Edit TURN key details\n@required {key_id: str, account_id: str}\n@optional {name: str= # A short description of a TURN key, not shown to end users.}\n@returns(200) Edit TURN key details response\n@errors {4XX: Edit TURN key details response failure}\n\n@endpoint GET /accounts/{account_id}/cfd_tunnel\n@desc List Cloudflare Tunnels\n@required {account_id: str}\n@optional {name: str, is_deleted: bool, existed_at: str(url-encoded-date-time), uuid: str(uuid), was_active_at: str(date-time), was_inactive_at: str(date-time), include_prefix: str, exclude_prefix: str, status: str, per_page: num, page: num}\n@returns(200) List Cloudflare Tunnels response\n@errors {4XX: List Cloudflare Tunnels response failure}\n\n@endpoint POST /accounts/{account_id}/cfd_tunnel\n@desc Create a Cloudflare Tunnel\n@required {account_id: str, name: str # A user-friendly name for a tunnel.}\n@optional {config_src: str(local/cloudflare)=local # Indicates if this is a locally or remotely configured tunnel. If `local`, manage the tunnel using a YAML file on the origin machine. If `cloudflare`, manage the tunnel on the Zero Trust dashboard., tunnel_secret: str # Sets the password required to run a locally-managed tunnel. Must be at least 32 bytes and encoded as a base64 string.}\n@returns(200) Create a Cloudflare Tunnel response\n@errors {4XX: Create a Cloudflare Tunnel response failure}\n\n@endpoint DELETE /accounts/{account_id}/cfd_tunnel/{tunnel_id}\n@desc Delete a Cloudflare Tunnel\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Delete a Cloudflare Tunnel response\n@errors {4XX: Delete a Cloudflare Tunnel response failure}\n\n@endpoint GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}\n@desc Get a Cloudflare Tunnel\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Get a Cloudflare Tunnel response\n@errors {4XX: Get a Cloudflare Tunnel response failure}\n\n@endpoint PATCH /accounts/{account_id}/cfd_tunnel/{tunnel_id}\n@desc Update a Cloudflare Tunnel\n@required {tunnel_id: str(uuid), account_id: str}\n@optional {name: str # A user-friendly name for a tunnel., tunnel_secret: str # Sets the password required to run a locally-managed tunnel. Must be at least 32 bytes and encoded as a base64 string.}\n@returns(200) Update a Cloudflare Tunnel response\n@errors {4XX: Update a Cloudflare Tunnel response failure}\n\n@endpoint GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}/configurations\n@desc Get Tunnel configuration\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Get configuration response\n@errors {4XX: Get configuration response failure}\n\n@endpoint PUT /accounts/{account_id}/cfd_tunnel/{tunnel_id}/configurations\n@desc Update Tunnel configuration\n@required {account_id: str, tunnel_id: str(uuid)}\n@optional {config: map{ingress: [map], originRequest: map, warp-routing: map} # The tunnel configuration and ingress rules.}\n@returns(200) Put configuration response\n@errors {4XX: Put configuration response failure}\n\n@endpoint DELETE /accounts/{account_id}/cfd_tunnel/{tunnel_id}/connections\n@desc Clean up Cloudflare Tunnel connections\n@required {account_id: str, tunnel_id: str(uuid)}\n@optional {client_id: str(uuid)}\n@returns(200) Clean up Cloudflare Tunnel connections response\n@errors {4XX: Clean up Cloudflare Tunnel connections response failure}\n\n@endpoint GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}/connections\n@desc List Cloudflare Tunnel connections\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) List Cloudflare Tunnel connections response\n@errors {4XX: List Cloudflare Tunnel connections response failure}\n\n@endpoint GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}/connectors/{connector_id}\n@desc Get Cloudflare Tunnel connector\n@required {account_id: str, tunnel_id: str(uuid), connector_id: str(uuid)}\n@returns(200) Get Cloudflare Tunnel connector response\n@errors {4XX: Get Cloudflare Tunnel connector response failure}\n\n@endpoint POST /accounts/{account_id}/cfd_tunnel/{tunnel_id}/management\n@desc Get a Cloudflare Tunnel management token\n@required {account_id: str, tunnel_id: str(uuid), resources: [str]}\n@returns(200) Get a Cloudflare Tunnel management token response\n@errors {4XX: Cloudflare API response failure}\n\n@endpoint GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}/token\n@desc Get a Cloudflare Tunnel token\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Get a Cloudflare Tunnel token response\n@errors {4XX: Get a Cloudflare Tunnel token response failure}\n\n@endpoint GET /accounts/{account_id}/challenges/widgets\n@desc List Turnstile Widgets\n@returns(200) List Turnstile Widgets\n@errors {4XX: List Turnstile Widgets Error}\n\n@endpoint POST /accounts/{account_id}/challenges/widgets\n@desc Create a Turnstile Widget\n@required {domains: [str], mode: str(non-interactive/invisible/managed) # Widget Mode, name: str # Human readable widget name. Not unique. Cloudflare suggests that you set this to a meaningful string to make it easier to identify your widget, and where it is used.}\n@optional {bot_fight_mode: bool # If bot_fight_mode is set to `true`, Cloudflare issues computationally expensive challenges in response to malicious bots (ENT only)., clearance_level: str(no_clearance/jschallenge/managed/interactive) # If Turnstile is embedded on a Cloudflare site and the widget should grant challenge clearance, this setting can determine the clearance level to be set, ephemeral_id: bool # Return the Ephemeral ID in /siteverify (ENT only)., offlabel: bool # Do not show any Cloudflare branding on the widget (ENT only)., region: str(world/china)=world # Region where this widget can be used. This cannot be changed after creation.}\n@returns(200) Create Turnstile Widget Response\n@errors {4XX: Create Turnstile Widget Response Error}\n\n@endpoint DELETE /accounts/{account_id}/challenges/widgets/{sitekey}\n@desc Delete a Turnstile Widget\n@returns(200) Delete Turnstile Widget Response\n@errors {4XX: Delete Turnstile Widget Response Error}\n\n@endpoint GET /accounts/{account_id}/challenges/widgets/{sitekey}\n@desc Turnstile Widget Details\n@returns(200) Turnstile Widget Details Response\n@errors {4XX: Turnstile Widget Details Response Error}\n\n@endpoint PUT /accounts/{account_id}/challenges/widgets/{sitekey}\n@desc Update a Turnstile Widget\n@required {domains: [str], mode: str(non-interactive/invisible/managed) # Widget Mode, name: str # Human readable widget name. Not unique. Cloudflare suggests that you set this to a meaningful string to make it easier to identify your widget, and where it is used.}\n@optional {bot_fight_mode: bool # If bot_fight_mode is set to `true`, Cloudflare issues computationally expensive challenges in response to malicious bots (ENT only)., clearance_level: str(no_clearance/jschallenge/managed/interactive) # If Turnstile is embedded on a Cloudflare site and the widget should grant challenge clearance, this setting can determine the clearance level to be set, ephemeral_id: bool # Return the Ephemeral ID in /siteverify (ENT only)., offlabel: bool # Do not show any Cloudflare branding on the widget (ENT only)., region: str(world/china)=world # Region where this widget can be used. This cannot be changed after creation.}\n@returns(200) Update Turnstile Widget Response\n@errors {4XX: Update Turnstile Widget Response Error}\n\n@endpoint POST /accounts/{account_id}/challenges/widgets/{sitekey}/rotate_secret\n@desc Rotate Secret for a Turnstile Widget\n@optional {invalidate_immediately: bool=false # If `invalidate_immediately` is set to `false`, the previous secret will remain valid for two hours. Otherwise, the secret is immediately invalidated, and requests using it will be rejected.}\n@returns(200) Rotate Secret Response\n@errors {4XX: Rotate Secret Response Error}\n\n@endpoint POST /accounts/{account_id}/client-secret\n@desc Create Setup Intent\n@required {account_id: str}\n@returns(200) Create Setup Intent response\n@errors {4XX: Create Setup Intent response failure}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/banner/{config_id}\n@desc Get the Latest Banner Grab Result\n@required {account_id: str # Defines the Account ID., config_id: str # Defines the Config ID.}\n@returns(200) {errors: [str], messages: [str], result: map{1.1.1.1: [map]}, success: bool} # Returns Current Banner Grab Result.\n@errors {4XX: Get the Latest Banner Grab Result failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/binary\n@desc Posts a file to Binary Storage\n@required {account_id: str # Account ID.}\n@returns(200) {content_type: str, md5: str, sha1: str, sha256: str} # Returns file information\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/binary/{hash}\n@desc Retrieves a file from Binary Storage\n@required {account_id: str # Account ID., hash: str # hash of the binary}\n@returns(200) Returns file information\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events\n@desc Filter and list events\n@required {account_id: str # Account ID.}\n@optional {cursor: str, search: [any]=, page: num, pageSize: num, orderBy: str, order: str(asc/desc), datasetId: [str], forceRefresh: bool, format: str(json/stix2/taxii), cache: str}\n@returns(200) Returns a list of events.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events\n@desc Filter and list events\n@required {account_id: str # Account ID.}\n@optional {forceRefresh: bool, format: str(json/stix2/taxii) # Output format for event data. 'json' returns the default format, 'stix2' returns STIX 2.1 Sighting SROs with linked Indicator SDOs, Observed Data SDOs, and SCOs, 'taxii' returns a TAXII 2.1 Envelope with Content-Type application/taxii+json;version=2.1., cache: str # Cache strategy. 'from-graph' serves results from the graph-node KV cache when all requested UUIDs are cached; falls back to normal path on partial/zero hit., cursor: str # Cursor for pagination. When provided, filters are embedded in the cursor so you only need to pass cursor and pageSize., datasetId: [str] # Dataset UUIDs to query, or one standalone scope value: 'all'/'*' for the legacy all-datasets behavior, 'analytics' for isAnalytics=true datasets, or 'operational' for isAnalytics=false datasets. If not provided, uses the default dataset., order: str(asc/desc), orderBy: str, page: num, pageSize: num, search: [any] # Structured search as a JSON array of {field, op, value} objects. Use the 'in' operator with an array value to bulk-check up to 100 values. Multiple conditions are AND'd together. Max 10 conditions per request.}\n@returns(200) Returns a list of events.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/aggregate\n@desc Aggregate events by single or multiple columns with optional date filtering\n@required {account_id: str # Account ID., aggregateBy: str # Column(s) to aggregate by - single column or comma-separated list (e.g., 'attacker', 'targetIndustry', 'attacker,targetIndustry')}\n@optional {datasetId: [str] # Dataset UUIDs to filter by, or one standalone scope value: 'all'/'*' for all accessible non-analytics event datasets (analytics datasets are silently excluded), 'analytics' for isAnalytics=true datasets, or 'operational' for isAnalytics=false datasets. If not provided, uses the default dataset., startDate: str # Start date for filtering (ISO 8601 format, e.g., '2024-01-01'), endDate: str # End date for filtering (ISO 8601 format, e.g., '2024-12-31'), groupByDate: bool # Whether to group results by date (daily aggregation), limit: num=100 # Maximum number of results to return}\n@returns(200) {aggregateBy: str, aggregations: [any], dateRange: map{endDate: str, startDate: str}, total: num} # Returns aggregated event data.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/attackers\n@desc Lists attackers across multiple datasets\n@required {account_id: str # Account ID.}\n@optional {datasetIds: [str] # Array of dataset IDs to query attackers from. If not provided, uses the default dataset.}\n@returns(200) {items: map{type: str}, type: str} # Returns a list of attackers.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/by-id/{event_id}/relationships\n@desc Filter and list events related to specific event\n@required {account_id: str # Account ID., event_id: str # Event UUID., datasetId: str # The dataset ID to search within.}\n@optional {direction: str(ancestors/descendants/both)=both # The direction to traverse the graph. Defaults to 'both' to search all., maxDepth: num # The maximum depth to traverse. Defaults to 5., relationshipTypes: any # An optional array of relationship types to filter by., indicatorTypeIds: [str] # An optional array of indicator type IDs to filter the results by., includeParent: bool=true # Whether to include the starting event in the results. Defaults to true., page: num, pageSize: num}\n@returns(200) Returns a list of events related to the specified starting event.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/categories\n@desc Lists categories across multiple datasets\n@required {account_id: str # Account ID.}\n@optional {datasetIds: [str] # Array of dataset IDs to query categories from. If not provided, uses the default dataset.}\n@returns(200) Returns a list of categories.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/categories/catalog\n@desc Lists categories\n@required {account_id: str # Account ID.}\n@returns(200) Returns a list of categories.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/categories/create\n@desc Creates a new category\n@required {account_id: str # Account ID., killChain: num, name: str}\n@optional {mitreAttack: [str], mitreCapec: [str], shortname: str}\n@returns(200) {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str, uuid: str} # Returns the created category.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/categories/{category_id}\n@desc Deletes a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@returns(200) {uuid: str} # Returns the uuid of the deleted category.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/categories/{category_id}\n@desc Reads a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@returns(200) {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str, uuid: str} # Returns a category.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/categories/{category_id}\n@desc Updates a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@optional {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str}\n@returns(200) {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str, uuid: str} # Returns the updated category.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/categories/{category_id}\n@desc Updates a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@optional {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str}\n@returns(200) {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str, uuid: str} # Returns the updated category.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/countries\n@desc Retrieves countries information for all countries\n@required {account_id: str # Account ID.}\n@returns(200) Returns the long and short country code for every country.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/create\n@desc Creates a new event\n@required {account_id: str # Account ID., category: str, date: str(date-time), event: str, raw: map{data!: map, source: str, tlp: str}, tlp: str}\n@optional {accountId: num, attacker: str, attackerCountry: str, datasetId: str, indicator: str, indicatorType: str, indicators: [map{indicatorType!: str, value!: str}] # Array of indicators for this event. Supports multiple indicators per event for complex scenarios., insight: str, source: map{resourceId!: str(uuid), resourceType!: str, system!: str} # Controlled provenance for an event and its indicators derived from a Threat Signals article., tags: [str], targetCountry: str, targetIndustry: str}\n@returns(200) {attacker: str, attackerCountry: str, attackerCountryAlpha3: str, category: str, datasetId: str, date: str, event: str, hasChildren: bool, indicator: str, indicatorType: str, indicatorTypeId: num, insight: str, killChain: num, mitreAttack: [str], mitreCapec: [str], numReferenced: num, numReferences: num, rawId: str, referenced: [str], referencedIds: [num], references: [str], referencesIds: [num], releasabilityId: str, tags: [str], targetCountry: str, targetCountryAlpha3: str, targetIndustry: str, tlp: str, uuid: str} # Returns the created event.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/create/bulk\n@desc Creates bulk events\n@required {account_id: str # Account ID., data: [map{accountId: num, attacker: str, attackerCountry: str, category!: str, datasetId: str, date!: str(date-time), event!: str, indicator: str, indicatorType: str, indicators: [map], insight: str, raw!: map, tags: [str], targetCountry: str, targetIndustry: str, tlp!: str}], datasetId: str}\n@optional {includeCreatedEvents: bool # When true, response includes array of created event UUIDs and shard IDs. Useful for tracking which events were created and where.}\n@returns(202) {createBulkEventsRequestId: str(uuid), createdEvents: [map], createdEventsCount: num, createdTagsCount: num, errorCount: num, errors: [map], queuedIndicatorsCount: num} # Accepted. Events created; indicators queued for async processing.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/create/bulk/relationships\n@desc Creates bulk DOS event with relationships and indicators\n@required {account_id: str # Account ID., data: [map{accountId: num, attacker: str, attackerCountry: str, category!: str, datasetId: str, date!: str(date-time), event!: str, indicator: str, indicatorType: str, indicators: [map], insight: str, raw!: map, tags: [str], targetCountry: str, targetIndustry: str, tlp!: str}], datasetId: str}\n@returns(200) {createdEventsCount: num, createdIndicatorsCount: num, createdRelationshipsCount: num, errorCount: num, errors: [map]} # Returns the number of created bulk events with relationships.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset\n@desc Lists all datasets in an account\n@required {account_id: str # Account ID.}\n@optional {includeDeleted: bool # When true, include soft-deleted datasets in the response. Each item includes a `deletedAt` field (ISO 8601 or null). Default: false.}\n@returns(200) Returns a list of dataset in an account.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/-/groups\n@desc List groups for an account\n@required {account_id: str # Account ID.}\n@returns(200) Returns the list of groups.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/-/groups\n@desc Create a group\n@required {account_id: str # Account ID., description: str, name: str}\n@returns(200) {createdAt: str(date-time), description: str, name: str, updatedAt: str(date-time), uuid: str} # Returns the created group.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/dataset/-/groups/{group_id}\n@desc Delete a group for an account\n@required {account_id: str # Account ID., group_id: str}\n@returns(200) {message: str, success: bool} # Group deleted successfully.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/-/groups/{group_id}\n@desc Read a group for an account\n@required {account_id: str # Account ID., group_id: str}\n@returns(200) {createdAt: str(date-time), description: str, members: [map], name: str, updatedAt: str(date-time), uuid: str} # Return the group.\n@errors {400: Bad Request.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/events/dataset/-/groups/{group_id}\n@desc Update a group\n@required {account_id: str # Account ID., group_id: str, description: str, name: str}\n@returns(200) {createdAt: str(date-time), description: str, name: str, updatedAt: str(date-time), uuid: str} # Returns the updated group.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/-/groups/{group_id}/members\n@desc List group members\n@required {account_id: str # Account ID., group_id: str}\n@returns(200) Returns the group members.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/-/groups/{group_id}/members\n@desc Create a group member\n@required {account_id: str # Account ID., group_id: str}\n@optional {accountId: str, accountTag: str}\n@returns(200) {accountId: str, accountTag: str, createdAt: str(date-time), updatedAt: str(date-time), uuid: str} # Returns the created group member.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/dataset/-/groups/{group_id}/members/{member_id}\n@desc Delete a group member\n@required {account_id: str # Account ID., group_id: str, member_id: str}\n@returns(200) {message: str, success: bool} # Returns the created group member.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/create\n@desc Creates a dataset\n@required {account_id: str # Account ID., isPublic: bool # If true, then anyone can search the dataset. If false, then its limited to the account., name: str # Used to describe the dataset within the account context.}\n@returns(200) {isAnalytics: bool, isPublic: bool, name: str, uuid: str} # Returns dataset information.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}\n@desc Delete a dataset\n@required {account_id: str # Account ID., dataset_id: str # Dataset ID to delete}\n@returns(200) {name: str, uuid: str} # Returns the uuid and name of the deleted dataset.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}\n@desc Reads a dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset ID.}\n@returns(200) {isAnalytics: bool, isPublic: bool, name: str, uuid: str} # Returns a dataset.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}\n@desc Updates an existing dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset ID., isPublic: bool # If true, then anyone can search the dataset. If false, then its limited to the account., name: str # Used to describe the dataset within the account context.}\n@returns(200) {isAnalytics: bool, isPublic: bool, name: str, uuid: str} # Returns dataset information.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}\n@desc Updates an existing dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset ID., isPublic: bool # If true, then anyone can search the dataset. If false, then its limited to the account., name: str # Used to describe the dataset within the account context.}\n@returns(200) {isAnalytics: bool, isPublic: bool, name: str, uuid: str} # Returns dataset information.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/copy\n@desc Copies specified events from one dataset to another dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., destDatasetId: str, eventIds: [str]}\n@optional {keepRawData: bool # If true, copies raw data to the destination dataset. Default is false (raw data is stripped/not copied).}\n@returns(200) {copied: num, indicatorsCopied: num, insertFailures: [map], relationshipsCopied: num} # Returns the number of copied events\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/events/{event_id}\n@desc Reads an event\n@required {account_id: str # Account ID., dataset_id: str # Dataset ID., event_id: str # Event UUID.}\n@returns(200) {attacker: str, attackerCountry: str, attackerCountryAlpha3: str, category: str, datasetId: str, date: str, event: str, hasChildren: bool, indicator: str, indicatorType: str, indicatorTypeId: num, insight: str, killChain: num, mitreAttack: [str], mitreCapec: [str], numReferenced: num, numReferences: num, rawId: str, referenced: [str], referencedIds: [num], references: [str], referencesIds: [num], releasabilityId: str, tags: [str], targetCountry: str, targetCountryAlpha3: str, targetIndustry: str, tlp: str, uuid: str} # Returns the event.\n@errors {404: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicatorTypes/create\n@desc Create a new indicator type\n@required {account_id: str # Account ID., dataset_id: str # Dataset ID., indicatorType: str # The indicator type to create (e.g., 'DOMAIN', 'IP', 'URL', 'HASH', 'EMAIL')}\n@optional {description: str # Optional description for the indicator type}\n@returns(200) {durableObjectId: str, indicatorType: str, message: str} # Indicator type created successfully\n@errors {400: Bad Request, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators\n@desc Lists indicators\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID.}\n@optional {page: num, pageSize: num, name: str # Filter by indicator value (substring match), indicatorType: str, relatedEvent: [str] # Filter indicators by related event UUID(s). Multiple UUIDs can be provided by repeating the parameter.}\n@returns(200) {indicators: [map], pagination: map{page: num, pageSize: num, totalCount: num, totalPages: num}} # Returns a list of indicators.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/bulk\n@desc Creates multiple indicators in bulk\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., indicators: [map{autoCreateType: bool, indicatorType!: str, relatedEvents: [map], tags: [any], tlp: str, value!: str}]}\n@optional {autoCreateType: bool # Global flag to automatically create indicator types if they don't exist. Individual indicators can override this with their own autoCreateType flag.}\n@returns(200) Returns the number of created indicators.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/create\n@desc Creates a new indicator\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., indicatorType: str, value: str}\n@optional {autoCreateType: bool # If true, automatically create the indicator type if it doesn't exist. If false (default), throw an error when the indicator type doesn't exist., relatedEvents: [map{datasetId!: str, eventId!: str}], tags: [any], tlp: str # Traffic Light Protocol designation. Case-insensitive on input, stored and returned as UPPERCASE. Allowed values: clear, green, amber, amber-strict, red, purple.}\n@returns(200) {createdAt: str(date-time), datasetId: str, indicatorType: str, relatedEvents: [map], tags: [map], tlp: str?, updatedAt: str(date-time), uuid: str, value: str} # Returns the created indicator.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/tags\n@desc List mirrored tags for an indicator dataset\n@required {account_id: str # Account ID., dataset_id: str # Dataset ID.}\n@returns(200) Returns an array of mirrored tags.\n@errors {400: Bad Request., 404: Bad Request., 500: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/{indicator_id}\n@desc Deletes an indicator\n@required {account_id: str # Account ID., dataset_id: str # Dataset ID., indicator_id: str # Indicator UUID.}\n@returns(200) {message: str, success: bool} # Indicator deleted successfully.\n@errors {404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/{indicator_id}\n@desc Reads an indicator\n@required {account_id: str # Account ID., dataset_id: str # Dataset ID., indicator_id: str # Indicator UUID.}\n@returns(200) {createdAt: str(date-time), datasetId: str, indicatorType: str, relatedEvents: [map], tags: [map], tlp: str?, updatedAt: str(date-time), uuid: str, value: str} # Returns the indicator.\n@errors {404: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/{indicator_id}\n@desc Updates an indicator\n@required {account_id: str # Account ID., dataset_id: str # Dataset ID., indicator_id: str # Indicator UUID.}\n@optional {indicatorType: str, relatedEvents: [map{datasetId!: str, eventId!: str}], tags: [any], tlp: str # Traffic Light Protocol designation. Case-insensitive on input, stored and returned as UPPERCASE. Allowed values: clear, green, amber, amber-strict, red, purple., value: str}\n@returns(200) {createdAt: str(date-time), datasetId: str, indicatorType: str, relatedEvents: [map], tags: [map], tlp: str?, updatedAt: str(date-time), uuid: str, value: str} # Returns the updated indicator.\n@errors {400: Bad Request., 404: Bad Request., 409: The updated indicator would duplicate an existing indicator.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/{indicator_id}/relationships\n@desc List relationships for an indicator\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., indicator_id: str # Indicator UUID.}\n@optional {search: [map], expand: [str], cursor: str, pageSize: int=25}\n@returns(200) {result: map{counts: map, cursor: str?, entities: [map], hasMore: bool, hydrationErrors: map, relationships: [map]}, success: bool} # Returns edges, optional hydrated entities, counts, and pagination.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/{indicator_id}/relationships\n@desc Create a relationship for an indicator\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., indicator_id: str # Indicator UUID., targetId: str # UUID of the target entity., targetType: str(event/tag) # Target type. \"indicator\" is not allowed (indicator↔indicator relationships are not supported)., type: str # Relationship type.}\n@optional {confidence: int # Confidence score 0–100., metadata: map # Arbitrary JSON metadata.}\n@returns(200) {result: map, success: bool} # Returns the created relationship.\n@errors {400: Bad Request., 409: Relationship already exists for this source, target, and type.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/{indicator_id}/relationships/{rel_uuid}\n@desc Delete a relationship\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., indicator_id: str # Indicator UUID., rel_uuid: str(uuid) # Relationship UUID.}\n@returns(200) {result: map{deleted: bool}, success: bool} # Returns whether the relationship was deleted.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/indicators/{indicator_id}/relationships/{rel_uuid}\n@desc Update a relationship\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., indicator_id: str # Indicator UUID., rel_uuid: str(uuid) # Relationship UUID.}\n@optional {confidence: int # Updated confidence. null clears it., metadata: map # Updated metadata. null clears it., type: str # Updated relationship type.}\n@returns(200) {result: map, success: bool} # Returns the updated relationship.\n@errors {400: Bad Request., 404: Not Found.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/move\n@desc Moves specified events from one dataset to another dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., destDatasetId: str, eventIds: [str]}\n@optional {keepRawData: bool # If true, copies raw data to the destination dataset. Default is false (raw data is stripped/not copied). Raw data is always deleted from the source.}\n@returns(200) {deletionFailures: [map], indicatorsCopied: num, insertFailures: [map], moved: num, relationshipsCopied: num} # Returns the number of moved events\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/permissions\n@desc List permissions for dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID.}\n@returns(200) Returns the list of permissions.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/permissions\n@desc Create a permission for dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., role: str(read/write), subjectId: str, subjectType: str(account/group)}\n@returns(200) {createdAt: str(date-time), resourceId: str, resourceType: str, role: str, subjectId: str, subjectType: str, updatedAt: str(date-time), uuid: str} # Returns the created permission.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/permissions/{grant_id}\n@desc Delete a permission for dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., grant_id: str}\n@returns(200) {message: str, success: bool} # Permission deleted successfully\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/permissions/{grant_id}\n@desc Update a permission for dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., grant_id: str, role: str(read/write)}\n@returns(200) {message: str, success: bool} # Permission updated successfully\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/tags/{tag_uuid}/indicators\n@desc List indicators related to a tag within a dataset (deprecated)\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID., dataset_id: str(uuid) # Dataset UUID.}\n@optional {page: num, pageSize: num, indicatorType: str, relatedEvent: [str] # Filter indicators by related event UUID(s). Multiple UUIDs can be provided by repeating the parameter., search: [map] # Structured search as a JSON array of {field, op, value} objects. Searchable fields: value, indicatorType. Multiple conditions are AND'd together. Max 10 conditions per request.}\n@returns(200) {indicators: [map], pagination: map{page: num, pageSize: num, totalCount: num, totalPages: num}} # Returns a paginated list of indicators.\n@errors {400: Bad Request., 404: Bad Request., 500: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/dataset/{dataset_id}/targetIndustries\n@desc Lists all target industries for a specific dataset\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID.}\n@returns(200) {items: map{type: str}, type: str} # Returns a list of target industries for the dataset.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/datasets/populate\n@desc Populate dataset-specific lookup tables from existing Events data with batch processing\n@required {account_id: str # Account ID.}\n@returns(200) {properties: map{accountId: map{type: str}, datasets: map{items: map{properties: map, type: str}, type: str}, errors: map{items: map{type: str}, type: str}, summary: map{properties: map{failedDatasets: map, successfulDatasets: map, totalDatasets: map, totalIndicatorTypes: map, totalProcessingTimeMs: map}, type: str}}, type: str} # Returns population results with counts and any errors\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/datasets/{dataset_id}/events\n@desc Deletes one or more events\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., eventIds: [str] # Array of Event IDs to delete.}\n@returns(200) Returns the number of deleted events.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/datasets/{dataset_id}/events/{event_id}/raw\n@desc Reads raw data for an event by UUID\n@required {account_id: str # Account ID., event_id: str # Event ID., dataset_id: str # Dataset ID.}\n@returns(200) {accountId: num, created: str, data: str, id: num, source: str, tlp: str} # Returns the raw event data.\n@errors {404: Bad Request., 500: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/event-categories/by-id/{category_id}\n@desc Deletes a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@returns(200) {uuid: str} # Returns the uuid of the deleted category.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/event-categories/by-id/{category_id}\n@desc Reads a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@returns(200) {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str, uuid: str} # Returns a category.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/event-categories/by-id/{category_id}\n@desc Updates a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@optional {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str}\n@returns(200) {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str, uuid: str} # Returns the updated category.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/event-categories/by-id/{category_id}\n@desc Updates a category\n@required {account_id: str # Account ID., category_id: str(uuid) # Category UUID.}\n@optional {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str}\n@returns(200) {killChain: num, mitreAttack: [str], mitreCapec: [str], name: str, shortname: str, uuid: str} # Returns the updated category.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/event_tag/{event_id}\n@desc Removes a tag from an event\n@required {account_id: str # Account ID., event_id: str # Event UUID., tags: [str]}\n@returns(200) {result: map{success: bool}, success: bool} # Returns success if operation succeeded.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/event_tag/{event_id}/create\n@desc Adds a tag to an event\n@required {account_id: str # Account ID., event_id: str # Event UUID., tags: [str]}\n@returns(200) {result: map{success: bool}, success: bool} # Returns success if operation succeeded.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/graph\n@desc Query graph neighborhood from R2 Data Catalog\n@required {account_id: str # Account ID.}\n@optional {seeds: [str] # Comma-separated compact seed ids (type:uuid). Example: seeds=event:550e8400-...,indicator:661fa920-... Provide 1–50 entries; omitting seeds returns 400., direction: str # Edge direction relative to each seed: out (seed→neighbors), in (neighbors→seed), both (default)., hydration: str # Hydration strategy for neighbor nodes when expand=nodes is set. r2_join (default): use R2 JOIN query + DO fallback. do_only: use plain R2 query + hydrate all neighbors via Durable Objects., limit: num # Max neighbors per seed (default: 100, max: 1000). Values above 1000 return 400., max_nodes: num # Total accumulated node cap across all seeds (default: 500, max: 1000). Values above 1000 return 400., relationshipTypes: [str] # Comma-separated relationship types to filter by. Allowed: tagged_with, appears_in, related_to, caused_by, attributed_to., datasetIds: [str] # Comma-separated dataset UUIDs to restrict neighbor scope, or one standalone scope value: 'all'/'*', 'analytics' for isAnalytics=true datasets, or 'operational' for isAnalytics=false datasets. Intersected with access grants., cursor: str # Opaque pagination token. Only valid when seeds has exactly 1 entry; 400 otherwise., expand: [str] # Comma-separated list of response sections to expand (hydrate). Allowed: `nodes`. Omitting `expand` returns identifier-only nodes.}\n@returns(200) {errors: [map], messages: [map], result: map{edges: [map], node: map?, nodes: [map]}, result_info: map{count: num, cursor: str?, depth_reached: num, edge_count: num, has_more: bool, query_time_ms: num, seeds: [str], total_count: num, truncated: bool}, success: bool} # Returns merged graph neighborhood from R2 Data Catalog\n@errors {400: Bad Request., 404: Bad Request., 500: Bad Request., 503: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/graphql\n@desc GraphQL endpoint for event aggregation\n@required {account_id: str # Account ID.}\n@returns(200) {data: map?, errors: [map]?} # GraphQL response payload (data and errors).\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/indicator-types\n@desc Lists indicator types across multiple datasets\n@required {account_id: str # Account ID.}\n@optional {datasetIds: [str] # Dataset UUIDs to query, or one standalone scope value: 'all'/'*', 'analytics' for isAnalytics=true datasets, or 'operational' for isAnalytics=false datasets. If not provided, queries all accessible datasets.}\n@returns(200) {items: map{type: str}, type: str} # Returns a list of indicator types.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/indicatorTypes\n@desc Lists all indicator types\n@required {account_id: str # Account ID.}\n@returns(200) {items: map{type: str}, type: str} # Returns a list of indicator types.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/indicators\n@desc Lists indicators across multiple datasets\n@required {account_id: str # Account ID.}\n@optional {datasetIds: [str] # Dataset UUIDs to query, or one standalone scope value: 'all'/'*' for legacy all-datasets behavior, 'analytics' for isAnalytics=true datasets, or 'operational' for isAnalytics=false datasets. If not provided, uses the default dataset., page: num, pageSize: num, search: [map] # Structured search as a JSON array of {field, op, value} objects. Searchable fields: value, indicatorType, uuid. Supports operators: equals, not, contains, startsWith, endsWith, gt, lt, gte, lte, like, in, find. Use the 'in' operator with an array value to bulk-check up to 100 indicators in a single request, e.g. search=[{\"field\":\"value\",\"op\":\"in\",\"value\":[\"evil.com\",\"bad.org\"]}]. Multiple conditions are AND'd together. Max 10 conditions per request., name: str # Filter indicators by value using substring match (LIKE). Legacy alternative to structured search., indicatorType: str, relatedEvents: [str] # Filter by related event IDs, tags: [str] # Filter by tag values or UUIDs. Indicators must have at least one of the specified tags (OR logic). Supports both tag UUID and tag value., tagSearch: [map] # Structured tag-metadata filter as a JSON array of {field, op, value} objects. Operates against the per-dataset IndicatorTag mirror so you can find indicators by tag attributes (origin country, motive, sophistication, priority, etc.) without a separate Tags lookup. Common dashboard usage: drill from a country into indicators, e.g. tagSearch=[{\"field\":\"originCountryISO\",\"op\":\"in\",\"value\":[\"IR\",\"CN\"]}]. Country values may be passed as alpha-2, alpha-3, name, or alias (e.g. \"iran\"). Operators: equals, not, gt/gte/lt/lte (numeric only), contains/like/find/startsWith/endsWith (string only), in. AND-joined across entries; combined with `tags`, a matching tag must satisfy both. Max 10 entries per request, max 100 values per 'in'. Performance notes: `originCountryISO` uses its B-tree index for equals/not/in. `priority` uses its B-tree index for numeric comparisons. Other string columns (`actorCategory`, `motive`, etc.) are case-insensitive and unindexed; current catalog size makes this a non-issue. `endsWith` and `aliasGroupNames` contains/like are leading-wildcard scans and slow on large result sets. `aliasGroupNames` matches on the JSON-encoded text, so substrings can cross alias boundaries (\"apt28\" also matches \"apt280\" when both appear in the same tag's alias list)., createdAfter: str(date-time) # Filter indicators created on or after this date. Must use ISO 8601 format (e.g., '2024-01-15T00:00:00Z')., createdBefore: str(date-time) # Filter indicators created on or before this date. Must use ISO 8601 format (e.g., '2024-12-31T23:59:59Z')., relatedEventsLimit: num # Limit the number of related events returned per indicator. Default: 2. Set to 0 for none, -1 for all events., includeTags: bool # Whether to include full tag details for each indicator. Defaults to true., includeTotalCount: bool # Whether to compute total count via COUNT(*). Defaults to false for performance. total_count is null unless this is true and the complete fan-out succeeds., format: str(json/stix2/taxii) # Output format for indicator data. 'json' returns the default format, 'stix2' returns STIX 2.1 Indicator SDOs, 'taxii' returns a TAXII 2.1 Envelope with Content-Type application/taxii+json;version=2.1., cache: str # Cache strategy. 'from-graph' serves results from the graph-node KV cache when all requested UUIDs are cached; falls back to normal path on partial/zero hit. Cannot be combined with `cursor`., cursor: str # Opaque cursor from a previous response's `pagination.cursor`. When provided, all filters, datasetIds, page, `pageSize`, `includeTags` and `relatedEventsLimit` come from the cursor — do not resend them. Sending any filter, `page`, `pageSize`, `includeTags`, `relatedEventsLimit`, `includeTotalCount=true`, or `cache=from-graph` alongside a cursor yields a 400 `CursorFilterConflictError`. A cursor issued for a different entity, an unsupported version, or a dataset that has since been reconfigured as analytics-only yields a 400 `InvalidCursorError`.}\n@returns(200) {properties: map{completeness: map{properties: map{complete: map, failedDatasets: map, failedShards: map, warnings: map}, type: str}, indicators: map{items: map{createdAt: str(date-time), datasetId: str, indicatorType: str, relatedEvents: [map], sources: [map], tags: [map], tlp: str?, updatedAt: str(date-time), uuid: str, value: str}, type: str}, pagination: map{properties: map{count: map, cursor: map, has_more: map, page: map, per_page: map, total_count: map, total_count_is_exact: map}, type: str}}, type: str} # Returns a paginated list of indicators.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/indicators/aggregate\n@desc Aggregate indicators by column(s)\n@required {account_id: str # Account ID., aggregateBy: str # Column(s) to aggregate by - single column or comma-separated list (e.g., 'indicatorType', 'value', 'indicatorType,value')}\n@optional {measure: str(indicators/relationships)=indicators # What to count per group: 'indicators' (catalog rows, default) or 'relationships' (linked events per indicator). Use 'relationships' for 'top indicator by event activity'., tagUuid: str # Scope to indicators associated with this tag/actor UUID. Combine with measure=relationships for 'top indicator for an actor'., datasetIds: [str] # Dataset UUIDs to filter by, or one standalone scope value: 'all'/'*' for all accessible datasets, 'analytics' for isAnalytics=true datasets, or 'operational' for isAnalytics=false datasets. If not provided, aggregates across all accessible datasets., createdAfter: any # Filter indicators created after this date/datetime (ISO 8601, e.g., '2024-01-01' or '2024-01-01T00:00:00Z'), createdBefore: any # Filter indicators created before this date/datetime (ISO 8601, e.g., '2024-12-31' or '2024-12-31T23:59:59Z'), eventDateAfter: str # For measure=relationships: only count indicator→event links whose relationship was created/observed on or after this date (ISO 8601). Bounds the activity view to recently-observed links. Note: this filters by the relationship's createdAt (link-observation time), not the underlying event's business date., eventDateBefore: str # For measure=relationships: only count indicator→event links whose relationship was created/observed on or before this date (ISO 8601). Bounds the activity view by the relationship's createdAt (link-observation time), not the underlying event's business date., limit: num=10 # Maximum number of aggregation results to return (1-100)}\n@returns(200) {aggregateBy: str, aggregations: [any], failedDatasets: num, total: num} # Returns aggregated indicator data.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/queries\n@desc List all saved event queries\n@required {account_id: str # Account ID.}\n@returns(200) Returns a list of event queries.\n@errors {500: Bad Request., 4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/queries/create\n@desc Create a saved event query\n@required {account_id: str # Account ID., alert_enabled: bool # Enable alerts for this query, alert_rollup_enabled: bool # Enable alert rollup for this query, name: str # Unique name for the saved query, query_json: str # JSON string containing the query parameters, rule_enabled: bool # Enable rule for this query}\n@optional {rule_scope: str # Scope for the rule}\n@returns(200) {account_id: int, alert_enabled: bool, alert_rollup_enabled: bool, created_at: str, custom_threat_feed_id: int?, id: int, name: str, query_json: str, rule_enabled: bool, rule_list_id: str, rule_scope: str, updated_at: str, user_email: str} # Returns the created event query.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/queries/{query_id}\n@desc Delete a saved event query\n@required {account_id: str # Account ID., query_id: int # Event query ID}\n@returns(200) Event query deleted successfully.\n@errors {404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/queries/{query_id}\n@desc Read a saved event query\n@required {account_id: str # Account ID., query_id: int # Event query ID}\n@returns(200) {account_id: int, alert_enabled: bool, alert_rollup_enabled: bool, created_at: str, custom_threat_feed_id: int?, id: int, name: str, query_json: str, rule_enabled: bool, rule_list_id: str, rule_scope: str, updated_at: str, user_email: str} # Returns the event query.\n@errors {404: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/queries/{query_id}\n@desc Update a saved event query\n@required {account_id: str # Account ID., query_id: int # Event query ID}\n@optional {alert_enabled: bool # Enable alerts for this query, alert_rollup_enabled: bool # Enable alert rollup for this query, name: str # Unique name for the saved query, query_json: str # JSON string containing the query parameters, rule_enabled: bool # Enable rule for this query, rule_scope: str # Scope for the rule}\n@returns(200) {account_id: int, alert_enabled: bool, alert_rollup_enabled: bool, created_at: str, custom_threat_feed_id: int?, id: int, name: str, query_json: str, rule_enabled: bool, rule_list_id: str, rule_scope: str, updated_at: str, user_email: str} # Returns the updated event query.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/queries/{query_id}\n@desc Update a saved event query\n@required {account_id: str # Account ID., query_id: int # Event query ID}\n@optional {alert_enabled: bool # Enable alerts for this query, alert_rollup_enabled: bool # Enable alert rollup for this query, name: str # Unique name for the saved query, query_json: str # JSON string containing the query parameters, rule_enabled: bool # Enable rule for this query, rule_scope: str # Scope for the rule}\n@returns(200) {account_id: int, alert_enabled: bool, alert_rollup_enabled: bool, created_at: str, custom_threat_feed_id: int?, id: int, name: str, query_json: str, rule_enabled: bool, rule_list_id: str, rule_scope: str, updated_at: str, user_email: str} # Returns the updated event query.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/raw/{dataset_id}/{event_id}\n@desc Reads raw data for an event by UUID\n@required {account_id: str # Account ID., event_id: str # Event ID., dataset_id: str # Dataset ID.}\n@returns(200) {accountId: num, created: str, data: str, id: num, source: str, tlp: str} # Returns the raw event data.\n@errors {404: Bad Request., 500: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/relate/{event_id}\n@desc Removes an event reference\n@required {account_id: str # Account ID., event_id: str # Event UUID., events: [str]}\n@returns(200) {result: map{success: bool}, success: bool} # Returns success if operation succeeded.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/relate/{event_id}/create\n@desc Creates event references for a event\n@required {account_id: str # Account ID., event_id: str # Event UUID., events: [str]}\n@returns(200) {result: map{success: bool}, success: bool} # Returns success if operation succeeded.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/relationships/create\n@desc Create a relationship between two events\n@required {account_id: str # Account ID., childIds: [str(uuid)] # Array of UUIDs for child events. Single child = 1:1 relationship, multiple = 1:many relationships, datasetId: str # Dataset identifier where the events are stored, parentId: str(uuid) # UUID of the parent event that will be the source of the relationship, relationshipType: str(related_to/caused_by/attributed_to) # Type of relationship to create between parent and child events}\n@returns(200) {childIds: [str(uuid)], errors: [map], message: str, relationships: [map], relationshipsCreated: num, success: bool} # Relationship created successfully\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/tag-categories/{category_uuid}\n@desc Deletes a tag category (SoT)\n@required {account_id: str # Account ID., category_uuid: str # Tag Category UUID.}\n@returns(200) {uuid: str} # Returns the uuid of the deleted tag category.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tag-categories/{category_uuid}\n@desc Gets a tag category by UUID (SoT)\n@required {account_id: str # Account ID., category_uuid: str # Tag Category UUID.}\n@returns(200) {createdAt: str, description: str, name: str, schema: [map]?, updatedAt: str, uuid: str} # Returns the tag category.\n@errors {404: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/tag-categories/{category_uuid}\n@desc Updates a tag category (SoT)\n@required {account_id: str # Account ID., category_uuid: str # Tag Category UUID.}\n@optional {description: str, name: str, schema: [map{allowedValues: [str], annotations: map, deprecated: bool, deprecatedValues: [str], element: map, enforcement: str, format: str, key!: str, kind!: str, label: str, maxLength: int, numberConstraint: map, properties: map, required: bool}] # Optional array of FieldDefinition objects. When provided, replaces the existing field schema. When omitted, the existing schema is preserved.}\n@returns(200) {createdAt: str, description: str, name: str, schema: [map]?, updatedAt: str, uuid: str} # Returns the updated tag category.\n@errors {400: Bad Request., 404: Bad Request., 409: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tags\n@desc Lists all tags (SoT)\n@required {account_id: str # Account ID.}\n@optional {page: num, pageSize: num, search: str # Free-text substring match on tag value AND custom-field properties. Searches case-insensitively inside both `Tag.value` and the serialized `Tag.properties` JSON blob (keys, values, and annotation metadata like confidence/tlp are all searchable). Same serialized-text tradeoff as `aliasGroupNames` — substrings can cross JSON boundaries., categoryUuid: str, filters: [map] # Structured filters as a JSON array of {field, op, value} objects. Searchable fields: uuid, value, categoryName, description, dateOfDiscovery, tlp, confidence, actorCategory, motive, attributionOrganization, originCountryISO, aliases, externalReferences, opsecLevel, sophisticationLevel, activeDuration, priority, lastSeen, aliasGroupNames. Operators: equals, not, contains, startsWith, endsWith, gt, lt, gte, lte, like, in, find. Use 'in' for bulk OR within a single field, e.g. filters=[{\"field\":\"originCountryISO\",\"op\":\"in\",\"value\":[\"IR\",\"CN\"]}]. Multiple entries are AND-joined. Max 10 entries per request, max 100 values per 'in'. Per-field notes: `uuid` accepts only 'equals' and 'in' (other operators throw ValidationError) — matched against the canonical lowercase storage but callers may pass either case (the server lowercases before comparison); index-backed by the column's UNIQUE constraint and intended for batched UUID → tag resolution. `originCountryISO` uses its B-tree index for equals/not/in. `priority` uses its B-tree index for numeric comparisons. Other string columns (`actorCategory`, `motive`, etc.) are case-insensitive and unindexed; current catalog size makes this a non-issue. `endsWith` and `aliasGroupNames` contains/like are leading-wildcard scans and slow on large result sets. `aliasGroupNames` matches on the JSON-encoded text, so substrings can cross alias boundaries (a search for \"apt28\" will also match \"apt280\" if both appear in the same tag's alias list)., cache: str # Cache strategy. 'from-graph' serves results from the graph-node KV cache when all requested UUIDs are cached; falls back to normal path on partial/zero hit.}\n@returns(200) {pagination: map{page: num, pageSize: num, totalCount: num, totalPages: num}, tags: [map]} # Returns a paginated list of tags.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tags/categories\n@desc Lists all tag categories (SoT)\n@required {account_id: str # Account ID.}\n@optional {search: str}\n@returns(200) {categories: [map]} # Returns a list of tag categories.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tags/categories/actors\n@desc Lists all Actors\n@required {account_id: str # Account ID.}\n@optional {page: num, pageSize: num, value: str # Free-text substring match on actor name (Tag.value)., filters: [map] # Structured filters as a JSON array of {field, op, value} objects. Same shape as the events search API. Common use: filter actors by country with filters=[{\"field\":\"originCountryISO\",\"op\":\"in\",\"value\":[\"IR\",\"CN\"]}]. Country values may be passed as alpha-2, alpha-3, name, or alias (e.g. \"iran\"). Max 10 entries per request, max 100 values per 'in'. Non-CFONE callers may only filter on fields that are also public-readable (`value`, `categoryName`, `aliasGroupNames`, `originCountryISO`); filtering on a redacted field returns 400. Performance notes: `originCountryISO` uses its B-tree index for equals/in. `endsWith` and `aliasGroupNames` contains/like are leading-wildcard scans and slow on large result sets. `aliasGroupNames` matches on JSON-encoded text, so substrings can cross alias boundaries (\"apt28\" also matches \"apt280\" when both appear in the same tag's alias list).}\n@returns(200) {pagination: map{page: num, pageSize: num, totalCount: num, totalPages: num}, tags: [map]} # Returns a paginated list of known Actors. Non-CFONE callers receive the public projection documented by this schema.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/tags/categories/create\n@desc Creates a new tag category (SoT)\n@required {account_id: str # Account ID., name: str}\n@optional {description: str, schema: [map{allowedValues: [str], annotations: map, deprecated: bool, deprecatedValues: [str], element: map, enforcement: str, format: str, key!: str, kind!: str, label: str, maxLength: int, numberConstraint: map, properties: map, required: bool}] # Optional array of FieldDefinition objects defining custom fields for tags in this category. Persisted as JSON; returned as a parsed array.}\n@returns(200) {createdAt: str, description: str, name: str, schema: [map]?, updatedAt: str, uuid: str} # Returns the created tag category.\n@errors {400: Bad Request., 409: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/tags/categories/{category_uuid}\n@desc Deletes a tag category (SoT)\n@required {account_id: str # Account ID., category_uuid: str # Tag Category UUID.}\n@returns(200) {uuid: str} # Returns the uuid of the deleted tag category.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tags/categories/{category_uuid}\n@desc Gets a tag category by UUID (SoT)\n@required {account_id: str # Account ID., category_uuid: str # Tag Category UUID.}\n@returns(200) {createdAt: str, description: str, name: str, schema: [map]?, updatedAt: str, uuid: str} # Returns the tag category.\n@errors {404: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/tags/categories/{category_uuid}\n@desc Updates a tag category (SoT)\n@required {account_id: str # Account ID., category_uuid: str # Tag Category UUID.}\n@optional {description: str, name: str, schema: [map{allowedValues: [str], annotations: map, deprecated: bool, deprecatedValues: [str], element: map, enforcement: str, format: str, key!: str, kind!: str, label: str, maxLength: int, numberConstraint: map, properties: map, required: bool}] # Optional array of FieldDefinition objects. When provided, replaces the existing field schema. When omitted, the existing schema is preserved.}\n@returns(200) {createdAt: str, description: str, name: str, schema: [map]?, updatedAt: str, uuid: str} # Returns the updated tag category.\n@errors {400: Bad Request., 404: Bad Request., 409: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/tags/create\n@desc Creates a new tag\n@required {account_id: str # Account ID., value: str}\n@optional {activeDuration: any, actorCategory: any, aliasGroupNames: [str], aliasGroupNamesInternal: [str], aliases: [map{confidence: int, tlp: str, value!: str}] # Structured aliases ({ value, confidence 1-10, tlp }). Public: returned to all accounts with per-entry TLP filtering (entries with tlp: purple are removed for non-CFONE accounts)., attributionOrganization: any, categoryUuid: str # Tag type (category) UUID. Optional — when present, `properties` is validated against this category's schema. When absent, the tag is typeless and properties are accepted free-form., confidence: int # Overall tag confidence (1-10). Optional., dateOfDiscovery: str # Date of discovery (ISO YYYY-MM-DD). Optional., description: str, externalReferenceLinks: [str], externalReferences: [map{description: str, url!: str}] # Structured external references ({ url, description }). Public: returned to all accounts., internalAliases: [map{confidence: int, tlp: str, value!: str}] # Internal structured aliases ({ value, confidence 1-10, tlp }). CFONE-only: never returned to non-CFONE accounts., internalDescription: str, lastSeen: str, motive: any, opsecLevel: any, originCountryISO: any, priority: any, properties: map # Structured metadata blob. Optional. When `categoryUuid` is given, validated against this category's schema on write. When typeless, accepted free-form. Use `{}` for a tag with no custom data., sophisticationLevel: any, tlp: str(red/amber/amber-strict/green/clear/purple/amber+strict) # Tag-level TLP handling marking. Optional. Allowed values: red, amber, amber-strict, green, clear, purple, amber+strict.}\n@returns(200) {activeDuration: str, activeDuration_annotated: map?{tlp: str, value: str}, actorCategory: str, actorCategory_annotated: map?{confidence: num, tlp: str, value: str}, aliasGroupNames: [str], aliasGroupNamesInternal: [str], aliases: [map], attributionOrganization: str, attributionOrganization_annotated: map?{confidence: num, tlp: str, value: str}, categoryName: str, categoryUuid: str, confidence: int?, createdAt: str, dateOfDiscovery: str, description: str, externalReferenceLinks: [str], externalReferences: [map], externalReferences_annotated: [map]?, internalAliases: [map], internalDescription: str, lastSeen: str, motive: str, motive_annotated: map?{confidence: num, tlp: str, value: str}, opsecLevel: str, opsecLevel_annotated: map?{confidence: num, tlp: str, value: str}, originCountryISO: str?, originCountryISO_annotated: map?{confidence: num, tlp: str, value: str?}, priority: num, priority_annotated: map?{tlp: str, value: num}, properties: map?, sophisticationLevel: str, sophisticationLevel_annotated: map?{confidence: num, tlp: str, value: str}, tlp: str?, updatedAt: str, uuid: str, value: str, version: num} # Returns the created tag.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}\n@desc Deletes a tag (SoT)\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID.}\n@returns(200) {uuid: str} # Returns the uuid of the deleted tag.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}\n@desc Gets a tag by UUID (SoT)\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID.}\n@returns(200) {activeDuration: str, activeDuration_annotated: map?{tlp: str, value: str}, actorCategory: str, actorCategory_annotated: map?{confidence: num, tlp: str, value: str}, aliasGroupNames: [str], aliasGroupNamesInternal: [str], aliases: [map], attributionOrganization: str, attributionOrganization_annotated: map?{confidence: num, tlp: str, value: str}, categoryName: str, categoryUuid: str, confidence: int?, createdAt: str, dateOfDiscovery: str, description: str, externalReferenceLinks: [str], externalReferences: [map], externalReferences_annotated: [map]?, internalAliases: [map], internalDescription: str, lastSeen: str, motive: str, motive_annotated: map?{confidence: num, tlp: str, value: str}, opsecLevel: str, opsecLevel_annotated: map?{confidence: num, tlp: str, value: str}, originCountryISO: str?, originCountryISO_annotated: map?{confidence: num, tlp: str, value: str?}, priority: num, priority_annotated: map?{tlp: str, value: num}, properties: map?, sophisticationLevel: str, sophisticationLevel_annotated: map?{confidence: num, tlp: str, value: str}, tlp: str?, updatedAt: str, uuid: str, value: str, version: num} # Returns the tag.\n@errors {404: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}\n@desc Updates a tag (SoT)\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID.}\n@optional {activeDuration: any, actorCategory: any, aliasGroupNames: [str], aliasGroupNamesInternal: [str], aliases: [map{confidence: int, tlp: str, value!: str}] # Structured aliases ({ value, confidence 1-10, tlp }). Public: returned to all accounts with per-entry TLP filtering (entries with tlp: purple are removed for non-CFONE accounts)., attributionOrganization: any, categoryUuid: str # Tag type (category) UUID. When changed, existing `properties` are re-validated against the new category's schema (400 on mismatch). Set to null to unlink (typeless; properties stop being validated)., confidence: int # Overall tag confidence (1-10). Omit to preserve existing., dateOfDiscovery: str # Date of discovery (ISO YYYY-MM-DD). Omit to preserve existing., description: str, externalReferenceLinks: [str], externalReferences: [map{description: str, url!: str}] # Structured external references ({ url, description }). Public: returned to all accounts., internalAliases: [map{confidence: int, tlp: str, value!: str}] # Internal structured aliases ({ value, confidence 1-10, tlp }). CFONE-only: never returned to non-CFONE accounts., internalDescription: str, lastSeen: str, motive: any, opsecLevel: any, originCountryISO: any, priority: any, properties: map # Custom field values blob. When omitted, the existing value is preserved. When provided, performs a shallow per-key merge over the stored value (unmentioned keys are retained). Setting an individual key to null deletes that key. Validation runs against the merged result, so a partial update may omit a schema-required key if the stored value supplies it., sophisticationLevel: any, tlp: str(red/amber/amber-strict/green/clear/purple/amber+strict) # Tag-level TLP marking. Omit to preserve existing. Cannot be cleared to null., value: str}\n@returns(200) {activeDuration: str, activeDuration_annotated: map?{tlp: str, value: str}, actorCategory: str, actorCategory_annotated: map?{confidence: num, tlp: str, value: str}, aliasGroupNames: [str], aliasGroupNamesInternal: [str], aliases: [map], attributionOrganization: str, attributionOrganization_annotated: map?{confidence: num, tlp: str, value: str}, categoryName: str, categoryUuid: str, confidence: int?, createdAt: str, dateOfDiscovery: str, description: str, externalReferenceLinks: [str], externalReferences: [map], externalReferences_annotated: [map]?, internalAliases: [map], internalDescription: str, lastSeen: str, motive: str, motive_annotated: map?{confidence: num, tlp: str, value: str}, opsecLevel: str, opsecLevel_annotated: map?{confidence: num, tlp: str, value: str}, originCountryISO: str?, originCountryISO_annotated: map?{confidence: num, tlp: str, value: str?}, priority: num, priority_annotated: map?{tlp: str, value: num}, properties: map?, sophisticationLevel: str, sophisticationLevel_annotated: map?{confidence: num, tlp: str, value: str}, tlp: str?, updatedAt: str, uuid: str, value: str, version: num} # Returns the updated tag.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}/indicators\n@desc List indicators related to a tag\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID.}\n@optional {datasetIds: [str] # Dataset UUIDs to scope to (repeat the param for multiple), or one standalone scope: 'all'/'*', 'analytics' for isAnalytics=true datasets, or 'operational' for isAnalytics=false datasets. Analytics datasets do not expose tag associations, so 'analytics' returns an empty result. Omit to search all readable datasets., page: num, pageSize: num, indicatorType: str, relatedEvent: [str] # Filter indicators by related event UUID(s). Multiple UUIDs can be provided by repeating the parameter., search: [map] # Structured search as a JSON array of {field, op, value} objects. Searchable fields: value, indicatorType. Multiple conditions are AND'd together. Max 10 conditions per request.}\n@returns(200) {indicators: [map], pagination: map{page: num, pageSize: num, totalCount: num, totalPages: num}} # Returns a paginated list of indicators.\n@errors {400: Bad Request., 404: Bad Request., 500: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}/relationships\n@desc List relationships for a tag\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID.}\n@optional {datasets: [str], search: [map], expand: [str], cursor: str, pageSize: int=25}\n@returns(200) {result: map{counts: map, cursor: str?, entities: [map], failedShardCount: num, hasMore: bool, hydrationErrors: map, partialResults: bool, relationships: [map]}, success: bool} # Returns edges, optional hydrated entities, counts, and pagination.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}/relationships\n@desc Create a relationship for a tag\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID., datasetId: str # Dataset UUID where the relationship row will be stored (locates the Indicators DO)., targetId: str # UUID of the target entity., targetType: str(event/indicator) # Target type. \"tag\" is not allowed (tag↔tag relationships are not supported)., type: str # Relationship type.}\n@optional {confidence: int # Confidence score 0–100., metadata: map # Arbitrary JSON metadata.}\n@returns(200) {result: map, success: bool} # Returns the created relationship.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}/relationships/{rel_uuid}\n@desc Delete a tag relationship\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID., rel_uuid: str(uuid) # Relationship UUID., datasetId: str # Dataset UUID containing the relationship.}\n@returns(200) {result: map{deleted: bool}, success: bool} # Returns whether the relationship was deleted.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/tags/{tag_uuid}/relationships/{rel_uuid}\n@desc Update a tag relationship\n@required {account_id: str # Account ID., tag_uuid: str # Tag UUID., rel_uuid: str(uuid) # Relationship UUID., datasetId: str # Dataset UUID containing the relationship.}\n@optional {confidence: int # Updated confidence. null clears it., metadata: map # Updated metadata. null clears it., type: str # Updated relationship type.}\n@returns(200) {result: map, success: bool} # Returns the updated relationship.\n@errors {400: Bad Request., 404: Not Found.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/targetIndustries\n@desc Lists target industries across multiple datasets\n@required {account_id: str # Account ID.}\n@optional {datasetIds: [str] # Array of dataset IDs to query target industries from. If not provided, uses the default dataset.}\n@returns(200) {items: map{type: str}, type: str} # Returns a list of target industries.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/targetIndustries/catalog\n@desc Lists all target industries from industry map catalog\n@required {account_id: str # Account ID.}\n@returns(200) {items: map{type: str}, type: str} # Returns all target industries from industry map catalog.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/update/bulk\n@desc Bulk update events\n@required {account_id: str # Account ID., datasetId: str # Dataset ID containing the events to update. Required to prevent cross-account modifications., eventIds: [str] # List of event UUIDs to update (1-100), updates: map{attacker: str, attackerCountry: str, category: str, createdAt: str(date-time), event: str, indicator: str, indicatorType: str, insight: str, raw: map, targetCountry: str, targetIndustry: str, tlp: str} # Fields to update on all specified events. All fields including 'insight' are supported, except 'date' which requires shard migration.}\n@returns(200) {failedCount: num, failures: [map], updatedCount: num} # Returns the count of updated events and any failures.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/events/{dataset_id}/delete\n@desc Deletes one or more events\n@required {account_id: str # Account ID., dataset_id: str(uuid) # Dataset UUID., eventIds: [str] # Array of Event IDs to delete.}\n@returns(200) Returns the number of deleted events.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/{event_id}\n@desc Reads an event\n@required {account_id: str # Account ID., event_id: str # Event UUID.}\n@returns(200) {attacker: str, attackerCountry: str, attackerCountryAlpha3: str, category: str, datasetId: str, date: str, event: str, hasChildren: bool, indicator: str, indicatorType: str, indicatorTypeId: num, insight: str, killChain: num, mitreAttack: [str], mitreCapec: [str], numReferenced: num, numReferences: num, rawId: str, referenced: [str], referencedIds: [num], references: [str], referencesIds: [num], releasabilityId: str, tags: [str], targetCountry: str, targetCountryAlpha3: str, targetIndustry: str, tlp: str, uuid: str} # Returns an event.\n@errors {404: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/{event_id}\n@desc Updates an event\n@required {account_id: str # Account ID., event_id: str # Event UUID., datasetId: str # Dataset ID containing the event to update.}\n@optional {attacker: str, attackerCountry: str, category: str, createdAt: str(date-time), date: str(date-time), event: str, indicator: str, indicatorType: str, insight: str, raw: map{data: map, source: str, tlp: str}, targetCountry: str, targetIndustry: str, tlp: str}\n@returns(200) {attacker: str, attackerCountry: str, attackerCountryAlpha3: str, category: str, datasetId: str, date: str, event: str, hasChildren: bool, indicator: str, indicatorType: str, indicatorTypeId: num, insight: str, killChain: num, mitreAttack: [str], mitreCapec: [str], numReferenced: num, numReferences: num, rawId: str, referenced: [str], referencedIds: [num], references: [str], referencesIds: [num], releasabilityId: str, tags: [str], targetCountry: str, targetCountryAlpha3: str, targetIndustry: str, tlp: str, uuid: str} # Returns the updated event.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/{event_id}\n@desc Updates an event\n@required {account_id: str # Account ID., event_id: str # Event UUID., datasetId: str # Dataset ID containing the event to update.}\n@optional {attacker: str, attackerCountry: str, category: str, createdAt: str(date-time), date: str(date-time), event: str, indicator: str, indicatorType: str, insight: str, raw: map{data: map, source: str, tlp: str}, targetCountry: str, targetIndustry: str, tlp: str}\n@returns(200) {attacker: str, attackerCountry: str, attackerCountryAlpha3: str, category: str, datasetId: str, date: str, event: str, hasChildren: bool, indicator: str, indicatorType: str, indicatorTypeId: num, insight: str, killChain: num, mitreAttack: [str], mitreCapec: [str], numReferenced: num, numReferences: num, rawId: str, referenced: [str], referencedIds: [num], references: [str], referencesIds: [num], releasabilityId: str, tags: [str], targetCountry: str, targetCountryAlpha3: str, targetIndustry: str, tlp: str, uuid: str} # Returns the updated event.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/{event_id}/raw/{raw_id}\n@desc Reads data for a raw event\n@required {account_id: str # Account ID., event_id: str # Event UUID., raw_id: str # Raw Event UUID.}\n@returns(200) {accountId: num, created: str, data: map, id: str, source: str, tlp: str} # Returns the raw event.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/events/{event_id}/raw/{raw_id}\n@desc Updates a raw event\n@required {account_id: str # Account ID., event_id: str # Event UUID., raw_id: str # Raw Event UUID.}\n@optional {data: map, source: str, tlp: str}\n@returns(200) {data: map, id: str} # Returns the uuid of the updated raw event and its data.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/events/{event_id}/raw/{raw_id}\n@desc Updates a raw event\n@required {account_id: str # Account ID., event_id: str # Event UUID., raw_id: str # Raw Event UUID.}\n@optional {data: map, source: str, tlp: str}\n@returns(200) {data: map, id: str} # Returns the uuid of the updated raw event and its data.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/events/{event_id}/relationships\n@desc Filter and list events related to specific event\n@required {account_id: str # Account ID., event_id: str # Event UUID., datasetId: str # The dataset ID to search within.}\n@optional {direction: str(ancestors/descendants/both)=both # The direction to traverse the graph. Defaults to 'both' to search all., maxDepth: num # The maximum depth to traverse. Defaults to 5., relationshipTypes: any # An optional array of relationship types to filter by., indicatorTypeIds: [str] # An optional array of indicator type IDs to filter the results by., includeParent: bool=true # Whether to include the starting event in the results. Defaults to true., page: num, pageSize: num}\n@returns(200) Returns a list of events related to the specified starting event.\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests\n@desc List Requests\n@required {account_id: str, page: int # Page number of results., per_page: int # Number of results per page.}\n@optional {completed_after: any # Retrieve requests completed after this time., completed_before: any # Retrieve requests completed before this time., created_after: any # Retrieve requests created after this time., created_before: any # Retrieve requests created before this time., request_type: str # Requested information from request., sort_by: str # Field to sort results by., sort_order: str(asc/desc) # Sort order (asc or desc)., status: str(open/accepted/reported/approved/completed/declined) # Request Status.}\n@returns(200) List requests response.\n@errors {4XX: Create response failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/requests/constants\n@desc Get Request Priority, Status, and TLP constants\n@required {account_id: str}\n@returns(200) Get request constants response.\n@errors {4XX: Get request constants response failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests/new\n@desc Create a New Request.\n@required {account_id: str}\n@optional {content: str # Request content., priority: str # Priority for analyzing the request., request_type: str # Requested information from request., summary: str # Brief description of the request., tlp: str(clear/amber/amber-strict/green/red) # The CISA defined Traffic Light Protocol (TLP).}\n@returns(200) Create request response.\n@errors {4XX: Create response failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests/priority\n@desc List Priority Intelligence Requirements\n@required {account_id: str, page: int # Page number of results., per_page: int # Number of results per page.}\n@returns(200) List priorities response.\n@errors {4XX: List priorities response failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests/priority/new\n@desc Create a New Priority Intelligence Requirement\n@required {account_id: str, labels: [str] # List of labels., priority: int # Priority., requirement: str # Requirement., tlp: str(clear/amber/amber-strict/green/red) # The CISA defined Traffic Light Protocol (TLP).}\n@returns(200) Create priority response.\n@errors {4XX: Create priority response  failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/requests/priority/quota\n@desc Get Priority Intelligence Requirement Quota\n@required {account_id: str}\n@returns(200) Get priority quota response.\n@errors {4XX: Get priority quota response failure.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/requests/priority/{priority_id}\n@desc Delete a Priority Intelligence Requirement\n@required {account_id: str, priority_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete priority response.\n@errors {4XX: Delete priority response failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/requests/priority/{priority_id}\n@desc Get a Priority Intelligence Requirement\n@required {account_id: str, priority_id: str}\n@returns(200) Get priority response.\n@errors {4XX: Get priority response failure.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/requests/priority/{priority_id}\n@desc Update a Priority Intelligence Requirement\n@required {account_id: str, priority_id: str, labels: [str] # List of labels., priority: int # Priority., requirement: str # Requirement., tlp: str(clear/amber/amber-strict/green/red) # The CISA defined Traffic Light Protocol (TLP).}\n@returns(200) Update priority response.\n@errors {4XX: Update priority response failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/requests/quota\n@desc Get Request Quota\n@required {account_id: str}\n@returns(200) Get request quota response.\n@errors {4XX: Get request quota response failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/requests/types\n@desc Get Request Types\n@required {account_id: str}\n@returns(200) Get request types response.\n@errors {4XX: Get request types response failure.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/requests/{request_id}\n@desc Delete a Request\n@required {account_id: str, request_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete request response.\n@errors {4XX: Delete request response failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/requests/{request_id}\n@desc Get a Request\n@required {account_id: str, request_id: str}\n@returns(200) Get request response.\n@errors {4XX: Get request response failure.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/requests/{request_id}\n@desc Update a Request\n@required {account_id: str, request_id: str}\n@optional {content: str # Request content., priority: str # Priority for analyzing the request., request_type: str # Requested information from request., summary: str # Brief description of the request., tlp: str(clear/amber/amber-strict/green/red) # The CISA defined Traffic Light Protocol (TLP).}\n@returns(200) Update request response.\n@errors {4XX: Update request response failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests/{request_id}/asset\n@desc List Request Assets\n@required {account_id: str, request_id: str, page: int # Page number of results., per_page: int # Number of results per page.}\n@returns(200) List request assets response.\n@errors {4XX: List request assets response failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests/{request_id}/asset/new\n@desc Create a New Request Asset\n@required {account_id: str, request_id: str}\n@returns(200) Create request asset response.\n@errors {4XX: Create request asset response failure.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/requests/{request_id}/asset/{asset_id}\n@desc Delete a Request Asset\n@required {account_id: str, request_id: str, asset_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete request asset response.\n@errors {4XX: Delete request asset response failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/requests/{request_id}/asset/{asset_id}\n@desc Get a Request Asset\n@required {account_id: str, request_id: str, asset_id: str}\n@returns(200) Get request asset response.\n@errors {4XX: Get request asset response failure.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/requests/{request_id}/asset/{asset_id}\n@desc Update a Request Asset\n@required {account_id: str, request_id: str, asset_id: str}\n@optional {source: str # Asset file to upload.}\n@returns(200) Update request asset response.\n@errors {4XX: Update request asset response failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests/{request_id}/message\n@desc List Request Messages\n@required {account_id: str, request_id: str, page: int # Page number of results., per_page: int # Number of results per page.}\n@optional {after: any # Retrieve mes  ges created after this time., before: any # Retrieve messages created before this time., sort_by: str # Field to sort results by., sort_order: str(asc/desc) # Sort order (asc or desc).}\n@returns(200) List request messages response.\n@errors {4XX: List request messages response failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/requests/{request_id}/message/new\n@desc Create a New Request Message\n@required {account_id: str, request_id: str}\n@optional {content: str # Content of message.}\n@returns(200) Create request message response.\n@errors {4XX: Create request message response failure.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/requests/{request_id}/message/{message_id}\n@desc Delete a Request Message\n@required {account_id: str, request_id: str, message_id: int}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete request message response.\n@errors {4XX: Delete request message response failure.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/requests/{request_id}/message/{message_id}\n@desc Update a Request Message\n@required {account_id: str, request_id: str, message_id: int}\n@optional {content: str # Content of message.}\n@returns(200) Update request message response.\n@errors {4XX: Update request message response failure.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/rules\n@desc Delete all rules\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {deleted: num} # All rules deleted.\n@errors {401: Unauthorized., 409: Bulk delete blocked because email rules require individual approval.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules\n@desc List rules\n@required {account_id: str # Cloudflare account ID.}\n@optional {namespace: any # Selects namespaces. Repeat the parameter to select multiple namespaces (for example, namespace=foo&namespace=bar)., path: any # Selects paths with exact-match semantics. Omit the parameter to return rules from all paths. Pass an empty string (path=) to return only rules with an empty or uncategorized path. Pass a value (for example, path=yara) to match that exact path. Repeat the parameter (for example, path=yara&path=expr) to OR-match multiple paths with SQL `IN (...)` semantics. The `recursive` flag affects only customer-account namespace selection., recursive: str(true/false) # For customer accounts, true enables descendant matching for namespaces. Paths always use exact matching., search: str, is_public: str(true/false) # Limits rules to the specified public visibility., limit: num=50, offset: num=0}\n@returns(200) {rules: [map], total: num} # List of rules.\n@errors {401: Unauthorized.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules\n@desc Create a rule\n@required {account_id: str # Cloudflare account ID., content: str, name: str, path: str}\n@optional {actions: [map{action_config!: map, action_type!: str, enabled: bool}], commit_message: str # Human-readable justification for this change. Required for internal-account submissions; optional for customer accounts and automated sync., description: str # Human-readable description of the rule. Auto-extracted from YARA meta if present., enabled: bool=true # Whether this rule is active for dice consumers., is_public: bool=false # Whether this rule is visible to other internal accounts., meta: [map{key!: str, value!: any}] # Adds YARA meta entries to the rule's meta block and stores them in rule_meta alongside content metadata. Use valid YARA identifiers for keys; exclude 'name', 'enabled', and 'description'. You may repeat keys., namespaces: [str]= # Optional WfP deployment tags (customer rules only). Internal rules leave empty.}\n@returns(201) {content: str, created_at: num, created_by: str, description: str, enabled: bool, id: str(uuid), is_public: bool, meta: [map], name: str, namespaces: [str], path: str, pending_approval_id: num?, pending_change: map?{approval_id: num, requested_at: num, requested_by: str, type: str}, structured_source: str?, updated_at: num, updated_by: str} # Rule created (non-email customer accounts, or silent warning-free customer email rules).\n@returns(202) {approval_id: num, message: str} # Rule pending approval (internal accounts, blocking customer email rules, and customer email rules with compiler warnings).\n@errors {400: Validation error., 401: Unauthorized.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/approvals\n@desc List rule approvals\n@required {account_id: str # Cloudflare account ID.}\n@optional {status: any=pending # Selects approval statuses. Repeat the parameter to OR-match statuses (for example, status=pending&status=rejected). Use status=all alone to disable status filtering., latest_only: str(true/false)=false # When true, returns the newest revision in each approval chain., limit: num=50, offset: num=0, reviewer_scope: str(default/email/unresolved) # Limits approvals to the specified reviewer scope., change_type: str(create/update/delete) # Limits approvals to the specified mutation type., rule_id: str(uuid) # Filter approvals by rule ID.}\n@returns(200) {approvals: [map], total: num} # List of approvals.\n@errors {400: Invalid approval filter., 403: Cross-account approval access is restricted.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/approvals/{id}\n@desc Get rule approval details\n@required {account_id: str # Cloudflare account ID., id: str # The unique identifier for the approval.}\n@returns(200) {approval: map{audit_log_id: num, can_review: bool, cancelled_at: num?, cancelled_by: str?, change_description: str, change_type: str, commit_message: str?, compiler_warnings: [map], current_rule: any?, id: num, proposed_changes: any?, rejection_reason: str?, requested_at: num, requested_by: str, reviewed_at: num?, reviewer_scope: str, revision_number: int, rule_id: str(uuid), rule_name: str, status: str, superseded_by_approval_id: num?, supersedes_approval_id: num?}} # Approval details.\n@errors {400: Invalid approval detail request., 403: Cross-account approval access is restricted., 404: Approval not found.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/approvals/{id}/cancel\n@desc Cancel a pending approval\n@required {account_id: str # Cloudflare account ID., id: str # The unique identifier for the approval.}\n@returns(200) {success: bool} # Approval cancelled\n@errors {403: Not authorized to cancel this approval, 404: Approval not found, 409: Approval is no longer pending}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/approvals/{id}/resubmit\n@desc Revise and resubmit a rejected approval\n@required {account_id: str # Cloudflare account ID., id: str # The unique identifier for the approval.}\n@optional {commit_message: str, content: str, description: str, enabled: bool, name: str, namespaces: [str]}\n@returns(202) {approval_id: num, message: str, requires_approval: bool, revision_number: int, supersedes_approval_id: num} # New approval revision submitted.\n@errors {400: Validation error., 403: Not authorized to resubmit this approval., 404: Approval or underlying rule not found., 409: Resubmission requires a rejected, unsuperseded approval.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/rules/exemptions\n@desc Remove patterns from exemption rules\n@required {account_id: str # Cloudflare account ID.}\n@optional {namespace: [str], tag_match: [str], worker_name: [str]}\n@returns(200) {namespace: [str], tag_match: [str], worker_name: [str]} # Full exemption state after the subtraction.\n@errors {400: Validation error., 401: Unauthorized., 403: Forbidden.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/exemptions\n@desc Get exemption rules for an account\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {namespace: [str], tag_match: [str], worker_name: [str]} # Exemption rules grouped by type.\n@errors {400: Validation error., 401: Unauthorized., 403: Forbidden.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/exemptions\n@desc Add patterns to exemption rules\n@required {account_id: str # Cloudflare account ID.}\n@optional {namespace: [str], tag_match: [str], worker_name: [str]}\n@returns(200) {namespace: [str], tag_match: [str], worker_name: [str]} # Full exemption state after the union.\n@errors {400: Validation error., 401: Unauthorized., 403: Forbidden.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/rules/exemptions\n@desc Update exemption rule patterns\n@required {account_id: str # Cloudflare account ID.}\n@optional {namespace: [map{new_pattern!: str, old_pattern!: str}], tag_match: [map{new_pattern!: str, old_pattern!: str}], worker_name: [map{new_pattern!: str, old_pattern!: str}]}\n@returns(200) {namespace: [str], tag_match: [str], worker_name: [str]} # Full exemption state after the updates.\n@errors {400: Validation error., 401: Unauthorized., 403: Forbidden., 404: Pattern not found., 409: New pattern already exists.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/managed\n@desc Get managed rules\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {metadata: map{fetched_at: str, total_rules: num}, rules: [map]} # Managed rules metadata.\n@errors {401: Unauthorized.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/search\n@desc Search rules\n@required {account_id: str # Cloudflare account ID., query: str # Natural-language or keyword search query.}\n@optional {namespace: any # Selects namespaces. Repeat the parameter to select multiple namespaces (for example, namespace=foo&namespace=bar)., path: any # Selects paths with exact-match semantics. Omit the parameter to return rules from all paths. Pass an empty string (path=) to return only rules with an empty or uncategorized path. Pass a value (for example, path=yara) to match that exact path. Repeat the parameter (for example, path=yara&path=expr) to OR-match multiple paths with SQL `IN (...)` semantics. The `recursive` flag affects only customer-account namespace selection., recursive: str(true/false) # For customer accounts, true enables descendant matching for namespaces. Paths always use exact matching., search: str, is_public: str(true/false) # Limits rules to the specified public visibility., limit: num=50, offset: num=0, mode: str(exact/hybrid/vector/keyword)=hybrid # Retrieval strategy used for the query., language: str(yara/js) # Limits results to the specified rule language.}\n@returns(200) {fallback: bool, interpreted: map{filters: map, retrieval_type: str}, mode: str, results: [any], total: int} # Hybrid and semantic rule search results.\n@errors {401: Unauthorized., 503: AI Search unavailable.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/stats\n@desc Get dashboard stats\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {pending_approvals: num, rules_by_namespace: map, total_rules: num} # Dashboard statistics.\n@errors {401: Unauthorized.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/structured\n@desc List email rules\n@required {account_id: str # Cloudflare account ID.}\n@optional {limit: num=50, offset: num=0, search: str}\n@returns(200) {rules: [map], total: num} # List of rules.\n@errors {400: Validation error.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/structured\n@desc Create an email rule\n@required {account_id: str # Cloudflare account ID., condition: map{conditions!: [any], operator!: str, type!: str} # Nested condition groups support up to 10 levels of depth., name: str}\n@optional {description: str, enabled: bool=true, meta: [map{key!: str, value!: any}], status: str(silent/blocking)=silent # Disposition for matching email. This emits status metadata with the selected value., strings: [map{identifier!: str, match_type: str, modifiers: [str], type!: str, value!: str}]=}\n@returns(201) {content: str, created_at: num, created_by: str, description: str, enabled: bool, id: str(uuid), is_public: bool, meta: [map], name: str, namespaces: [str], path: str, pending_approval_id: num?, pending_change: map?{approval_id: num, requested_at: num, requested_by: str, type: str}, structured_source: str?, updated_at: num, updated_by: str} # Email rule created immediately when submitted by a customer with silent status and no compiler warnings.\n@returns(202) {approval_id: num, message: str} # Rule pending approval (internal accounts, blocking customer rules, and customer rules with compiler warnings).\n@errors {400: Validation error., 401: Unauthorized.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/rules/structured/approvals/{id}\n@desc Update a pending structured email rule approval\n@required {account_id: str # Cloudflare account ID., id: str # The unique identifier for the approval., condition: map{conditions!: [any], operator!: str, type!: str} # Nested condition groups support up to 10 levels of depth., name: str}\n@optional {module: str=eml # Structured rule module., description: str, enabled: bool=true, meta: [map{key!: str, value!: any}], status: str(silent/blocking)=silent # Disposition for matching email. This emits status metadata with the selected value., strings: [map{identifier!: str, match_type: str, modifiers: [str], type!: str, value!: str}]=}\n@returns(200) {approval: any} # Pending approval updated.\n@errors {400: Structured rule validation or compilation failed., 403: Not authorized to update this approval., 404: Approval not found., 409: Approval is not pending or is not a structured EML rule.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/structured/approvals/{id}/resubmit\n@desc Revise and resubmit a rejected structured email rule approval\n@required {account_id: str # Cloudflare account ID., id: str # The unique identifier for the approval., condition: map{conditions!: [any], operator!: str, type!: str} # Nested condition groups support up to 10 levels of depth., name: str}\n@optional {module: str=eml # Structured rule module., description: str, enabled: bool=true, meta: [map{key!: str, value!: any}], status: str(silent/blocking)=silent # Disposition for matching email. This emits status metadata with the selected value., strings: [map{identifier!: str, match_type: str, modifiers: [str], type!: str, value!: str}]=}\n@returns(202) {approval_id: num, message: str, requires_approval: bool, revision_number: int, supersedes_approval_id: num} # New approval revision submitted.\n@errors {400: Structured rule validation or compilation failed., 403: Not authorized to resubmit this approval., 404: Approval or underlying rule not found., 409: Approval is not rejected or was already superseded.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/structured/schema\n@desc Get email rule schema\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {arrays: [map], headers: map{fields: [map], path: str}, operators: map{boolean: [str], float: [str], integer: [str], string: [str]}, scalars: [map], string_arrays: [map], structs: [map]} # Email rule field catalog.\n@errors {400: Validation error.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/structured/validate\n@desc Validate an email rule\n@required {account_id: str # Cloudflare account ID., condition: map{conditions!: [any], operator!: str, type!: str} # Nested condition groups support up to 10 levels of depth., name: str}\n@optional {description: str, enabled: bool=true, existing_rule_id: str(uuid) # Existing rule ID to exclude from duplicate-name checks when validating an update., meta: [map{key!: str, value!: any}], status: str(silent/blocking)=silent # Disposition for matching email. This emits status metadata with the selected value., strings: [map{identifier!: str, match_type: str, modifiers: [str], type!: str, value!: str}]=}\n@returns(200) {compiled_yara: str, error: str, valid: bool} # Validation result.\n@errors {400: Validation error.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/rules/structured/{id}\n@desc Delete an email rule\n@required {account_id: str # Cloudflare account ID., id: str(uuid) # The unique identifier for the rule.}\n@returns(200) {success: bool} # Email rule deleted.\n@returns(202) {approval_id: num, message: str} # Deletion pending approval (internal accounts and customer email rules).\n@errors {400: Validation error., 401: Unauthorized., 404: Rule not found., 409: Another approval is already pending for this rule.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/structured/{id}\n@desc Get an email rule\n@required {account_id: str # Cloudflare account ID., id: str(uuid) # The unique identifier for the rule.}\n@returns(200) {content: str, created_at: num, created_by: str, description: str, enabled: bool, id: str(uuid), is_public: bool, meta: [map], name: str, namespaces: [str], path: str, pending_approval_id: num?, pending_change: map?{approval_id: num, requested_at: num, requested_by: str, type: str}, structured_source: str?, updated_at: num, updated_by: str} # Rule details.\n@errors {400: Validation error., 404: Rule not found.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/rules/structured/{id}\n@desc Update an email rule\n@required {account_id: str # Cloudflare account ID., id: str(uuid) # The unique identifier for the rule.}\n@optional {condition: map{conditions!: [any], operator!: str, type!: str} # Nested condition groups support up to 10 levels of depth., description: str, enabled: bool, meta: [map{key!: str, value!: any}], name: str, status: str(silent/blocking) # Disposition for matching email. This emits status metadata with the selected value., strings: [map{identifier!: str, match_type: str, modifiers: [str], type!: str, value!: str}]}\n@returns(200) {content: str, created_at: num, created_by: str, description: str, enabled: bool, id: str(uuid), is_public: bool, meta: [map], name: str, namespaces: [str], path: str, pending_approval_id: num?, pending_change: map?{approval_id: num, requested_at: num, requested_by: str, type: str}, structured_source: str?, updated_at: num, updated_by: str} # Rule updated immediately when submitted by a customer with silent status and no compiler warnings.\n@returns(202) {approval_id: num, message: str} # Update pending approval (internal accounts, blocking customer rules, and customer rules with compiler warnings).\n@errors {400: Validation error., 401: Unauthorized., 404: Rule not found., 409: Another approval is already pending for this rule.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/structured/{id}/test\n@desc Test an email rule\n@required {account_id: str # Cloudflare account ID., id: str(uuid) # The unique identifier for the rule., sample_json: str}\n@returns(200) {error: str, matched: bool, rules: [str]} # Test result.\n@errors {400: Validation error., 404: Rule not found.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/tree\n@desc Get folder tree structure\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {tree: [map]} # Folder tree structure.\n@errors {401: Unauthorized.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/rules/validate\n@desc Validate rule with context\n@required {account_id: str # Cloudflare account ID., content: str, name: str}\n@optional {excludeRuleId: str(uuid), namespaces: [str]=, path: str}\n@returns(200) {error: str, valid: bool} # Validation result.\n@errors {401: Unauthorized.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/rules/{id}\n@desc Delete a rule\n@required {account_id: str # Cloudflare account ID., id: str(uuid) # The unique identifier for the rule.}\n@optional {commit_message: str # Human-readable justification for the deletion. Required for internal-account submissions; optional for customer accounts and automated sync.}\n@returns(200) {success: bool} # Rule deleted (non-email customer accounts).\n@returns(202) {approval_id: num, message: str} # Deletion pending approval (internal accounts and customer email rules).\n@errors {400: Validation error (e.g. commit_message exceeds max length)., 401: Unauthorized., 404: Rule not found., 409: Another approval is already pending for this rule.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/rules/{id}\n@desc Get a rule\n@required {account_id: str # Cloudflare account ID., id: str(uuid) # The unique identifier for the rule.}\n@returns(200) {content: str, created_at: num, created_by: str, description: str, enabled: bool, id: str(uuid), is_public: bool, meta: [map], name: str, namespaces: [str], path: str, pending_approval_id: num?, pending_change: map?{approval_id: num, requested_at: num, requested_by: str, type: str}, structured_source: str?, updated_at: num, updated_by: str} # Rule details.\n@errors {401: Unauthorized., 404: Rule not found.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/rules/{id}\n@desc Update a rule\n@required {account_id: str # Cloudflare account ID., id: str(uuid) # The unique identifier for the rule.}\n@optional {commit_message: str # Human-readable justification for this change. Required for internal-account submissions; optional for customer accounts and automated sync., content: str, description: str # Human-readable description of the rule. Auto-extracted from YARA meta if present., enabled: bool # Whether this rule is active for dice consumers., is_public: bool # Whether this rule is visible to other internal accounts., meta: [map{key!: str, value!: any}] # Adds YARA meta entries to the rule's meta block and stores them in rule_meta alongside content metadata. Use valid YARA identifiers for keys; exclude 'name', 'enabled', and 'description'. You may repeat keys., name: str, namespaces: [str], path: str # Path change goes through approval workflow.}\n@returns(200) {content: str, created_at: num, created_by: str, description: str, enabled: bool, id: str(uuid), is_public: bool, meta: [map], name: str, namespaces: [str], path: str, pending_approval_id: num?, pending_change: map?{approval_id: num, requested_at: num, requested_by: str, type: str}, structured_source: str?, updated_at: num, updated_by: str} # Rule updated (non-email customer accounts, or silent warning-free customer email rules).\n@returns(202) {approval_id: num, message: str} # Update pending approval (internal accounts, blocking customer email rules, and customer email rules with compiler warnings).\n@errors {401: Unauthorized., 404: Rule not found., 409: Another approval is already pending for this rule.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/scans/config\n@desc List Scan Configs\n@required {account_id: str # Defines the Account ID.}\n@returns(200) Returns all Scan Configs.\n@errors {4XX: List Scan Configs failure.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/scans/config\n@desc Create a new Scan Config\n@required {account_id: str # Defines the Account ID., ips: [str] # Defines a list of IP addresses or CIDR blocks to scan. The maximum number of total IP addresses allowed is 5000.}\n@optional {frequency: num # Defines the number of days between each scan (0 = One-off scan)., ports: [str] # Defines a list of ports to scan. Valid values are:\"default\", \"all\", or a comma-separated list of ports or range of ports (e.g. [\"1-80\", \"443\"]). \"default\" scans the 100 most commonly open ports.}\n@returns(200) Returns the created config.\n@errors {4XX: Create a new Scan Config failure.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/scans/config/{config_id}\n@desc Delete a Scan Config\n@required {account_id: str # Defines the Account ID., config_id: str # Defines the Config ID.}\n@returns(200) {errors: [str], messages: [str], result: map, success: bool} # Delete a Scan Config.\n@errors {4XX: Delete a Scan Config failure.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/scans/config/{config_id}\n@desc Update an existing Scan Config\n@required {account_id: str # Defines the Account ID., config_id: str # Defines the Config ID.}\n@optional {frequency: num # Defines the number of days between each scan (0 = One-off scan)., ips: [str] # Defines a list of IP addresses or CIDR blocks to scan. The maximum number of total IP addresses allowed is 5000., ports: [str] # Defines a list of ports to scan. Valid values are:\"default\", \"all\", or a comma-separated list of ports or range of ports (e.g. [\"1-80\", \"443\"]). \"default\" scans the 100 most commonly open ports.}\n@returns(200) Returns the updated config.\n@errors {4XX: Update an Existing Scan Config failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/scans/results/{config_id}\n@desc Get the Latest Scan Result\n@required {account_id: str # Defines the Account ID., config_id: str # Defines the Config ID.}\n@returns(200) {errors: [str], messages: [str], result: map{1.1.1.1: [map]}, success: bool} # Returns Current Open Ports.\n@errors {4XX: Get the Latest Scan Result failure.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/domain/matches\n@desc List saved query matches\n@required {account_id: str, query_id: [str]}\n@optional {offset: str=0, limit: str=50, include_domain_id: str=false, include_dismissed: str, domain_search: str, orderBy: str(domain/first_seen/registrar), order: str(asc/desc)}\n@returns(200) {matches: [map], total: int} # Successfully retrieved query matches\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/domain/matches/bulk-dismiss\n@desc Bulk dismiss or undismiss matches\n@required {account_id: str, action: str(dismiss/undismiss)}\n@optional {match_ids: [int], matches: [map{domain_id!: int, query_id!: int}]}\n@returns(200) Bulk dismiss/undismiss results\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/domain/queries\n@desc Get queries\n@required {account_id: str}\n@optional {id: str, page: int, per_page: int}\n@returns(200) {errors: [map], messages: [map], result: any, result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Successfully retrieved queries\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/domain/queries\n@desc Insert query\n@required {account_id: str, string_matches: [map{pattern!: str}], tag: str}\n@optional {max_time: str, min_time: str, scan: bool, scan_matches: bool, search_lookback: bool=true # If true, search recent domain lookback entries for matches}\n@returns(200) {message: str, query_id: int, success: bool} # Query inserted successfully\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/brand-protection/domain/queries/{query_id}\n@desc Delete domain query\n@required {account_id: str, query_id: str}\n@returns(200) {message: str, success: bool} # Domain query deleted successfully\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/brand-protection/domain/queries/{query_id}\n@desc Update domain query\n@required {account_id: str, query_id: str, string_matches: [map{pattern!: str}], tag: str}\n@optional {max_time: str, min_time: str, scan: bool, scan_matches: bool, search_lookback: bool=true # If true, search recent domain lookback entries for matches}\n@returns(200) {message: str, query_id: int, success: bool} # Domain query updated successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/domain/trial\n@desc Analyze domains for brand impersonation\n@required {account_id: str, brand: str}\n@returns(200) {matches: [map], total_analyzed: num, total_matches: num, truncated: bool} # Domain analysis results\n@errors {403: Brand is not a zone belonging to this account, 502: Zone ownership check failed (upstream error), 503: Zone ownership check is not configured}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/letter/generate\n@desc Generate takedown letter\n@required {account_id: str, fields: map{discoveryDate: str, domain: str, generationDate: str, jurisdiction: str, registrantEmail: str, registrar: str, registrarEmail: str, resolutionByDate: str, senderCompany: str, senderEmail: str, senderName: str, senderTitle: str, trademarkName: str, trademarkNumber: str, trademarkOwner: str}, templateId: str}\n@optional {createNotice: bool=false, format: str(text/pdf)=text, noticeParams: map{domain!: str, queryId: int, status: str}}\n@returns(200) {letter: str, letterId: int, notice: map{createdAt: str?, domain: str, id: num, matchId: num?, matchType: str?, queryId: num?, status: str, updatedAt: str?}} # Letter generated successfully. When format=text, returns V4 JSON with { result: { letter: string } }. When format=pdf, returns binary with Content-Type: application/pdf.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/letter/templates\n@desc List letter templates\n@required {account_id: str}\n@returns(200) {templates: [map]} # Templates listed successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/letter/templates\n@desc Create letter template\n@required {account_id: str, body: str, category: str, name: str}\n@optional {description: str}\n@returns(200) {body: str, category: str, createdAt: str?, description: str?, id: str, name: str, source: str, updatedAt: str?} # Template created successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/letter/templates/examples\n@desc List example letter templates\n@required {account_id: str}\n@returns(200) {templates: [map]} # Example templates listed successfully\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/brand-protection/letter/templates/{template_id}\n@desc Delete letter template\n@required {account_id: str, template_id: str}\n@returns(200) {message: str, success: bool} # Template deleted successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/letter/templates/{template_id}\n@desc Get letter template\n@required {account_id: str, template_id: str}\n@returns(200) {body: str, category: str, createdAt: str?, description: str?, id: str, name: str, source: str, updatedAt: str?} # Template retrieved successfully\n@errors {4XX: Client error response.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/v2/brand-protection/letter/templates/{template_id}\n@desc Update letter template\n@required {account_id: str, template_id: str}\n@optional {body: str, category: str, description: str, name: str}\n@returns(200) {body: str, category: str, createdAt: str?, description: str?, id: str, name: str, source: str, updatedAt: str?} # Template updated successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/logo/matches\n@desc List logo matches\n@required {account_id: str, query_id: str}\n@optional {offset: str=0, limit: str=50, download: str, orderBy: str(matchedAt/domain/similarityScore/registrar), order: str(asc/desc)}\n@returns(200) {matches: [map], total: int} # Successfully retrieved logo matches\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/logo/queries\n@desc Get logo queries\n@required {account_id: str}\n@optional {id: str # Optional query ID to retrieve a specific logo query, download: str # If true, include base64-encoded image data in the response}\n@returns(200) Successfully retrieved logo queries\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/logo/queries\n@desc Insert logo query\n@required {account_id: str, image_data: str # Base64 encoded image data. Can include data URI prefix (e.g., 'data:image/png;base64,...') or just the base64 string., similarity_threshold: num # Minimum similarity score (0-1) required for visual matches, tag: str # Unique identifier for the logo query}\n@optional {search_lookback: bool=true # If true, search historic scanned images for matches above the similarity threshold}\n@returns(200) {message: str, query_id: int, success: bool} # Logo query inserted successfully\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/brand-protection/logo/queries/{query_id}\n@desc Delete logo query\n@required {account_id: str, query_id: str}\n@returns(200) {message: str, success: bool} # Logo query deleted successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/logo/search\n@desc Search scanned images\n@required {account_id: str, image_data: str # Base64 encoded image data. Can include data URI prefix (e.g., 'data:image/png;base64,...') or just the base64 string.}\n@optional {showHistoric: str=false # Include scanned images without domain metadata (historic data). Default: false (only show images with domain), download: str # If true, include base64-encoded image data in the response, score_threshold: num=0 # Minimum similarity score threshold for matches (0-1, default: 0), top_k: int=10 # Number of closest matches to return (1-100, default: 10)}\n@returns(200) {matches: [map]} # Scanned images search completed successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/queries/{query_id}/matches/{domain_id}/dismiss\n@desc Dismiss a match\n@required {account_id: str, query_id: int, domain_id: int}\n@returns(200) {result: map{dismissed: bool, domain_id: int, query_id: int}, success: bool} # Match dismissed successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/queries/{query_id}/matches/{domain_id}/undismiss\n@desc Undismiss a match\n@required {account_id: str, query_id: int, domain_id: int}\n@returns(200) {result: map{dismissed: bool, domain_id: int, query_id: int}, success: bool} # Match undismissed successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices\n@desc List takedown notices\n@required {account_id: str}\n@returns(200) {notices: [map]} # Takedown notices listed successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices\n@desc Create takedown notice\n@required {account_id: str, domain: str}\n@optional {matchId: int, matchType: str(logo/domain), queryId: int, status: str(draft/sent/resolved/expired)=draft}\n@returns(200) {createdAt: str?, domain: str, id: num, matchId: num?, matchType: str?, queryId: num?, status: str, updatedAt: str?} # Takedown notice created successfully\n@errors {409: A takedown notice already exists for this domain}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/lookup\n@desc Lookup takedown notices by domains\n@required {account_id: str, domains: [str]}\n@optional {queryId: int, queryIds: [int]}\n@returns(200) {notices: [map]} # Takedown notice lookup results\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}\n@desc Delete takedown notice\n@required {account_id: str, notice_id: int}\n@returns(200) {message: str, success: bool} # Takedown notice deleted successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}\n@desc Get takedown notice\n@required {account_id: str, notice_id: int}\n@returns(200) {createdAt: str?, domain: str, id: num, matchId: num?, matchType: str?, queryId: num?, status: str, updatedAt: str?} # Takedown notice retrieved successfully\n@errors {4XX: Client error response.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}\n@desc Update takedown notice\n@required {account_id: str, notice_id: int}\n@optional {domain: str, matchId: int, matchType: str(logo/domain), queryId: int, status: str(draft/sent/resolved/expired)}\n@returns(200) {createdAt: str?, domain: str, id: num, matchId: num?, matchType: str?, queryId: num?, status: str, updatedAt: str?} # Takedown notice updated successfully\n@errors {409: A takedown notice already exists for the target domain}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}/letters\n@desc List takedown letters\n@required {account_id: str, notice_id: int}\n@returns(200) {letters: [map]} # Takedown letters listed successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}/letters\n@desc Create takedown letter\n@required {account_id: str, notice_id: int, fields: map{discoveryDate: str, domain: str, generationDate: str, jurisdiction: str, registrantEmail: str, registrar: str, registrarEmail: str, resolutionByDate: str, senderCompany: str, senderEmail: str, senderName: str, senderTitle: str, trademarkName: str, trademarkNumber: str, trademarkOwner: str}, templateId: str}\n@returns(200) {createdAt: str?, id: num, letterText: str, letterType: str, takedownNoticeId: num, templateId: str} # Takedown letter created successfully\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}/letters/{letter_id}\n@desc Delete takedown letter\n@required {account_id: str, notice_id: int, letter_id: int}\n@returns(200) {message: str, success: bool} # Takedown letter deleted successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}/letters/{letter_id}\n@desc Get takedown letter\n@required {account_id: str, notice_id: int, letter_id: int}\n@returns(200) {createdAt: str?, id: num, letterText: str, letterType: str, takedownNoticeId: num, templateId: str} # Takedown letter retrieved successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/takedown-notices/{notice_id}/letters/{letter_id}/pdf\n@desc Download takedown letter PDF\n@required {account_id: str, notice_id: int, letter_id: int}\n@returns(200) Takedown letter PDF downloaded successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/brand-protection/total-queries\n@desc Get total queries\n@required {account_id: str}\n@returns(200) Successfully retrieved total query count\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/collections\n@desc List collections\n@required {account_id: str # Account ID}\n@optional {page: num # Page number, limit: num # Items per page}\n@returns(200) {pagination: map{limit: num, page: num, total: num}, result: [map], success: bool} # Collections retrieved successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/collections\n@desc Create a new collection\n@required {account_id: str # Account ID}\n@returns(201) {result: map{columns: [map], created_at: str(date-time), created_by: str, description: str, id: str(uuid), item_count: int, name: str, project_id: str, status: str, tags: [str], updated_at: str(date-time)}, success: bool} # Collection created successfully\n@errors {400: Invalid request - validation failed, 409: Collection with this name already exists, 413: File too large (max 10MB) or too many rows (max 300,000)}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}\n@desc Delete collection\n@required {account_id: str # Account ID, collection_id: str # Collection UUID}\n@returns(200) {errors: [map], messages: [map], success: bool} # Collection deleted successfully\n@errors {404: Collection not found}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}\n@desc Get collection\n@required {account_id: str # Account ID, collection_id: str # Collection UUID}\n@returns(200) {result: map{columns: [map], created_at: str, created_by: str, id: str, item_count: num, metadata: map, name: str, status: str, updated_at: str}, success: bool} # Collection retrieved successfully\n@errors {404: Collection not found}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}\n@desc Update collection\n@required {account_id: str # Account ID, collection_id: str # Collection UUID}\n@optional {metadata: map{description: str, project_id: str, tags: [str]}, name: str # Collection name}\n@returns(200) {result: map{created_at: str, created_by: str, id: str, item_count: num, metadata: map, name: str, status: str, updated_at: str}, success: bool} # Collection updated successfully\n@errors {404: Collection not found}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/columns\n@desc Add column to collection\n@required {account_id: str # Account ID, collection_id: str # Collection UUID, name: str, type: str(text/number/boolean/date)}\n@optional {default: map, required: bool=false}\n@returns(200) {result: map{id: str(uuid), name: str, position: num, required: bool, type: str}, success: bool} # Column added successfully\n@errors {404: Collection not found, 409: Column with this name already exists}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/columns/{column_id}\n@desc Delete column\n@required {account_id: str, collection_id: str, column_id: str # Column UUID}\n@returns(200) {result: map{id: str, name: str, position: num, required: bool, type: str}} # Column deleted successfully\n@errors {400: Cannot delete imported column, 404: Collection or column not found}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/columns/{column_id}\n@desc Update column\n@required {account_id: str, collection_id: str, column_id: str # Column UUID}\n@optional {name: str # New column name (must be unique), position: num # Column display order, required: bool # Whether column is required, type: str(text/number/boolean/date) # Column type: text, number, boolean, or date}\n@returns(200) {result: map{id: str, name: str, position: num, required: bool, type: str}} # Column updated successfully\n@errors {400: Invalid request (validation error), 404: Collection or column not found, 409: New column name conflicts with existing column}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/export\n@desc Export collection to CSV, JSONL, or Markdown\n@required {account_id: str # Account ID (hex format), collection_id: str # Collection UUID}\n@optional {include_ids: bool # Include item IDs in export (default: false), accept: str # Requested format: text/csv (default), application/x-ndjson, text/markdown}\n@returns(200) Streaming export response\n@errors {404: Collection not found, 406: Unsupported format requested}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/items\n@desc Query collection items\n@required {account_id: str # Account ID, collection_id: str # Collection UUID}\n@optional {cursor: str # Opaque pagination cursor from a previous response. Omit for the first page., limit: num # Items per page, q: str # Case-insensitive substring search across all columns. Matches any column containing the term. No relevance ranking.}\n@returns(200) {pagination: map{cursors: map{current: str, first: str, next: str?, prev: str?}, limit: num, page: num, total: num}, result: [map], success: bool} # Items retrieved successfully\n@errors {400: Invalid cursor, 404: Collection not found}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/items\n@desc Create item(s)\n@required {account_id: str, collection_id: str}\n@returns(201) Item(s) created successfully\n@errors {400: Validation error, 404: Collection not found}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/items/{item_id}\n@desc Delete collection item\n@required {account_id: str, collection_id: str, item_id: str}\n@returns(200) {result: map{deleted: bool}, success: bool} # Item deleted\n@errors {404: Collection or item not found}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/items/{item_id}\n@desc Get collection item\n@required {account_id: str, collection_id: str, item_id: str}\n@returns(200) {result: map{created_at: str, data: map, id: str, updated_at: str}, success: bool} # Item retrieved\n@errors {404: Collection or item not found}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/items/{item_id}\n@desc Update collection item\n@required {account_id: str, collection_id: str, item_id: str, data: map}\n@returns(200) {result: map{created_at: str, data: map, id: str, updated_at: str}, success: bool} # Item updated\n@errors {400: Validation error, 404: Collection or item not found}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/collections/{collection_id}/search\n@desc Search items (advanced filtering)\n@required {account_id: str # Account ID, collection_id: str # Collection UUID}\n@optional {cursor: str, filter: map # Recursive filter supporting AND/OR nesting of conditions. Can be either a leaf condition (field/op/value) or a logical group (and/or array of nested filters)., limit: int=20, q: str # Case-insensitive substring search across all columns. Matches any column containing the term. No relevance ranking., sort: map{field!: str, order: str}}\n@returns(200) {pagination: map{cursors: map{current: str, first: str, next: str?, prev: str?}, limit: num, page: num, total: num}, result: [map], success: bool} # Items matching search criteria\n@errors {400: Invalid filter syntax or cursor, 404: Collection not found}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/credential-monitor/domains\n@desc List monitored domains\n@required {account_id: str # Account ID}\n@optional {page: int=1 # Page number, per_page: int=100 # Items per page}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # List of monitored domains\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/credential-monitor/domains\n@desc Create monitored domain\n@required {account_id: str # Account ID, domain: str # Domain to monitor (e.g. my-company.com)}\n@returns(201) {result: map{domain: str, id: int}, success: bool} # Domain registered successfully\n@errors {400: Bad Request., 409: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/credential-monitor/domains/{id}\n@desc Delete monitored domain\n@required {account_id: str # Account ID, id: int # Domain ID}\n@returns(200) {result: map{deleted: bool, domain: str, id: int}, success: bool} # Domain deleted successfully\n@errors {404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/credential-monitor/matches\n@desc List credential matches\n@required {account_id: str # Account ID}\n@optional {domain: str # Filter by domain (exact match), username: str # Filter by username (partial match), page: int=1 # Page number, per_page: int=100 # Items per page}\n@returns(200) {result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # List of credential matches\n@errors {400: Bad Request.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/events/graphql\n@desc GraphQL endpoint for event aggregation\n@required {account_id: str # Account ID.}\n@returns(200) {data: map?, errors: [map]?} # GraphQL response payload (data and errors).\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/priority-intelligence\n@desc List priority intelligence requirements for an account\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) List of PIRs\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/priority-intelligence\n@desc Create a priority intelligence requirement\n@required {account_id: str, requirement: str}\n@optional {labels: [str]=, priority: int=0, tlp: str=amber}\n@returns(200) PIR created successfully\n@errors {403: Account not entitled to create PIRs, 429: PIR quota exceeded}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/constants\n@desc Get PIR constants (methods, dimensions, and TLP values)\n@required {account_id: str}\n@returns(200) PIR constants\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests\n@desc List account interests for PIR Option 2\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, enabled: str(true/false)}\n@returns(200) Interest list\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests\n@desc Create an account interest for PIR Option 2\n@required {account_id: str, dimension: str(actor/targetIndustry/category/country/attackerCountry/targetCountry/mitreAttack/killChain/mitreCapec), value: str}\n@optional {enabled: bool=true}\n@returns(200) Interest created\n@errors {400: Invalid interest, 409: Interest already exists}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests/backtests\n@desc Backtest account-interest change detection\n@required {account_id: str}\n@optional {as_of: str(date-time), backtest_days: int=30, candidate_limit: int, dataset_ids: [str], emerging_min_current_count: int, established_min_absolute_delta: int, established_min_prior_count: int, established_min_relative_delta: num, window_days: int=7}\n@returns(200) Completed account-interest backtest\n@errors {400: Invalid or over-limit backtest parameters}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests/backtests/{backtest_id}\n@desc Get a persisted account-interest backtest\n@required {account_id: str, backtest_id: str(uuid)}\n@returns(200) Persisted evaluation\n@errors {404: Evaluation not found}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests/evaluations\n@desc Evaluate recent event-dated changes for account interests\n@required {account_id: str}\n@optional {as_of: str(date-time), candidate_limit: int, dataset_ids: [str], emerging_min_current_count: int, established_min_absolute_delta: int, established_min_prior_count: int, established_min_relative_delta: num, window_days: int=7}\n@returns(200) Completed account-interest evaluation\n@errors {400: Invalid evaluation parameters}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests/evaluations/{evaluation_id}\n@desc Get a persisted account-interest evaluation\n@required {account_id: str, evaluation_id: str(uuid)}\n@returns(200) Persisted evaluation\n@errors {404: Evaluation not found}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests/{interest_id}\n@desc Delete an account interest for PIR Option 2\n@required {account_id: str, interest_id: str(uuid)}\n@returns(200) Interest deleted\n@errors {404: Interest not found}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/interests/{interest_id}\n@desc Update an account interest for PIR Option 2\n@required {account_id: str, interest_id: str(uuid)}\n@optional {enabled: bool, value: str}\n@returns(200) Interest updated\n@errors {404: Interest not found, 409: Interest already exists}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/quota\n@desc Get PIR quota for an account\n@required {account_id: str}\n@returns(200) PIR quota information\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/{priority_id}\n@desc Delete a priority intelligence requirement\n@required {account_id: str, priority_id: str(uuid)}\n@returns(200) PIR deleted successfully\n@errors {404: PIR not found}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/{priority_id}\n@desc Get a priority intelligence requirement by ID\n@required {account_id: str, priority_id: str(uuid)}\n@returns(200) PIR details\n@errors {404: PIR not found}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/v2/priority-intelligence/{priority_id}\n@desc Update a priority intelligence requirement\n@required {account_id: str, priority_id: str(uuid)}\n@optional {labels: [str], priority: int, requirement: str, tlp: str}\n@returns(200) PIR updated successfully\n@errors {404: PIR not found}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/legal-response/access-check\n@desc Check if current user is allowlisted for Legal Response\n@required {account_id: str # Account ID (used for JWT validation only)}\n@returns(200) {errors: [str], messages: [str], result: map{allowed: bool}, success: bool} # Access decision for the JWT user\n@errors {401: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}\n@desc List RFIs\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type}\n@optional {page: num, pageSize: num, status: str, search: str, createdBy: str # Filter by creator email. NOTE: For the `legal-response` project type this query parameter is **rejected with HTTP 400** — the server derives the filter from the authenticated user's JWT automatically and does not accept a client-supplied value. Requests to `legal-response` with no valid JWT identity are rejected with HTTP 401., assignee: str, requestType: str, priority: str, tlp: str, id: str, readableId: str, summary: str, accountId: str, metadata: str # JSON string object of metadata filters. Supports two formats: 1) Simple values for exact match (backward compatible): {\"status\": \"open\"} 2) Operator objects for advanced filtering: {\"identifiers\": {\"operator\": \"contains_line\", \"value\": \"blah.com\"}}. Available operators: 'eq' (exact match, default), 'contains' (substring match), 'contains_line' (match complete line in newline-separated text). Date fields are automatically normalized to YYYY-MM-DD format., orderBy: str, order: str}\n@returns(200) {pagination: map{page: num, pageSize: num, total: num, totalPages: num}, result: [map], success: str} # Returns a paginated list of RFIs.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}\n@desc Creates a new RFI\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type}\n@optional {description: str # RFI description (optional). Defaults to an empty string when omitted., eventId: str # Optional related event ID, metadata: map # Optional metadata fields specific to the RFI type, priority: str(low/routine/high/urgent/unknown/medium/critical) # RFI priority. Four-level projects use `low`, `routine`, `high`, `urgent`; existing projects retain legacy `low`->routine compatibility. `medium`, `critical`, and `unknown` remain accepted legacy aliases. Defaults to `routine`., request_type: str # Optional request type for the request, subtypeId: str # Optional subtype ID, title: str # RFI title (optional). When omitted, the server generates a summary from the request type and readable ID., tlp: str(clear/green/amber/amber-strict/red/purple/white/amber+strict) # Traffic Light Protocol level. Canonical values are `clear`, `green`, `amber`, `amber-strict`, `red`, `purple`. `white` and `amber+strict` are accepted input aliases; responses always use the canonical spelling.}\n@returns(201) {account: map{anniversary: str(date-time), id: str, name: str}, assignee: str?, completed: str(date-time)?, created: str(date-time), id: str, investigation_id: str, is_free_request: bool, message_tokens: num, priority: str, readable_id: str, release_entitlements: str?, report_id: str, request: map{category: str, message_tokens: num, name: str, request_tokens: num, response_tokens: num, result: str, source: str}, status: str, summary: str, tlp: str, tokens: num, updated: str(date-time)} # Returns the created RFI.\n@errors {400: Bad Request., 500: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/constants\n@desc Get request constants\n@required {account_id: str # Account ID, project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # Project type}\n@returns(200) {properties: map{result: map{properties: map{priority: map, priority_token_surcharge: map, status: map, tlp: map}, type: str}, success: map{type: str}}, type: str} # Request constants retrieved successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/metadata\n@desc List metadata fields for an RFI type\n@required {account_id: str # Account ID, project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # Project type}\n@optional {request_type: str # Filter fields to those applicable to this request type. Fields without request type restrictions are always included., country: str # Exclude fields restricted for this alpha-2 country code}\n@returns(200) {data: [map], success: bool} # Metadata fields retrieved successfully\n@errors {401: Unauthorized}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/quota\n@desc Get request token quota\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type}\n@returns(200) Quota information\n@errors {404: Project type does not use token billing, or account not found, 422: Account has an invalid anniversary date}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/types\n@desc List visible request types for a project (dashboard)\n@required {account_id: str, project_type: str}\n@returns(200) {result: map{project_type: str, request_types: [map], total: num}, success: bool} # Request types listed successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/user/me\n@desc Get current user profile\n@required {account_id: str # Account ID, project_type: str # RFI project type}\n@returns(200) {display_name: str, id: str} # User profile retrieved successfully\n@errors {404: User not found}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}\n@desc Get an RFI by ID\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type. Valid values: threat-intelligence, incident-response, ir-emergency-response, table-top, pentest, irp, threat-hunting, cybersecurity-assessment, react-general, legal-response, soc-alerts, demo, request_id: str # RFI UUID}\n@returns(200) {account: map{anniversary: str(date-time), id: str, name: str}, assignee: str?, completed: str(date-time)?, created: str(date-time), id: str, investigation_id: str, is_free_request: bool, message_tokens: num, priority: str, readable_id: str, release_entitlements: str?, report_id: str, request: map{category: str, message_tokens: num, name: str, request_tokens: num, response_tokens: num, result: str, source: str}, status: str, summary: str, tlp: str, tokens: num, updated: str(date-time)} # Returns the RFI details with related data.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}\n@desc Update an RFI\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type. Valid values: threat-intelligence, incident-response, ir-emergency-response, table-top, pentest, irp, threat-hunting, cybersecurity-assessment, react-general, legal-response, soc-alerts, demo, request_id: str # RFI UUID}\n@optional {description: str # RFI description, eventId: str # Optional related event ID, priority: str(low/routine/high/urgent/unknown/medium/critical) # RFI priority. Four-level projects use a distinct `low` level; existing projects retain legacy `low`->routine compatibility. `medium`, `critical`, and `unknown` remain accepted legacy aliases., request_type: str # Request type. May only be changed while the request is still open; changing it recalculates the request's token cost., subtypeId: str # Optional subtype ID, summary: str # RFI summary, title: str # RFI title (alias for summary field), tlp: str(clear/green/amber/amber-strict/red/purple/white/amber+strict) # Traffic Light Protocol level. `white` and `amber+strict` are accepted input aliases; responses always use the canonical spelling.}\n@returns(200) {account: map{anniversary: str(date-time), id: str, name: str}, assignee: str?, completed: str(date-time)?, created: str(date-time), id: str, investigation_id: str, is_free_request: bool, message_tokens: num, priority: str, readable_id: str, release_entitlements: str?, report_id: str, request: map{category: str, message_tokens: num, name: str, request_tokens: num, response_tokens: num, result: str, source: str}, status: str, summary: str, tlp: str, tokens: num, updated: str(date-time)} # Returns the updated RFI.\n@errors {400: Bad Request., 404: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}/assets/list\n@desc List assets in request (Customer)\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type. Valid values: threat-intelligence, incident-response, ir-emergency-response, table-top, pentest, irp, threat-hunting, cybersecurity-assessment, react-general, legal-response, soc-alerts, demo, request_id: str # RFI UUID}\n@returns(200) {properties: map{assets: map{items: map{properties: map, type: str}, type: str}, count: map{type: str}}, type: str} # Assets listed successfully\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}/assets/upload\n@desc Upload asset to request (Customer)\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type. Valid values: threat-intelligence, incident-response, ir-emergency-response, table-top, pentest, irp, threat-hunting, cybersecurity-assessment, react-general, legal-response, soc-alerts, demo, request_id: str # RFI UUID}\n@returns(200) {properties: map{contentType: map{type: str}, downloadable: map{description: str, type: str}, expiresAt: map{nullable: bool, type: str}, fileName: map{type: str}, fileSize: map{type: str}, id: map{type: str}, is_cloudflare_team: map{description: str, type: str}, metadata: map{additionalProperties: map{type: str}, nullable: bool, type: str}, origin: map{type: str}, state: map{type: str}, tlp: map{enum: [str], type: str}, uploadedAt: map{type: str}}, type: str} # Asset uploaded successfully\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}/assets/{asset_id}/download\n@desc Download asset (Customer)\n@required {account_id: str # Account ID., project_type: str(threat-intelligence/incident-response/ir-emergency-response/table-top/pentest/irp/threat-hunting/cybersecurity-assessment/react-general/legal-response/soc-alerts/demo) # RFI project type. Valid values: threat-intelligence, incident-response, ir-emergency-response, table-top, pentest, irp, threat-hunting, cybersecurity-assessment, react-general, legal-response, soc-alerts, demo, request_id: str # RFI UUID, asset_id: str # Asset UUID}\n@returns(200) Asset file content\n@errors {404: Asset not found or not downloadable: deleted, revoked, never shared, its origin is outside the dashboard visibility policy, or (for an attachment) its parent message is unpublished or deleted., 410: The asset's share window has expired.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}/messages\n@desc List messages for an RFI request\n@required {account_id: str, project_type: str, request_id: str}\n@optional {page: str=1, per_page: str=10}\n@returns(200) {messages: [map], result_info: map{has_more: bool, page: int, per_page: int, total_count: int}} # Messages retrieved successfully\n@errors {404: RFI request not found, 500: Internal server error}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}/messages/new\n@desc Create a customer follow-on message on an RFI request\n@required {account_id: str, project_type: str, request_id: str, content: str}\n@optional {Idempotency-Key: str # Client command key. Required when publishing a message for a workflow-enabled project; trimmed and limited to 255 characters., attachment_asset_ids: [str], author_id: str, author_name: str, publish: bool=false, tlp: str(clear/green/amber/amber-strict/red/white)=red}\n@returns(200) {attachments: [map], content: str, created: str, id: int, is_cloudflare_team: bool, is_published: bool, published: str?, tlp: str, updated: str} # Message created and published. Returns the created message with its embedded attachments[], filtered to the dashboard's visible origins.\n@errors {400: Invalid request body, missing/invalid publication command key, or one or more attachment_asset_ids are invalid (not on this request, deleted, or already attached to another message)., 404: RFI request not found for this account., 409: The publication command key was reused for different intent, or a legacy attachment was concurrently attached to another message., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}/messages/{message_id}\n@desc Read a single message for an RFI request\n@required {account_id: str, project_type: str, request_id: str, message_id: str}\n@returns(200) {attachments: [map], content: str, created: str, id: int, is_cloudflare_team: bool, is_published: bool, published: str?, tlp: str, updated: str} # Message retrieved successfully\n@errors {404: Message not found, 500: Internal server error}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/v2/requests/{project_type}/{request_id}/messages/{message_id}\n@desc Update/publish a message for an RFI request\n@required {account_id: str, project_type: str, request_id: str, message_id: str, content: str, publish: bool, tlp: str(clear/green/amber/amber-strict/red/white)}\n@optional {Idempotency-Key: str # Client command key. Required when publishing a message for a workflow-enabled project; trimmed and limited to 255 characters., attachment_asset_ids: [str]}\n@returns(200) {message: map{attachments: [map], content: str, created: str, id: int, is_cloudflare_team: bool, is_published: bool, published: str?, tlp: str, updated: str}} # Message updated. Returns the updated message (under `message`) with its embedded attachments[], filtered to the dashboard's visible origins.\n@errors {400: Invalid request body, an attempt to update or modify attachments on an already-published message, or one or more attachment_asset_ids are invalid (not on this request, deleted, or already attached)., 404: Message or RFI request not found for this account., 409: The publication command key was reused for different intent or the target draft was already published., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles\n@desc List Threat Signals articles\n@required {account_id: str}\n@optional {cursor: str # Opaque cursor from a previous response's `next_cursor`. When provided, pagination, ordering, totals, and article filters come from the cursor. Sending `per_page`, `sort`, `include_total`, or any article filter alongside it returns a 400 `CursorFilterConflictError`., per_page: int=20, feed_id: str(uuid), article_id: str(uuid), read: bool, tag_id: str(uuid), tag: str, tag_category: str, include_total: bool=false, search: str, published_after: str(date-time), published_before: str(date-time), fetched_after: str(date-time), fetched_before: str(date-time), feed_category: str, source_type: str(curated/custom), tag_applied_by: str(ai/analyst), sort: str=-fetched_at}\n@returns(200) {errors: [map], result: map{articles: [map], has_more: bool, next_cursor: str?, total_count: num?, total_count_is_exact: bool}, success: bool} # Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles\n@desc Bulk update Threat Signals article read status\n@required {account_id: str, article_ids: [str(uuid)], read: bool}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}\n@desc Get Threat Signals article\n@required {account_id: str, article_id: str(uuid)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}\n@desc Update Threat Signals article read status\n@required {account_id: str, article_id: str(uuid), read: bool}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}/content\n@desc Get Threat Signals article content\n@required {account_id: str, article_id: str(uuid)}\n@optional {format: str(text/html)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}/skills/{skill_id}/diagnostic\n@desc Diagnose Threat Signals default tag skill\n@required {account_id: str, article_id: str(uuid), skill_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{batches: [any], executedBatchCount: int, plannedBatchCount: int, skillId: str}, success: bool} # Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}/skills/{skill_id}/output\n@desc Get Threat Signals article skill output\n@required {account_id: str, article_id: str(uuid), skill_id: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}/tag\n@desc Generate Threat Signals article AI tags\n@required {account_id: str, article_id: str(uuid)}\n@returns(200) {errors: [map], messages: [map], result: map{tag_skill_version: str, tags: [map]}, success: bool} # Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}/tags\n@desc Add tag to Threat Signals article\n@required {account_id: str, article_id: str(uuid), tag_id: str(uuid)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}/tags/{tag_id}\n@desc Remove tag from Threat Signals article\n@required {account_id: str, article_id: str(uuid), tag_id: str(uuid)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/curated-feeds\n@desc List curated Threat Signals feeds\n@required {account_id: str}\n@optional {category: str, include_inactive: bool=false}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/curated-feeds\n@desc Create curated Threat Signals feed\n@required {account_id: str, category: str, name: str, url: str(uri)}\n@optional {display_order: int, is_active: bool=true, why_valuable: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/curated-feeds/bulk\n@desc Bulk create curated Threat Signals feeds\n@required {account_id: str, feeds: [map{category!: str, display_order: int, is_active: bool, name!: str, url!: str(uri), why_valuable: str}]}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/threat-signals/curated-feeds/opt-out\n@desc Opt out of curated Threat Signals feeds\n@required {account_id: str, opted_out: bool}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/threat-signals/curated-feeds/{curated_feed_id}\n@desc Delete curated Threat Signals feed\n@required {account_id: str, curated_feed_id: str(uuid)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/threat-signals/curated-feeds/{curated_feed_id}\n@desc Update curated Threat Signals feed\n@required {account_id: str, curated_feed_id: str(uuid)}\n@optional {category: str, display_order: int, is_active: bool, name: str, url: str(uri), why_valuable: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds\n@desc List Threat Signals feeds\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20, limit: int, sort: str=-created_at, category: str, source_type: str(curated/custom), enabled: bool, status: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds\n@desc Create Threat Signals feed\n@required {account_id: str}\n@optional {category: str, curated_feed_id: str(uuid), display_name: str, enabled: bool=true, poll_interval_s: int=300, title: str, url: str(uri)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds/poll\n@desc Trigger Threat Signals feed poll\n@required {account_id: str}\n@optional {feed_id: any}\n@returns(200) {errors: [map], result: map{errors: num, feeds: [map], triggered: num}, success: bool} # Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds/{feed_id}\n@desc Delete Threat Signals feed\n@required {account_id: str, feed_id: str(uuid)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds/{feed_id}\n@desc Update Threat Signals feed\n@required {account_id: str, feed_id: str(uuid)}\n@optional {category: str, display_name: str, enabled: bool, poll_interval_s: int, title: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds/{feed_id}/raw\n@desc Get Threat Signals feed XML\n@required {account_id: str, feed_id: str(uuid)}\n@optional {format: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds/{feed_id}/skills\n@desc Get Threat Signals feed skills\n@required {account_id: str, feed_id: str(uuid)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/v2/threat-signals/feeds/{feed_id}/skills\n@desc Set Threat Signals feed skills\n@required {account_id: str, feed_id: str(uuid), skill_ids: [str(uuid)]}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/health\n@desc Check Threat Signals service health\n@required {account_id: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/indicators\n@desc List Threat Signals article indicators\n@required {account_id: str}\n@optional {feed_id: str(uuid), article_id: str(uuid), search: str, per_page: int=20, sort: str=id, include_total: bool=false, cursor: str}\n@returns(200) {errors: [map], result: map{indicators: [map], pagination: map{count: int, cursor: str?, has_more: bool, page: int, per_page: int, total_count: int?, total_count_is_exact: bool}}, success: bool} # Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/skills\n@desc List Threat Signals skills\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/cloudforce-one/v2/threat-signals/skills\n@desc Create Threat Signals skill\n@required {account_id: str, name: str, output_schema: str, prompt: str, type: str(summary/tags)}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/cloudforce-one/v2/threat-signals/skills/{skill_id}\n@desc Delete Threat Signals skill\n@required {account_id: str, skill_id: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/skills/{skill_id}\n@desc Get Threat Signals skill\n@required {account_id: str, skill_id: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/cloudforce-one/v2/threat-signals/skills/{skill_id}\n@desc Update Threat Signals skill\n@required {account_id: str, skill_id: str}\n@optional {config: str, is_active: bool, name: str, output_schema: str, prompt: str}\n@returns(200) Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cloudforce-one/v2/threat-signals/skills/{skill_id}/tag-categories\n@desc Get Threat Signals skill tag categories\n@required {account_id: str, skill_id: str}\n@returns(200) {errors: [map], result: map{category_uuids: [str(uuid)], skill_id: str}, success: bool} # Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint PUT /accounts/{account_id}/cloudforce-one/v2/threat-signals/skills/{skill_id}/tag-categories\n@desc Replace Threat Signals skill tag categories\n@required {account_id: str, skill_id: str, category_uuids: [str(uuid)]}\n@returns(200) {errors: [map], result: map{category_uuids: [str(uuid)], skill_id: str}, success: bool} # Threat Signals response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/cni/cnis\n@desc List existing CNI objects\n@required {account_id: str}\n@optional {slot: str # If specified, only show CNIs associated with the specified slot, tunnel_id: str # If specified, only show cnis associated with the specified tunnel id, cursor: int(int32), limit: int}\n@returns(200) {items: [map], next: int(int32)?} # List of matching CNI objects\n@errors {400: Bad request, 500: Internal server error}\n\n@endpoint POST /accounts/{account_id}/cni/cnis\n@desc Create a new CNI object\n@required {account_id: str, account: str # Customer account tag, interconnect: str, magic: map{conduit_name!: str, description!: str, mtu!: int(int32)}}\n@optional {bgp: map{customer_asn!: int(int32), extra_prefixes!: [str(A.B.C.D/N)], md5_key: str}}\n@returns(200) {account: str, bgp: map{customer_asn: int(int32), extra_prefixes: [str(A.B.C.D/N)], md5_key: str?}, bgp_mode: str, cust_ip: str(A.B.C.D/N), id: str(uuid), interconnect: str, magic: map{conduit_name: str, description: str, mtu: int(int32)}, p2p_ip: str(A.B.C.D/N)} # CNI was successfully created\n@errors {400: Bad request, 409: Name Conflict, 500: Internal server error}\n\n@endpoint DELETE /accounts/{account_id}/cni/cnis/{cni}\n@desc Delete a specified CNI object\n@required {cni: str(uuid) # CNI ID to retrieve information about, account_id: str}\n@returns(200) CNI has been successfully deleted\n@errors {400: Bad request, 404: CNI not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/cnis/{cni}\n@desc Get information about a CNI object\n@required {cni: str(uuid) # CNI ID to retrieve information about, account_id: str}\n@returns(200) {account: str, bgp: map{customer_asn: int(int32), extra_prefixes: [str(A.B.C.D/N)], md5_key: str?}, bgp_mode: str, cust_ip: str(A.B.C.D/N), id: str(uuid), interconnect: str, magic: map{conduit_name: str, description: str, mtu: int(int32)}, p2p_ip: str(A.B.C.D/N)} # CNI's associated data\n@errors {400: Bad request, 404: CNI not found, 500: Internal server error}\n\n@endpoint PUT /accounts/{account_id}/cni/cnis/{cni}\n@desc Modify stored information about a CNI object\n@required {cni: str(uuid) # CNI ID to retrieve information about, account_id: str, account: str # Customer account tag, cust_ip: str(A.B.C.D/N) # Customer end of the point-to-point link  This should always be inside the same prefix as `p2p_ip`., id: str(uuid), interconnect: str # Interconnect identifier hosting this CNI, magic: map{conduit_name!: str, description!: str, mtu!: int(int32)}, p2p_ip: str(A.B.C.D/N) # Cloudflare end of the point-to-point link}\n@optional {bgp: map{customer_asn!: int(int32), extra_prefixes!: [str(A.B.C.D/N)], md5_key: str}, bgp_mode: str(dynamic_route_exchange/advertise_only) # The BGP mode for a CNI.  Controls the customer-facing data path: * `DynamicRouteExchange` — Full BGP: routes flow through to conduit via CRE / bgp-bridge / bgp-bridge-receiver. * `AdvertiseOnly` — static advertisement via taserver, no routes exchanged with Conduit}\n@returns(200) {account: str, bgp: map{customer_asn: int(int32), extra_prefixes: [str(A.B.C.D/N)], md5_key: str?}, bgp_mode: str, cust_ip: str(A.B.C.D/N), id: str(uuid), interconnect: str, magic: map{conduit_name: str, description: str, mtu: int(int32)}, p2p_ip: str(A.B.C.D/N)} # CNI has been successfully modified\n@errors {400: Bad request, 404: CNI not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/interconnects\n@desc List existing interconnects\n@required {account_id: str}\n@optional {site: str # If specified, only show interconnects located at the given site, type: str # If specified, only show interconnects of the given type, cursor: int(int32), limit: int}\n@returns(200) {items: [map], next: int(int32)?} # List of matching interconnect objects\n@errors {400: Bad request, 500: Internal server error}\n\n@endpoint POST /accounts/{account_id}/cni/interconnects\n@desc Create a new interconnect\n@required {account_id: str}\n@returns(200) Information about the new interconnect\n@errors {400: Bad request, 500: Internal server error}\n\n@endpoint DELETE /accounts/{account_id}/cni/interconnects/{icon}\n@desc Delete an interconnect object\n@required {icon: str # Interconnect name to retrieve information about, account_id: str}\n@returns(200) Successfully deleted interconnect\n@errors {400: Bad request, 404: Interconnect not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/interconnects/{icon}\n@desc Get information about an interconnect object\n@required {icon: str # Interconnect name to retrieve information about, account_id: str}\n@returns(200) Information about the specified interconnect\n@errors {400: Bad request, 404: Interconnect not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/interconnects/{icon}/loa\n@desc Generate the Letter of Authorization (LOA) for a given interconnect\n@required {icon: str # Interconnect name to retrieve information about, account_id: str}\n@optional {name: str # Custom name to use in the LOA instead of the account name (200 Character limit)}\n@returns(200) Generated LOA in PDF format\n@errors {400: Bad request, 404: Interconnect not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/interconnects/{icon}/loa/default\n@desc Get the default customer name for LOA generation\n@required {icon: str # Interconnect name to retrieve information about, account_id: str}\n@returns(200) {name: str} # Default customer name\n@errors {400: Bad request, 404: Interconnect not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/interconnects/{icon}/status\n@desc Get the current status of an interconnect object\n@required {icon: str # Interconnect name to retrieve information about, account_id: str}\n@returns(200) Current interconnect status\n@errors {400: Bad request, 404: Interconnect not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/settings\n@desc Get the current settings for the active account\n@required {account_id: str # Account tag to retrieve settings for}\n@returns(200) {default_asn: int(int32)} # The active account settings values\n@errors {400: Bad request, 404: Account not found, 500: Internal server error}\n\n@endpoint PUT /accounts/{account_id}/cni/settings\n@desc Update the current settings for the active account\n@required {account_id: str # Account tag to update settings for}\n@optional {default_asn: int(int32)}\n@returns(200) {default_asn: int(int32)} # The active account settings values\n@errors {400: Bad request, 404: Account not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/slots\n@desc Retrieve a list of all slots matching the specified parameters\n@required {account_id: str}\n@optional {address_contains: str # If specified, only show slots with the given text in their address field, site: str # If specified, only show slots located at the given site, speed: str # If specified, only show slots that support the given speed, occupied: bool # If specified, only show slots with a specific occupied/unoccupied state, cursor: int(int32), limit: int}\n@returns(200) {items: [map], next: int(int32)?} # List of matching slots\n@errors {400: Bad request, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/cni/slots/{slot}\n@desc Get information about the specified slot\n@required {slot: str(uuid), account_id: str}\n@returns(200) {account: str, ccr_device_name: str?, facility: map{address: [str], name: str}, id: str(uuid), occupied: bool, site: str, speed: str} # Information about the specified slot\n@errors {400: Bad request, 404: Slot not found, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/connectivity/directory/services\n@desc List Workers VPC connectivity services\n@required {account_id: str}\n@optional {type: str, page: int(int32)=1 # Current page in the response, per_page: int(int32)=1000 # Max amount of entries returned per page}\n@returns(200) Successfully retrieved Workers VPC connectivity services.\n@errors {4XX: Failed to retrieve Workers VPC connectivity services.}\n\n@endpoint POST /accounts/{account_id}/connectivity/directory/services\n@desc Create Workers VPC connectivity service\n@required {account_id: str}\n@returns(200) Successfully created Workers VPC connectivity service.\n@errors {4XX: Failed to create Workers VPC connectivity service.}\n@example_request {\"host\":{\"hostname\":\"api.example.com\",\"resolver_network\":{\"tunnel_id\":\"0191dce4-9ab4-7fce-b660-8e5dec5172da\"}},\"name\":\"web-server\",\"type\":\"http\"}\n\n@endpoint DELETE /accounts/{account_id}/connectivity/directory/services/{service_id}\n@desc Delete Workers VPC connectivity service\n@required {account_id: str, service_id: str(uuid)}\n@returns(200) Successfully deleted Workers VPC connectivity service.\n@errors {4XX: Failed to delete Workers VPC connectivity service.}\n\n@endpoint GET /accounts/{account_id}/connectivity/directory/services/{service_id}\n@desc Get Workers VPC connectivity service\n@required {account_id: str, service_id: str(uuid)}\n@returns(200) Successfully retrieved Workers VPC connectivity service.\n@errors {4XX: Failed to retrieve Workers VPC connectivity service.}\n\n@endpoint PUT /accounts/{account_id}/connectivity/directory/services/{service_id}\n@desc Update Workers VPC connectivity service\n@required {account_id: str, service_id: str(uuid)}\n@returns(200) Successfully updated Workers VPC connectivity service.\n@errors {4XX: Failed to update Workers VPC connectivity service.}\n@example_request {\"host\":{\"ipv4\":\"10.0.0.1\",\"network\":{\"tunnel_id\":\"0191dce4-9ab4-7fce-b660-8e5dec5172da\"}},\"name\":\"postgres-db\",\"tcp_port\":5432,\"type\":\"tcp\"}\n\n@endpoint GET /accounts/{account_id}/containers/applications\n@desc List Applications associated with your account\n@optional {name: str # Filter applications by name., image: str # Filter applications by image.}\n@returns(200) Get all application associated with your account.\n@errors {401: Unauthorized., 500: An internal error has occurred.}\n\n@endpoint POST /accounts/{account_id}/containers/applications\n@desc Create a new application\n@returns(201) A newly created application.\n@errors {400: Could not create the application because of input/limits reasons, more details in the error code., 401: Unauthorized., 403: The account is deactivated., 500: An internal error has occurred.}\n\n@endpoint DELETE /accounts/{account_id}/containers/applications/{application_id}\n@desc Delete a single application by id\n@required {application_id: str}\n@returns(200) Delete application response.\n@errors {401: Unauthorized., 404: Response body when an Application is not found., 500: An internal error has occurred.}\n\n@endpoint GET /accounts/{account_id}/containers/applications/{application_id}\n@desc Get a single application by id\n@required {application_id: str}\n@returns(200) A single application.\n@errors {401: Unauthorized., 404: Response body when an Application is not found., 500: An internal error has occurred.}\n\n@endpoint PATCH /accounts/{account_id}/containers/applications/{application_id}\n@desc Modify an application\n@required {application_id: str}\n@optional {configuration: map{authorized_keys: [map], wrangler_ssh: map} # Application configuration fields you can change without creating a rollout., constraints: map{jurisdiction: str, regions: [str]}, max_instances: int # Maximum number of instances that an autoscaling application can run., observability: any # Top-level application observability settings. Scheduler-backed applications hot-reload these settings across existing instances. An existing Durable Object-managed application accepts only `logs.enabled` and publishes these settings to runtime metadata without creating deployments or rollouts., rollout_active_grace_period: int=0 # Grace period for active instances to stay alive before becoming eligible for shutdown signal due to a rollout, in seconds. Defaults to 0.}\n@returns(200) Modify application response.\n@errors {400: Could not modify the application because of input/limits reasons, more details in the error code., 401: Unauthorized., 403: The account is deactivated., 404: Response body when an Application is not found., 500: An internal error has occurred.}\n\n@endpoint GET /accounts/{account_id}/containers/applications/{application_id}/instances\n@desc List container instances\n@required {application_id: str}\n@optional {per_page: int # Maximum number of instances to return per page. Defaults to all., page_token: str # Opaque token from a previous response to retrieve the next page., state: str(active/not-active) # Filters instances by lifecycle state. `active` includes provisioning, running, and stopping instances; `not-active` includes stopped and failed instances. When omitted, all instances are returned., name_prefix: str # Filter instances by a case-sensitive name prefix, falling back to the actor ID when no name is known. Keep the same prefix when using a page token.}\n@returns(200) List of container instances.\n@errors {400: Container instance APIs are not enabled for this application or the request was invalid., 401: Unauthorized., 404: Response body when an Application is not found., 500: An internal error has occurred.}\n\n@endpoint GET /accounts/{account_id}/containers/applications/{application_id}/instances/{instance_id}\n@desc Get a container instance\n@required {application_id: str, instance_id: str}\n@returns(200) Container instance details.\n@errors {400: Container instance APIs are not enabled for this application or the request was invalid., 401: Unauthorized., 404: Container instance not found., 500: An internal error has occurred.}\n\n@endpoint POST /accounts/{account_id}/containers/applications/{application_id}/rollouts\n@desc Create a new rollout for an application\n@required {application_id: str, description: str # Description of the rollout process., strategy: str(rolling/new_instances) # Strategy used for the rollout. - \"rolling\": Step-based rollout with health gates. Actively replaces instances to reach each step's target percentage. - \"new_instances\": Percentage control over version distribution. Version sync actively replaces instances to match the configured percentage. The \"full_auto\" kind advances through fixed percentage targets after target-version health is observed., target_configuration: map{authorized_keys: [map], command: [str], entrypoint: [str], environment_variables: [map], image: str, instance_type: str, observability: map} # User-specified container configuration changes.}\n@optional {kind: str(full_auto/full_manual)=full_auto # Kind of the rollout process. Defaults to \"full_auto\".  - \"full_auto\": For rolling rollouts, starts progressing steps upon rollout creation. For new_instances rollouts, advances percentage targets automatically after target-version health is observed.  - \"full_manual\": Requires manually progressing each step in the rollout using the UpdateRollout's action parameter., percentage: int # Initial target version percentage (0-100). Version sync actively replaces instances to match. Required when strategy is \"new_instances\" and kind is \"full_manual\". When strategy is \"new_instances\" and kind is \"full_auto\", omitted percentage starts at 10% or the smallest percentage that targets at least one instance. Unused for \"rolling\"., step_percentage: int(5/10/20/25/50/100) # Percentage of rollout to increase in each step when \"steps\" is absent. Applicable values: 5, 10, 20, 25, 50, 100. These create rollouts with 20, 10, 5, 4, 2, 1 steps respectively. Only valid for \"rolling\" strategy., steps: [map{description!: str, step_size!: map}] # Steps defining the rollout process, used when \"step_percentage\" is absent. Specify only one of \"step_percentage\" or \"steps\" when creating a rollout. \"steps\" allow granular control over each step. Only valid for \"rolling\" strategy.}\n@returns(201) Application rollout created successfully.\n@errors {400: Can't update the application rollout because it has bad inputs., 401: Unauthorized., 403: The account is deactivated., 404: Response body when an Application is not found., 500: An internal error has occurred.}\n\n@endpoint GET /accounts/{account_id}/containers/applications/{application_id}/versions\n@desc List all application versions\n@required {application_id: str}\n@returns(200) List application versions.\n@errors {401: Unauthorized., 404: Response body when an Application is not found., 500: An internal error has occurred.}\n\n@endpoint POST /accounts/{account_id}/containers/image-preparations\n@desc Prepare a container image\n@required {image: str # Image url.}\n@returns(200) The container image is ready or preparation reached a terminal error.\n@returns(202) Container image preparation is still in progress.\n@errors {400: Bad Request, 401: Unauthorized., 403: The account does not have the required capability for this operation., 500: An internal error has occurred.}\n\n@endpoint GET /accounts/{account_id}/containers/registries\n@desc Get the list of configured registries in the account\n@returns(200) The list of registries that are added in the account.\n@errors {401: Unauthorized., 500: An internal error has occurred.}\n\n@endpoint POST /accounts/{account_id}/containers/registries\n@desc Configure a private external image registry\n@required {auth: map{private_credential!: any, public_credential!: str} # Credentials for authenticating to a private external image registry. Store the private credential in [Secrets Store](https://developers.cloudflare.com/secrets-store/) before calling the API. Refer to [Image management](https://developers.cloudflare.com/containers/platform-details/image-management/) for the credential required by each supported registry provider., domain: str # Hostname of the private registry, without a scheme or image path. Supported hostnames are `docker.io`, AWS ECR hostnames, and Google Artifact Registry `*-docker.pkg.dev` hostnames., kind: any # Registry provider. This must match `domain`: `DockerHub` for `docker.io`, `ECR` for AWS ECR, or `GAR` for Google Artifact Registry.}\n@optional {is_public: bool # Omit this field or set it to `false`. Public Docker Hub images do not require registry configuration and cannot be added with this endpoint.}\n@returns(201) The external image registry configuration was added to the account.\n@errors {400: Image registry input is malformed, see the error details., 403: The registry that is being added is not allowed., 409: The image registry already exists in the account., 500: An internal error has occurred.}\n\n@endpoint DELETE /accounts/{account_id}/containers/registries/{domain}\n@desc Delete a registry from the account\n@required {domain: str}\n@returns(200) The image registry is deleted.\n@errors {403: The image registry cannot be deleted., 404: The image registry does not exist., 409: The image registry cannot be deleted because it is still referenced by applications on the account., 500: An internal error has occurred.}\n\n@endpoint POST /accounts/{account_id}/containers/registries/{domain}/credentials\n@desc Generate a JWT to interact with the specified image registry.\n@required {domain: str}\n@optional {expiration_minutes: int # The number of minutes Cloudflare managed registry credentials stay valid. Required for managed registries and must remain positive. Cloudflare ignores this value for external registries., permissions: [str] # The permissions for Cloudflare managed registry credentials. Required for managed registries. Cloudflare ignores this value for external registries.}\n@returns(201) Credentials with scoped permissions to access the registry.\n@errors {400: Bad Request that contains a specific constant code and details object about the error., 403: The requested token permissions are not allowed for this account., 404: The image registry does not exist., 409: The registry was configured as public, so credentials can not be generated., 500: An internal error has occurred.}\n\n@endpoint GET /accounts/{account_id}/custom_csrs\n@desc List Custom CSRs\n@required {account_id: str}\n@optional {page: num=1, per_page: num=50, order: str(name/account_tag/created_at)=created_at, direction: str(asc/desc)=asc}\n@returns(200) List Custom CSRs response.\n@errors {4XX: List Custom CSRs response failure.}\n\n@endpoint POST /accounts/{account_id}/custom_csrs\n@desc Create Custom CSR\n@required {account_id: str, common_name: str # The common name (domain) for the CSR. Must be at most 64 characters., country: str # Two-letter ISO 3166-1 alpha-2 country code., locality: str # City or locality name., organization: str # Organization name., sans: [str] # Subject Alternative Names for the CSR. At least one SAN is required., state: str # State or province name.}\n@optional {description: str # Optional description for the CSR., key_type: str(rsa2048/p256v1)=rsa2048 # Key algorithm to use for the CSR. Defaults to rsa2048 if not specified., name: str # Human-readable name for the CSR., organizational_unit: str # Organizational unit name.}\n@returns(201) Create Custom CSR response.\n@errors {4XX: Create Custom CSR response failure.}\n\n@endpoint DELETE /accounts/{account_id}/custom_csrs/{custom_csr_id}\n@desc Delete Custom CSR\n@required {custom_csr_id: str, account_id: str}\n@returns(200) Delete Custom CSR response.\n@errors {4XX: Delete Custom CSR response failure.}\n\n@endpoint GET /accounts/{account_id}/custom_csrs/{custom_csr_id}\n@desc Custom CSR Details\n@required {custom_csr_id: str, account_id: str}\n@returns(200) Custom CSR Details response.\n@errors {4XX: Custom CSR Details response failure.}\n\n@endpoint GET /accounts/{account_id}/custom_ns\n@desc List Account Custom Nameservers\n@required {account_id: str}\n@returns(200) List Account Custom Nameservers response\n@errors {4XX: List Account Custom Nameservers response failure}\n\n@endpoint POST /accounts/{account_id}/custom_ns\n@desc Add Account Custom Nameserver\n@required {account_id: str, ns_name: str(hostname) # The FQDN of the name server.}\n@optional {ns_set: num=1 # The number of the set that this name server belongs to.}\n@returns(200) Add Account Custom Nameserver response\n@errors {4XX: Add Account Custom Nameserver response failure}\n\n@endpoint DELETE /accounts/{account_id}/custom_ns/{custom_ns_id}\n@desc Delete Account Custom Nameserver\n@required {custom_ns_id: str(hostname), account_id: str}\n@returns(200) Delete Account Custom Nameserver response\n@errors {4XX: Delete Account Custom Nameserver response failure}\n\n@endpoint GET /accounts/{account_id}/d1/database\n@desc List D1 Databases\n@required {account_id: str}\n@optional {name: str, page: num=1, per_page: num=1000}\n@returns(200) List D1 databases response\n@errors {4XX: List D1 databases response failure}\n\n@endpoint POST /accounts/{account_id}/d1/database\n@desc Create D1 Database\n@required {account_id: str, name: str # D1 database name.}\n@optional {jurisdiction: str(eu/fedramp/us) # Specify the location to restrict the D1 database to run and store data. If this option is present, the location hint is ignored., primary_location_hint: str(wnam/enam/weur/eeur/apac/oc) # Specify the region to create the D1 primary, if available. If this option is omitted, the D1 will be created as close as possible to the current user., read_replication: map{mode!: str} # Configuration for D1 read replication.}\n@returns(200) Returns the created D1 database's metadata\n@errors {4XX: Database details response failure}\n\n@endpoint DELETE /accounts/{account_id}/d1/database/{database_id}\n@desc Delete D1 Database\n@required {account_id: str, database_id: str}\n@returns(200) Delete D1 database response\n@errors {4XX: Delete D1 database response failure}\n\n@endpoint GET /accounts/{account_id}/d1/database/{database_id}\n@desc Get D1 Database\n@required {account_id: str, database_id: any}\n@optional {fields: [str] # Comma-separated list of fields to include in the response. When omitted, all fields are returned.}\n@returns(200) Database details response\n@errors {4XX: Database details response failure}\n\n@endpoint PATCH /accounts/{account_id}/d1/database/{database_id}\n@desc Update D1 Database partially\n@required {account_id: str, database_id: str}\n@optional {read_replication: map{mode!: str} # Configuration for D1 read replication.}\n@returns(200) Database details response\n@errors {4XX: Update D1 database response failure}\n\n@endpoint PUT /accounts/{account_id}/d1/database/{database_id}\n@desc Update D1 Database\n@required {account_id: str, database_id: str, read_replication: map{mode!: str} # Configuration for D1 read replication.}\n@returns(200) Database details response\n@errors {4XX: Update D1 database response failure}\n\n@endpoint POST /accounts/{account_id}/d1/database/{database_id}/export\n@desc Export D1 Database as SQL\n@required {account_id: str, database_id: str, output_format: str # Specifies that you will poll this endpoint until the export completes}\n@optional {current_bookmark: str # To poll an in-progress export, provide the current bookmark (returned by your first polling response), dump_options: map{no_data: bool, no_schema: bool, tables: [str]}}\n@returns(200) Polled successfully, task no longer running (errored or complete)\n@returns(202) Polled successfully, task is currently running\n@errors {4XX: Poll failed (API error)}\n\n@endpoint POST /accounts/{account_id}/d1/database/{database_id}/import\n@desc Import SQL into your D1 Database\n@required {account_id: str, database_id: str}\n@returns(200) Successful action. Import is either ready to start, under way, or finished (succeeded or failed).\n@returns(202) Polled successfully, task is currently running\n@errors {4XX: Poll failed (API error)}\n\n@endpoint POST /accounts/{account_id}/d1/database/{database_id}/query\n@desc Query D1 Database\n@required {account_id: str, database_id: str}\n@returns(200) Query response\n@errors {4XX: Query response failure}\n\n@endpoint POST /accounts/{account_id}/d1/database/{database_id}/raw\n@desc Raw D1 Database query\n@required {account_id: str, database_id: str}\n@returns(200) Raw query response\n@errors {4XX: Query response failure}\n\n@endpoint GET /accounts/{account_id}/d1/database/{database_id}/time_travel/bookmark\n@desc Get D1 database bookmark\n@required {account_id: str, database_id: str}\n@optional {timestamp: str(date-time) # An optional ISO 8601 timestamp. If provided, returns the nearest available bookmark at or before this timestamp. If omitted, returns the current bookmark.}\n@returns(200) Bookmark retrieved successfully\n@errors {4XX: Failed to retrieve bookmark}\n\n@endpoint POST /accounts/{account_id}/d1/database/{database_id}/time_travel/restore\n@desc Restore D1 Database to a bookmark or point in time\n@required {account_id: str, database_id: str}\n@optional {bookmark: str # A bookmark to restore the database to. Required if `timestamp` is not provided., timestamp: str(date-time) # An ISO 8601 timestamp to restore the database to. Required if `bookmark` is not provided.}\n@returns(200) Database restored successfully\n@errors {4XX: Restore operation failed}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/content\n@desc List DLP content findings\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {direction: str(asc/desc) # Direction to order results., dlp_profile_id: str(uuid) # Filter by an DLP profile ID, integration_id: str(uuid) # Filter by an integration ID, max_affliction_date: str(date-time) # Filter to view findings that occurred on or before the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., min_affliction_date: str(date-time) # Filter to view findings that occurred on or after the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., order: str(asset_name/dlp_profile_count/integration_name/latest_affliction_date) # Which field to use when ordering content assets., page: int # A page number within the paginated result set., per_page: int # Number of results to return per page., search: str # A search term., vendor: str # Filter by vendor}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 429: Too Many Requests: Request was rate limited. May include a `Retry-After` header.}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/content/export\n@desc Create a content export\n@required {account_id: str # Cloudflare account ID for the user making the request., dlp_profile_information: [map{entries!: [map], id!: str(uuid), name!: str}] # DLP profile metadata for the export.}\n@optional {dlp_profile_id: [str(uuid)] # Filter by DLP profile IDs., integration_id: [str(uuid)] # Filter by integration IDs., max_affliction_date: str(date-time) # Filter to view content flagged on or before this date., min_affliction_date: str(date-time) # Filter to view content flagged on or after this date., orders: [map] # Ordering specifications for the export., search: str # Search term to filter content., vendors: [str] # Filter by vendor types.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/exports\n@desc List all export jobs\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {page: int # A page number within the paginated result set., per_page: int # Number of results to return per page., status: str # Filter on export job's status}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/exports/{id}\n@desc Get a single export job\n@required {account_id: str # Cloudflare account ID for the user making the request., id: str # Unique identifier for the export job}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Export job not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/finding_types\n@desc List all finding types\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {page: int # A page number within the paginated result set., per_page: int # Number of results to return per page., vendors: [str] # Filter finding types by vendor. Supports multiple comma-separated values. Each value may be either the vendor enum (GOOGLE_WORKSPACE) or the friendly name returned by the read routes (Google Workspace)., search: str # Filter finding types by name or ID (case-insensitive substring match).}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/finding_types/{finding_type_id}\n@desc Get finding by ID\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_type_id: str(uuid) # A UUID string identifying the finding type.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding type not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/finding_types/{finding_type_id}/remediation_types\n@desc List remediation types for a finding type\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_type_id: str(uuid) # A UUID string identifying the finding type.}\n@optional {integration_id: str(uuid) # Filter by an integration ID, cursor: str # A cursor for pagination., page: int # A page number within the paginated result set., per_page: int # Number of results to return per page.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding type not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/findings\n@desc List posture findings\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {cursor: str # A cursor for pagination. Obtained from the `result_info.cursor` field of a previous response., direction: str(asc/desc) # Direction to order results., ignored: bool # Filter for only the ignored findings. Set to false to only see \"active\" items, integration_id: str(uuid) # Filter by an integration ID, max_affliction_date: str(date-time) # Filter to view findings that occurred on or before the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., min_affliction_date: str(date-time) # Filter to view findings that occurred on or after the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., observation: str(Activity/Insight/Issue) # Filter by observation type of the finding, order: str(finding.name/instance_count/integration.name/latest_affliction_date/severity) # Which field to use when ordering the findings., page: int # A page number within the paginated result set., per_page: int # Number of results to return per page., product: str(Cloud/Saas) # Filter by product category of the finding, search: str # A search term., severity: str(Critical/High/Medium/Low) # Filter by severity, type: str(Content/Posture) # Filter by type of the finding, vendor: str # Filter by vendor, finding_type_ids: str(uuid) # A comma separated list of UUIDs identifying the finding type(s).}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/export\n@desc Create new findings export request\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {ignored: bool # Filter for only the ignored findings. Set to false to only see active items., integration_id: [str(uuid)] # Filter by multiple integration IDs., max_affliction_date: str(date-time) # Filter to view findings that occurred on or before the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., min_affliction_date: str(date-time) # Filter to view findings that occurred on or after the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., orders: [map{direction!: str, name!: str}] # Which fields to use when ordering the findings., product: str # Filter by finding's category product., search: str # A search term., severities: [str] # Filter by severity levels., vendors: [str] # Filter by vendor types.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/ignore\n@desc Mark a finding as ignored\n@required {account_id: str # Cloudflare account ID for the user making the request., checks: [str] # A list of finding IDs to pass along.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/unignore\n@desc Remove ignore marker from a finding\n@required {account_id: str # Cloudflare account ID for the user making the request., checks: [str] # A list of finding IDs to pass along.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/findings/{finding_id}\n@desc Get a finding type\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_id: str(byte) # A base64-encoded ID identifying this Finding.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid finding ID, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Finding not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/findings/{finding_id}/instances\n@desc List instances of a finding\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_id: str(byte) # A base64-encoded ID identifying this Finding.}\n@optional {archived: bool # Archived, cursor: str # A cursor for pagination. Obtained from the `result_info.cursor` field of a previous response., direction: str(asc/desc) # Direction to order results., max_affliction_date: str(date-time) # Filter to view findings that occurred on or before the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., min_affliction_date: str(date-time) # Filter to view findings that occurred on or after the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., order: str(affliction_date/asset.name/remediation.status) # Which field to use when ordering the Finding's instances. When ordering by 'remediation.status', only the most recent non-stale remediation job is considered. Stale jobs (created before the instance's affliction_date) are treated as having no status for ordering purposes., page: int # A page number within the paginated result set., per_page: int # Number of results to return per page., search: str # A search term., remediation_statuses: [str] # Filter finding instances by most recent remediation job status. Supports multiple comma-separated values. Use 'none' to filter instances with no remediation jobs or instances where the most recent job is stale. Note: Stale jobs (created before the instance's affliction_date) are ignored for filtering purposes, but are still included in the 'remediations' array with stale=true., finding_instance_ids: [str(uuid)] # Filter finding instances by an array of finding instance IDs. Supports multiple comma-separated values., asset_ids: [str(uuid)] # Filter finding instances by an array of asset IDs. Supports multiple comma-separated values.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding not found}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/{finding_id}/instances/archive\n@desc Archive a finding\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_id: str(byte) # A base64-encoded ID identifying this Finding., check_instances: [str(uuid)] # A list of finding instance IDs to pass along.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding not found}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/{finding_id}/instances/unarchive\n@desc Remove the archive marking from a finding instance\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_id: str(byte) # A base64-encoded ID identifying this Finding., check_instances: [str(uuid)] # A list of finding instance IDs to pass along.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/findings/{finding_id}/instances/{instance_id}\n@desc Get a finding instance using an instance ID\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_id: str(byte) # A base64-encoded ID identifying this Finding., instance_id: str(uuid) # A uuid ID identifying this Finding instance.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding instance not found}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/{finding_id}/reset_finding_severity\n@desc Reset severity for a finding back to the default\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_id: str(byte) # A base64-encoded ID identifying this Finding.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding not found, 500: Internal Server Error: Unexpected failure resetting finding severity}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/{finding_id}/tune_finding_severity\n@desc Update the severity for a finding\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_id: str(byte) # A base64-encoded ID identifying this Finding., new_severity: int(1/2/3/4) # The numeric severity value to apply to the finding.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding not found, 500: Internal Server Error: Unexpected failure updating finding severity}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/findings/{storage_namespace_id}/instances/export\n@desc Create a finding instances export\n@required {account_id: str # Cloudflare account ID for the user making the request., storage_namespace_id: str # A storage namespace identifier for the finding, used to scope finding instance exports. Constructed by base64-decoding the finding ID (which encodes `integration_id:finding_type_id`) and replacing the colon separator with a hyphen. For example, a finding ID that decodes to `00000000-0000-0000-0000-000000000001:00000000-0000-0000-0000-000000000002` becomes `00000000-0000-0000-0000-000000000001-00000000-0000-0000-0000-000000000002`.}\n@optional {archived: bool # Filter for archived status., max_affliction_date: str(date-time) # Filter to view findings that occurred on or before the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., min_affliction_date: str(date-time) # Filter to view findings that occurred on or after the affliction date. Can be a date-time in ISO 8601 format or an epoch timestamp., orders: [map{direction!: str, name!: str}]= # Ordering specifications for the export., search: str # A search term.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 404: Not Found: Finding not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/policies\n@desc List policy configurations\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {cursor: str # Cursor for pagination. Obtained from the `result_info.cursor` field of a previous response.}\n@returns(200) OK: Policies retrieved successfully\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/policies\n@desc Create a new policy configuration\n@required {account_id: str # Cloudflare account ID for the user making the request., actions: map{remediation_types: [map], webhook_configs: [map]} # Actions to execute when this policy is triggered, grouped by action type. A policy must contain at least one action across all groups and may include at most one remediation., applies_to_all_integrations: bool # When true, the policy applies to all integrations for the account. When false, integration_ids must be provided., display_name: str # Display name for the policy configuration., enabled: bool # Boolean specifying if the policy is enabled or disabled., finding_type_id: str(uuid) # The finding type this policy is associated with. All remediation actions must match this finding type.}\n@optional {description: str # Optional description of what this policy does., integration_ids: [str(uuid)] # The integrations this policy applies to. Required when applies_to_all_integrations is false.}\n@returns(200) OK: Policy created successfully\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Integration, remediation type, or webhook config not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/policies/logs\n@desc List policy invocation logs\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {since: str(date-time) # Lower bound on the log entry timestamp. Accepts ISO 8601 / RFC3339 or epoch seconds. Defaults to 7 days before `until`. The window between `since` and `until` cannot exceed 180 days., until: str(date-time) # Upper bound on the log entry timestamp. Accepts ISO 8601 / RFC3339 or epoch seconds. Defaults to the current time. Must be greater than or equal to `since`., integration_id: str # Comma-separated list of CASB integration IDs to filter by. At most 100 values, each at most 128 characters. Values outside the account's tenancy allowlist are silently ignored. When omitted, results are scoped to the full allowlist., policy_name: str # Comma-separated list of policy display names to filter by. At most 100 values, each at most 255 characters., page: int # A page number within the paginated result set., per_page: int # Number of results to return per page.}\n@returns(200) OK: Policy logs retrieved successfully\n@errors {400: Bad Request: Invalid query parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 502: Bad Gateway: Policy logs backend (ClickHouse) is unavailable, 504: Gateway Timeout: Policy logs query timed out}\n\n@endpoint DELETE /accounts/{account_id}/data-security/posture/policies/{policy_id}\n@desc Delete a policy configuration\n@required {account_id: str # Cloudflare account ID for the user making the request., policy_id: str(uuid) # A UUID identifying the policy.}\n@returns(200) OK: Policy deleted successfully\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Policy not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/policies/{policy_id}\n@desc Get a policy configuration by ID\n@required {account_id: str # Cloudflare account ID for the user making the request., policy_id: str(uuid) # The UUID of the policy configuration to retrieve.}\n@returns(200) OK: Policy retrieved successfully\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Policy config not found}\n\n@endpoint PUT /accounts/{account_id}/data-security/posture/policies/{policy_id}\n@desc Update a policy configuration\n@required {account_id: str # Cloudflare account ID for the user making the request., policy_id: str(uuid) # Policy configuration ID, actions: map{remediation_types: [map], webhook_configs: [map]} # Actions to execute when this policy is triggered, grouped by action type. A policy must contain at least one action across all groups and may include at most one remediation., applies_to_all_integrations: bool # When true, the policy applies to all integrations for the account. When false, integration_ids must be provided., display_name: str # Display name for the policy configuration., enabled: bool # Boolean specifying if the policy is enabled or disabled.}\n@optional {description: str # Optional description of what this policy does., integration_ids: [str(uuid)] # The integrations this policy applies to. Required when applies_to_all_integrations is false.}\n@returns(200) OK: Policy updated successfully\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Policy, integration, remediation type, or webhook config not found}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/remediations/jobs\n@desc List remediation jobs\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {cursor: str # A cursor for pagination., page: int # A page number within the paginated result set., per_page: int # Number of results to return per page., search: str # A search term., min_updated_at: str(date-time) # Filter to view remediations updated on or after the min updated datetime. Can be a date-time in ISO 8601 format or an epoch timestamp., max_updated_at: str(date-time) # Filter to view remediations updated on or before the max updated datetime. Can be a date-time in ISO 8601 format or an epoch timestamp., status: str # Filter to view remediations with the given status., triggered_by_actor: [str] # Filter remediations by what kind of actor triggered them. Supports multiple comma-separated values., integration_id: str(uuid) # Filter by an integration ID, order: str(created_at/affliction_date/integration_name/status/last_updated_at/asset_name/finding_type_name) # An optional param to sort the results by the given field., direction: str(asc/desc) # Direction to order results.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str?, page: int, per_page: int, total_count: int}, success: bool} # OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/remediations/jobs\n@desc Creates remediation jobs\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_instance_ids: [str(uuid)] # UUIDs identifying Finding Instances., remediation_type_id: str(uuid) # A UUID identifying this Remediation Type.}\n@returns(200) {errors: [map], messages: [map], result: map{created: [map], failed: [map]}, success: bool} # OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters, 409: Conflict: No supplied finding instances are currently eligible for remediation}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/remediations/jobs/export\n@desc Create a remediation jobs export\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@optional {integration_id: [str(uuid)] # Filter by multiple integration IDs., max_updated_at: str(date-time) # Filter to view remediation jobs updated on or before this datetime. Can be a date-time in ISO 8601 format or an epoch timestamp., min_updated_at: str(date-time) # Filter to view remediation jobs updated on or after this datetime. Can be a date-time in ISO 8601 format or an epoch timestamp., orders: [map{direction!: str, name!: str}]= # Ordering specifications for the export., search: str # A search term., status: [str] # Filter by remediation job status.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid request parameters}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/webhooks\n@desc List webhook configurations\n@required {account_id: str # Cloudflare account ID for the user making the request.}\n@returns(200) OK: Successful HTTP request\n@errors {401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/webhooks\n@desc Create a new webhook configuration\n@required {account_id: str # Cloudflare account ID for the user making the request., authentication_type: str(Basic Auth/None/Bearer Auth/Static Headers/HMAC-Signing) # Type of authentication used for the webhook., destination_url: str(uri) # Target URL for the webhook configuration. Where resulting data will be sent., label: str # Account-specified display label for the webhook configuration.}\n@optional {headers: [map{key!: str, value: str}] # List of custom headers to include in webhook requests., signing_secret: str # Secret key used for HMAC signing when authentication_type is \"HMAC-Signing\"., status: str(enabled/disabled)=enabled # Status of the webhook configuration. Defaults to enabled when omitted.}\n@returns(200) OK: Webhook created successfully\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 422: Unprocessable Entity: Webhook configuration limit reached for this account}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/webhooks/evaluate\n@desc Test a webhook configuration before creating it\n@required {account_id: str # Cloudflare account ID for the user making the request., authentication_type: str(Basic Auth/None/Bearer Auth/Static Headers/HMAC-Signing) # Type of authentication to use for the test webhook request., destination_url: str(uri) # Target URL to send the test webhook event to.}\n@optional {headers: [map{key!: str, value: str}] # List of custom headers to include in the test webhook request., signing_secret: str # Secret key used for HMAC signing when authentication_type is \"HMAC-Signing\".}\n@returns(200) OK: Webhook test completed (check success field for result)\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/webhooks/jobs\n@desc Create webhook jobs\n@required {account_id: str # Cloudflare account ID for the user making the request., finding_instance_ids: [str(uuid)] # Array of finding instance IDs to send to the webhooks., webhook_ids: [str(uuid)] # Array of webhook IDs to trigger jobs for.}\n@returns(200) OK: Webhook jobs successfully created\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Webhook or finding instance not found}\n\n@endpoint DELETE /accounts/{account_id}/data-security/posture/webhooks/{webhook_id}\n@desc Delete a webhook configuration\n@required {account_id: str # Cloudflare account ID for the user making the request., webhook_id: str(uuid) # A UUID identifying the webhook configuration.}\n@returns(200) {errors: [map], messages: [map], success: bool} # OK: Webhook successfully deleted\n@errors {400: Bad Request: Invalid webhook ID or webhook already deleted, 409: Conflict: webhook is associated with one or more policies and cannot be deleted}\n\n@endpoint GET /accounts/{account_id}/data-security/posture/webhooks/{webhook_id}\n@desc Get webhook configuration by ID\n@required {account_id: str # Cloudflare account ID for the user making the request., webhook_id: str(uuid) # A UUID identifying the webhook configuration.}\n@returns(200) OK: Successful HTTP request\n@errors {400: Bad Request: Invalid webhook ID, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Webhook not found}\n\n@endpoint PUT /accounts/{account_id}/data-security/posture/webhooks/{webhook_id}\n@desc Update an existing webhook configuration\n@required {account_id: str # Cloudflare account ID for the user making the request., webhook_id: str(uuid) # A UUID identifying the webhook configuration., authentication_type: str(Basic Auth/None/Bearer Auth/Static Headers/HMAC-Signing) # Type of authentication used for the webhook., destination_url: str(uri) # Target URL for the webhook configuration. Where resulting data will be sent., label: str # Account-specified display label for the webhook configuration., status: str(enabled/disabled) # Status of the webhook configuration.}\n@optional {headers: [map{key!: str, value: str}] # List of custom headers to include in webhook requests., signing_secret: str # Secret key used for HMAC signing when authentication_type is \"HMAC-Signing\".}\n@returns(200) OK: Webhook updated successfully\n@errors {400: Bad Request: Invalid request parameters, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Webhook not found}\n\n@endpoint POST /accounts/{account_id}/data-security/posture/webhooks/{webhook_id}/evaluate\n@desc Test an existing webhook configuration\n@required {account_id: str # Cloudflare account ID for the user making the request., webhook_id: str(uuid) # A UUID identifying the webhook configuration.}\n@returns(200) OK: Webhook test completed (check success field for result)\n@errors {400: Bad Request: Invalid webhook ID, 401: Unauthorized: Authentication required, 403: Forbidden: Insufficient permissions, 404: Not Found: Webhook not found}\n\n@endpoint GET /accounts/{account_id}/devices\n@desc List devices (deprecated)\n@required {account_id: str}\n@returns(200) List devices response.\n@errors {4XX: List devices response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/client-versions\n@desc List client versions\n@required {account_id: str, target_environment: str # The target environment for the client version (e.g., windows, macos)., release_track: str(ga/beta) # The release track (ga for General Availability, beta for Beta releases).}\n@optional {page: int=1 # The page number to return., per_page: int=20 # The maximum number of versions to return per page.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # List client versions response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/client-versions/target-environments\n@desc List available target environments\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # List target environments response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/deployment-groups\n@desc List deployment groups\n@required {account_id: str}\n@optional {page: int=1 # The page number to return., per_page: int=50 # The maximum number of deployment groups to return per page.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # Lists deployment group response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/devices/deployment-groups\n@desc Create deployment group\n@required {account_id: str, name: str # A user-friendly name for the deployment group., version_config: [map{target_environment!: str, version!: str}] # Contains at least one version configuration.}\n@optional {policy_ids: [str] # Contains an optional list of policy IDs assigned to a group.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, id: str, name: str, policy_ids: [str]?, updated_at: str, version_config: [map]}, success: bool} # Creates deployment group response.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/devices/deployment-groups/{group_id}\n@desc Delete deployment group\n@required {account_id: str, group_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{id: str}, success: bool} # Deletes deployment group response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/deployment-groups/{group_id}\n@desc Get deployment group\n@required {account_id: str, group_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, id: str, name: str, policy_ids: [str]?, updated_at: str, version_config: [map]}, success: bool} # Gets deployment group response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/devices/deployment-groups/{group_id}\n@desc Update deployment group\n@required {account_id: str, group_id: str}\n@optional {name: str # A user-friendly name for the deployment group., policy_ids: [str] # Replaces the entire list of policy IDs., version_config: [map{target_environment!: str, version!: str}] # Replaces the entire version_config array.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, id: str, name: str, policy_ids: [str]?, updated_at: str, version_config: [map]}, success: bool} # Updates deployment group response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/ip-profiles\n@desc List IP profiles\n@required {account_id: str}\n@optional {page: int=1 # The page number to return., per_page: int=50 # The number of IP profiles to return per page.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # List Device IP profiles response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/devices/ip-profiles\n@desc Create IP profile\n@required {account_id: str, match: str # The wirefilter expression to match registrations. Available values: \"identity.name\", \"identity.email\", \"identity.groups.id\", \"identity.groups.name\", \"identity.groups.email\", \"identity.saml_attributes\"., name: str # A user-friendly name for the Device IP profile., precedence: int # The precedence of the Device IP profile. Lower values indicate higher precedence. Device IP profile will be evaluated in ascending order of this field., subnet_id: str # The ID of the Subnet.}\n@optional {description: str # An optional description of the Device IP profile., enabled: bool=true # Whether the Device IP profile will be applied to matching devices.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, description: str?, enabled: bool, id: str, match: str, name: str, precedence: int, subnet_id: str, updated_at: str}, success: bool} # Create Device IP profile response.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/devices/ip-profiles/{profile_id}\n@desc Delete IP profile\n@required {account_id: str, profile_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{id: str}, success: bool} # Delete Device IP profile response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/ip-profiles/{profile_id}\n@desc Get IP profile\n@required {account_id: str, profile_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, description: str?, enabled: bool, id: str, match: str, name: str, precedence: int, subnet_id: str, updated_at: str}, success: bool} # Get Device IP profile response.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /accounts/{account_id}/devices/ip-profiles/{profile_id}\n@desc Update IP profile\n@required {account_id: str, profile_id: str}\n@optional {description: str # An optional description of the Device IP profile., enabled: bool # Whether the Device IP profile is enabled., match: str # The wirefilter expression to match registrations. Available values: \"identity.name\", \"identity.email\", \"identity.groups.id\", \"identity.groups.name\", \"identity.groups.email\", \"identity.saml_attributes\"., name: str # A user-friendly name for the Device IP profile., precedence: int # The precedence of the Device IP profile. Lower values indicate higher precedence. Device IP profile will be evaluated in ascending order of this field., subnet_id: str # The ID of the Subnet.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, description: str?, enabled: bool, id: str, match: str, name: str, precedence: int, subnet_id: str, updated_at: str}, success: bool} # Update Device IP profile response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/networks\n@desc List your device managed networks\n@required {account_id: str}\n@returns(200) List your device managed networks response.\n@errors {4XX: List your device managed networks response failure.}\n\n@endpoint POST /accounts/{account_id}/devices/networks\n@desc Create a device managed network\n@required {account_id: str, config: map # The configuration object containing information for the WARP client to detect the managed network., name: str # The name of the device managed network. This name must be unique., type: str # The type of device managed network.}\n@returns(200) Create a device managed networks response.\n@errors {4XX: Create a device managed networks response failure.}\n\n@endpoint DELETE /accounts/{account_id}/devices/networks/{network_id}\n@desc Delete a device managed network\n@required {network_id: str, account_id: str}\n@returns(200) Delete a device managed network response.\n@errors {4XX: Delete a device managed network response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/networks/{network_id}\n@desc Get device managed network details\n@required {network_id: str, account_id: str}\n@returns(200) Get device managed network details response.\n@errors {4XX: Get device managed network details response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/networks/{network_id}\n@desc Update a device managed network\n@required {network_id: str, account_id: str}\n@optional {config: map # The configuration object containing information for the WARP client to detect the managed network., name: str # The name of the device managed network. This name must be unique., type: str # The type of device managed network.}\n@returns(200) Update a device managed network response.\n@errors {4XX: Update a device managed network response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/physical-devices\n@desc List devices\n@required {account_id: str}\n@optional {cursor: str # Opaque token indicating the starting position when requesting the next set of records. A cursor value can be obtained from the result_info.cursor field in the response., sort_by: str(name/id/client_version/last_seen_user.email/last_seen_at/active_registrations/created_at) # The device field to order results by., sort_order: str(asc/desc) # Sort direction., last_seen_user.email: str # Filter by the last seen user's email., seen_after: str # Filter by the last_seen timestamp - returns only devices last seen after this timestamp., seen_before: str # Filter by the last_seen timestamp - returns only devices last seen before this timestamp., per_page: int(uint64) # The maximum number of devices to return in a single response., search: str # Search by device details., active_registrations: str(include/only/exclude) # Include or exclude devices with active registrations. The default is \"only\" - return only devices with active registrations., has_registration_type: str # Filter by the type of active registration associated with the device., id: [str] # Filter by a one or more device IDs., last_seen_registration.policy.id: str(uuid) # Filter by the ID of the device settings profile assigned to the device registration., include: str # Comma-separated list of additional information that should be included in the device response. Supported values are: \"last_seen_registration.policy\".}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str, per_page: int, total_count: int?}, success: bool} # Returns a list of Devices.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/devices/physical-devices/{device_id}\n@desc Delete device\n@required {device_id: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Device was successfully deleted.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/physical-devices/{device_id}\n@desc Get device\n@required {device_id: str, account_id: str}\n@optional {include: str # Comma-separated list of additional information that should be included in the device response. Supported values are: \"last_seen_registration.policy\".}\n@returns(200) {errors: [map], messages: [map], result: map{active_registrations: int, client_version: str?, created_at: str, deleted_at: str?, device_type: str?, hardware_id: str?, id: str, last_seen_at: str?, last_seen_registration: map?, last_seen_user: map?, mac_address: str?, manufacturer: str?, model: str?, name: str, os_version: str?, os_version_extra: str?, public_ip: str?, serial_number: str?, updated_at: str}, success: bool} # Returns a Device.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/devices/physical-devices/{device_id}/revoke\n@desc Revoke device registrations\n@required {account_id: str, device_id: str}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Revoke device registrations response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/policies\n@desc List device settings profiles\n@required {account_id: str}\n@returns(200) List device settings profiles response.\n@errors {4XX: List device settings profiles response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy\n@desc Get the default device settings profile\n@required {account_id: str}\n@returns(200) Get the default device settings profile response.\n@errors {4XX: Get the default device settings profile response failure.}\n\n@endpoint PATCH /accounts/{account_id}/devices/policy\n@desc Update the default device settings profile\n@required {account_id: str}\n@optional {allow_mode_switch: bool=false # Whether to allow the user to switch WARP between modes., allow_updates: bool=false # Whether to receive update notifications when a new version of the client is available., allowed_to_leave: bool=true # Whether to allow devices to leave the organization., auto_connect: num=0 # The amount of time in seconds to reconnect after having been disabled., captive_portal: num=180 # Turn on the captive portal after the specified amount of time., disable_auto_fallback: bool=false # If the `dns_server` field of a fallback domain is not present, the client will fall back to a best guess of the default/system DNS resolvers unless this policy option is set to `true`., dns_search_suffixes: [map{description: str, suffix!: str}]= # List of DNS search suffixes to apply to clients. Suffixes are evaluated in order. Use an empty array to clear., exclude: [map] # List of routes excluded in the WARP client's tunnel. Both 'exclude' and 'include' cannot be set in the same request., exclude_office_ips: bool=false # Whether to add Microsoft IPs to Split Tunnel exclusions., global_acceleration: map{api_endpoints!: [str], enabled!: bool, masque_endpoints!: [str], wireguard_endpoints!: [str]} # Global Acceleration settings for China. When configured, WARP clients connect to the Global Accelerator addresses instead of the default ones. Please contact your account representative to enable this feature on your account. See https://developers.cloudflare.com/china-network/concepts/global-acceleration/., include: [map] # List of routes included in the WARP client's tunnel. Both 'exclude' and 'include' cannot be set in the same request., lan_allow_minutes: num # The amount of time in minutes a user is allowed access to their LAN. A value of 0 will allow LAN access until the next WARP reconnection, such as a reboot or a laptop waking from sleep. Note that this field is omitted from the response if null or unset., lan_allow_subnet_size: num # The size of the subnet for the local access network. Note that this field is omitted from the response if null or unset., register_interface_ip_with_dns: bool=true # Determines if the operating system will register WARP's local interface IP with your on-premises DNS server., sccm_vpn_boundary_support: bool=false # Determines whether the WARP client indicates to SCCM that it is inside a VPN boundary. (Windows only)., service_mode_v2: map{mode: str, port: num}, support_url: str= # The URL to launch when the Send Feedback button is clicked., switch_locked: bool=false # Whether to allow the user to turn off the WARP switch and disconnect the client., tunnel_protocol: str= # Determines which tunnel protocol to use., uninstall_protection: bool=false # Determines whether uninstalling the WARP client requires an override code. (Windows only)., virtual_networks: map{allowed!: [str(uuid)], default!: str(uuid)} # Virtual network access settings for the device.}\n@returns(200) Update the default device settings profile response.\n@errors {4XX: Update the default device settings profile response failure.}\n\n@endpoint POST /accounts/{account_id}/devices/policy\n@desc Create a device settings profile\n@required {account_id: str, match: str # The wirefilter expression to match devices. Available values: \"identity.email\", \"identity.groups.id\", \"identity.groups.name\", \"identity.groups.email\", \"identity.service_token_uuid\", \"identity.saml_attributes\", \"network\", \"os.name\", \"os.version\"., name: str # The name of the device settings profile., precedence: num # The precedence of the policy. Lower values indicate higher precedence. Policies will be evaluated in ascending order of this field.}\n@optional {allow_mode_switch: bool=false # Whether to allow the user to switch WARP between modes., allow_updates: bool=false # Whether to receive update notifications when a new version of the client is available., allowed_to_leave: bool=true # Whether to allow devices to leave the organization., auto_connect: num=0 # The amount of time in seconds to reconnect after having been disabled., captive_portal: num=180 # Turn on the captive portal after the specified amount of time., description: any, disable_auto_fallback: bool=false # If the `dns_server` field of a fallback domain is not present, the client will fall back to a best guess of the default/system DNS resolvers unless this policy option is set to `true`., dns_search_suffixes: [map{description: str, suffix!: str}]= # List of DNS search suffixes to apply to clients. Suffixes are evaluated in order. Use an empty array to clear., enabled: bool=true # Whether the policy will be applied to matching devices., exclude: [map] # List of routes excluded in the WARP client's tunnel. Both 'exclude' and 'include' cannot be set in the same request., exclude_office_ips: bool=false # Whether to add Microsoft IPs to Split Tunnel exclusions., global_acceleration: map{api_endpoints!: [str], enabled!: bool, masque_endpoints!: [str], wireguard_endpoints!: [str]} # Global Acceleration settings for China. When configured, WARP clients connect to the Global Accelerator addresses instead of the default ones. Please contact your account representative to enable this feature on your account. See https://developers.cloudflare.com/china-network/concepts/global-acceleration/., include: [map] # List of routes included in the WARP client's tunnel. Both 'exclude' and 'include' cannot be set in the same request., lan_allow_minutes: num # The amount of time in minutes a user is allowed access to their LAN. A value of 0 will allow LAN access until the next WARP reconnection, such as a reboot or a laptop waking from sleep. Note that this field is omitted from the response if null or unset., lan_allow_subnet_size: num # The size of the subnet for the local access network. Note that this field is omitted from the response if null or unset., register_interface_ip_with_dns: bool=true # Determines if the operating system will register WARP's local interface IP with your on-premises DNS server., sccm_vpn_boundary_support: bool=false # Determines whether the WARP client indicates to SCCM that it is inside a VPN boundary. (Windows only)., service_mode_v2: map{mode: str, port: num}, support_url: str= # The URL to launch when the Send Feedback button is clicked., switch_locked: bool=false # Whether to allow the user to turn off the WARP switch and disconnect the client., tunnel_protocol: str= # Determines which tunnel protocol to use., uninstall_protection: bool=false # Determines whether uninstalling the WARP client requires an override code. (Windows only)., virtual_networks: map{allowed!: [str(uuid)], default!: str(uuid)} # Virtual network access settings for the device.}\n@returns(200) Create a device settings profile response.\n@errors {4XX: Create a device settings profile response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy/exclude\n@desc Get the Split Tunnel exclude list\n@required {account_id: str}\n@returns(200) Get the Split Tunnel exclude list response.\n@errors {4XX: Get the Split Tunnel exclude list response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/policy/exclude\n@desc Set the Split Tunnel exclude list\n@required {account_id: str}\n@returns(200) Set the Split Tunnel exclude list response.\n@errors {4XX: Set the Split Tunnel exclude list response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy/fallback_domains\n@desc Get your Local Domain Fallback list\n@required {account_id: str}\n@returns(200) Get your Local Domain Fallback list response.\n@errors {4XX: Get your Local Domain Fallback list response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/policy/fallback_domains\n@desc Set your Local Domain Fallback list\n@required {account_id: str}\n@returns(200) Set your Local Domain Fallback list response.\n@errors {4XX: Set your Local Domain Fallback list response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy/include\n@desc Get the Split Tunnel include list\n@required {account_id: str}\n@returns(200) Get the Split Tunnel include list response.\n@errors {4XX: Get the Split Tunnel include list response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/policy/include\n@desc Set the Split Tunnel include list\n@required {account_id: str}\n@returns(200) Set the Split Tunnel include list response.\n@errors {4XX: Set the Split Tunnel include list response failure.}\n\n@endpoint DELETE /accounts/{account_id}/devices/policy/{policy_id}\n@desc Delete a device settings profile\n@required {policy_id: str, account_id: str}\n@returns(200) Delete a device settings profile response.\n@errors {4XX: Delete a device settings profile response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy/{policy_id}\n@desc Get device settings profile by ID\n@required {policy_id: str, account_id: str}\n@returns(200) Get device settings profile by ID response.\n@errors {4XX: Get device settings profile by ID response failure.}\n\n@endpoint PATCH /accounts/{account_id}/devices/policy/{policy_id}\n@desc Update a device settings profile\n@required {policy_id: str, account_id: str}\n@optional {allow_mode_switch: bool=false # Whether to allow the user to switch WARP between modes., allow_updates: bool=false # Whether to receive update notifications when a new version of the client is available., allowed_to_leave: bool=true # Whether to allow devices to leave the organization., auto_connect: num=0 # The amount of time in seconds to reconnect after having been disabled., captive_portal: num=180 # Turn on the captive portal after the specified amount of time., description: str # A description of the policy., disable_auto_fallback: bool=false # If the `dns_server` field of a fallback domain is not present, the client will fall back to a best guess of the default/system DNS resolvers unless this policy option is set to `true`., dns_search_suffixes: [map{description: str, suffix!: str}]= # List of DNS search suffixes to apply to clients. Suffixes are evaluated in order. Use an empty array to clear., enabled: bool # Whether the policy will be applied to matching devices., exclude: [map] # List of routes excluded in the WARP client's tunnel. Both 'exclude' and 'include' cannot be set in the same request., exclude_office_ips: bool=false # Whether to add Microsoft IPs to Split Tunnel exclusions., global_acceleration: map{api_endpoints!: [str], enabled!: bool, masque_endpoints!: [str], wireguard_endpoints!: [str]} # Global Acceleration settings for China. When configured, WARP clients connect to the Global Accelerator addresses instead of the default ones. Please contact your account representative to enable this feature on your account. See https://developers.cloudflare.com/china-network/concepts/global-acceleration/., include: [map] # List of routes included in the WARP client's tunnel. Both 'exclude' and 'include' cannot be set in the same request., lan_allow_minutes: num # The amount of time in minutes a user is allowed access to their LAN. A value of 0 will allow LAN access until the next WARP reconnection, such as a reboot or a laptop waking from sleep. Note that this field is omitted from the response if null or unset., lan_allow_subnet_size: num # The size of the subnet for the local access network. Note that this field is omitted from the response if null or unset., match: str # The wirefilter expression to match devices. Available values: \"identity.email\", \"identity.groups.id\", \"identity.groups.name\", \"identity.groups.email\", \"identity.service_token_uuid\", \"identity.saml_attributes\", \"network\", \"os.name\", \"os.version\"., name: str # The name of the device settings profile., precedence: num # The precedence of the policy. Lower values indicate higher precedence. Policies will be evaluated in ascending order of this field., register_interface_ip_with_dns: bool=true # Determines if the operating system will register WARP's local interface IP with your on-premises DNS server., sccm_vpn_boundary_support: bool=false # Determines whether the WARP client indicates to SCCM that it is inside a VPN boundary. (Windows only)., service_mode_v2: map{mode: str, port: num}, support_url: str= # The URL to launch when the Send Feedback button is clicked., switch_locked: bool=false # Whether to allow the user to turn off the WARP switch and disconnect the client., tunnel_protocol: str= # Determines which tunnel protocol to use., uninstall_protection: bool=false # Determines whether uninstalling the WARP client requires an override code. (Windows only)., virtual_networks: map{allowed!: [str(uuid)], default!: str(uuid)} # Virtual network access settings for the device.}\n@returns(200) Update a device settings profile Policy response.\n@errors {4XX: Update a device settings profile Policy response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy/{policy_id}/exclude\n@desc Get the Split Tunnel exclude list for a device settings profile\n@required {policy_id: str, account_id: str}\n@returns(200) Get the Split Tunnel exclude list for a device settings profile response.\n@errors {4XX: Get the Split Tunnel exclude list for a device settings profile response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/policy/{policy_id}/exclude\n@desc Set the Split Tunnel exclude list for a device settings profile\n@required {policy_id: str, account_id: str}\n@returns(200) Set the Split Tunnel exclude list for a device settings profile response.\n@errors {4XX: Set the Split Tunnel exclude list for a device settings profile response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy/{policy_id}/fallback_domains\n@desc Get the Local Domain Fallback list for a device settings profile\n@required {policy_id: str, account_id: str}\n@returns(200) Get the Local Domain Fallback list for a device settings profile response.\n@errors {4XX: Get the Local Domain Fallback list for a device settings profile response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/policy/{policy_id}/fallback_domains\n@desc Set the Local Domain Fallback list for a device settings profile\n@required {policy_id: str, account_id: str}\n@returns(200) Set the Local Domain Fallback list for a device settings profile response.\n@errors {4XX: Set the Local Domain Fallback list for a device settings profile response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/policy/{policy_id}/include\n@desc Get the Split Tunnel include list for a device settings profile\n@required {policy_id: str, account_id: str}\n@returns(200) Get the Split Tunnel include list for a device settings profile response.\n@errors {4XX: Get the Split Tunnel include list for a device settings profile response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/policy/{policy_id}/include\n@desc Set the Split Tunnel include list for a device settings profile\n@required {policy_id: str, account_id: str}\n@returns(200) Set the Split Tunnel include list for a device settings profile response.\n@errors {4XX: Set the Split Tunnel include list for a device settings profile response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/posture\n@desc List device posture rules\n@required {account_id: str}\n@returns(200) List device posture rules response.\n@errors {4XX: List device posture rules response failure.}\n\n@endpoint POST /accounts/{account_id}/devices/posture\n@desc Create a device posture rule\n@required {account_id: str, name: str # The name of the device posture rule., type: str(file/application/tanium/gateway/warp/disk_encryption/serial_number/sentinelone/carbonblack/firewall/os_version/domain_joined/client_certificate/client_certificate_v2/antivirus/unique_client_id/kolide/tanium_s2s/crowdstrike_s2s/intune/workspace_one/sentinelone_s2s/custom_s2s) # The type of device posture rule.}\n@optional {description: str # The description of the device posture rule., expiration: str # Sets the expiration time for a posture check result. If empty, the result remains valid until it is overwritten by new data from the WARP client., input: map # The value to be checked against., match: [map{platform: str}] # The conditions that the client must match to run the rule., schedule: str # Polling frequency for the WARP client posture check. Default: `5m` (poll every five minutes). Minimum: `1m`.}\n@returns(200) Create device posture rule response.\n@errors {4XX: Create device posture rule response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/posture/integration\n@desc List your device posture integrations\n@required {account_id: str}\n@returns(200) List your device posture integrations response.\n@errors {4XX: List your device posture integrations response failure.}\n\n@endpoint POST /accounts/{account_id}/devices/posture/integration\n@desc Create a device posture integration\n@required {account_id: str, config: map # The configuration object containing third-party integration information., interval: str # The interval between each posture check with the third-party API. Use `m` for minutes (e.g. `5m`) and `h` for hours (e.g. `12h`)., name: str # The name of the device posture integration., type: str(workspace_one/crowdstrike_s2s/uptycs/intune/kolide/tanium_s2s/sentinelone_s2s/custom_s2s) # The type of device posture integration.}\n@returns(200) Create a device posture integration response.\n@errors {4XX: Create a device posture integration response failure.}\n\n@endpoint DELETE /accounts/{account_id}/devices/posture/integration/{integration_id}\n@desc Delete a device posture integration\n@required {integration_id: str, account_id: str}\n@returns(200) Delete a device posture integration response.\n@errors {4XX: Delete a device posture integration response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/posture/integration/{integration_id}\n@desc Get device posture integration details\n@required {integration_id: str, account_id: str}\n@returns(200) Get device posture integration details response.\n@errors {4XX: Get device posture integration details response failure.}\n\n@endpoint PATCH /accounts/{account_id}/devices/posture/integration/{integration_id}\n@desc Update a device posture integration\n@required {integration_id: str, account_id: str}\n@optional {config: map # The configuration object containing third-party integration information., interval: str # The interval between each posture check with the third-party API. Use `m` for minutes (e.g. `5m`) and `h` for hours (e.g. `12h`)., name: str # The name of the device posture integration., type: str(workspace_one/crowdstrike_s2s/uptycs/intune/kolide/tanium_s2s/sentinelone_s2s/custom_s2s) # The type of device posture integration.}\n@returns(200) Update a device posture integration response.\n@errors {4XX: Update a device posture integration response failure.}\n\n@endpoint DELETE /accounts/{account_id}/devices/posture/{rule_id}\n@desc Delete a device posture rule\n@required {rule_id: str, account_id: str}\n@returns(200) Delete a device posture rule response.\n@errors {4XX: Delete a device posture rule response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/posture/{rule_id}\n@desc Get device posture rule details\n@required {rule_id: str, account_id: str}\n@returns(200) Get device posture rule details response.\n@errors {4XX: Get device posture rule details response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/posture/{rule_id}\n@desc Update a device posture rule\n@required {rule_id: str, account_id: str, name: str # The name of the device posture rule., type: str(file/application/tanium/gateway/warp/disk_encryption/serial_number/sentinelone/carbonblack/firewall/os_version/domain_joined/client_certificate/client_certificate_v2/antivirus/unique_client_id/kolide/tanium_s2s/crowdstrike_s2s/intune/workspace_one/sentinelone_s2s/custom_s2s) # The type of device posture rule.}\n@optional {description: str # The description of the device posture rule., expiration: str # Sets the expiration time for a posture check result. If empty, the result remains valid until it is overwritten by new data from the WARP client., input: map # The value to be checked against., match: [map{platform: str}] # The conditions that the client must match to run the rule., schedule: str # Polling frequency for the WARP client posture check. Default: `5m` (poll every five minutes). Minimum: `1m`.}\n@returns(200) Update a device posture rule response.\n@errors {4XX: Update a device posture rule response failure.}\n\n@endpoint DELETE /accounts/{account_id}/devices/registrations\n@desc Delete registrations\n@required {account_id: str, id: [str] # A list of registration IDs to delete.}\n@returns(200) {errors: [map], messages: [map], result: map?, result_info: map{count: int, cursor: str, per_page: int, total_count: int?}, success: bool} # Delete a list of registrations response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/registrations\n@desc List registrations\n@required {account_id: str}\n@optional {user.id: [str] # Filter by user ID., seen_after: str # Filter by the last_seen timestamp - returns only registrations last seen after this timestamp., seen_before: str # Filter by the last_seen timestamp - returns only registrations last seen before this timestamp., status: str(active/all/revoked) # Filter by registration status. Defaults to 'active'., registration_type: str # Filter by registration client type., per_page: int(uint64) # The maximum number of devices to return in a single response., search: str # Filter by registration details., sort_by: str(id/user.name/user.email/last_seen_at/created_at) # The registration field to order results by., sort_order: str(asc/desc) # Sort direction., cursor: str # Opaque token indicating the starting position when requesting the next set of records. A cursor value can be obtained from the result_info.cursor field in the response., id: [str] # Filter by registration ID., device.id: str # Filter by WARP device ID., policy.id: str(uuid) # Filter by the ID of the device settings profile assigned to the registration., include: str # Comma-separated list of additional information that should be included in the registration response. Supported values are: \"policy\".}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str, per_page: int, total_count: int?}, success: bool} # List of registrations response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/devices/registrations/revoke\n@desc Revoke registrations\n@required {account_id: str, id: [str] # A list of registration IDs to revoke.}\n@returns(200) {errors: [map], messages: [map], result: map?, result_info: map{count: int, cursor: str, per_page: int, total_count: int?}, success: bool} # Revoke registrations response.\n@errors {4XX: Client error response.}\n\n@endpoint POST /accounts/{account_id}/devices/registrations/unrevoke\n@desc Unrevoke registrations\n@required {account_id: str, id: [str] # A list of registration IDs to unrevoke.}\n@returns(200) {errors: [map], messages: [map], result: map?, result_info: map{count: int, cursor: str, per_page: int, total_count: int?}, success: bool} # Unrevoke registrations response.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /accounts/{account_id}/devices/registrations/{registration_id}\n@desc Delete registration\n@required {registration_id: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Registration deleted response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/registrations/{registration_id}\n@desc Get registration\n@required {registration_id: str, account_id: str}\n@optional {include: str # Comma-separated list of additional information that should be included in the registration response. Supported values are: \"policy\".}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, deleted_at: str?, device: map{client_version: str, id: str, name: str}, id: str, key: str, key_type: str?, last_seen_at: str, policy: map{default: bool, deleted: bool, id: str, name: str, updated_at: str}, registration_type: str, revoked_at: str?, tunnel_type: str?, updated_at: str, user: map{email: str, id: str, name: str}, virtual_ipv4: str?, virtual_ipv6: str?}, success: bool} # Returns a Registration.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/registrations/{registration_id}/override_codes\n@desc Get override codes\n@required {account_id: str, registration_id: str}\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Get admin override codes for a registration response.\n@errors {4XX: Client error response.}\n\n@endpoint GET /accounts/{account_id}/devices/resilience/disconnect\n@desc Retrieve Global WARP override state\n@required {account_id: str}\n@returns(200) Fetch Global WARP override state response.\n@errors {4XX: Fetch Global WARP override state failure.}\n\n@endpoint POST /accounts/{account_id}/devices/resilience/disconnect\n@desc Set Global WARP override state\n@required {account_id: str, disconnect: bool # Disconnects all devices on the account using Global WARP override.}\n@optional {justification: str # Reasoning for setting the Global WARP override state. This will be surfaced in the audit log.}\n@returns(200) Set Global WARP override state response.\n@errors {4XX: Set Global WARP override state response failure.}\n\n@endpoint POST /accounts/{account_id}/devices/revoke\n@desc Revoke devices (deprecated)\n@required {account_id: str}\n@returns(200) Revoke devices response.\n@errors {4XX: Revoke devices response failure.}\n\n@endpoint DELETE /accounts/{account_id}/devices/settings\n@desc Reset device settings for a Zero Trust account with defaults. This turns off all proxying.\n@required {account_id: str}\n@returns(200) Reset response for device settings for a Zero Trust account.\n@errors {4XX: Reset failure response device settings for a Zero Trust account.}\n\n@endpoint GET /accounts/{account_id}/devices/settings\n@desc Get device settings for a Zero Trust account\n@required {account_id: str}\n@returns(200) Get device settings for a Zero Trust account response.\n@errors {4XX: Get device settings for a Zero Trust account response failure.}\n\n@endpoint PATCH /accounts/{account_id}/devices/settings\n@desc Patch device settings for a Zero Trust account\n@required {account_id: str}\n@optional {disable_for_time: num # Sets the time limit, in seconds, that a user can use an override code to bypass WARP., external_emergency_signal_enabled: bool # Controls whether the external emergency disconnect feature is enabled., external_emergency_signal_fingerprint: str # The SHA256 fingerprint (64 hexadecimal characters) of the HTTPS server certificate for the external_emergency_signal_url. If provided, the WARP client will use this value to verify the server's identity. The device will ignore any response if the server's certificate fingerprint does not exactly match this value., external_emergency_signal_interval: str # The interval at which the WARP client fetches the emergency disconnect signal, formatted as a duration string (e.g., \"5m\", \"2m30s\", \"1h\"). Minimum 30 seconds., external_emergency_signal_url: str # The HTTPS URL from which to fetch the emergency disconnect signal. Must use HTTPS and have an IPv4 or IPv6 address as the host., gateway_proxy_enabled: bool # Enable gateway proxy filtering on TCP., gateway_udp_proxy_enabled: bool # Enable gateway proxy filtering on UDP., root_certificate_installation_enabled: bool # Enable installation of cloudflare managed root certificate., use_zt_virtual_ip: bool # Enable using CGNAT virtual IPv4.}\n@returns(200) Patch device settings for a Zero Trust account response.\n@errors {4XX: Patch device settings for a Zero Trust account response failure.}\n\n@endpoint PUT /accounts/{account_id}/devices/settings\n@desc Update device settings for a Zero Trust account\n@required {account_id: str}\n@optional {disable_for_time: num # Sets the time limit, in seconds, that a user can use an override code to bypass WARP., external_emergency_signal_enabled: bool # Controls whether the external emergency disconnect feature is enabled., external_emergency_signal_fingerprint: str # The SHA256 fingerprint (64 hexadecimal characters) of the HTTPS server certificate for the external_emergency_signal_url. If provided, the WARP client will use this value to verify the server's identity. The device will ignore any response if the server's certificate fingerprint does not exactly match this value., external_emergency_signal_interval: str # The interval at which the WARP client fetches the emergency disconnect signal, formatted as a duration string (e.g., \"5m\", \"2m30s\", \"1h\"). Minimum 30 seconds., external_emergency_signal_url: str # The HTTPS URL from which to fetch the emergency disconnect signal. Must use HTTPS and have an IPv4 or IPv6 address as the host., gateway_proxy_enabled: bool # Enable gateway proxy filtering on TCP., gateway_udp_proxy_enabled: bool # Enable gateway proxy filtering on UDP., root_certificate_installation_enabled: bool # Enable installation of cloudflare managed root certificate., use_zt_virtual_ip: bool # Enable using CGNAT virtual IPv4.}\n@returns(200) Update device settings for a Zero Trust account response.\n@errors {4XX: Update device settings for a Zero Trust account response failure.}\n\n@endpoint POST /accounts/{account_id}/devices/unrevoke\n@desc Unrevoke devices (deprecated)\n@required {account_id: str}\n@returns(200) Unrevoke devices response.\n@errors {4XX: Unrevoke devices response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/{device_id}\n@desc Get device (deprecated)\n@required {device_id: str, account_id: str}\n@returns(200) Get device details response.\n@errors {4XX: Get device details response failure.}\n\n@endpoint GET /accounts/{account_id}/devices/{device_id}/override_codes\n@desc Get override codes (deprecated)\n@required {device_id: str, account_id: str}\n@returns(200) Get an admin override code for a device response.\n@errors {4XX: Get an admin override code for a device response failure.}\n\n@endpoint GET /accounts/{account_id}/dex/colos\n@desc List Cloudflare colos\n@required {account_id: str # Unique Cloudflare account ID., from: str # Start time for connection period in ISO (RFC3339 - ISO 8601) format., to: str # End time for connection period in ISO (RFC3339 - ISO 8601) format.}\n@optional {sortBy: str(fleet-status-usage/application-tests-usage) # Type of usage that colos should be sorted by. If unspecified, returns all Cloudflare colos sorted alphabetically.}\n@returns(200) List colos response.\n@errors {4XX: List colos failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/commands\n@desc List account commands\n@required {account_id: str # Unique Cloudflare account ID., page: num=1 # Page number of paginated results., per_page: num # Number of results per page.}\n@optional {from: str(date-time) # Start time for the query in ISO (RFC3339 - ISO 8601) format., to: str(date-time) # End time for the query in ISO (RFC3339 - ISO 8601) format., device_id: str # Unique identifier for a device., user_email: str # Email tied to the device., command_type: str(pcap/speed-test/warp-diag) # Optionally filter executed commands by command type., status: str(PENDING_EXEC/PENDING_UPLOAD/SUCCESS/FAILED) # Optionally filter executed commands by status.}\n@returns(200) Get commands response.\n@errors {4XX: Get commands failure response.}\n\n@endpoint POST /accounts/{account_id}/dex/commands\n@desc Create account commands\n@required {account_id: str # Unique Cloudflare account ID., commands: [map{args: map, device_id!: str, registration_id: str, type!: str, user_email!: str}] # List of device-level commands to execute}\n@returns(200) Create commands response.\n@errors {4XX: Create commands failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/commands/devices\n@desc List devices eligible for remote captures\n@required {account_id: str # Unique Cloudflare account ID., page: num=1 # Page number of paginated results., per_page: num # Number of results per page.}\n@optional {search: str # Filter devices by name or email.}\n@returns(200) List of eligible devices.\n@errors {4XX: List eligible devices failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/commands/quota\n@desc Returns account commands usage, quota, and reset time\n@required {account_id: str # Unique Cloudflare account ID.}\n@returns(200) Get commands quota response.\n@errors {4XX: Get commands quota failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/commands/{command_id}/downloads/{filename}\n@desc Download command output file\n@required {account_id: str # Unique Cloudflare account ID., command_id: str # Unique identifier for command., filename: str # The name of the file to be downloaded, including the `.zip` extension.}\n@returns(200) Get command artifacts response.\n@errors {4XX: Get downloaded commands failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/devices/dex_tests\n@desc List Device DEX tests\n@required {account_id: str # Unique Cloudflare account ID.}\n@optional {page: num=1 # Page number of paginated results., per_page: num=10 # Number of results per page., testName: str # Filter by test name., kind: str(http/traceroute) # Filter by test type.}\n@returns(200) Device DEX test details response.\n@errors {4XX: Device DEX test response failure.}\n\n@endpoint POST /accounts/{account_id}/dex/devices/dex_tests\n@desc Create Device DEX test\n@required {account_id: str # Unique Cloudflare account ID., data: map{host!: str, kind!: str, method: str} # The configuration object which contains the details for the WARP client to conduct the test., enabled: bool # Determines whether or not the test is active., interval: str # How often the test will run., name: str # The name of the DEX test. Must be unique.}\n@optional {created: str(date-time) # Date the test was created, in RFC 3339 format., description: str # Additional details about the test., target_policies: any, targeted: bool, test_id: str # The unique identifier for the test., updated: str(date-time) # Date the test was last updated, in RFC 3339 format.}\n@returns(200) Update Dex test response.\n@errors {4XX: Update Dex test response failure.}\n\n@endpoint DELETE /accounts/{account_id}/dex/devices/dex_tests/{dex_test_id}\n@desc Delete Device DEX test\n@required {account_id: str # Unique Cloudflare account ID., dex_test_id: str # Unique identifier for a DEX test.}\n@returns(200) Delete Device DEX test response.\n@errors {4XX: Delete DEX test response failure.}\n\n@endpoint GET /accounts/{account_id}/dex/devices/dex_tests/{dex_test_id}\n@desc Get Device DEX test\n@required {account_id: str # Unique Cloudflare account ID., dex_test_id: str # Unique identifier for a DEX test.}\n@returns(200) Device DEX test details response.\n@errors {4XX: Device DEX test response failure.}\n\n@endpoint PUT /accounts/{account_id}/dex/devices/dex_tests/{dex_test_id}\n@desc Update Device DEX test\n@required {account_id: str # Unique Cloudflare account ID., dex_test_id: str # Unique identifier for a DEX test., data: map{host!: str, kind!: str, method: str} # The configuration object which contains the details for the WARP client to conduct the test., enabled: bool # Determines whether or not the test is active., interval: str # How often the test will run., name: str # The name of the DEX test. Must be unique.}\n@optional {created: str(date-time) # Date the test was created, in RFC 3339 format., description: str # Additional details about the test., target_policies: any, targeted: bool, test_id: str # The unique identifier for the test., updated: str(date-time) # Date the test was last updated, in RFC 3339 format.}\n@returns(200) Update Dex test response.\n@errors {4XX: Update Dex test response failure.}\n\n@endpoint GET /accounts/{account_id}/dex/devices/{device_id}/fleet-status/live\n@desc Get the latest status of a device.\n@required {account_id: str # Unique Cloudflare account ID., device_id: str # Device-specific ID, given as UUID., since_minutes: num # Number of minutes before current time.}\n@optional {time_now: str # Current time in ISO format., colo: str # List of data centers to filter results.}\n@returns(200) {alwaysOn: bool?, batteryCharging: bool?, batteryCycles: int(int64)?, batteryPct: num(float)?, colo: str, connectionType: str?, cpuPct: num(float)?, cpuPctByApp: [map]?, deviceId: str, deviceIpv4: map?, deviceIpv6: map?, deviceName: str, deviceRegistration: str?, diskReadBps: int(int64)?, diskUsagePct: num(float)?, diskWriteBps: int(int64)?, dohSubdomain: str?, estimatedLossPct: num(float)?, firewallEnabled: bool?, gatewayIpv4: map?, gatewayIpv6: map?, handshakeLatencyMs: num(int64)?, ispIpv4: map?, ispIpv6: map?, metal: str?, mode: str, networkRcvdBps: int(int64)?, networkSentBps: int(int64)?, networkSsid: str?, personEmail: str, platform: str, ramAvailableKb: int(int64)?, ramUsedPct: num(float)?, ramUsedPctByApp: [map]?, registrationId: str?, rtt: map?, status: str, switchLocked: bool?, timestamp: str, tunnelStats: map?, tunnelType: str?, version: str, wifiStrengthDbm: int(int64)?} # Get the latest status of a device.\n@errors {4XX: Get the latest status of a device failure.}\n\n@endpoint GET /accounts/{account_id}/dex/devices/{device_id}/fleet-status/over-time\n@desc Get the status over time for a device\n@required {account_id: str # Unique Cloudflare account ID., device_id: str # Device-specific ID, given as UUID., from: str # Start of the time range to query. Timestamp can be provided in ISO 8601 datetime format or milliseconds since epoch., to: str # End of the time range to query. Timestamp can be provided in ISO 8601 datetime format or milliseconds since epoch., interval: str(minute/hour) # Time interval for aggregate time slots.}\n@optional {colo: str # List of data centers to filter results.}\n@returns(200) Device status over time response.\n@errors {4XX: Device status over time failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/devices/{device_id}/isps\n@desc List device ISPs\n@required {account_id: str # Unique Cloudflare account ID., device_id: str # Device-specific ID, given as UUID., per_page: int # Number of items per page}\n@optional {page: int=1 # Page number of paginated results. Mutually exclusive with cursor., cursor: str # Cursor for cursor-based pagination. Mutually exclusive with page., sort_by: str=time_start # The field to sort results by., sort_order: str(ASC/DESC)=DESC # The order to sort results., from: str(date-time) # Start time for the query in ISO 8601 format., to: str(date-time) # End time for the query in ISO 8601 format.}\n@returns(200) List of ISPs observed for the device.\n@errors {4XX: List device ISPs failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/fleet-status/devices\n@desc List details of devices using WARP.\n@required {account_id: str # Unique Cloudflare account ID., to: str # End of the time range to query. Timestamp can be provided in ISO 8601 datetime format or milliseconds since epoch., from: str # Start of the time range to query. Timestamp can be provided in ISO 8601 datetime format or milliseconds since epoch., page: num # Page number of paginated results., per_page: num # Number of results per page.}\n@optional {sort_by: str # Dimension to sort results by., colo: str # Cloudflare colo airport code., device_id: str # Device-specific ID, given as UUID., mode: str # The mode under which the WARP client is run., status: str # Network status., platform: str # Operating system., version: str # WARP client version., source: str # Source:   * `hourly` - device details aggregated hourly, up to 7 days prior   * `last_seen` - device details, up to 60 minutes prior. Time windows exceeding 60 minutes will be rejected from June 1st, 2026. Please use 'hourly' or 'raw' instead for longer time ranges.   * `raw` - device details, up to 7 days prior}\n@returns(200) List devices response.\n@errors {4XX: List devices response failure.}\n\n@endpoint GET /accounts/{account_id}/dex/fleet-status/live\n@desc Get live aggregate device details by dimension\n@required {account_id: str # Unique Cloudflare account ID., since_minutes: num # Number of minutes before current time.}\n@returns(200) Get device details (live) response.\n@errors {4XX: Get device details (live) response failure.}\n\n@endpoint GET /accounts/{account_id}/dex/fleet-status/over-time\n@desc Get over time aggregate details for devices by dimension\n@required {account_id: str # Unique Cloudflare account ID., to: str # End of the time range to query. Timestamp can be provided in ISO 8601 datetime format or milliseconds since epoch., from: str # Start of the time range to query. Timestamp can be provided in ISO 8601 datetime format or milliseconds since epoch.}\n@optional {colo: str # Cloudflare colo airport code., device_id: str # Device-specific ID, given as UUID.}\n@returns(200) Get DEX devices aggregate success response.\n@errors {4XX: Get DEX devices aggregate failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/http-tests/{test_id}\n@desc Get details and aggregate metrics for an http test\n@required {account_id: str # Unique Cloudflare account ID., test_id: str # Unique identifier for a specific test., from: str # Start time for aggregate metrics in ISO ms., to: str # End time for aggregate metrics in ISO ms., interval: str(minute/hour) # Time interval for aggregate time slots.}\n@optional {deviceId: [str] # Optionally filter result stats to a specific device(s). Cannot be used in combination with colo param., colo: str # Optionally filter result stats to a Cloudflare colo. Cannot be used in combination with deviceId param.}\n@returns(200) DEX HTTP test details response.\n@errors {4XX: DEX HTTP test details failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/http-tests/{test_id}/percentiles\n@desc Get percentiles for an http test\n@required {account_id: str # Unique Cloudflare account ID., test_id: str # Unique identifier for a specific test., from: str # Start time for the query in ISO (RFC3339 - ISO 8601) format., to: str # End time for the query in ISO (RFC3339 - ISO 8601) format.}\n@optional {deviceId: [str] # Optionally filter result stats to a specific device(s). Cannot be used in combination with colo param., colo: str # Optionally filter result stats to a Cloudflare colo. Cannot be used in combination with deviceId param.}\n@returns(200) DEX HTTP test percentiles response.\n@errors {4XX: DEX HTTP test percentiles failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/rules\n@desc List DEX Rules\n@required {account_id: str # Unique Cloudflare account ID., page: num=1 # Page number of paginated results., per_page: num # Number of results per page.}\n@optional {sort_order: str(ASC/DESC)=ASC # Sort direction for sort_by property., sort_by: str(name/created_at/updated_at)=name # Which property to sort results by., name: str # Filter results by rule name.}\n@returns(200) Success response.\n@errors {4XX: List DEX Rules failure response.}\n\n@endpoint POST /accounts/{account_id}/dex/rules\n@desc Create a DEX Rule\n@required {account_id: str # Unique Cloudflare account ID., match: str # The wirefilter expression to match., name: str # The name of the Rule.}\n@optional {description: str}\n@returns(200) Success response.\n@errors {4XX: Create DEX Rule failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dex/rules/{rule_id}\n@desc Delete a DEX Rule\n@required {account_id: str # Unique Cloudflare account ID., rule_id: str # Unique identifier of the rule.}\n@returns(200) Success response.\n@errors {4XX: Update DEX Rule failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/rules/{rule_id}\n@desc Get DEX Rule\n@required {account_id: str # Unique Cloudflare account ID., rule_id: str # Unique identifier of the rule.}\n@returns(200) Success response.\n@errors {4XX: List DEX Rule failure response.}\n\n@endpoint PATCH /accounts/{account_id}/dex/rules/{rule_id}\n@desc Update a DEX Rule\n@required {account_id: str # Unique Cloudflare account ID., rule_id: str # Unique identifier of the rule.}\n@optional {description: str, match: str # The wirefilter expression to match., name: str # The name of the Rule.}\n@returns(200) Success response.\n@errors {4XX: Update DEX Rule failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/tests/overview\n@desc List DEX test analytics\n@required {account_id: str # Unique Cloudflare account ID.}\n@optional {colo: str # Optionally filter result stats to a Cloudflare colo. Cannot be used in combination with deviceId param., testName: str # Optionally filter results by test name., deviceId: [str] # Optionally filter result stats to a specific device(s). Cannot be used in combination with colo param., registration_id: str # Optionally filter results to a specific device registration. Must be used in combination with a single deviceId., page: num=1 # Page number of paginated results, per_page: num=10 # Number of items per page, kind: str(http/traceroute) # Filter by test type.}\n@returns(200) Success response.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/tests/unique-devices\n@desc Get count of devices targeted\n@required {account_id: str # Unique Cloudflare account ID.}\n@optional {testName: str # Optionally filter results by test name., deviceId: [str] # Optionally filter result stats to a specific device(s). Cannot be used in combination with colo param.}\n@returns(200) DEX unique devices targeted response.\n@errors {4XX: DEX unique devices targeted failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/traceroute-test-results/{test_result_id}/network-path\n@desc Get details for a specific traceroute test run\n@required {account_id: str # Unique Cloudflare account ID., test_result_id: str # Unique identifier for a specific traceroute test.}\n@returns(200) DEX traceroute test result network path response.\n@errors {4XX: DEX traceroute test result network path failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/traceroute-tests/{test_id}\n@desc Get details and aggregate metrics for a traceroute test\n@required {account_id: str # Unique Cloudflare account ID., test_id: str # Unique identifier for a specific test., from: str # Start time for aggregate metrics in ISO ms., to: str # End time for aggregate metrics in ISO ms., interval: str(minute/hour) # Time interval for aggregate time slots.}\n@optional {deviceId: [str] # Optionally filter result stats to a specific device(s). Cannot be used in combination with colo param., colo: str # Optionally filter result stats to a Cloudflare colo. Cannot be used in combination with deviceId param.}\n@returns(200) DEX traceroute test details response.\n@errors {4XX: DEX traceroute test details response failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/traceroute-tests/{test_id}/network-path\n@desc Get network path breakdown for a traceroute test\n@required {account_id: str # Unique Cloudflare account ID., test_id: str # Unique identifier for a specific test., deviceId: str # Device to filter traceroute result runs to., from: str # Start time for aggregate metrics in ISO ms., to: str # End time for aggregate metrics in ISO ms., interval: str(minute/hour) # Time interval for aggregate time slots.}\n@returns(200) DEX traceroute test network path response.\n@errors {4XX: DEX traceroute test network path failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/traceroute-tests/{test_id}/percentiles\n@desc Get percentiles for a traceroute test\n@required {account_id: str # Unique Cloudflare account ID., test_id: str # Unique identifier for a specific test., from: str # Start time for the query in ISO (RFC3339 - ISO 8601) format., to: str # End time for the query in ISO (RFC3339 - ISO 8601) format.}\n@optional {deviceId: [str] # Optionally filter result stats to a specific device(s). Cannot be used in combination with colo param., colo: str # Optionally filter result stats to a Cloudflare colo. Cannot be used in combination with deviceId param.}\n@returns(200) DEX Traceroute test percentiles response.\n@errors {4XX: DEX Traceroute test percentiles failure response.}\n\n@endpoint GET /accounts/{account_id}/dex/warp-change-events\n@desc List WARP change events.\n@required {account_id: str # Unique Cloudflare account ID., page: num=1 # Page number of paginated results., per_page: num # Number of results per page., from: str # Start time for the query in ISO (RFC3339 - ISO 8601) format., to: str # End time for the query in ISO (RFC3339 - ISO 8601) format.}\n@optional {type: str(config/toggle) # Filter events by type 'config' or 'toggle'., toggle: str(on/off) # Filter events by type toggle value. Applicable to type='toggle' events only., config_name: str # Filter events by WARP configuration name changed from or to. Applicable to type='config' events only., account_name: str # Filter events by account name., sort_order: str(ASC/DESC)=ASC # Sort response by event timestamp.}\n@returns(200) Success response.\n@errors {4XX: List WARP change events failure response.}\n\n@endpoint GET /accounts/{account_id}/diagnostics/endpoint-healthchecks\n@desc List Endpoint Health Checks\n@required {account_id: str}\n@returns(200) Endpoint Health Checks for account.\n@errors {4XX: Endpoint Health Check response failure.}\n\n@endpoint POST /accounts/{account_id}/diagnostics/endpoint-healthchecks\n@desc Endpoint Health Check\n@required {account_id: str, check_type: str=icmp # type of check to perform, endpoint: str # the IP address of the host to perform checks against}\n@optional {name: str # Optional name associated with this check}\n@returns(201) Endpoint Health Check response.\n@errors {4XX: Endpoint Health Check response failure.}\n\n@endpoint DELETE /accounts/{account_id}/diagnostics/endpoint-healthchecks/{id}\n@desc Delete Endpoint Health Check\n@required {account_id: str, id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Endpoint Health Checks response.\n@errors {4XX: Endpoint Health Check failure.}\n\n@endpoint GET /accounts/{account_id}/diagnostics/endpoint-healthchecks/{id}\n@desc Get Endpoint Health Check\n@required {account_id: str, id: str}\n@returns(200) Endpoint Health Checks response.\n@errors {4XX: Endpoint Health Check failure.}\n\n@endpoint PUT /accounts/{account_id}/diagnostics/endpoint-healthchecks/{id}\n@desc Update Endpoint Health Check\n@required {account_id: str, id: str, check_type: str=icmp # type of check to perform, endpoint: str # the IP address of the host to perform checks against}\n@optional {name: str # Optional name associated with this check}\n@returns(200) Endpoint Health Checks response.\n@errors {4XX: Endpoint Health Check failure.}\n\n@endpoint POST /accounts/{account_id}/diagnostics/traceroute\n@desc Traceroute\n@required {account_id: str, targets: [str]}\n@optional {colos: [str] # If no source colo names specified, all colos will be used. China colos are unavailable for traceroutes., options: map{max_ttl: int, packet_type: str, packets_per_ttl: int, port: int, wait_time: int}}\n@returns(200) Traceroute response.\n@errors {4XX: Traceroute response failure.}\n\n@endpoint GET /accounts/{account_id}/dlp/custom_prompt_topics\n@desc List custom prompt topics\n@required {account_id: str}\n@returns(200) List custom prompt topics response.\n@errors {4XX: List custom prompt topics failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/custom_prompt_topics\n@desc Create custom prompt topic\n@required {account_id: str, enabled: bool, name: str, topic: str}\n@optional {description: str, profile_id: str(uuid)}\n@returns(200) Create custom prompt topic response.\n@errors {4XX: Create custom prompt topic failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/custom_prompt_topics/{entry_id}\n@desc Delete custom prompt topic\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Delete custom prompt topic response.\n@errors {4XX: Delete custom prompt topic failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/custom_prompt_topics/{entry_id}\n@desc Get custom prompt topic\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Get custom prompt topic response.\n@errors {4XX: Get custom prompt topic failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/custom_prompt_topics/{entry_id}\n@desc Update custom prompt topic\n@required {account_id: str, entry_id: str(uuid), enabled: bool, name: str, topic: str}\n@optional {description: str}\n@returns(200) Update custom prompt topic response.\n@errors {4XX: Update custom prompt topic failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_classes\n@desc Retrieve all data classes in an account\n@required {account_id: str}\n@returns(200) Data class list was successful.\n@errors {4XX: Data class list failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/data_classes\n@desc Creates a new data class\n@required {account_id: str, data_tags: [str(uuid)], expression: str, name: str, sensitivity_levels: [map{group_id!: str(uuid), level_id!: str(uuid)}]}\n@optional {description: str}\n@returns(200) Data class created successfully.\n@errors {4XX: Data class creation failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/data_classes/{data_class_id}\n@desc Delete a single data class\n@required {account_id: str, data_class_id: str(uuid)}\n@returns(200) Data class delete was successful.\n@errors {4XX: Data class delete failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_classes/{data_class_id}\n@desc Retrieve a specific data class\n@required {account_id: str, data_class_id: str(uuid)}\n@returns(200) Data class read was successful.\n@errors {4XX: Data class read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/data_classes/{data_class_id}\n@desc Update the attributes of a single data class\n@required {account_id: str, data_class_id: str(uuid)}\n@optional {data_tags: [str(uuid)], description: str, expression: str, name: str, sensitivity_levels: [map{group_id!: str(uuid), level_id!: str(uuid)}]}\n@returns(200) Data class update was successful.\n@errors {4XX: Data class update failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_tag_categories\n@desc Retrieve all data tag categories in an account\n@required {account_id: str}\n@returns(200) Data tag category read was successful.\n@errors {4XX: Data tag category read failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/data_tag_categories\n@desc Creates a new data tag category.\n@required {account_id: str, name: str}\n@optional {description: str, tags: [map{description: str, name!: str}] # Tags to create with the category. Mutually exclusive with `template_id`., template_id: str(uuid)}\n@returns(200) Data tag category created successfully.\n@errors {4XX: Data tag category creation failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/data_tag_categories/{category_id}\n@desc Delete a single data tag category.\n@required {account_id: str, category_id: str(uuid)}\n@returns(200) Data tag category delete was successful.\n@errors {4XX: Data tag category delete failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_tag_categories/{category_id}\n@desc Retrieve a specific data tag category.\n@required {account_id: str, category_id: str(uuid)}\n@returns(200) Data tag category read was successful.\n@errors {4XX: Data tag category read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/data_tag_categories/{category_id}\n@desc Update the attributes of a single data tag category.\n@required {account_id: str, category_id: str(uuid)}\n@optional {description: str, name: str, tags: [any] # The desired final state of tags. - `None` (omitted): no tag changes. - `Some([])`: delete all tags. - `Some([...])`: desired final set + order.}\n@returns(200) Data tag category update was successful.\n@errors {4XX: Data tag category update failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_tag_categories/{category_id}/data_tags\n@desc Retrieve all data tags in a data tag category\n@required {account_id: str, category_id: str(uuid)}\n@returns(200) Data tags read was successful.\n@errors {4XX: Data tags read failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/data_tag_categories/{category_id}/data_tags\n@desc Creates a new data tag.\n@required {account_id: str, category_id: str(uuid), name: str}\n@optional {description: str}\n@returns(200) Data tag created successfully.\n@errors {4XX: Data tag creation failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/data_tag_categories/{category_id}/data_tags/{tag_id}\n@desc Delete a single data tag.\n@required {account_id: str, category_id: str(uuid), tag_id: str(uuid)}\n@returns(200) Data tag delete was successful.\n@errors {4XX: Data tag delete failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_tag_categories/{category_id}/data_tags/{tag_id}\n@desc Retrieve a specific data tag.\n@required {account_id: str, category_id: str(uuid), tag_id: str(uuid)}\n@returns(200) Data tag read was successful.\n@errors {4XX: Data tag read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/data_tag_categories/{category_id}/data_tags/{tag_id}\n@desc Update the attributes of a single data tag.\n@required {account_id: str, category_id: str(uuid), tag_id: str(uuid)}\n@optional {description: str, name: str}\n@returns(200) Data tag update was successful.\n@errors {4XX: Data tag update failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_tag_category_templates\n@desc Retrieve all data tag category templates in an account\n@required {account_id: str}\n@returns(200) Data tag category template read was successful.\n@errors {4XX: Data tag category template read failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/data_tag_category_templates/{template_id}\n@desc Retrieve a specific data tag category template.\n@required {account_id: str, template_id: str(uuid)}\n@returns(200) Data tag category template read was successful.\n@errors {4XX: Data tag category template read failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/datasets\n@desc Fetch all datasets\n@required {account_id: str}\n@returns(200) Datasets read successfully.\n@errors {4XX: Datasets read failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/datasets\n@desc Create a new dataset\n@required {account_id: str, name: str}\n@optional {case_sensitive: bool # Only applies to custom word lists. Determines if the words should be matched in a case-sensitive manner Cannot be set to false if `secret` is true or undefined, description: str # The description of the dataset., encoding_version: int(int32) # Dataset encoding version  Non-secret custom word lists with no header are always version 1. Secret EDM lists with no header are version 1. Multicolumn CSV with headers are version 2. Omitting this field provides the default value 0, which is interpreted the same as 1., secret: bool # Generate a secret dataset.  If true, the response will include a secret to use with the EDM encoder. If false, the response has no secret and the dataset is uploaded in plaintext.}\n@returns(200) Dataset created successfully.\n@errors {4XX: Dataset creation failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/datasets/{dataset_id}\n@desc Delete a dataset\n@required {account_id: str, dataset_id: str(uuid)}\n@returns(200) Dataset deleted successfully.\n@errors {4XX: Dataset delete failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/datasets/{dataset_id}\n@desc Fetch a specific dataset\n@required {account_id: str, dataset_id: str(uuid)}\n@returns(200) Dataset read successfully.\n@errors {4XX: Dataset read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/datasets/{dataset_id}\n@desc Update details about a dataset\n@required {account_id: str, dataset_id: str(uuid)}\n@optional {case_sensitive: bool # Determines if the words should be matched in a case-sensitive manner.  Only required for custom word lists., description: str # The description of the dataset., name: str # The name of the dataset, must be unique.}\n@returns(200) Dataset updated successfully.\n@errors {4XX: Dataset update failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/datasets/{dataset_id}/upload\n@desc Prepare to upload a new version of a dataset\n@required {account_id: str, dataset_id: str(uuid)}\n@returns(200) Dataset version created successfully.\n@errors {4XX: Dataset version creation failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/datasets/{dataset_id}/upload/{version}\n@desc Upload a new version of a dataset\n@required {account_id: str, dataset_id: str(uuid), version: int(int64)}\n@returns(200) Dataset version uploaded successfully.\n@errors {4XX: Dataset version upload failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/datasets/{dataset_id}/versions/{version}\n@desc Sets the column information for a multi-column upload\n@required {account_id: str, dataset_id: str(uuid), version: int(int64)}\n@returns(200) Dataset columns created successfully.\n@errors {4XX: Failed to create dataset columns.}\n\n@endpoint POST /accounts/{account_id}/dlp/datasets/{dataset_id}/versions/{version}/entries/{entry_id}\n@desc Upload a new version of a multi-column dataset\n@required {account_id: str, dataset_id: str(uuid), version: int(int64), entry_id: str(uuid)}\n@returns(200) Dataset column uploaded successfully.\n@errors {4XX: Failed to upload dataset column.}\n\n@endpoint GET /accounts/{account_id}/dlp/document_fingerprints\n@desc Retrieve data about all document fingerprints.\n@required {account_id: str}\n@returns(200) Document fingerprint read was successful.\n@errors {4XX: Document fingerprint read failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/document_fingerprints\n@desc Creates a new document fingerprint.\n@required {account_id: str, match_percent: int(int32), name: str}\n@optional {description: str=}\n@returns(200) Document fingerprint created successfully.\n@errors {4XX: Document fingerprint creation failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/document_fingerprints/{document_fingerprint_id}\n@desc Delete a single document fingerprint.\n@required {account_id: str, document_fingerprint_id: str(uuid)}\n@returns(200) Document fingerprint delete was successful.\n@errors {4XX: Document fingerprint delete failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/document_fingerprints/{document_fingerprint_id}\n@desc Retrieve data about a specific document fingerprint.\n@required {account_id: str, document_fingerprint_id: str(uuid)}\n@returns(200) Document fingerprint read was successful.\n@errors {4XX: Document fingerprint read failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/document_fingerprints/{document_fingerprint_id}\n@desc Update the attributes of a single document fingerprint.\n@required {account_id: str, document_fingerprint_id: str(uuid)}\n@optional {description: str, match_percent: int(int32), name: str}\n@returns(200) Document fingerprint read was successful.\n@errors {4XX: Document fingerprint read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/document_fingerprints/{document_fingerprint_id}\n@desc Uploads a new version for a document fingerprint.\n@required {account_id: str, document_fingerprint_id: str(uuid)}\n@returns(200) File uploaded successfully.\n@errors {4XX: Failed to upload file.}\n\n@endpoint GET /accounts/{account_id}/dlp/email/account_mapping\n@desc Get mapping\n@required {account_id: str}\n@returns(200) Get Email Scanner Account Mapping response.\n@errors {4XX: Get Email Scanner Account Mapping failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/email/account_mapping\n@desc Create mapping\n@required {account_id: str, auth_requirements: any}\n@returns(200) New Email Scanner Account Mapping response.\n@errors {4XX: New Email Scanner Account Mapping failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/email/rules\n@desc List all email scanner rules\n@required {account_id: str}\n@returns(200) List all email scanner rules response.\n@errors {4XX: List all email scanner rules failure response.}\n\n@endpoint PATCH /accounts/{account_id}/dlp/email/rules\n@desc Update email scanner rule priorities\n@required {account_id: str, new_priorities: map}\n@returns(200) Update Email Scanner Rule priorities response.\n@errors {4XX: Update Email Scanner Rule priorities failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/email/rules\n@desc Create email scanner rule\n@required {account_id: str, action: any, conditions: [map{operator!: str, selector!: str, value!: any}] # Triggered if all conditions match., enabled: bool, name: str}\n@optional {description: str}\n@returns(200) New Email Scanner Rule response.\n@errors {4XX: New Email Scanner Rule failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/email/rules/{rule_id}\n@desc Delete email scanner rule\n@required {account_id: str, rule_id: str(uuid)}\n@returns(200) Delete Email Scanner Rule response.\n@errors {4XX: Delete Email Scanner Rule failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/email/rules/{rule_id}\n@desc Get an email scanner rule\n@required {account_id: str, rule_id: str(uuid)}\n@returns(200) Get Email Scanner Rule response.\n@errors {4XX: Get Email Scanner Rule failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/email/rules/{rule_id}\n@desc Update email scanner rule\n@required {account_id: str, rule_id: str(uuid), action: any, conditions: [map{operator!: str, selector!: str, value!: any}] # Triggered if all conditions match., enabled: bool, name: str}\n@optional {description: str}\n@returns(200) Update Email Scanner Rule response.\n@errors {4XX: Update Email Scanner Rule failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/entries\n@desc List all entries\n@required {account_id: str}\n@returns(200) List all entries response.\n@errors {4XX: List all entries failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/entries\n@desc Create custom entry\n@required {account_id: str, enabled: bool, name: str, pattern: map{regex!: str, validation: any}}\n@optional {description: str, profile_id: str(uuid)}\n@returns(200) Create new custom entry response.\n@errors {4XX: Create new custom entry failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/entries/custom/{entry_id}\n@desc Update custom entry\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Update entry response.\n@errors {4XX: Update entry failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/entries/integration\n@desc Create integration entry\n@required {account_id: str, enabled: bool, entry_id: str(uuid)}\n@optional {profile_id: str(uuid) # This field is not used as the owning profile. For predefined entries it is already set to a predefined profile.}\n@returns(200) Create integration entry response.\n@errors {4XX: Create entry failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/entries/integration/{entry_id}\n@desc Delete integration entry\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Delete integration entry response.\n@errors {4XX: Delete entry failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/entries/integration/{entry_id}\n@desc Update integration entry\n@required {account_id: str, entry_id: str(uuid), enabled: bool}\n@returns(200) Update integration entry response.\n@errors {4XX: Update entry failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/entries/predefined\n@desc Create predefined entry\n@required {account_id: str, enabled: bool, entry_id: str(uuid)}\n@optional {profile_id: str(uuid) # This field is not used as the owning profile. For predefined entries it is already set to a predefined profile.}\n@returns(200) Create predefined entry response.\n@errors {4XX: Create entry failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/entries/predefined/{entry_id}\n@desc Delete predefined entry\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Delete predefined entry response.\n@errors {4XX: Delete entry failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/entries/predefined/{entry_id}\n@desc Update predefined entry\n@required {account_id: str, entry_id: str(uuid), enabled: bool}\n@returns(200) Update predefined entry response.\n@errors {4XX: Update entry failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/entries/{entry_id}\n@desc Delete custom entry\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Delete custom entry response.\n@errors {4XX: Delete custom entry failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/entries/{entry_id}\n@desc Get DLP Entry\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Get entry response.\n@errors {4XX: Get entry failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/entries/{entry_id}\n@desc Update entry\n@required {account_id: str, entry_id: str(uuid)}\n@returns(200) Update entry response.\n@errors {4XX: Update entry failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/limits\n@desc Fetch limits associated with DLP for account\n@required {account_id: str}\n@returns(200) Limits retrieved successfully.\n@errors {4XX: Limits get failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/patterns/validate\n@desc Validate a DLP regex pattern\n@required {account_id: str # Account ID., regex: str}\n@optional {max_match_bytes: int(int32) # Maximum number of bytes that the regular expression can match.  If this is `null` then there is no limit on the length. Patterns can use `*` and `+`. Otherwise repeats should use a range `{m,n}` to restrict patterns to the length. If this field is missing, then a default length limit is used.  Note that the length is specified in bytes. Since regular expressions use UTF-8 the pattern `.` can match up to 4 bytes. Hence `.{1,256}` has a maximum length of 1024 bytes.}\n@returns(200) Validation response.\n@errors {4XX: Failed to validate.}\n\n@endpoint GET /accounts/{account_id}/dlp/payload_log\n@desc Get payload log settings\n@required {account_id: str}\n@returns(200) Payload log settings.\n@errors {4XX: Failed to get payload log settings.}\n\n@endpoint PUT /accounts/{account_id}/dlp/payload_log\n@desc Set payload log settings\n@required {account_id: str}\n@optional {masking_level: any, public_key: str # Base64-encoded public key for encrypting payload logs.  - Set to null or empty string to disable payload logging. - Set to a non-empty base64 string to enable payload logging with the given key.  For customers with configurable payload masking feature rolled out: - If the field is missing, the existing setting will be kept. Note that this is different from setting to null or empty string.  For all other customers: - If the field is missing, the existing setting will be cleared.}\n@returns(200) Payload log settings.\n@errors {4XX: Failed to set payload log settings.}\n\n@endpoint GET /accounts/{account_id}/dlp/profiles\n@desc List all profiles\n@required {account_id: str}\n@optional {all: bool # Return all profiles, including those that current account does not have access to.}\n@returns(200) List all profiles response.\n@errors {4XX: List all profiles failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/profiles/custom\n@desc List all custom profiles\n@required {account_id: str}\n@returns(200) List all custom profiles response.\n@errors {4XX: List all profiles failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/profiles/custom\n@desc Create custom profile\n@required {account_id: str, name: str}\n@optional {ai_context_enabled: bool=false, allowed_match_count: int(int32)=0 # Related DLP policies will trigger when the match count exceeds the number set., confidence_threshold: str=low, context_awareness: map{enabled!: bool, skip!: map} # Scan the context of predefined entries to only return matches surrounded by keywords., data_classes: [str(uuid)] # Data class IDs to associate with the profile., data_tags: [str(uuid)] # Data tag IDs to associate with the profile., description: str # The description of the profile., entries: [any], ocr_enabled: bool=false, sensitivity_levels: [map{group_id!: str(uuid), level_id!: str(uuid)}] # Sensitivity levels to associate with the profile., shared_entries: [map{enabled!: bool, entry_id!: str(uuid)}] # Entries from other profiles (e.g. pre-defined Cloudflare profiles, or your Microsoft Information Protection profiles).}\n@returns(200) New custom profile response.\n@errors {4XX: New custom profile failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/profiles/custom/{profile_id}\n@desc Delete custom profile\n@required {account_id: str, profile_id: str(uuid)}\n@returns(200) Delete custom profile response.\n@errors {4XX: Delete custom profile failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/profiles/custom/{profile_id}\n@desc Get custom profile\n@required {account_id: str, profile_id: str(uuid)}\n@returns(200) Custom profile response.\n@errors {4XX: Custom profile failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/profiles/custom/{profile_id}\n@desc Update custom profile\n@required {account_id: str, profile_id: str(uuid), name: str}\n@optional {ai_context_enabled: bool=false, allowed_match_count: int(int32), confidence_threshold: str=low, context_awareness: map{enabled!: bool, skip!: map} # Scan the context of predefined entries to only return matches surrounded by keywords., data_classes: [str(uuid)] # Data class IDs to associate with the profile. If omitted, existing associations are unchanged., data_tags: [str(uuid)] # Data tag IDs to associate with the profile. If omitted, existing associations are unchanged., description: str # The description of the profile., entries: [any] # Custom entries from this profile. If this field is omitted, entries owned by this profile will not be changed., ocr_enabled: bool=false, sensitivity_levels: [map{group_id!: str(uuid), level_id!: str(uuid)}] # Sensitivity levels to associate with the profile. If omitted, existing associations are unchanged., shared_entries: [map{enabled!: bool, entry_id!: str(uuid)}] # Other entries, e.g. predefined or integration.}\n@returns(200) Update custom profile response.\n@errors {4XX: Update custom profile failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/profiles/predefined\n@desc Create predefined profile\n@required {account_id: str}\n@returns(200) Create predefined profile response.\n@errors {4XX: Create predefined profile failure response.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/profiles/predefined/{profile_id}\n@desc Delete predefined profile\n@required {account_id: str, profile_id: str(uuid)}\n@returns(200) Delete predefined profile response.\n@errors {4XX: Delete predefined profile failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/profiles/predefined/{profile_id}\n@desc Get predefined profile\n@required {account_id: str, profile_id: str(uuid)}\n@returns(200) Predefined profile response.\n@errors {4XX: Predefined profile failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/profiles/predefined/{profile_id}\n@desc Update predefined profile\n@required {account_id: str, profile_id: str(uuid)}\n@optional {ai_context_enabled: bool=false, allowed_match_count: int(int32)=0, confidence_threshold: str=low, context_awareness: map{enabled!: bool, skip!: map} # Scan the context of predefined entries to only return matches surrounded by keywords., entries: [map{enabled!: bool, id!: str(uuid)}], ocr_enabled: bool=false}\n@returns(200) Update predefined profile response.\n@errors {4XX: Update predefined profile failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/profiles/predefined/{profile_id}/config\n@desc Get predefined profile config\n@required {account_id: str, profile_id: str(uuid)}\n@returns(200) Predefined profile response.\n@errors {4XX: Predefined profile failure response.}\n\n@endpoint POST /accounts/{account_id}/dlp/profiles/predefined/{profile_id}/config\n@desc Create predefined profile\n@required {account_id: str, profile_id: str(uuid)}\n@optional {ai_context_enabled: bool=false, allowed_match_count: int(int32)=0, confidence_threshold: str=low, enabled_entries: [str(uuid)], entries: [map{enabled!: bool, id!: str(uuid)}], ocr_enabled: bool=false}\n@returns(200) Create predefined profile response.\n@errors {4XX: Create predefined profile failure response.}\n\n@endpoint PUT /accounts/{account_id}/dlp/profiles/predefined/{profile_id}/config\n@desc Update predefined profile config\n@required {account_id: str, profile_id: str(uuid)}\n@optional {ai_context_enabled: bool=false, allowed_match_count: int(int32)=0, confidence_threshold: str=low, enabled_entries: [str(uuid)], entries: [map{enabled!: bool, id!: str(uuid)}], ocr_enabled: bool=false}\n@returns(200) Update predefined profile response.\n@errors {4XX: Update predefined profile failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/profiles/{profile_id}\n@desc Get DLP Profile\n@required {account_id: str, profile_id: str(uuid)}\n@returns(200) Get profile response.\n@errors {4XX: Get profile failure response.}\n\n@endpoint GET /accounts/{account_id}/dlp/sensitivity_groups\n@desc Retrieve all sensitivity groups in an account\n@required {account_id: str}\n@returns(200) Sensitivity group read was successful.\n@errors {4XX: Sensitivity group read failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/sensitivity_groups\n@desc Creates a new sensitivity group.\n@required {account_id: str, name: str}\n@optional {description: str, levels: [map{description: str, name!: str}] # Levels to create with the group. Mutually exclusive with `template_id`., template_id: str(uuid)}\n@returns(200) Sensitivity group created successfully.\n@errors {4XX: Sensitivity group creation failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/sensitivity_groups/templates\n@desc Retrieve all sensitivity group templates in an account\n@required {account_id: str}\n@returns(200) Sensitivity group template read was successful.\n@errors {4XX: Sensitivity group template read failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/sensitivity_groups/templates/{template_id}\n@desc Retrieve a specific sensitivity group template.\n@required {account_id: str, template_id: str(uuid)}\n@returns(200) Sensitivity group template read was successful.\n@errors {4XX: Sensitivity group template read failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}\n@desc Delete a single sensitivity group.\n@required {account_id: str, sensitivity_group_id: str(uuid)}\n@returns(200) Sensitivity group delete was successful.\n@errors {4XX: Sensitivity group delete failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}\n@desc Retrieve a specific sensitivity group.\n@required {account_id: str, sensitivity_group_id: str(uuid)}\n@returns(200) Sensitivity group read was successful.\n@errors {4XX: Sensitivity group read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}\n@desc Update the attributes of a single sensitivity group.\n@required {account_id: str, sensitivity_group_id: str(uuid)}\n@optional {description: str, levels: [any] # The desired final state of levels. - `None` (omitted): no level changes. - `Some([])`: delete all levels. - `Some([...])`: desired final set + order., name: str}\n@returns(200) Sensitivity group update was successful.\n@errors {4XX: Sensitivity group update failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}/level_order\n@desc Retrieve the ordered list of level IDs for a sensitivity group.\n@required {account_id: str, sensitivity_group_id: str(uuid)}\n@returns(200) Level order read was successful.\n@errors {4XX: Level order read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}/level_order\n@desc Set the ordering of levels within a sensitivity group.\n@required {account_id: str, sensitivity_group_id: str(uuid), level_ids: [str(uuid)]}\n@returns(200) Level order update was successful.\n@errors {4XX: Level order update failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}/levels\n@desc Retrieve all sensitivity levels in a sensitivity group\n@required {account_id: str, sensitivity_group_id: str(uuid)}\n@returns(200) Sensitivity levels read was successful.\n@errors {4XX: Sensitivity levels read failed.}\n\n@endpoint POST /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}/levels\n@desc Creates a new sensitivity level.\n@required {account_id: str, sensitivity_group_id: str(uuid), name: str}\n@optional {description: str}\n@returns(200) Sensitivity level created successfully.\n@errors {4XX: Sensitivity level creation failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}/levels/{sensitivity_level_id}\n@desc Delete a single sensitivity level.\n@required {account_id: str, sensitivity_group_id: str(uuid), sensitivity_level_id: str(uuid)}\n@returns(200) Sensitivity level delete was successful.\n@errors {4XX: Sensitivity level delete failed.}\n\n@endpoint GET /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}/levels/{sensitivity_level_id}\n@desc Retrieve a specific sensitivity level.\n@required {account_id: str, sensitivity_group_id: str(uuid), sensitivity_level_id: str(uuid)}\n@returns(200) Sensitivity level read was successful.\n@errors {4XX: Sensitivity level read failed.}\n\n@endpoint PUT /accounts/{account_id}/dlp/sensitivity_groups/{sensitivity_group_id}/levels/{sensitivity_level_id}\n@desc Update the attributes of a single sensitivity level.\n@required {account_id: str, sensitivity_group_id: str(uuid), sensitivity_level_id: str(uuid)}\n@optional {description: str, name: str}\n@returns(200) Sensitivity level update was successful.\n@errors {4XX: Sensitivity level update failed.}\n\n@endpoint DELETE /accounts/{account_id}/dlp/settings\n@desc Delete (reset) DLP account-level settings to initial values.\n@required {account_id: str}\n@returns(200) DLP settings reset.\n@errors {4XX: Failed to delete DLP settings.}\n\n@endpoint GET /accounts/{account_id}/dlp/settings\n@desc Get DLP account-level settings.\n@required {account_id: str}\n@returns(200) DLP settings.\n@errors {4XX: Failed to get DLP settings.}\n\n@endpoint PATCH /accounts/{account_id}/dlp/settings\n@desc Partially update DLP account-level settings.\n@required {account_id: str}\n@optional {ai_context_analysis: bool=false # Whether AI context analysis is enabled at the account level., ocr: bool=false # Whether OCR is enabled at the account level., payload_logging: any}\n@returns(200) DLP settings.\n@errors {4XX: Failed to update DLP settings.}\n\n@endpoint PUT /accounts/{account_id}/dlp/settings\n@desc Update DLP account-level settings (full replacement).\n@required {account_id: str}\n@optional {ai_context_analysis: bool=false # Whether AI context analysis is enabled at the account level., ocr: bool=false # Whether OCR is enabled at the account level., payload_logging: any}\n@returns(200) DLP settings.\n@errors {4XX: Failed to update DLP settings.}\n\n@endpoint GET /accounts/{account_id}/dls/regional_services/prefix_bindings\n@desc List DLS prefix bindings for an account\n@required {account_id: str}\n@optional {cursor: str # Opaque token for cursor-based pagination. Omit for the first page. Pass the value from a previous response to fetch the next page., per_page: int=25}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str, per_page: int}, success: bool} # List of bindings.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/dls/regional_services/prefix_bindings\n@desc Create a DLS prefix binding\n@required {account_id: str, cidr: str # IP prefix in CIDR notation to bind., prefix_id: str # The ID of the parent IP prefix that contains the CIDR., region_key: str # Region key from managed regions (e.g., \"us\", \"eu\").}\n@returns(201) Binding created.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 409: Conflict., 500: Internal server error.}\n\n@endpoint DELETE /accounts/{account_id}/dls/regional_services/prefix_bindings/{binding_id}\n@desc Delete a DLS prefix binding\n@required {account_id: str, binding_id: str}\n@returns(200) Binding deleted successfully.\n@errors {401: Unauthorized., 403: Forbidden., 404: Not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/dls/regional_services/prefix_bindings/{binding_id}\n@desc Get a DLS prefix binding\n@required {account_id: str, binding_id: str}\n@returns(200) Binding found.\n@errors {401: Unauthorized., 403: Forbidden., 404: Not found., 500: Internal server error.}\n\n@endpoint PATCH /accounts/{account_id}/dls/regional_services/prefix_bindings/{binding_id}\n@desc Update a DLS prefix binding\n@required {account_id: str, binding_id: str, region_key: str # New region key to assign (e.g., \"us\", \"eu\", \"cfcanary\").}\n@returns(200) Binding updated.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/dls/regions\n@desc List DLS regions for an account\n@required {account_id: str}\n@optional {cursor: str # Opaque token for cursor-based pagination. Omit for the first page. Pass the value from a previous response to fetch the next page., per_page: int=25, type: str(managed/custom) # Filter regions by type. Omit to return all regions.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str, per_page: int}, success: bool} # List of regions.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/dls/regions/{region_id}\n@desc Get a DLS region\n@required {account_id: str, region_id: str}\n@returns(200) Region found.\n@errors {401: Unauthorized., 403: Forbidden., 404: Not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/dns_firewall\n@desc List DNS Firewall Clusters\n@required {account_id: str}\n@optional {page: num=1, per_page: num=20}\n@returns(200) List DNS Firewall Clusters response\n@errors {4XX: List DNS Firewall Clusters response failure}\n\n@endpoint POST /accounts/{account_id}/dns_firewall\n@desc Create DNS Firewall Cluster\n@required {account_id: str}\n@returns(200) Create DNS Firewall Cluster response\n@errors {4XX: Create DNS Firewall Cluster response failure}\n\n@endpoint DELETE /accounts/{account_id}/dns_firewall/{dns_firewall_id}\n@desc Delete DNS Firewall Cluster\n@required {dns_firewall_id: str, account_id: str}\n@returns(200) Delete DNS Firewall Cluster response\n@errors {4XX: Delete DNS Firewall Cluster response failure}\n\n@endpoint GET /accounts/{account_id}/dns_firewall/{dns_firewall_id}\n@desc DNS Firewall Cluster Details\n@required {dns_firewall_id: str, account_id: str}\n@returns(200) DNS Firewall Cluster Details response\n@errors {4XX: DNS Firewall Cluster Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/dns_firewall/{dns_firewall_id}\n@desc Update DNS Firewall Cluster\n@required {dns_firewall_id: str, account_id: str}\n@returns(200) Update DNS Firewall Cluster response\n@errors {4XX: Update DNS Firewall Cluster response failure}\n\n@endpoint GET /accounts/{account_id}/dns_firewall/{dns_firewall_id}/dns_analytics/report\n@desc Table\n@required {dns_firewall_id: str, account_id: str}\n@optional {metrics: str, dimensions: str, since: str(date-time), until: str(date-time), limit: int, sort: str, filters: str}\n@returns(200) Table response\n@errors {4XX: Table response failure}\n\n@endpoint GET /accounts/{account_id}/dns_firewall/{dns_firewall_id}/dns_analytics/report/bytime\n@desc By Time\n@required {dns_firewall_id: str, account_id: str}\n@optional {metrics: str, dimensions: str, since: str(date-time), until: str(date-time), limit: int, sort: str, filters: str, time_delta: str}\n@returns(200) By Time response\n@errors {4XX: By Time response failure}\n\n@endpoint GET /accounts/{account_id}/dns_firewall/{dns_firewall_id}/reverse_dns\n@desc Show DNS Firewall Cluster Reverse DNS\n@required {dns_firewall_id: str, account_id: str}\n@returns(200) Show DNS Firewall Cluster Reverse DNS response\n@errors {4XX: Show DNS Firewall Cluster Reverse DNS response failure}\n\n@endpoint PATCH /accounts/{account_id}/dns_firewall/{dns_firewall_id}/reverse_dns\n@desc Update DNS Firewall Cluster Reverse DNS\n@required {dns_firewall_id: str, account_id: str}\n@returns(200) Update DNS Firewall Cluster Reverse DNS response\n@errors {4XX: Update DNS Firewall Cluster Reverse DNS response failure}\n\n@endpoint GET /accounts/{account_id}/dns_records/usage\n@desc Get DNS Record Usage for Account\n@required {account_id: str}\n@returns(200) Get DNS Record Usage response.\n@errors {4XX: Get DNS Record Usage response failure.}\n\n@endpoint GET /accounts/{account_id}/dns_settings\n@desc Show DNS Settings\n@required {account_id: str}\n@returns(200) Show DNS Settings response\n@errors {4XX: Show DNS Settings response failure}\n\n@endpoint PATCH /accounts/{account_id}/dns_settings\n@desc Update DNS Settings\n@required {account_id: str}\n@optional {enforce_dns_only: bool # When enabled, forces all proxied DNS records in the account to behave as DNS-only at the edge, regardless of each record's individual proxy setting. Note that this account-level override does not modify the records themselves; it only affects how they are served at the edge. See more on [Enforce DNS-only](https://developers.cloudflare.com/dns/proxy-status/enforce-dns-only)., zone_defaults: map}\n@returns(200) Show DNS Settings response\n@errors {4XX: Show DNS Settings response failure}\n\n@endpoint GET /accounts/{account_id}/dns_settings/views\n@desc List Internal DNS Views\n@required {account_id: str}\n@optional {name: str, name.exact: str, name.contains: str, name.startswith: str, name.endswith: str, zone_id: str, zone_name: str, match: str, page: num, per_page: num, order: str, direction: str}\n@returns(200) List Internal DNS Views response\n@errors {4XX: List Internal DNS Views response failure}\n\n@endpoint POST /accounts/{account_id}/dns_settings/views\n@desc Create Internal DNS View\n@required {account_id: str}\n@returns(200) Create Internal DNS View response\n@errors {4XX: Create Internal DNS View response failure}\n\n@endpoint DELETE /accounts/{account_id}/dns_settings/views/{view_id}\n@desc Delete Internal DNS View\n@required {account_id: str, view_id: str}\n@returns(200) {result: map{id: str}} # Delete Internal DNS View response\n@errors {4XX: Update Internal DNS View response failure}\n\n@endpoint GET /accounts/{account_id}/dns_settings/views/{view_id}\n@desc DNS Internal View Details\n@required {account_id: str, view_id: str}\n@returns(200) Get DNS Internal View response\n@errors {4XX: List Internal DNS Views response failure}\n\n@endpoint PATCH /accounts/{account_id}/dns_settings/views/{view_id}\n@desc Update Internal DNS View\n@required {account_id: str, view_id: str}\n@returns(200) Update Internal DNS View response\n@errors {4XX: Update Internal DNS View response failure}\n\n@endpoint GET /accounts/{account_id}/email-security/analytics/monthly_report\n@desc Get monthly report\n@returns(200) Monthly report for the trailing 12 months.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate\n@desc Search email messages\n@optional {start: str(date-time) # The beginning of the search date range. Defaults to `now - 30 days`. Must not be in the future., end: str(date-time) # The end of the search date range. Defaults to `now`., query: str # Space-delimited search term. Case-insensitive., detections_only: bool=true # Whether to include only detections in search results., final_disposition: str(MALICIOUS/SUSPICIOUS/SPOOF/SPAM/BULK/NONE) # Dispositions to filter by., metric: str, message_action: str(PREVIEW/QUARANTINE_RELEASED/MOVED) # Message actions to filter by., recipient: str, sender: str, smtp_helo_ip: str # Matches messages whose SMTP HELO server IP address equals this value., alert_id: str, domain: str # Sender domains to filter by., message_id: str, subject: str, delivery_status: str # Delivery status to filter by., cursor: str, per_page: int=20 # The number of results per page. Maximum value is 1000., page: int=1 # Deprecated: Use cursor pagination instead. End of life: November 1, 2026.}\n@returns(200) Search results for the provided query.\n@returns(202) The search is taking longer than expected. Use the Location header to poll for results.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/bulk\n@desc List bulk action jobs\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., action_type: str(MOVE/RELEASE), status: str(PENDING/DISCOVERING/PROCESSING/COMPLETED/FAILED/CANCELLED/SKIPPED)}\n@returns(200) Jobs retrieved successfully.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/investigate/bulk\n@desc Create a bulk action job\n@required {action: str(MOVE/RELEASE), search_params: map{action_log: bool, alert_id: str, delivery_status: str, detections_only: bool, domain: str, end: str(date-time), exact_subject: str, final_disposition: str, message_action: str, message_id: str, metric: str, query: str, recipient: str, sender: str, smtp_helo_ip: str, start: str(date-time), subject: str, submissions: bool}}\n@optional {comment: str, destination: str(Inbox/JunkEmail/DeletedItems/RecoverableItemsDeletions/RecoverableItemsPurges), expected_disposition: str(MALICIOUS/MALICIOUS-BEC/SUSPICIOUS/SPOOF/SPAM/BULK/ENCRYPTED/EXTERNAL/UNKNOWN/NONE)}\n@returns(201) Bulk job created.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/investigate/bulk/{job_id}\n@desc Delete a bulk action job\n@returns(200) Job deleted.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/bulk/{job_id}\n@desc Get bulk action job details\n@returns(200) Job details retrieved.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/investigate/bulk/{job_id}/cancel\n@desc Cancel a bulk action job\n@returns(200) Job cancelled.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/bulk/{job_id}/messages\n@desc List messages for a bulk action job\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., status: str(PENDING/DISCOVERING/PROCESSING/COMPLETED/FAILED/CANCELLED/SKIPPED)}\n@returns(200) Messages for the bulk job.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/investigate/move\n@desc Move multiple messages\n@required {destination: str(Inbox/JunkEmail/DeletedItems/RecoverableItemsDeletions/RecoverableItemsPurges)}\n@optional {expected_disposition: str(MALICIOUS/MALICIOUS-BEC/SUSPICIOUS/SPOOF/SPAM/BULK/ENCRYPTED/EXTERNAL/UNKNOWN/NONE), ids: [str] # List of message IDs to move., postfix_ids: [str] # Deprecated, use `ids` instead. End of life: November 1, 2026.}\n@returns(200) Bulk move operation results.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/investigate/preview\n@desc Preview for non-detection messages\n@required {postfix_id: str # The identifier of the message.}\n@returns(200) Email preview.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/investigate/release\n@desc Release messages from quarantine\n@returns(200) Release operation results.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/{investigate_id}\n@desc Get message details\n@returns(200) Email message details.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/{investigate_id}/action_log\n@desc Get action log for a message\n@returns(200) Action log for the email.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/{investigate_id}/detections\n@desc Get message detection details\n@returns(200) Email message detection details.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/investigate/{investigate_id}/move\n@desc Move a message\n@required {destination: str(Inbox/JunkEmail/DeletedItems/RecoverableItemsDeletions/RecoverableItemsPurges)}\n@optional {expected_disposition: str(MALICIOUS/MALICIOUS-BEC/SUSPICIOUS/SPOOF/SPAM/BULK/ENCRYPTED/EXTERNAL/UNKNOWN/NONE)}\n@returns(200) Move operation results.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/{investigate_id}/preview\n@desc Get email preview\n@returns(200) Email preview.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/{investigate_id}/raw\n@desc Get raw email content\n@returns(200) Raw email content.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/investigate/{investigate_id}/reclassify\n@desc Change email classification\n@required {expected_disposition: str(NONE/BULK/MALICIOUS/SPAM/SPOOF/SUSPICIOUS)}\n@optional {eml_content: str # Base64 encoded content of the EML file., escalated_submission_id: str}\n@returns(202) Reclassification request accepted.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/investigate/{investigate_id}/trace\n@desc Get email trace\n@returns(200) Email trace.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/phishguard/reports\n@desc Get PhishGuard reports\n@optional {start: str(date-time) # Start of the time range (RFC3339). Takes precedence over from_date., end: str(date-time) # End of the time range (RFC3339). Takes precedence over to_date., from_date: str(date) # Deprecated, use `start` instead. Start date in YYYY-MM-DD format., to_date: str(date) # Deprecated, use `end` instead. End date in YYYY-MM-DD format.}\n@returns(200) List of PhishGuard reports.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/allow_policies\n@desc List email allow policies\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., search: str # Search term for filtering records. Behavior may change., order: str(pattern/created_at) # Field to sort by., direction: str(asc/desc) # The sorting direction., is_exempt_recipient: bool # Filter to show only policies where messages to the recipient bypass all detections., is_trusted_sender: bool # Filter to show only policies where messages from the sender bypass all detections and link following., is_acceptable_sender: bool # Filter to show only policies where messages from the sender are exempted from Spam, Spoof, and Bulk dispositions (not Malicious or Suspicious)., verify_sender: bool # Filter to show only policies that enforce DMARC, SPF, or DKIM authentication., pattern_type: any, pattern: str}\n@returns(200) List of allow policies.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/allow_policies\n@desc Create email allow policy\n@returns(201) Created allow policy.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/allow_policies/batch\n@desc Batch allow policies operations\n@required {deletes: [map{id!: str(uuid)}], patches: [any], posts: [any], puts: [any]}\n@returns(200) Batch operation results.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/allow_policies/{policy_id}\n@desc Delete an email allow policy\n@returns(200) Deleted allow policy.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/allow_policies/{policy_id}\n@desc Get an email allow policy\n@returns(200) Allow policy details.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/allow_policies/{policy_id}\n@desc Update an email allow policy\n@returns(200) Updated allow policy.\n@errors {4XX: Client error.}\n\n@endpoint PUT /accounts/{account_id}/email-security/settings/allow_policies/{policy_id}\n@desc Replace an email allow policy\n@returns(200) Replaced allow policy.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/block_senders\n@desc List blocked email senders\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., search: str # Search term for filtering records. Behavior may change., order: str(pattern/created_at) # Field to sort by., direction: str(asc/desc) # The sorting direction., pattern_type: any # Filter by pattern type., pattern: str # Filter by pattern value.}\n@returns(200) List of blocked senders.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/block_senders\n@desc Create blocked email sender\n@returns(201) Created blocked sender.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/block_senders/batch\n@desc Batch blocked senders operations\n@required {deletes: [map{id!: str(uuid)}], patches: [any], posts: [any], puts: [any]}\n@returns(200) Batch operation results.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/block_senders/{pattern_id}\n@desc Delete a blocked email sender\n@returns(200) Deleted blocked sender.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/block_senders/{pattern_id}\n@desc Get a blocked email sender\n@returns(200) Blocked sender details.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/block_senders/{pattern_id}\n@desc Update a blocked email sender\n@returns(200) Updated blocked sender.\n@errors {4XX: Client error.}\n\n@endpoint PUT /accounts/{account_id}/email-security/settings/block_senders/{pattern_id}\n@desc Replace a blocked email sender\n@returns(200) Replaced blocked sender.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/content_policies\n@desc List content policies\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., search: str # Search term for filtering records. Behavior may change., order: str(name/created_at) # Field to sort by., direction: str(asc/desc) # The sorting direction., enabled: bool # Filter by enabled status., name: str # Filter by exact policy name.}\n@returns(200) List of content policies.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/content_policies\n@desc Create a content policy\n@returns(201) Created content policy.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/content_policies/batch\n@desc Batch content policy operations\n@required {deletes: [map{id!: str(uuid)}], patches: [any], posts: [any], puts: [any]}\n@returns(200) Batch operation results.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/content_policies/{policy_id}\n@desc Delete a content policy\n@returns(200) Deleted content policy.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/content_policies/{policy_id}\n@desc Get a content policy\n@returns(200) Content policy details.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/content_policies/{policy_id}\n@desc Update a content policy\n@returns(200) Updated content policy.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/domains\n@desc Unprotect multiple email domains\n@returns(200) Deleted domains.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/domains\n@desc List protected email domains\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., search: str # Search term for filtering records. Behavior may change., order: str(domain/created_at) # Field to sort by., direction: str(asc/desc) # The sorting direction., allowed_delivery_mode: str # Delivery mode to filter by., domain: [str] # Domain names to filter by., active_delivery_mode: str # Currently active delivery mode to filter by., integration_id: str(uuid) # Integration ID to filter by., status: str # Filters response to domains with the provided status.}\n@returns(200) List of domains.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/domains\n@desc Add a new email domain\n@required {allowed_delivery_modes: [str], domain: str, drop_dispositions: [str], ip_restrictions: [str], regions: [str]}\n@optional {folder: any, integration_id: str(uuid), lookback_hops: int, require_tls_inbound: bool, require_tls_outbound: bool, transport: str}\n@returns(201) Created domain.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/domains/batch\n@desc Batch domain operations\n@required {deletes: [map{id!: str(uuid)}], patches: [any], posts: [map{allowed_delivery_modes!: [str], domain!: str, drop_dispositions!: [str], folder: any, integration_id: str(uuid), ip_restrictions!: [str], lookback_hops: int, regions!: [str], require_tls_inbound: bool, require_tls_outbound: bool, transport: str}], puts: [any]}\n@returns(200) Batch operation results.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/domains/{domain_id}\n@desc Unprotect an email domain\n@returns(200) Deleted domain.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/domains/{domain_id}\n@desc Get an email domain\n@returns(200) Domain details.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/domains/{domain_id}\n@desc Update an email domain\n@optional {allowed_delivery_modes: [str], drop_dispositions: [str], folder: any, integration_id: str(uuid), ip_restrictions: [str], lookback_hops: int, regions: [str], require_tls_inbound: bool, require_tls_outbound: bool, transport: str}\n@returns(200) Updated domain.\n@errors {4XX: Client error.}\n\n@endpoint PUT /accounts/{account_id}/email-security/settings/domains/{domain_id}\n@desc Replace an email domain\n@required {allowed_delivery_modes: [str], drop_dispositions: [str], ip_restrictions: [str], regions: [str]}\n@optional {folder: any, integration_id: str(uuid), lookback_hops: int, require_tls_inbound: bool, require_tls_outbound: bool, transport: str}\n@returns(200) Replaced domain.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/domains/{domain_id}/verification\n@desc Get domain verification details\n@returns(200) DNS TXT verification details.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/impersonation_registry\n@desc List entries in impersonation registry\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., search: str # Search term for filtering records. Behavior may change., order: str(name/email/created_at) # Field to sort by., direction: str(asc/desc) # The sorting direction., provenance: str}\n@returns(200) List of impersonation registry entries.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/impersonation_registry\n@desc Create impersonation registry entry\n@returns(201) Created impersonation registry entry.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/impersonation_registry/{impersonation_registry_id}\n@desc Delete an impersonation registry entry\n@returns(200) Deleted impersonation registry entry.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/impersonation_registry/{impersonation_registry_id}\n@desc Get an impersonation registry entry\n@returns(200) Impersonation registry entry details.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/impersonation_registry/{impersonation_registry_id}\n@desc Update an impersonation registry entry\n@returns(200) Updated impersonation registry entry.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/sending_domain_restrictions\n@desc List sending domain restrictions\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., search: str # Search term for filtering records. Behavior may change., order: str(domain/created_at) # Field to sort by., direction: str(asc/desc) # The sorting direction.}\n@returns(200) List of sending domain restrictions.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/sending_domain_restrictions\n@desc Create a sending domain restriction\n@returns(201) Created sending domain restriction.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/sending_domain_restrictions/batch\n@desc Batch sending domain restrictions operations\n@required {deletes: [map{id!: str(uuid)}]}\n@returns(200) Batch operation results.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/sending_domain_restrictions/{sending_domain_restriction_id}\n@desc Delete a sending domain restriction\n@returns(200) Deleted sending domain restriction.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/sending_domain_restrictions/{sending_domain_restriction_id}\n@desc Get a sending domain restriction\n@returns(200) Sending domain restriction details.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/sending_domain_restrictions/{sending_domain_restriction_id}\n@desc Update a sending domain restriction\n@returns(200) Updated sending domain restriction.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/trusted_domains\n@desc List trusted email domains\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000., search: str # Search term for filtering records. Behavior may change., order: str(pattern/created_at) # Field to sort by., direction: str(asc/desc) # The sorting direction., is_recent: bool # Filter to show only recently registered domains that are trusted to prevent triggering Suspicious or Malicious dispositions., is_similarity: bool # Filter to show only proximity domains (partner or approved domains with similar spelling to connected domains) that prevent Spoof dispositions., pattern: str}\n@returns(200) List of trusted domains.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/trusted_domains\n@desc Create trusted email domain\n@returns(201) Created trusted domain.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/trusted_domains/batch\n@desc Batch trusted domains operations\n@required {deletes: [map{id!: str(uuid)}], patches: [any], posts: [any], puts: [any]}\n@returns(200) Batch operation results.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/trusted_domains/{trusted_domain_id}\n@desc Delete a trusted email domain\n@returns(200) Deleted trusted domain.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/trusted_domains/{trusted_domain_id}\n@desc Get a trusted email domain\n@returns(200) Trusted domain details.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/trusted_domains/{trusted_domain_id}\n@desc Update a trusted email domain\n@returns(200) Updated trusted domain.\n@errors {4XX: Client error.}\n\n@endpoint PUT /accounts/{account_id}/email-security/settings/trusted_domains/{trusted_domain_id}\n@desc Replace a trusted email domain\n@returns(200) Replaced trusted domain.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/url_ignore_patterns\n@desc List URL ignore patterns\n@optional {page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000.}\n@returns(200) List of URL ignore patterns for the provided account.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/url_ignore_patterns\n@desc Create a URL ignore pattern\n@required {pattern: str # Regular expression identifying URLs to exempt from rewriting.}\n@optional {comments: str # Optional note describing the reason for the ignore pattern.}\n@returns(201) Created URL ignore pattern.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/email-security/settings/url_ignore_patterns/batch\n@desc Batch URL ignore patterns\n@required {deletes: [map{id!: str(uuid)}], patches: [any], posts: [map{comments: str, pattern!: str}], puts: [any]}\n@returns(200) Batch operation results.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/email-security/settings/url_ignore_patterns/{pattern_id}\n@desc Delete a URL ignore pattern\n@returns(200) Deleted URL ignore pattern.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/settings/url_ignore_patterns/{pattern_id}\n@desc Get a URL ignore pattern\n@returns(200) URL ignore pattern.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/email-security/settings/url_ignore_patterns/{pattern_id}\n@desc Update a URL ignore pattern\n@optional {comments: str # Optional note describing the reason for the ignore pattern., pattern: str # Regular expression identifying URLs to exempt from rewriting.}\n@returns(200) Updated URL ignore pattern.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email-security/submissions\n@desc Get reclassify submissions\n@optional {start: str(date-time) # The beginning of the search date range. Defaults to `now - 30 days`., end: str(date-time) # The end of the search date range. Defaults to `now`., type: str(TEAM/USER), submission_id: str, original_disposition: str, requested_disposition: str, outcome_disposition: str, status: str, query: str, escalated_from_user: bool # When true, return only submissions that were escalated by an end user (vs. by the security team). When false, return only submissions that were not escalated by an end user. When omitted, no filter is applied., order: str(submission_id/subject/original_disposition/requested_disposition/outcome_disposition/requested_at)=requested_at # Field to sort by., direction: str(asc/desc) # The sorting direction., page: int=1 # Current page within paginated list of results., per_page: int=20 # The number of results per page. Maximum value is 1000.}\n@returns(200) List of submissions.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/email/routing/addresses\n@desc List destination addresses\n@required {account_id: str}\n@optional {page: num=1, per_page: num=20, direction: str(asc/desc)=asc, verified: bool(true/false)=true}\n@returns(200) List destination addresses response\n\n@endpoint POST /accounts/{account_id}/email/routing/addresses\n@desc Create a destination address\n@required {account_id: str, email: str # The contact email address of the user.}\n@returns(200) Create a destination address response\n\n@endpoint DELETE /accounts/{account_id}/email/routing/addresses/{destination_address_identifier}\n@desc Delete destination address\n@required {destination_address_identifier: str, account_id: str}\n@returns(200) Delete destination address response\n\n@endpoint GET /accounts/{account_id}/email/routing/addresses/{destination_address_identifier}\n@desc Get a destination address\n@required {destination_address_identifier: str, account_id: str}\n@returns(200) Get a destination address response\n\n@endpoint PATCH /accounts/{account_id}/email/routing/addresses/{destination_address_identifier}\n@desc Update destination address\n@required {destination_address_identifier: str, account_id: str, status: str(unverified/verified) # Destination address status. Non-admin callers may only set verified addresses back to unverified; setting to verified requires admin privileges.}\n@returns(200) Update destination address response\n\n@endpoint GET /accounts/{account_id}/email/routing/rules\n@desc List account routing rules\n@required {account_id: str}\n@optional {page: num=1, per_page: num=20, enabled: bool(true/false)}\n@returns(200) List account routing rules response\n\n@endpoint POST /accounts/{account_id}/email/routing/rules/plan\n@desc Plan account routing rule changes\n@required {account_id: str, owner_worker_tag: str # Public tag (script_tag) of the Worker that owns this rule. Required when `source` is `wrangler`.}\n@optional {catch_all_rules: [map{rule!: map, target!: str}] # Desired catch-all Email Routing rules managed by the deploying Worker., rules: [map{actions!: [map], enabled: bool, matchers!: [map]}] # Desired normal Email Routing rules managed by the deploying Worker.}\n@returns(200) Account routing rules plan response\n@errors {400: Error 2062: Unknown Email Routing domain. A desired address or catch-all target does not resolve to an Email Routing-enabled domain in this account., 403: Authentication error or missing account rule list permission., 422: Invalid plan input, such as malformed matchers/actions, duplicate targets, or an owner_worker_tag that does not resolve to a known Worker script.}\n\n@endpoint GET /accounts/{account_id}/email/routing/suppression\n@desc List account email suppressions\n@required {account_id: str}\n@optional {page: int=1, per_page: int=100, order: str(email/expires_at/created_at)=created_at, direction: str(asc/desc)=desc}\n@returns(200) {page: int, per_page: int, result: [map], total: int} # Returns suppressed emails.\n@errors {400: Bad request.}\n\n@endpoint POST /accounts/{account_id}/email/routing/suppression\n@desc Create account email suppression\n@required {account_id: str, email: str(email)}\n@optional {expires_at: str(date-time)}\n@returns(200) {result: map{id: str(uuid)}} # Returns suppression.\n@errors {400: Bad request.}\n\n@endpoint DELETE /accounts/{account_id}/email/routing/suppression/{suppression_id}\n@desc Delete account email suppression\n@required {account_id: str, suppression_id: str}\n@returns(200) {success: bool} # Deletes suppression.\n@errors {404: Suppression not found.}\n\n@endpoint GET /accounts/{account_id}/email/routing/suppression/{suppression_id}\n@desc Get account email suppression\n@required {account_id: str, suppression_id: str}\n@returns(200) {result: map{created_at: str(date-time), email: str(email), expires_at: str(date-time)?, id: str(uuid), reason: str, zones: [str]}} # Returns suppression.\n@errors {404: Suppression not found.}\n\n@endpoint GET /accounts/{account_id}/email/sending/limits\n@desc Get sending limits\n@required {account_id: str}\n@returns(200) Get sending limits response\n\n@endpoint GET /accounts/{account_id}/email/sending/messages/{message_id}\n@desc Fetch an email message\n@required {account_id: str, message_id: str}\n@returns(200) The raw RFC 5322 MIME message.\n@errors {404: Account or message not found., 500: An unexpected error occurred.}\n\n@endpoint GET /accounts/{account_id}/email/sending/reputation\n@desc Get account reputation\n@required {account_id: str}\n@returns(200) Get account reputation response\n\n@endpoint POST /accounts/{account_id}/email/sending/send\n@desc Send an email\n@required {account_id: str # Identifier of the account., from: any # Sender email address. Either a plain string or an object with address and name., subject: str # Email subject line.}\n@optional {attachments: [any] # File attachments and inline images., bcc: any # Blind carbon copy recipient(s). Optional. A single email string, a named address object, or an array of either., cc: any # Carbon copy recipient(s). Optional. A single email string, a named address object, or an array of either., headers: map # Custom email headers as key-value pairs., html: str # HTML body of the email. Provide at least one of text or html (non-empty)., reply_to: any # Reply-to address. Either a plain string or an object with address and name., text: str # Plain text body of the email. Provide at least one of text or html (non-empty)., to: any # Recipient(s). Optional if cc or bcc is provided. A single email string, a named address object, or an array of either.}\n@returns(200) {errors: [map], messages: [map], result: map{delivered: [str], message_id: str, permanent_bounces: [str], queued: [str], suppressed_recipients: [str]}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num}, success: bool} # Email sending results.\n@errors {400: Invalid request, generally because of the format/content of the email send request. No email will be sent when this happens., 403: Email sending is disabled, or the sending domain is not configured for email sending., 409: Email Sending setup is still in progress. Retry later; no email was sent., 429: Account/zone has surpassed the rate at which it can send email, please try again later. No email will be sent when this happens., 500: An unexpected error while processing the email send request. No email will be sent when this happens.}\n\n@endpoint POST /accounts/{account_id}/email/sending/send_raw\n@desc Send a raw MIME email\n@required {account_id: str # Identifier of the account., from: str # Sender email address., mime_message: str # The full MIME-encoded email message. Should include standard RFC 5322 headers such as From, To, Subject, and Content-Type. The from and recipients fields in the request body control SMTP envelope routing; the From and To headers in the MIME message control what the recipient's email client displays., recipients: [str] # List of recipient email addresses.}\n@returns(200) {errors: [map], messages: [map], result: map{delivered: [str], message_id: str, permanent_bounces: [str], queued: [str], suppressed_recipients: [str]}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num}, success: bool} # Email sending results.\n@errors {400: Invalid request, generally because of the format/content of the email send request. No email will be sent when this happens., 403: Email sending is disabled, or the sending domain is not configured for email sending., 409: Email Sending setup is still in progress. Retry later; no email was sent., 429: Account/zone has surpassed the rate at which it can send email, please try again later. No email will be sent when this happens., 500: An unexpected error while processing the email send request. No email will be sent when this happens.}\n\n@endpoint GET /accounts/{account_id}/email/sending/suppression\n@desc List account email suppressions\n@required {account_id: str}\n@optional {page: int=1, per_page: int=100, order: str(email/expires_at/created_at)=created_at, direction: str(asc/desc)=desc}\n@returns(200) {page: int, per_page: int, result: [map], total: int} # Returns suppressed emails.\n@errors {400: Bad request.}\n\n@endpoint POST /accounts/{account_id}/email/sending/suppression\n@desc Create account email suppression\n@required {account_id: str, email: str(email)}\n@optional {expires_at: str(date-time)}\n@returns(200) {result: map{id: str(uuid)}} # Returns suppression.\n@errors {400: Bad request.}\n\n@endpoint DELETE /accounts/{account_id}/email/sending/suppression/{suppression_id}\n@desc Delete account email suppression\n@required {account_id: str, suppression_id: str}\n@returns(200) {success: bool} # Deletes suppression.\n@errors {404: Suppression not found.}\n\n@endpoint GET /accounts/{account_id}/email/sending/suppression/{suppression_id}\n@desc Get account email suppression\n@required {account_id: str, suppression_id: str}\n@returns(200) {result: map{created_at: str(date-time), email: str(email), expires_at: str(date-time)?, id: str(uuid), reason: str, zones: [str]}} # Returns suppression.\n@errors {404: Suppression not found.}\n\n@endpoint GET /accounts/{account_id}/email/sending/suppressions\n@desc List account Email Sending suppressions\n@required {account_id: str}\n@optional {per_page: int=100, cursor: str, email: str(email), search: str, reason: str(manual/complaint/hard_bounce/soft_bounce/policy)}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, next_cursor: str?, per_page: int}, success: bool} # Returns Email Sending suppressions.\n@errors {400: Invalid list parameters.}\n\n@endpoint POST /accounts/{account_id}/email/sending/suppressions\n@desc Create account Email Sending suppression\n@required {account_id: str, email: str(email) # The email address to suppress.}\n@optional {expires_at: str(date-time) # Expiration timestamp for the suppression. Omit or set to null for a permanent suppression that never expires., note: str # Advisory note for this suppression. Not enforced or validated beyond length.}\n@returns(200) {errors: [map], messages: [map], result: map{id: str(uuid)}, success: bool} # Suppression mutation completed.\n@errors {400: Invalid suppression input., 403: This suppression is read-only., 404: Suppression not found., 409: Suppression conflicts with this operation.}\n\n@endpoint POST /accounts/{account_id}/email/sending/suppressions/bulk\n@desc Bulk import account Email Sending suppressions\n@required {account_id: str, items: [map{email!: str, expires_at: str(date-time), note: str}] # Suppressions to import. Items with a duplicate email address are deduplicated before processing.}\n@returns(200) {errors: [map], messages: [map], result: map{deduplicated: int, errors: int, invalid: int, items: [map], processed: int, skipped: int, total: int}, success: bool} # Bulk import result.\n@errors {429: Rate limited.}\n\n@endpoint DELETE /accounts/{account_id}/email/sending/suppressions/{suppression_id}\n@desc Delete account Email Sending suppression\n@required {account_id: str, suppression_id: str(uuid)}\n@returns(200) {errors: [map], messages: [map], result: map{id: str(uuid)}, success: bool} # Suppression mutation completed.\n@errors {400: Invalid suppression input., 403: This suppression is read-only., 404: Suppression not found., 409: Suppression conflicts with this operation.}\n\n@endpoint GET /accounts/{account_id}/email/sending/suppressions/{suppression_id}\n@desc Get account Email Sending suppression\n@required {account_id: str, suppression_id: str(uuid)}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str(date-time), email: str(email), expires_at: str(date-time)?, id: str(uuid), note: str?, read_only: bool, reason: str}, success: bool} # Returns account-level Email Sending suppression.\n@errors {404: Suppression not found.}\n\n@endpoint PATCH /accounts/{account_id}/email/sending/suppressions/{suppression_id}\n@desc Update account Email Sending suppression\n@required {account_id: str, suppression_id: str(uuid)}\n@optional {expires_at: str(date-time) # New expiry. Send `null` to make the suppression permanent; omit to leave it unchanged., note: str # Replacement advisory note. Send an empty string to clear it; omit to leave it unchanged.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str(date-time), email: str(email), expires_at: str(date-time)?, id: str(uuid), note: str?, read_only: bool, reason: str}, success: bool} # Returns the updated Email Sending suppression.\n@errors {400: No updatable fields supplied., 403: This suppression is read-only., 404: Suppression not found.}\n\n@endpoint GET /accounts/{account_id}/entitlements\n@desc Get Account Entitlements\n@required {account_id: str # Identifier of the account.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # List of entitlements for the account.\n@returns(204) Request canceled by the client before the upstream could respond. No response body.\n@errors {400: Bad request — invalid account identifier or object type., 401: Authentication required., 403: Insufficient permissions., 404: Account not found or unknown route., 405: HTTP method not allowed., 500: Internal server error., 503: Upstream entitlements service unavailable or timed out.}\n\n@endpoint GET /accounts/{account_id}/event_notifications/r2/{bucket_name}/configuration\n@desc List Event Notification Rules\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Read Configuration response.\n@errors {404: No Configuration Found response., 4XX: Read Configuration failure.}\n\n@endpoint DELETE /accounts/{account_id}/event_notifications/r2/{bucket_name}/configuration/queues/{queue_id}\n@desc Delete Event Notification Rules\n@required {queue_id: str, bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., ruleIds: [str] # Array of rule ids to delete.}\n@returns(200) Delete Configuration response.\n@errors {4XX: Delete Configuration failure.}\n\n@endpoint GET /accounts/{account_id}/event_notifications/r2/{bucket_name}/configuration/queues/{queue_id}\n@desc Get Event Notification Rule\n@required {queue_id: str, bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Read Configuration response.\n@errors {404: No Configuration Found response., 4XX: Read Configuration failure.}\n\n@endpoint PUT /accounts/{account_id}/event_notifications/r2/{bucket_name}/configuration/queues/{queue_id}\n@desc Create Event Notification Rule\n@required {queue_id: str, bucket_name: str, account_id: str, rules: [map{actions!: [str], description: str, prefix: str, suffix: str}] # Array of rules to drive notifications.}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Create Configuration response.\n@errors {4XX: Create Configuration failure.}\n\n@endpoint GET /accounts/{account_id}/event_subscriptions/subscriptions\n@desc List Event Subscriptions\n@required {account_id: str}\n@optional {page: int=1 # Page number for pagination, per_page: int=20 # Number of items per page, order: str(created_at/name/enabled/source)=name # Field to sort by, direction: str(asc/desc)=asc # Sort direction}\n@returns(200) List of event subscriptions\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/event_subscriptions/subscriptions\n@desc Create Event Subscription\n@required {account_id: str}\n@optional {destination: map # Destination configuration for the subscription, enabled: bool # Whether the subscription is active, events: [str] # List of event types this subscription handles, name: str # Name of the subscription, source: map # Source configuration for the subscription}\n@returns(200) Successfully created event subscription\n@errors {400: Invalid request body or validation errors, 404: Queue does not exist or resource not found on source, 405: Multiple subscriptions on same resource not supported}\n\n@endpoint DELETE /accounts/{account_id}/event_subscriptions/subscriptions/{subscription_id}\n@desc Delete Event Subscription\n@required {account_id: str, subscription_id: str}\n@returns(200) Successfully created event subscription\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/event_subscriptions/subscriptions/{subscription_id}\n@desc Get Event Subscription\n@required {account_id: str, subscription_id: str}\n@returns(200) Details about an event subscription\n@errors {404: Event subscription does not exist}\n\n@endpoint PATCH /accounts/{account_id}/event_subscriptions/subscriptions/{subscription_id}\n@desc Update Event Subscription\n@required {account_id: str, subscription_id: str}\n@optional {destination: map # Destination configuration for the subscription, enabled: bool # Whether the subscription is active, events: [str] # List of event types this subscription handles, name: str # Name of the subscription}\n@returns(200) Successfully created event subscription\n@errors {400: Invalid request body or validation errors, 404: Queue does not exist or resource not found on source}\n\n@endpoint DELETE /accounts/{account_id}/field_extractors/{extractor}\n@desc Delete Field Extractor\n@required {account_id: str # Cloudflare account ID., extractor: str # Extractor type.}\n@returns(200) {errors: [map], messages: [map], result: map?, success: bool} # Rules deleted successfully.\n@errors {404: Unknown extractor type.}\n\n@endpoint GET /accounts/{account_id}/field_extractors/{extractor}\n@desc Get Field Extractor\n@required {account_id: str # Cloudflare account ID., extractor: str # Extractor type.}\n@returns(200) {errors: [map], messages: [map], result: map{extractor: str, rules: [map]}, success: bool} # Custom extraction rules for this extractor type.\n@errors {404: Unknown extractor type or no rules configured.}\n\n@endpoint PUT /accounts/{account_id}/field_extractors/{extractor}\n@desc Update Field Extractor\n@required {account_id: str # Cloudflare account ID., extractor: str # Extractor type., rules: [map{description: str, fields!: [map], ref!: str}]}\n@returns(200) {errors: [map], messages: [map], result: map{extractor: str, rules: [map]}, success: bool} # Rules replaced successfully.\n@errors {400: Validation error., 404: Unknown extractor type.}\n\n@endpoint GET /accounts/{account_id}/firewall/access_rules/rules\n@desc List IP Access rules\n@required {account_id: str}\n@optional {mode: str, configuration.target: str(ip/ip_range/asn/country), configuration.value: str, notes: str, match: str(any/all)=all, page: num, per_page: num, order: str(configuration.target/configuration.value/mode), direction: str(asc/desc)}\n@returns(200) List IP Access rules response.\n@errors {4XX: List IP Access rules response failure.}\n\n@endpoint POST /accounts/{account_id}/firewall/access_rules/rules\n@desc Create an IP Access rule\n@required {account_id: str, configuration: map # The rule configuration., mode: str(block/challenge/whitelist/js_challenge/managed_challenge) # The action to apply to a matched request.}\n@optional {notes: any=}\n@returns(200) Create an IP Access rule response.\n@errors {4XX: Create an IP Access rule response failure.}\n\n@endpoint DELETE /accounts/{account_id}/firewall/access_rules/rules/{rule_id}\n@desc Delete an IP Access rule\n@required {rule_id: str, account_id: str}\n@returns(200) Delete an IP Access rule response.\n@errors {4XX: Delete an IP Access rule response failure.}\n\n@endpoint GET /accounts/{account_id}/firewall/access_rules/rules/{rule_id}\n@desc Get an IP Access rule\n@required {rule_id: str, account_id: str}\n@returns(200) Get an IP Access rule response.\n@errors {4XX: Get an IP Access rule response failure.}\n\n@endpoint PATCH /accounts/{account_id}/firewall/access_rules/rules/{rule_id}\n@desc Update an IP Access rule\n@required {rule_id: str, account_id: str}\n@returns(200) Update an IP Access rule response.\n@errors {4XX: Update an IP Access rule response failure.}\n\n@endpoint GET /accounts/{account_id}/flagship/apps\n@desc List apps\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # List of apps.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/flagship/apps\n@desc Create app\n@required {account_id: str # Cloudflare account ID., name: str}\n@returns(201) {errors: [map], messages: [map], result: map{created_at: str, id: str, name: str, updated_at: str, updated_by: str}, success: bool} # App created.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint DELETE /accounts/{account_id}/flagship/apps/{app_id}\n@desc Delete app\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier.}\n@returns(200) {errors: [map], messages: [map], result: map{id: str}, success: bool} # App deleted.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 409: Conflict — app is bound to Worker scripts., 429: Too many requests., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/flagship/apps/{app_id}\n@desc Get app\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier.}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, id: str, name: str, updated_at: str, updated_by: str}, success: bool} # App details.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint PUT /accounts/{account_id}/flagship/apps/{app_id}\n@desc Update app\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier.}\n@optional {name: str}\n@returns(200) {errors: [map], messages: [map], result: map{created_at: str, id: str, name: str, updated_at: str, updated_by: str}, success: bool} # Updated app.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/flagship/apps/{app_id}/definitions\n@desc Get flag definitions\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier.}\n@optional {If-None-Match: str # Previously returned ETag, or `*`.}\n@returns(200) {flags: map} # Evaluation-only flag definitions.\n@errors {304: Definitions have not changed., 401: Unauthorized., 403: Forbidden., 404: App not found., 500: Definitions error., 503: Flag store temporarily unavailable.}\n\n@endpoint GET /accounts/{account_id}/flagship/apps/{app_id}/evaluate\n@desc Evaluate flag\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier., flagKey: str # The flag key to evaluate.}\n@optional {targetingKey: str # Context targeting key (per OpenFeature spec); used for percentage rollout bucketing.}\n@returns(200) {flagKey: str, reason: str, value: any, variant: str} # Flag evaluation result.\n@errors {400: Missing or invalid flagKey., 401: Unauthorized., 403: Forbidden., 404: Flag or app not found., 500: Evaluation error., 503: Flag store temporarily unavailable.}\n\n@endpoint POST /accounts/{account_id}/flagship/apps/{app_id}/evaluate\n@desc Evaluate flag (POST)\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier., flagKey: str}\n@optional {context: map=[object Object]}\n@returns(200) {flagKey: str, reason: str, value: any, variant: str} # Flag evaluation result.\n@errors {400: Missing or invalid flagKey, or malformed context., 401: Unauthorized., 403: Forbidden., 404: Flag or app not found., 500: Evaluation error., 503: Flag store temporarily unavailable.}\n\n@endpoint GET /accounts/{account_id}/flagship/apps/{app_id}/flags\n@desc List flags\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier.}\n@optional {limit: str # Max items to return (1–200)., cursor: str # Pagination cursor from a previous response.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursor: str?}, success: bool} # Paginated list of flags.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/flagship/apps/{app_id}/flags\n@desc Create flag\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier., default_variation: str # Variation the API serves when the flag is off, or when it's on but no rule matches the context. Must be a key in `variations`., enabled: bool # When false, the flag bypasses all rules and always serves `default_variation`., key: str # Unique identifier for the flag within an app. Used in all evaluation and SDK calls., rules: [map{conditions!: [any], priority!: int, rollout: map, serve_variation!: str}] # Targeting rules evaluated in ascending `priority`; the first matching rule wins. An empty array means the flag always serves `default_variation`., variations: map # Map of variation name to value. All values share the same type (boolean, string, number, or JSON object/array), and each serialized value stays within 10KB.}\n@optional {description: str, type: str(boolean/string/number/json) # Deprecated compatibility field. Omit it; the API ignores this value and infers the type from the flag's variations.}\n@returns(201) {errors: [map], messages: [map], result: map{default_variation: str, description: str?, enabled: bool, key: str, rules: [map], type: str, updated_at: str, updated_by: str, variations: map}, success: bool} # Flag created.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint DELETE /accounts/{account_id}/flagship/apps/{app_id}/flags/{flag_key}\n@desc Delete flag\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier., flag_key: str # Flag key (slug).}\n@returns(200) {errors: [map], messages: [map], result: map{key: str}, success: bool} # Flag deleted.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/flagship/apps/{app_id}/flags/{flag_key}\n@desc Get flag\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier., flag_key: str # Flag key (slug).}\n@returns(200) {errors: [map], messages: [map], result: map{default_variation: str, description: str?, enabled: bool, key: str, rules: [map], type: str, updated_at: str, updated_by: str, variations: map}, success: bool} # Flag details.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint PUT /accounts/{account_id}/flagship/apps/{app_id}/flags/{flag_key}\n@desc Update flag\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier., flag_key: str # Flag key (slug)., default_variation: str # Variation the API serves when the flag is off, or when it's on but no rule matches the context. Must be a key in `variations`., enabled: bool # When false, the flag bypasses all rules and always serves `default_variation`., key: str # Unique identifier for the flag within an app. Used in all evaluation and SDK calls., rules: [map{conditions!: [any], priority!: int, rollout: map, serve_variation!: str}] # Targeting rules evaluated in ascending `priority`; the first matching rule wins. An empty array means the flag always serves `default_variation`., variations: map # Map of variation name to value. All values share the same type (boolean, string, number, or JSON object/array), and each serialized value stays within 10KB.}\n@optional {description: str, type: str(boolean/string/number/json) # Deprecated compatibility field. Omit it; the API ignores this value and infers the type from the flag's variations.}\n@returns(200) {errors: [map], messages: [map], result: map{default_variation: str, description: str?, enabled: bool, key: str, rules: [map], type: str, updated_at: str, updated_by: str, variations: map}, success: bool} # Updated flag.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/flagship/apps/{app_id}/flags/{flag_key}/changelog\n@desc Get flag changelog\n@required {account_id: str # Cloudflare account ID., app_id: str # App identifier., flag_key: str # Flag key (slug).}\n@optional {limit: str # Max items to return (1–200)., cursor: str # Pagination cursor from a previous response.}\n@returns(200) {errors: [map], messages: [map], result: [any], result_info: map{count: int, cursor: str?}, success: bool} # Paginated flag changelog.\n@errors {400: Bad request., 401: Unauthorized., 403: Forbidden., 404: Not found., 429: Too many requests., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/gateway\n@desc Get Zero Trust account information\n@required {account_id: str}\n@returns(200) Zero Trust account information response.\n@errors {4XX: Zero Trust account information response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway\n@desc Create Zero Trust account\n@required {account_id: str}\n@returns(200) Create Zero Trust account response.\n@errors {4XX: Create Zero Trust account response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/app_types\n@desc List application and application type mappings\n@required {account_id: str}\n@returns(200) List application and application type mappings response.\n@errors {4XX: List application and application type mappings response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/apps/review_status\n@desc List applications review statuses\n@required {account_id: str}\n@returns(200) List applications review status response.\n@errors {4XX: List applications review status failure response.}\n\n@endpoint PUT /accounts/{account_id}/gateway/apps/review_status\n@desc Update applications review statuses\n@required {account_id: str, approved_apps: [int(int64)] # Contains the ids of the approved applications., in_review_apps: [int(int64)] # Contains the ids of the applications in review., unapproved_apps: [int(int64)] # Contains the ids of the unapproved applications.}\n@returns(200) Update applications review status response.\n@errors {4XX: Update applications review status failure response.}\n\n@endpoint GET /accounts/{account_id}/gateway/audit_ssh_settings\n@desc Get Zero Trust SSH settings\n@required {account_id: str}\n@returns(200) Get Zero Trust SSH settings response.\n@errors {4XX: Get Zero Trust SSH settings response failure.}\n\n@endpoint PUT /accounts/{account_id}/gateway/audit_ssh_settings\n@desc Update Zero Trust SSH settings\n@required {account_id: str, public_key: str # Provide the Base64-encoded HPKE public key that encrypts SSH session logs. See https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#enable-ssh-command-logging.}\n@returns(200) Update Zero Trust SSH settings response.\n@errors {4XX: Update Zero Trust SSH settings response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/audit_ssh_settings/rotate_seed\n@desc Rotate Zero Trust SSH account seed\n@required {account_id: str}\n@returns(200) Rotate Zero Trust SSH account seed response.\n@errors {4XX: Rotate Zero Trust SSH account seed response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/categories\n@desc List categories\n@required {account_id: str}\n@returns(200) List categories response.\n@errors {4XX: List categories response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/certificates\n@desc List Zero Trust certificates\n@required {account_id: str}\n@returns(200) Lists Zero Trust certificates response.\n@errors {4XX: Lists Zero Trust certificates response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/certificates\n@desc Create Zero Trust certificate\n@required {account_id: str}\n@optional {validity_period_days: int # Sets the certificate validity period in days (range: 1-10,950 days / ~30 years). Defaults to 1,825 days (5 years). **Important**: This field is only settable during the certificate creation.  Certificates becomes immutable after creation - use the `/activate` and `/deactivate` endpoints to manage certificate lifecycle.}\n@returns(200) Creates Zero Trust certificate response.\n@errors {4XX: Creates Zero Trust certificate response failure.}\n\n@endpoint DELETE /accounts/{account_id}/gateway/certificates/{certificate_id}\n@desc Delete Zero Trust certificate\n@required {certificate_id: str, account_id: str}\n@returns(200) Deletes Zero Trust certificate response.\n@errors {4XX: Deletes Zero Trust certificate response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/certificates/{certificate_id}\n@desc Get Zero Trust certificate details\n@required {certificate_id: str, account_id: str}\n@returns(200) Gets Zero Trust certificate details response.\n@errors {4XX: Gets Zero Trust certificate details response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/certificates/{certificate_id}/activate\n@desc Activate a Zero Trust certificate\n@required {certificate_id: str, account_id: str}\n@returns(202) Activates Zero Trust certificate details response.\n@errors {4XX: Activates Zero Trust certificate details response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/certificates/{certificate_id}/deactivate\n@desc Deactivate a Zero Trust certificate\n@required {certificate_id: str, account_id: str}\n@returns(201) Deactivate Zero Trust certificate details response.\n@errors {4XX: Deactivate Zero Trust certificate details response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/configuration\n@desc Get Zero Trust account configuration\n@required {account_id: str}\n@returns(200) Zero Trust account configuration response.\n@errors {4XX: Zero Trust account configuration response failure.}\n\n@endpoint PATCH /accounts/{account_id}/gateway/configuration\n@desc Patch Zero Trust account configuration\n@required {account_id: str}\n@optional {settings: map{activity_log: map, antivirus: map, block_page: map, body_scanning: map, browser_isolation: map, certificate: map, custom_certificate: map, extended_email_matching: map, fips: map, host_selector: map, inspection: map, max_ttl_secs: int, protocol_detection: map, sandbox: map, tls_decrypt: map} # Specify account settings.}\n@returns(200) Zero Trust account configuration response.\n@errors {4XX: Zero Trust account configuration response failure.}\n\n@endpoint PUT /accounts/{account_id}/gateway/configuration\n@desc Update Zero Trust account configuration\n@required {account_id: str}\n@optional {settings: map{activity_log: map, antivirus: map, block_page: map, body_scanning: map, browser_isolation: map, certificate: map, custom_certificate: map, extended_email_matching: map, fips: map, host_selector: map, inspection: map, max_ttl_secs: int, protocol_detection: map, sandbox: map, tls_decrypt: map} # Specify account settings.}\n@returns(200) Zero Trust account configuration response.\n@errors {4XX: Zero Trust account configuration response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/configuration/custom_certificate\n@desc Get Zero Trust certificate configuration\n@required {account_id: str}\n@returns(200) {binding_status: str, enabled: bool?, id: str, updated_at: str(date-time)} # Zero Trust account configuration response.\n@errors {4XX: Zero Trust account configuration response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/dns_destination_ips\n@desc List Zero Trust Gateway DNS destination IPv4 address pairs\n@required {account_id: str}\n@returns(200) List Zero Trust Gateway DNS destination IPv4 address pairs response.\n@errors {4XX: List Zero Trust Gateway DNS destination IPv4 address pairs response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/egress_cidr_pairs\n@desc Get gateway egress CIDRs pairs assigned to this account\n@required {account_id: str}\n@returns(200) List of egress CIDR pairs.\n@errors {4XX: List of egress CIDR pairs response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/lists\n@desc List Zero Trust lists\n@required {account_id: str}\n@optional {type: str, filter: [str] # Filter the returned lists by one or more `field:value` pairs. Repeat the parameter to apply multiple filters; they are combined with logical AND (a list must satisfy every filter to be returned).  Supported fields and their matching behaviour:   * `name` — case-insensitive substring match on the list name.   * `id` — substring match on the list ID (UUID), with or without dashes.   * `type` — exact match on the list type. Supersedes the legacy `type` query     parameter when both are supplied. Must be one of the valid type values.   * `item_count` — exact integer match on the number of items in the list.  Each entry must match one of the per-field patterns below: the field must be one of `name`, `id`, `type`, or `item_count`; `name`/`id` accept any value, `type` is restricted to the valid list type values, and `item_count` must be a non-negative integer., search: str # Case-insensitive substring match on the list name or description. When combined with `filter`, both must match (logical AND)., order_by: str(name/created_at/updated_at/item_count) # Field to sort the returned lists by. When omitted, results are ordered by `created_at` in ascending order (i.e. creation order) for backwards compatibility. Supported values:   * `name` — sort alphabetically by list name.   * `created_at` — sort by creation time; defaults to descending unless `direction` is set.   * `updated_at` — sort by last-modified time; defaults to descending unless `direction` is set.   * `item_count` — sort by number of items in the list., direction: str(asc/desc) # Sort direction. Applies to the field named in `order_by`; when `order_by` is omitted it applies to the default `created_at` ordering. When `direction` is omitted the default is field-specific: explicitly choosing `created_at` or `updated_at` defaults to descending (newest first); `name` and `item_count` default to ascending; and the default `created_at` ordering used when `order_by` is omitted is ascending (for backwards compatibility).   * `asc` — ascending.   * `desc` — descending.}\n@returns(200) List Zero Trust lists response.\n@errors {4XX: List Zero Trust lists response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/lists\n@desc Create Zero Trust list\n@required {account_id: str, name: str # Specify the list name., type: str(SERIAL/URL/DOMAIN/EMAIL/IP/CATEGORY/LOCATION/DEVICE/AAGUID) # Specify the list type.}\n@optional {description: str # Provide the list description., items: [map{description: str, value: str}] # Add items to the list.}\n@returns(200) Create Zero Trust list response.\n@errors {4XX: Create Zero Trust list response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/lists/upload\n@desc Create Zero Trust list from CSV\n@required {account_id: str}\n@returns(200) Create Zero Trust list from CSV response.\n@errors {4XX: Create Zero Trust list from CSV response failure.}\n\n@endpoint DELETE /accounts/{account_id}/gateway/lists/{list_id}\n@desc Delete Zero Trust list\n@required {list_id: str, account_id: str}\n@returns(200) Delete Zero Trust list response.\n@errors {4XX: Delete Zero Trust list response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/lists/{list_id}\n@desc Get Zero Trust list details\n@required {list_id: str, account_id: str}\n@returns(200) Get Zero Trust list details response.\n@errors {4XX: Get Zero Trust list details response failure.}\n\n@endpoint PATCH /accounts/{account_id}/gateway/lists/{list_id}\n@desc Patch Zero Trust list.\n@required {list_id: str, account_id: str}\n@optional {append: [map{description: str, value: str}] # Add items to the list., remove: [str] # Lists of item values you want to remove.}\n@returns(200) Patch Zero Trust list response.\n@errors {4XX: Patch Zero Trust list response failure.}\n\n@endpoint PUT /accounts/{account_id}/gateway/lists/{list_id}\n@desc Update Zero Trust list\n@required {list_id: str, account_id: str, name: str # Specify the list name.}\n@optional {description: str # Provide the list description., items: [map{description: str, value: str}] # Add items to the list.}\n@returns(200) Update Zero Trust list response.\n@errors {4XX: Update Zero Trust list response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/lists/{list_id}/items\n@desc Get Zero Trust list items\n@required {list_id: str, account_id: str}\n@returns(200) Get Zero Trust list items response.\n@errors {4XX: Get Zero Trust list items response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/locations\n@desc List Zero Trust Gateway locations\n@required {account_id: str}\n@optional {filter: [str] # Filter the returned locations by one or more `field:value` pairs. Repeat the parameter to apply multiple filters; they are combined with logical AND (a location must satisfy every filter to be returned).  Supported fields and their matching behaviour:   * `name` — case-insensitive substring match on the location name.   * `id` — substring match on the location ID (UUID), with or without dashes.   * `is_default` — whether it is the default for the account.  Each entry must match one of the per-field patterns below:   * the field must be one of `name`, `id`, or `is_default`;   * `name`/`id` accept any value;   * `is_default` only accepts `true` or `false`; any other value returns `400`, search: str # Case-insensitive substring match on the location name. When combined with `filter`, both must match (logical AND)., order_by: str(name/created_at/updated_at) # Field to sort the returned locations by. When omitted, the order of results is unspecified. Supported values:   * `name` — sort alphabetically by location name.   * `created_at` — sort by creation time; defaults to descending unless `direction` is set.   * `updated_at` — sort by last-modified time; defaults to descending unless `direction` is set., direction: str(asc/desc) # Sort direction. Only takes effect when `order_by` is also provided; it is ignored otherwise. When `direction` is omitted the effective direction is field-specific: `created_at` and `updated_at` default to descending (newest first); `name` defaults to ascending.   * `asc` — ascending.   * `desc` — descending.}\n@returns(200) Lists Zero Trust Gateway locations response.\n@errors {4XX: Lists Zero Trust Gateway locations response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/locations\n@desc Create a Zero Trust Gateway location\n@required {account_id: str, name: str # Specify the location name.}\n@optional {client_default: bool=false # Indicate whether this location is the default location., dns_destination_ips_id: str # Specify the identifier of the pair of IPv4 addresses assigned to this location. When creating a location, if this field is absent or set to null, the pair of shared IPv4 addresses (0e4a32c6-6fb8-4858-9296-98f51631e8e6) is auto-assigned. When updating a location, if this field is absent or set to null, the pre-assigned pair remains unchanged., ecs_support: bool=false # Indicate whether the location must resolve EDNS queries., endpoints: map{doh!: map, dot!: map, ipv4!: map, ipv6!: map} # Configure the destination endpoints for this location., max_ttl: map{mode!: str, ttl_secs: int}=[object Object] # Controls how DNS response TTLs are capped for this location relative to the account `max_ttl_secs` setting. Omitting `max_ttl` on update resets it to `inherit`., networks: [map{network!: str}] # Specify the list of network ranges from which requests at this location originate. The list takes effect only if it is non-empty and the IPv4 endpoint is enabled for this location.}\n@returns(200) Creates a Zero Trust Gateway location response.\n@errors {4XX: Creates a Zero Trust Gateway location response failure.}\n\n@endpoint DELETE /accounts/{account_id}/gateway/locations/{location_id}\n@desc Delete a Zero Trust Gateway location\n@required {location_id: str, account_id: str}\n@returns(200) Deletes a Zero Trust Gateway location response.\n@errors {4XX: Deletes a Zero Trust Gateway location response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/locations/{location_id}\n@desc Get Zero Trust Gateway location details\n@required {location_id: str, account_id: str}\n@returns(200) Gets Zero Trust Gateway location details response.\n@errors {4XX: Gets Zero Trust Gateway location details response failure.}\n\n@endpoint PUT /accounts/{account_id}/gateway/locations/{location_id}\n@desc Update a Zero Trust Gateway location\n@required {location_id: str, account_id: str, name: str # Specify the location name.}\n@optional {client_default: bool=false # Indicate whether this location is the default location., dns_destination_ips_id: str # Specify the identifier of the pair of IPv4 addresses assigned to this location. When creating a location, if this field is absent or set to null, the pair of shared IPv4 addresses (0e4a32c6-6fb8-4858-9296-98f51631e8e6) is auto-assigned. When updating a location, if this field is absent or set to null, the pre-assigned pair remains unchanged., ecs_support: bool=false # Indicate whether the location must resolve EDNS queries., endpoints: map{doh!: map, dot!: map, ipv4!: map, ipv6!: map} # Configure the destination endpoints for this location., max_ttl: map{mode!: str, ttl_secs: int}=[object Object] # Controls how DNS response TTLs are capped for this location relative to the account `max_ttl_secs` setting. Omitting `max_ttl` on update resets it to `inherit`., networks: [map{network!: str}] # Specify the list of network ranges from which requests at this location originate. The list takes effect only if it is non-empty and the IPv4 endpoint is enabled for this location.}\n@returns(200) Updates a Zero Trust Gateway location response.\n@errors {4XX: Updates a Zero Trust Gateway location response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/logging\n@desc Get logging settings for the Zero Trust account\n@required {account_id: str}\n@returns(200) Logging settings retrieval response.\n@errors {4XX: Logging settings retrieval response failure.}\n\n@endpoint PUT /accounts/{account_id}/gateway/logging\n@desc Update Zero Trust account logging settings\n@required {account_id: str}\n@optional {redact_pii: bool=false # Indicate whether to redact personally identifiable information from activity logging (PII fields include source IP, user email, user ID, device ID, URL, referrer, and user agent)., settings_by_rule_type: map{dns: any, http: any, l4: any} # Configure logging settings for each rule type.}\n@returns(200) Logging settings update response.\n@errors {4XX: Logging settings update response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/operations\n@desc List Zero Trust Gateway operations\n@required {account_id: str}\n@returns(200) List Zero Trust Gateway operations response.\n@errors {4XX: List Zero Trust Gateway operations response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/operations/{operation_id}\n@desc Zero Trust Gateway operation details\n@required {operation_id: str, account_id: str}\n@returns(200) Zero Trust Gateway operation details response.\n@errors {4XX: Zero Trust Gateway operation details response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/pacfiles\n@desc List PAC files\n@required {account_id: str}\n@returns(200) Returns a list of PAC files response.\n@errors {4XX: Returns a list of PAC files response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/pacfiles\n@desc Create a PAC file\n@required {account_id: str, contents: str # Actual contents of the PAC file, name: str # Name of the PAC file.}\n@optional {description: str # Detailed description of the PAC file., slug: str # URL-friendly version of the PAC file name. If not provided, it will be auto-generated}\n@returns(200) Returns a created PAC file response.\n@errors {4XX: Returns a created PAC file response failure.}\n\n@endpoint DELETE /accounts/{account_id}/gateway/pacfiles/{pacfile_id}\n@desc Delete a PAC file\n@required {pacfile_id: str, account_id: str}\n@returns(200) Returns a deleted PAC file response.\n@errors {4XX: Returns a deleted PAC file response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/pacfiles/{pacfile_id}\n@desc Get a PAC file\n@required {pacfile_id: str, account_id: str}\n@returns(200) Returns a PAC file response.\n@errors {4XX: Returns a PAC file response failure.}\n\n@endpoint PUT /accounts/{account_id}/gateway/pacfiles/{pacfile_id}\n@desc Update a Zero Trust Gateway PAC file\n@required {pacfile_id: str, account_id: str, contents: str # Actual contents of the PAC file, description: str # Detailed description of the PAC file., name: str # Name of the PAC file.}\n@returns(200) Update a Zero Trust Gateway PAC file response.\n@errors {4XX: Update a Zero Trust Gateway PAC file response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/proxy_endpoints\n@desc List proxy endpoints\n@required {account_id: str}\n@optional {filter: [str] # Filter the returned proxy endpoints by one or more `field:value` pairs. Repeat the parameter to apply multiple filters; they are combined with logical AND (an endpoint must satisfy every filter to be returned).  Supported fields and their matching behaviour:   * `name` — case-insensitive substring match on the endpoint name.   * `id` — substring match on the endpoint ID (UUID), with or without dashes.   * `kind` — exact match on the endpoint kind. The value must be `ip` or `identity`; any other value returns `400`.  Each entry must match one of the per-field patterns below: the field must be one of `name`, `id`, or `kind`; `name`/`id` accept any value, while `kind` only accepts `ip` or `identity`., search: str # Case-insensitive substring match on the endpoint name. When combined with `filter`, both must match (logical AND)., order_by: str(name/created_at/updated_at) # Field to sort the returned endpoints by. When omitted, the order of results is unspecified. Supported values:   * `name` — sort alphabetically by endpoint name.   * `created_at` — sort by creation time; defaults to descending unless `direction` is set.   * `updated_at` — sort by last-modified time; defaults to descending unless `direction` is set., direction: str(asc/desc) # Sort direction. Only takes effect when `order_by` is also provided; it is ignored otherwise. When `direction` is omitted the effective direction is field-specific: `created_at` and `updated_at` default to descending (newest first); `name` defaults to ascending.   * `asc` — ascending.   * `desc` — descending.}\n@returns(200) Returns a list of proxy endpoints response.\n@errors {4XX: Returns a list of proxy endpoints response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/proxy_endpoints\n@desc Create a proxy endpoint\n@required {account_id: str}\n@optional {kind: str(ip/identity)=ip # The proxy endpoint kind.}\n@returns(200) Returns a created proxy endpoint response.\n@errors {4XX: Returns a created proxy endpoint response failure.}\n\n@endpoint DELETE /accounts/{account_id}/gateway/proxy_endpoints/{proxy_endpoint_id}\n@desc Delete a proxy endpoint\n@required {proxy_endpoint_id: str, account_id: str}\n@returns(200) Returns a deleted proxy endpoint response.\n@errors {4XX: Returns a deleted proxy endpoint response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/proxy_endpoints/{proxy_endpoint_id}\n@desc Get a proxy endpoint\n@required {proxy_endpoint_id: str, account_id: str}\n@returns(200) Returns a proxy endpoint response.\n@errors {4XX: Returns a proxy endpoint response failure.}\n\n@endpoint PATCH /accounts/{account_id}/gateway/proxy_endpoints/{proxy_endpoint_id}\n@desc Update a proxy endpoint\n@required {proxy_endpoint_id: str, account_id: str}\n@optional {ips: [str] # Specify the list of CIDRs to restrict ingress connections., name: str # Specify the name of the proxy endpoint.}\n@returns(200) Returns an updated proxy endpoint response.\n@errors {4XX: Returns an updated proxy endpoint response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/rules\n@desc List Zero Trust Gateway rules\n@required {account_id: str}\n@optional {filter: [str] # Filter the returned rules by one or more `field:value` pairs. Repeat the parameter to combine filters with logical AND.  Supported fields are `name`, `id`, `action`, `enabled`, `source_account`, `is_shared`, `filters`, and `expression` (max 1024 bytes). The `source_account` value is matched as a normalized UUID substring. The `filters` value must be one of the rule filter names and matches a member of the rule's `filters` array. The `expression` filter performs a case-insensitive literal substring match across traffic, identity, and device posture expressions., search: str # Case-insensitive substring search across rule name and description., order_by: str(name/created_at/updated_at/precedence) # Field to sort the returned rules by. Supported values are `name`, `created_at`, `updated_at`, and `precedence`., direction: str(asc/desc) # Sort direction. When `order_by` is omitted, this controls the direction of the existing precedence ordering. Shared rules remain first in either direction. Accepted values are `asc` and `desc`.}\n@returns(200) List Zero Trust Gateway rules response.\n@errors {4XX: List Zero Trust Gateway rules response failure.}\n\n@endpoint PATCH /accounts/{account_id}/gateway/rules\n@desc Patch multiple Zero Trust Gateway rules\n@required {account_id: str}\n@returns(200) Patch multiple Zero Trust Gateway rules response.\n@errors {4XX: Patch multiple Zero Trust Gateway rules response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/rules\n@desc Create a Zero Trust Gateway rule\n@required {account_id: str, action: str(on/off/allow/block/scan/noscan/safesearch/ytrestricted/isolate/noisolate/override/l4_override/egress/resolve/quarantine/redirect) # Specify the action to perform when the associated traffic, identity, and device posture expressions either absent or evaluate to `true`., name: str # Specify the rule name.}\n@optional {description: str # Specify the rule description., device_posture: str= # Specify the wirefilter expression used for device posture check. The API automatically formats and sanitizes expressions before storing them. To prevent Terraform state drift, use the formatted expression returned in the API response., enabled: bool=false # Specify whether the rule is enabled., expiration: map{duration: int, expired: bool, expires_at!: any} # Defines the expiration time stamp and default duration of a DNS policy. Takes precedence over the policy's `schedule` configuration, if any. This  does not apply to HTTP or network policies. Settable only for `dns` rules., filters: [str] # Specify the protocol or layer to evaluate the traffic, identity, and device posture expressions. Can only contain a single value., identity: str= # Specify the wirefilter expression used for identity matching. The API automatically formats and sanitizes expressions before storing them. To prevent Terraform state drift, use the formatted expression returned in the API response., precedence: int # Set the order of your rules. Lower values indicate higher precedence. At each processing phase, evaluate applicable rules in ascending order of this value. Refer to [Order of enforcement](http://developers.cloudflare.com/learning-paths/secure-internet-traffic/understand-policies/order-of-enforcement/#manage-precedence-with-terraform) to manage precedence via Terraform., rule_settings: map{add_headers: map, allow_child_bypass: bool, audit_ssh: map, biso_admin_controls: map, block_page: map, block_page_enabled: bool, block_reason: str, bypass_parent_rule: bool, check_session: map, delete_headers: [str], dns_resolvers: map, egress: map, forensic_copy: map, ignore_cname_category_matches: bool, insecure_disable_dnssec_validation: bool, ip_categories: bool, ip_indicator_feeds: bool, l4override: map, notification_settings: map, override_host: str, override_ips: [str], payload_log: map, quarantine: map, redirect: map, resolve_dns_internally: map, resolve_dns_through_cloudflare: bool, set_headers: map, untrusted_cert: map} # Defines settings for this rule. Settings apply only to specific rule types and must use compatible selectors. If Terraform detects drift, confirm the setting supports your rule type and check whether the API modifies the value. Use API-returned values in your configuration to prevent drift., schedule: map{fri: str, mon: str, sat: str, sun: str, thu: str, time_zone: str, tue: str, wed: str} # Defines the schedule for activating DNS policies. Settable only for `dns` and `dns_resolver` rules., traffic: str= # Specify the wirefilter expression used for traffic matching. The API automatically formats and sanitizes expressions before storing them. To prevent Terraform state drift, use the formatted expression returned in the API response.}\n@returns(200) Create a Zero Trust Gateway rule response.\n@errors {4XX: Create a Zero Trust Gateway rule response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/rules/tenant\n@desc List Zero Trust Gateway rules inherited from the parent account\n@required {account_id: str}\n@returns(200) List Zero Trust Gateway rules response.\n@errors {4XX: List Zero Trust Gateway rules response failure.}\n\n@endpoint DELETE /accounts/{account_id}/gateway/rules/{rule_id}\n@desc Delete a Zero Trust Gateway rule\n@required {rule_id: str(uuid), account_id: str}\n@returns(200) Delete a Zero Trust Gateway rule response.\n@errors {4XX: Delete a Zero Trust Gateway rule response failure.}\n\n@endpoint GET /accounts/{account_id}/gateway/rules/{rule_id}\n@desc Get Zero Trust Gateway rule details.\n@required {rule_id: str(uuid), account_id: str}\n@returns(200) Get Zero Trust Gateway rule details response.\n@errors {4XX: Get Zero Trust Gateway rule details response failure.}\n\n@endpoint PATCH /accounts/{account_id}/gateway/rules/{rule_id}\n@desc Patch a Zero Trust Gateway rule\n@required {rule_id: str(uuid), account_id: str}\n@optional {description: str # Specify the rule description., enabled: bool=false # Specify whether the rule is enabled., name: str # Specify the rule name., precedence: int # Set the order of your rules. Lower values indicate higher precedence. At each processing phase, evaluate applicable rules in ascending order of this value. Refer to [Order of enforcement](http://developers.cloudflare.com/learning-paths/secure-internet-traffic/understand-policies/order-of-enforcement/#manage-precedence-with-terraform) to manage precedence via Terraform.}\n@returns(200) Patch a Zero Trust Gateway rule response.\n@errors {4XX: Patch a Zero Trust Gateway rule response failure.}\n\n@endpoint PUT /accounts/{account_id}/gateway/rules/{rule_id}\n@desc Update a Zero Trust Gateway rule\n@required {rule_id: str(uuid), account_id: str, action: str(on/off/allow/block/scan/noscan/safesearch/ytrestricted/isolate/noisolate/override/l4_override/egress/resolve/quarantine/redirect) # Specify the action to perform when the associated traffic, identity, and device posture expressions either absent or evaluate to `true`., name: str # Specify the rule name.}\n@optional {description: str # Specify the rule description., device_posture: str= # Specify the wirefilter expression used for device posture check. The API automatically formats and sanitizes expressions before storing them. To prevent Terraform state drift, use the formatted expression returned in the API response., enabled: bool=false # Specify whether the rule is enabled., expiration: map{duration: int, expired: bool, expires_at!: any} # Defines the expiration time stamp and default duration of a DNS policy. Takes precedence over the policy's `schedule` configuration, if any. This  does not apply to HTTP or network policies. Settable only for `dns` rules., filters: [str] # Specify the protocol or layer to evaluate the traffic, identity, and device posture expressions. Can only contain a single value., identity: str= # Specify the wirefilter expression used for identity matching. The API automatically formats and sanitizes expressions before storing them. To prevent Terraform state drift, use the formatted expression returned in the API response., precedence: int # Set the order of your rules. Lower values indicate higher precedence. At each processing phase, evaluate applicable rules in ascending order of this value. Refer to [Order of enforcement](http://developers.cloudflare.com/learning-paths/secure-internet-traffic/understand-policies/order-of-enforcement/#manage-precedence-with-terraform) to manage precedence via Terraform., rule_settings: map{add_headers: map, allow_child_bypass: bool, audit_ssh: map, biso_admin_controls: map, block_page: map, block_page_enabled: bool, block_reason: str, bypass_parent_rule: bool, check_session: map, delete_headers: [str], dns_resolvers: map, egress: map, forensic_copy: map, ignore_cname_category_matches: bool, insecure_disable_dnssec_validation: bool, ip_categories: bool, ip_indicator_feeds: bool, l4override: map, notification_settings: map, override_host: str, override_ips: [str], payload_log: map, quarantine: map, redirect: map, resolve_dns_internally: map, resolve_dns_through_cloudflare: bool, set_headers: map, untrusted_cert: map} # Defines settings for this rule. Settings apply only to specific rule types and must use compatible selectors. If Terraform detects drift, confirm the setting supports your rule type and check whether the API modifies the value. Use API-returned values in your configuration to prevent drift., schedule: map{fri: str, mon: str, sat: str, sun: str, thu: str, time_zone: str, tue: str, wed: str} # Defines the schedule for activating DNS policies. Settable only for `dns` and `dns_resolver` rules., traffic: str= # Specify the wirefilter expression used for traffic matching. The API automatically formats and sanitizes expressions before storing them. To prevent Terraform state drift, use the formatted expression returned in the API response.}\n@returns(200) Update a Zero Trust Gateway rule response.\n@errors {4XX: Update a Zero Trust Gateway rule response failure.}\n\n@endpoint POST /accounts/{account_id}/gateway/rules/{rule_id}/reset_expiration\n@desc Reset the expiration of a Zero Trust Gateway Rule\n@required {rule_id: str(uuid), account_id: str}\n@returns(200) Reset the expiration of a Zero Trust Gateway rule response.\n@errors {4XX: Reset the expiration of a Zero Trust Gateway rule response failure.}\n\n@endpoint GET /accounts/{account_id}/hyperdrive/configs\n@desc List Hyperdrives\n@required {account_id: str # The Cloudflare account ID.}\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page.}\n@returns(200) List Hyperdrives Response.\n@errors {4XX: List Hyperdrives Failure Response.}\n\n@endpoint POST /accounts/{account_id}/hyperdrive/configs\n@desc Create Hyperdrive\n@required {account_id: str # The Cloudflare account ID.}\n@returns(200) Create Hyperdrive Response.\n@errors {4XX: Create Hyperdrive Failure Response.}\n\n@endpoint DELETE /accounts/{account_id}/hyperdrive/configs/{hyperdrive_id}\n@desc Delete Hyperdrive\n@required {account_id: str # The Cloudflare account ID., hyperdrive_id: str # The unique identifier of the Hyperdrive configuration.}\n@returns(200) Delete Hyperdrive Response.\n@errors {4XX: Delete Hyperdrive Failure.}\n\n@endpoint GET /accounts/{account_id}/hyperdrive/configs/{hyperdrive_id}\n@desc Get Hyperdrive\n@required {account_id: str # The Cloudflare account ID., hyperdrive_id: str # The unique identifier of the Hyperdrive configuration.}\n@returns(200) Get Hyperdrive Response.\n@errors {4XX: Get Hyperdrive Failure.}\n\n@endpoint PATCH /accounts/{account_id}/hyperdrive/configs/{hyperdrive_id}\n@desc Update Hyperdrive\n@required {account_id: str # The Cloudflare account ID., hyperdrive_id: str # The unique identifier of the Hyperdrive configuration.}\n@optional {caching: map, mtls: map{ca_certificate_id: str, mtls_certificate_id: str, sslmode: str} # mTLS configuration for the origin connection. Cannot be used with VPC Service origins; TLS must be managed on the VPC Service., name: str # The name of the Hyperdrive configuration. Used to identify the configuration in the Cloudflare dashboard and API. An empty value leaves the name unchanged., origin: map, origin_connection_limit: int # The (soft) maximum number of connections the Hyperdrive is allowed to make to the origin database.  Maximum allowed: 20 for free tier accounts, 100 for paid tier accounts. If not specified, defaults to 20 for free tier and 60 for paid tier. Certain Cloudflare-managed origins may be permitted a higher limit. Contact Cloudflare if you need a higher limit.}\n@returns(200) Update Hyperdrive Response.\n@errors {4XX: Update Hyperdrive Failure Response.}\n\n@endpoint PUT /accounts/{account_id}/hyperdrive/configs/{hyperdrive_id}\n@desc Replace Hyperdrive\n@required {account_id: str # The Cloudflare account ID., hyperdrive_id: str # The unique identifier of the Hyperdrive configuration., id: str # Define configurations using a unique string identifier., name: str # The name of the Hyperdrive configuration. Used to identify the configuration in the Cloudflare dashboard and API., origin: map # Combines database connection fields with exactly one supported network location.}\n@optional {caching: map, created_on: str(date-time) # Defines the creation time of the Hyperdrive configuration., modified_on: str(date-time) # Defines the last modified time of the Hyperdrive configuration., mtls: map{ca_certificate_id: str, mtls_certificate_id: str, sslmode: str} # mTLS configuration for the origin connection. Cannot be used with VPC Service origins; TLS must be managed on the VPC Service., origin_connection_limit: int # The (soft) maximum number of connections the Hyperdrive is allowed to make to the origin database.  Maximum allowed: 20 for free tier accounts, 100 for paid tier accounts. If not specified, defaults to 20 for free tier and 60 for paid tier. Certain Cloudflare-managed origins may be permitted a higher limit. Contact Cloudflare if you need a higher limit., restarted_on: str(date-time) # Defines the last time the Hyperdrive connection pool was explicitly restarted via the restart endpoint. Omitted if the pool has never been explicitly restarted.}\n@returns(200) Replace Hyperdrive Response.\n@errors {4XX: Replace Hyperdrive Failure Response.}\n\n@endpoint POST /accounts/{account_id}/hyperdrive/configs/{hyperdrive_id}/restart\n@desc Restart Hyperdrive\n@required {account_id: str # The Cloudflare account ID., hyperdrive_id: str # The unique identifier of the Hyperdrive configuration.}\n@returns(200) Restart Hyperdrive Response.\n@errors {4XX: Restart Hyperdrive Failure Response.}\n\n@endpoint POST /accounts/{account_id}/hyperdrive/integrationsOperations/{integration}/createDatabaseSignature\n@desc Create Database Signature\n@required {account_id: str # The Cloudflare account ID., integration: str # The database integration to authorize against. This value is case-insensitive.}\n@returns(200) Create Database Signature Response.\n@errors {4XX: Create Database Signature Failure Response.}\n\n@endpoint GET /accounts/{account_id}/iam/permission_groups\n@desc List Account Permission Groups\n@required {account_id: any}\n@optional {id: str, name: str, label: str, page: num=1, per_page: num=20}\n@returns(200) List Permission Groups response\n@errors {4XX: List Permission Groups response failure}\n\n@endpoint GET /accounts/{account_id}/iam/permission_groups/{permission_group_id}\n@desc Permission Group Details\n@required {account_id: any, permission_group_id: any}\n@returns(200) Permission Group Details response\n@errors {4XX: Permission Group Details response failure}\n\n@endpoint GET /accounts/{account_id}/iam/resource_groups\n@desc List Resource Groups\n@required {account_id: any}\n@optional {id: any, name: str}\n@returns(200) List Resource Groups response\n@errors {4XX: List Resource Groups response failure}\n\n@endpoint POST /accounts/{account_id}/iam/resource_groups\n@desc Create Resource Group\n@required {account_id: any, name: str # Name of the resource group, scope: map{key!: any, objects!: [map]} # A scope is a combination of scope objects which provides additional context.}\n@returns(200) Add Resource Group response\n@errors {4XX: Add Resource Group response failure}\n\n@endpoint DELETE /accounts/{account_id}/iam/resource_groups/{resource_group_id}\n@desc Remove Resource Group\n@required {account_id: any, resource_group_id: any}\n@returns(200) Remove Resource Group response\n@errors {4XX: Remove Member response failure}\n\n@endpoint GET /accounts/{account_id}/iam/resource_groups/{resource_group_id}\n@desc Resource Group Details\n@required {account_id: any, resource_group_id: any}\n@returns(200) Resource Group Details response\n@errors {4XX: Resource Group Details response failure}\n\n@endpoint PUT /accounts/{account_id}/iam/resource_groups/{resource_group_id}\n@desc Update Resource Group\n@required {account_id: any, resource_group_id: any}\n@optional {name: str # Name of the resource group, scope: map{key!: any, objects!: [map]} # A scope is a combination of scope objects which provides additional context.}\n@returns(200) Update Resource Group response\n@errors {4XX: Update Resource Group response failure}\n\n@endpoint GET /accounts/{account_id}/iam/user_groups\n@desc List User Groups\n@required {account_id: any}\n@optional {id: any # ID of the user group to be fetched., name: str, fuzzyName: str, page: num=1, per_page: num=100, direction: str(asc/desc)=asc}\n@returns(200) List User Group response\n@errors {4XX: List User Group response failure}\n\n@endpoint POST /accounts/{account_id}/iam/user_groups\n@desc Create User Group\n@required {account_id: any, name: str # Name of the User group.}\n@optional {policies: [any] # Policies attached to the User group}\n@returns(200) Add User Group response\n@errors {4XX: Add User Group response failure}\n\n@endpoint DELETE /accounts/{account_id}/iam/user_groups/{user_group_id}\n@desc Remove User Group\n@required {account_id: any, user_group_id: any}\n@returns(200) Remove User Group response\n@errors {4XX: Remove User Group response failure}\n\n@endpoint GET /accounts/{account_id}/iam/user_groups/{user_group_id}\n@desc User Group Details\n@required {account_id: any, user_group_id: any}\n@returns(200) User Group Details response\n@errors {4XX: User Group Details response failure}\n\n@endpoint PUT /accounts/{account_id}/iam/user_groups/{user_group_id}\n@desc Update User Group\n@required {account_id: any, user_group_id: any}\n@optional {name: str # Name of the User group., policies: [any] # Policies attached to the User group}\n@returns(200) Update User Group response\n@errors {4XX: Update User Group response failure}\n\n@endpoint GET /accounts/{account_id}/iam/user_groups/{user_group_id}/members\n@desc List User Group Members\n@required {account_id: any, user_group_id: any}\n@optional {page: num=1, per_page: num=100, fuzzyEmail: str, direction: str(asc/desc)=asc}\n@returns(200) List User Group Members\n@errors {4XX: User Group Details response failure}\n\n@endpoint POST /accounts/{account_id}/iam/user_groups/{user_group_id}/members\n@desc Add User Group Members\n@required {account_id: any, user_group_id: any}\n@returns(200) Add User Group Members response\n@errors {4XX: Add User Group Members response failure}\n\n@endpoint PUT /accounts/{account_id}/iam/user_groups/{user_group_id}/members\n@desc Update User Group Members\n@required {account_id: any, user_group_id: any}\n@returns(200) Update User Group Members response\n@errors {4XX: Update User Group response failure}\n\n@endpoint DELETE /accounts/{account_id}/iam/user_groups/{user_group_id}/members/{member_id}\n@desc Remove User Group Member\n@required {account_id: any, user_group_id: any, member_id: any}\n@returns(200) Delete User Group Member response\n@errors {4XX: Delete User Group response failure}\n\n@endpoint GET /accounts/{account_id}/iam/user_groups/{user_group_id}/members/{member_id}\n@desc Get User Group Member\n@required {account_id: any, user_group_id: any, member_id: any}\n@returns(200) Get User Group Member response\n@errors {4XX: Get User Group Member response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1\n@desc List images\n@required {account_id: str}\n@optional {page: num=1, per_page: num=1000, creator: str}\n@returns(200) List images response\n@errors {4XX: List images response failure}\n\n@endpoint POST /accounts/{account_id}/images/v1\n@desc Upload an image\n@required {account_id: str}\n@returns(200) Upload an image response\n@errors {4XX: Upload an image response failure}\n\n@endpoint POST /accounts/{account_id}/images/v1/direct_upload\n@desc Create authenticated direct upload URL V1\n@required {account_id: str}\n@optional {expiry: str(date-time) # The date after which the upload will not be accepted. Minimum: Now + 2 minutes. Maximum: Now + 6 hours.}\n@returns(200) Create authenticated direct upload URL V1 response\n@errors {4XX: Create authenticated direct upload URL V1 response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1/keys\n@desc List Signing Keys\n@required {account_id: str}\n@returns(200) List Signing Keys response\n@errors {4XX: List Signing Keys response failure}\n\n@endpoint DELETE /accounts/{account_id}/images/v1/keys/{signing_key_name}\n@desc Delete Signing Key\n@required {signing_key_name: str, account_id: str}\n@returns(200) Delete Signing Key response\n@errors {4XX: Delete Signing Key response failure}\n\n@endpoint PUT /accounts/{account_id}/images/v1/keys/{signing_key_name}\n@desc Create a new Signing Key\n@required {signing_key_name: str, account_id: str}\n@returns(200) Add Signing Key response\n@errors {4XX: Add Signing Key response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1/stats\n@desc Images usage statistics\n@required {account_id: str}\n@returns(200) Images usage statistics response\n@errors {4XX: Images usage statistics response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1/variants\n@desc List variants\n@required {account_id: str}\n@returns(200) List variants response\n@errors {4XX: List variants response failure}\n\n@endpoint POST /accounts/{account_id}/images/v1/variants\n@desc Create a variant\n@required {account_id: str, id: str, options: map{fit!: str, height!: num, metadata!: str, width!: num} # Allows you to define image resizing sizes for different use cases.}\n@optional {neverRequireSignedURLs: bool=false # Indicates whether the variant can access an image without a signature, regardless of image access control.}\n@returns(200) Create a variant response\n@errors {4XX: Create a variant response failure}\n\n@endpoint DELETE /accounts/{account_id}/images/v1/variants/{variant_id}\n@desc Delete a variant\n@required {variant_id: str, account_id: str}\n@returns(200) Delete a variant response\n@errors {4XX: Delete a variant response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1/variants/{variant_id}\n@desc Variant details\n@required {variant_id: str, account_id: str}\n@returns(200) Variant details response\n@errors {4XX: Variant details response failure}\n\n@endpoint PATCH /accounts/{account_id}/images/v1/variants/{variant_id}\n@desc Update a variant\n@required {variant_id: str, account_id: str, options: map{fit!: str, height!: num, metadata!: str, width!: num} # Allows you to define image resizing sizes for different use cases.}\n@optional {neverRequireSignedURLs: bool=false # Indicates whether the variant can access an image without a signature, regardless of image access control.}\n@returns(200) Update a variant response\n@errors {4XX: Update a variant response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1/variants/{variant_id}/flat\n@desc Variant details (flat)\n@required {variant_id: str, account_id: str}\n@returns(200) Variant details flat response\n@errors {4XX: Variant details flat response failure}\n\n@endpoint DELETE /accounts/{account_id}/images/v1/{image_id}\n@desc Delete image\n@required {image_id: str, account_id: str}\n@returns(200) Delete image response\n@errors {4XX: Delete image response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1/{image_id}\n@desc Image details\n@required {image_id: str, account_id: str}\n@returns(200) Image details response\n@errors {4XX: Image details response failure}\n\n@endpoint PATCH /accounts/{account_id}/images/v1/{image_id}\n@desc Update image\n@required {image_id: str, account_id: str}\n@optional {creator: str # Can set the creator field with an internal user ID., metadata: map # User modifiable key-value store. Can be used for keeping references to another system of record for managing images. No change if not specified., requireSignedURLs: bool # Indicates whether the image can be accessed using only its UID. If set to `true`, a signed token needs to be generated with a signing key to view the image. Returns a new UID on a change. No change if not specified.}\n@returns(200) Update image response\n@errors {4XX: Update image response failure}\n\n@endpoint GET /accounts/{account_id}/images/v1/{image_id}/blob\n@desc Download image\n@required {image_id: str, account_id: str}\n@returns(200) Base image response. Returns uploaded image data.\n@errors {4XX: Base image response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2\n@desc List images V2\n@required {account_id: str}\n@optional {continuation_token: str, per_page: num=1000, sort_order: str(asc/desc)=desc, creator: str, meta.<field>[<operator>]: str # Optional metadata filter(s). Multiple filters can be combined with AND logic.  **Operators:** - `eq`, `eq:string`, `eq:number`, `eq:boolean` - Exact match - `gt`, `gt:number` - Greater than (number only) - `gte`, `gte:number` - Greater than or equal (number only) - `lt`, `lt:number` - Less than (number only) - `lte`, `lte:number` - Less than or equal (number only) - `in`, `in:string`, `in:number` - Match any value in pipe-separated list  **Examples:** - `meta.status[eq]=active` - `meta.priority[eq:number]=5` - `meta.enabled[eq:boolean]=true` - `meta.priority[gte:number]=1` - `meta.score[lt:number]=100` - `meta.region[in]=us-east|us-west|eu-west`  **Note:** Filter consistency is not validated. Contradictory filters (e.g., `meta.priority[eq:number]=5&meta.priority[lte:number]=3`) will return zero results.}\n@returns(200) List images response\n@errors {400: Bad request, 4XX: List images response failure}\n\n@endpoint POST /accounts/{account_id}/images/v2/direct_upload\n@desc Create authenticated direct upload URL V2\n@required {account_id: str}\n@returns(200) Create authenticated direct upload URL V2 response\n@errors {4XX: Create authenticated direct upload URL V2 response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/metadata/keys\n@desc List image metadata keys\n@required {account_id: str}\n@returns(200) Metadata key list response\n@errors {4XX: Metadata key list response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/sourcingkit/migrations\n@desc List sourcing kit migrations\n@required {account_id: str}\n@optional {offset: int=0, limit: int=25}\n@returns(200) List sourcing kit migrations response\n@errors {4XX: List sourcing kit migrations response failure}\n\n@endpoint POST /accounts/{account_id}/images/v2/sourcingkit/migrations\n@desc Create a sourcing kit migration\n@required {account_id: str, sourceId: str(uuid) # The identifier of the source to migrate from.}\n@optional {conflictBehaviour: str(skip/overwrite)=skip # How to handle objects that already exist at the destination., excludedContentTypes: [str] # Content types to skip during migration., pathPrefix: str # Prefix to prepend to image custom IDs., rootDirectory: str # Only import objects under this prefix in the source bucket.}\n@returns(200) Create sourcing kit migration response\n@errors {4XX: Create sourcing kit migration response failure}\n\n@endpoint DELETE /accounts/{account_id}/images/v2/sourcingkit/migrations/{migration_id}\n@desc Delete a sourcing kit migration\n@required {account_id: str, migration_id: str(uuid)}\n@returns(200) Delete sourcing kit migration response\n@errors {4XX: Delete sourcing kit migration response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/sourcingkit/migrations/{migration_id}\n@desc Get sourcing kit migration\n@required {account_id: str, migration_id: str(uuid)}\n@returns(200) Get sourcing kit migration response\n@errors {4XX: Get sourcing kit migration response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/sourcingkit/migrations/{migration_id}/lifecycle\n@desc Get migration progress\n@required {account_id: str, migration_id: str(uuid)}\n@returns(200) Migration progress response\n@errors {4XX: Migration progress response failure}\n\n@endpoint PATCH /accounts/{account_id}/images/v2/sourcingkit/migrations/{migration_id}/lifecycle/abort\n@desc Abort a migration\n@required {account_id: str, migration_id: str(uuid)}\n@returns(200) Abort migration response\n@errors {4XX: Abort migration response failure}\n\n@endpoint PATCH /accounts/{account_id}/images/v2/sourcingkit/migrations/{migration_id}/lifecycle/start\n@desc Start a migration\n@required {account_id: str, migration_id: str(uuid)}\n@returns(200) Start migration response\n@errors {4XX: Start migration response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/sourcingkit/migrations/{migration_id}/logs\n@desc List migration logs\n@required {account_id: str, migration_id: str(uuid)}\n@optional {offset: int=0, limit: int=25}\n@returns(200) List migration logs response\n@errors {4XX: List migration logs response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/sourcingkit/sources\n@desc List sourcing kit sources\n@required {account_id: str}\n@optional {offset: int=0, limit: int=25, name: str}\n@returns(200) List sourcing kit sources response\n@errors {4XX: List sourcing kit sources response failure}\n\n@endpoint POST /accounts/{account_id}/images/v2/sourcingkit/sources\n@desc Create a sourcing kit source\n@required {account_id: str, bucket: str # The name of the storage bucket., name: str # A human-readable name for the source., secret: map # Storage credentials for accessing the bucket. Shape depends on vendor., vendor: str(s3/r2) # The cloud storage vendor of the source bucket.}\n@optional {account: str # Account identifier for the bucket (required for R2 vendor).}\n@returns(200) Create sourcing kit source response\n@errors {4XX: Create sourcing kit source response failure}\n\n@endpoint POST /accounts/{account_id}/images/v2/sourcingkit/sources/connectivity-precheck\n@desc Precheck source connectivity\n@required {account_id: str, bucket: str # The name of the storage bucket., secret: map # Storage credentials for accessing the bucket., vendor: str(s3/r2) # The cloud storage vendor of the source bucket.}\n@optional {account: str # Account identifier for the bucket (required for R2 vendor)., region: str # The region hint for the bucket (S3 only).}\n@returns(200) Connectivity precheck response\n@errors {4XX: Connectivity precheck response failure}\n\n@endpoint DELETE /accounts/{account_id}/images/v2/sourcingkit/sources/{source_id}\n@desc Delete a sourcing kit source\n@required {account_id: str, source_id: str(uuid)}\n@returns(200) Delete sourcing kit source response\n@errors {4XX: Delete sourcing kit source response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/sourcingkit/sources/{source_id}\n@desc Get sourcing kit source\n@required {account_id: str, source_id: str(uuid)}\n@returns(200) Get sourcing kit source response\n@errors {4XX: Get sourcing kit source response failure}\n\n@endpoint PATCH /accounts/{account_id}/images/v2/sourcingkit/sources/{source_id}\n@desc Update a sourcing kit source\n@required {account_id: str, source_id: str(uuid), name: str # Updated name for the source.}\n@returns(200) Update sourcing kit source response\n@errors {4XX: Update sourcing kit source response failure}\n\n@endpoint GET /accounts/{account_id}/images/v2/sourcingkit/sources/{source_id}/connectivity\n@desc Get source connectivity status\n@required {account_id: str, source_id: str(uuid)}\n@returns(200) Source connectivity status response\n@errors {4XX: Source connectivity status response failure}\n\n@endpoint GET /accounts/{account_id}/infrastructure/targets\n@desc List all targets\n@required {account_id: str}\n@optional {hostname: str # Hostname of a target, hostname_contains: str # Partial match to the hostname of a target, virtual_network_id: str(uuid) # Private virtual network identifier of the target, ip_v4: str # IPv4 address of the target, ip_v6: str # IPv6 address of the target, created_before: str(date-time) # Date and time at which the target was created before (inclusive), created_after: str(date-time) # Date and time at which the target was created after (inclusive), modified_before: str(date-time) # Date and time at which the target was modified before (inclusive), modified_after: str(date-time) # Date and time at which the target was modified after (inclusive), ips: [str] # Filters for targets that have any of the following IP addresses. Specify `ips` multiple times in query parameter to build list of candidates., target_ids: [str(uuid)] # Filters for targets that have any of the following UUIDs. Specify `target_ids` multiple times in query parameter to build list of candidates., ip_like: str # Filters for targets whose IP addresses look like the specified string. Supports `*` as a wildcard character, ipv4_start: str # Defines an IPv4 filter range's starting value (inclusive). Requires `ipv4_end` to be specified as well., ipv4_end: str # Defines an IPv4 filter range's ending value (inclusive). Requires `ipv4_start` to be specified as well., ipv6_start: str # Defines an IPv6 filter range's starting value (inclusive). Requires `ipv6_end` to be specified as well., ipv6_end: str # Defines an IPv6 filter range's ending value (inclusive). Requires `ipv6_start` to be specified as well., tag: [str] # Filter by tag key:value pairs. Multiple `tag` params are AND'd. Format: `tag=key:value` (e.g., `tag=environment:production`). Key and value must both be non-empty; `tag=:value` and `tag=key:` return 400., page: int(int32)=1 # Current page in the response, per_page: int(int32)=1000 # Max amount of entries returned per page, order: str(hostname/created_at) # The field to sort by., direction: any # The sorting direction.}\n@returns(200) Successfully retrieved all targets in the account.\n@errors {4XX: Failed to retrieve all targets in the account.}\n\n@endpoint POST /accounts/{account_id}/infrastructure/targets\n@desc Create new target\n@required {account_id: str, hostname: str # A non-unique field that refers to a target. Case insensitive, maximum length of 255 characters, supports the use of special characters dash and period, does not support spaces, and must start and end with an alphanumeric character., ip: map{ipv4: map, ipv6: map} # The IPv4/IPv6 address that identifies where to reach a target}\n@optional {tags: map # Optional tags to associate with the target. Keys and values are user-defined strings.}\n@returns(200) Successfully created the target.\n@errors {4XX: Failed to create the target.}\n\n@endpoint DELETE /accounts/{account_id}/infrastructure/targets/batch\n@desc Delete targets (Deprecated)\n@required {account_id: str, target_ids: [str(uuid)] # List of target IDs to bulk delete}\n@returns(200) Successfully deleted the targets.\n@errors {4XX: Failed to delete the targets.}\n\n@endpoint PUT /accounts/{account_id}/infrastructure/targets/batch\n@desc Create new targets\n@required {account_id: str}\n@returns(200) Successfully created the targets.\n@errors {4XX: Failed to create the targets.}\n\n@endpoint POST /accounts/{account_id}/infrastructure/targets/batch_delete\n@desc Delete targets\n@required {account_id: str, target_ids: [str(uuid)] # List of target IDs to bulk delete}\n@returns(200) Successfully deleted the targets.\n@errors {4XX: Failed to delete the targets.}\n\n@endpoint POST /accounts/{account_id}/infrastructure/targets/batch_tags\n@desc Replace tags on existing targets\n@required {account_id: str, items: [map{tags!: map, target_id!: str(uuid)}]}\n@returns(200) Successfully replaced the targets' tags.\n@errors {4XX: Failed to replace the targets' tags.}\n\n@endpoint DELETE /accounts/{account_id}/infrastructure/targets/{target_id}\n@desc Delete target\n@required {account_id: str, target_id: str(uuid)}\n@returns(200) Successfully deleted the target.\n@errors {4XX: Failed to delete the target.}\n\n@endpoint GET /accounts/{account_id}/infrastructure/targets/{target_id}\n@desc Get target\n@required {account_id: str, target_id: str(uuid)}\n@returns(200) Successfully retrieved the target.\n@errors {4XX: Failed to retrieve the target.}\n\n@endpoint PUT /accounts/{account_id}/infrastructure/targets/{target_id}\n@desc Update target\n@required {account_id: str, target_id: str(uuid), hostname: str # A non-unique field that refers to a target. Case insensitive, maximum length of 255 characters, supports the use of special characters dash and period, does not support spaces, and must start and end with an alphanumeric character., ip: map{ipv4: map, ipv6: map} # The IPv4/IPv6 address that identifies where to reach a target}\n@optional {tags: map # Optional tags to associate with the target. Keys and values are user-defined strings.}\n@returns(200) Successfully updated the target.\n@errors {4XX: Failed to update the target.}\n\n@endpoint GET /accounts/{account_id}/intel/asn/{asn}\n@desc Get ASN Overview.\n@required {asn: int, account_id: str}\n@returns(200) Get ASN Overview response.\n@errors {4XX: Get ASN Overview response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/asn/{asn}/subnets\n@desc Get ASN Subnets\n@required {asn: int, account_id: str}\n@returns(200) {asn: int, count: num, ip_count_total: int, page: num, per_page: num, subnets: [str]} # Get ASN Subnets response.\n@errors {4XX: Get ASN Subnets response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/attack-surface-report/issue-types\n@desc Retrieves Security Center Issues Types\n@required {account_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/intel/attack-surface-report/issues\n@desc Retrieves Security Center Issues\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str], page: any=1, per_page: any=25}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/intel/attack-surface-report/issues/class\n@desc Retrieves Security Center Issue Counts by Class\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/intel/attack-surface-report/issues/severity\n@desc Retrieves Security Center Issue Counts by Severity\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/intel/attack-surface-report/issues/type\n@desc Retrieves Security Center Issue Counts by Type\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint PUT /accounts/{account_id}/intel/attack-surface-report/issues/{issue_id}/dismiss\n@desc Archives Security Center Insight\n@required {account_id: str, issue_id: str}\n@optional {dismiss: bool=true}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/intel/dns\n@desc Get Passive DNS by IP\n@required {account_id: str}\n@optional {start_end_params: map, ipv4: str, page: num, per_page: num}\n@returns(200) Get Passive DNS by IP response.\n@errors {4XX: Get Passive DNS by IP response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/domain\n@desc Get Domain Details\n@required {account_id: str}\n@optional {domain: str, skip_dns: bool # Skip DNS resolution lookups for faster response., skip_ranking: bool=false # Skip the domain ranking lookup for faster responses. Defaults to `false` (ranking is included). Set to `true` to opt out — primarily used by callers like Cloudflare Radar that need to avoid a circular dependency when building the domain details page. Note: the bulk endpoint (`/intel/domain/bulk`) uses opposite defaults — see `include_ranking` there.}\n@returns(200) Get Domain Details response.\n@errors {4XX: Get Domain Details response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/domain-history\n@desc Get Domain History\n@required {account_id: str}\n@optional {domain: str}\n@returns(200) Get Domain History response.\n@errors {4XX: Get Domain History response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/domain/bulk\n@desc Get Multiple Domain Details\n@required {account_id: str}\n@optional {domain: [str] # Accepts multiple values like `?domain=cloudflare.com&domain=example.com`., include_ranking: bool=false # Whether to include domain ranking data in the response. Defaults to `false` — ranking lookups are expensive at bulk scale and most callers do not need them. Set to `true` to opt in. This parameter replaces the deprecated `skip_ranking` (see below)., skip_ranking: bool # **Deprecated.** Previously controlled whether the ranking lookup was skipped (defaulted to `false`, meaning ranking ran). The endpoint's default behavior is being flipped — ranking is now opt-in via `include_ranking=true` — and this parameter will be silently ignored. Remove it from your callers and use `include_ranking` instead.}\n@returns(200) Get Multiple Domain Details response.\n@errors {4XX: Get Multiple Domain Details response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/indicator-feeds\n@desc Get indicator feeds owned by this account\n@required {account_id: str}\n@returns(200) Get indicator feeds response\n@errors {4XX: Get indicator feeds response failure}\n\n@endpoint POST /accounts/{account_id}/intel/indicator-feeds\n@desc Create new indicator feed\n@required {account_id: str}\n@optional {description: str # The description of the example test, name: str # The name of the indicator feed}\n@returns(200) Create indicator feed response\n@errors {4XX: Get indicator feeds failure response}\n\n@endpoint PUT /accounts/{account_id}/intel/indicator-feeds/permissions/add\n@desc Grant permission to indicator feed\n@required {account_id: str}\n@optional {account_tag: str # The Cloudflare account tag of the account to change permissions on, feed_id: int # The ID of the feed to add/remove permissions on}\n@returns(200) Get indicator feed metadata\n@errors {4XX: Get indicator feeds response failure}\n\n@endpoint PUT /accounts/{account_id}/intel/indicator-feeds/permissions/createProvider\n@desc Create indicator feed provider\n@required {account_id: str, account_id: int # The numeric account ID to create the provider for. Distinct from the path `account_id` parameter, which carries the account identifier string used for routing., name: str # The name of the provider}\n@returns(200) Create provider response\n@errors {4XX: Create provider response failure}\n\n@endpoint PUT /accounts/{account_id}/intel/indicator-feeds/permissions/remove\n@desc Revoke permission to indicator feed\n@required {account_id: str}\n@optional {account_tag: str # The Cloudflare account tag of the account to change permissions on, feed_id: int # The ID of the feed to add/remove permissions on}\n@returns(200) Get indicator feed metadata\n@errors {4XX: Get indicator feeds response failure}\n\n@endpoint GET /accounts/{account_id}/intel/indicator-feeds/permissions/view\n@desc List indicator feed permissions\n@required {account_id: str}\n@returns(200) Get indicator feed metadata\n@errors {4XX: Get indicator feeds response failure}\n\n@endpoint GET /accounts/{account_id}/intel/indicator-feeds/{feed_id}\n@desc Get indicator feed metadata\n@required {account_id: str, feed_id: int}\n@returns(200) Get indicator feed metadata\n@errors {4XX: Get indicator feeds response failure}\n\n@endpoint PUT /accounts/{account_id}/intel/indicator-feeds/{feed_id}\n@desc Update indicator feed metadata\n@required {account_id: str, feed_id: int}\n@optional {description: str # The new description of the feed, is_attributable: bool # The new is_attributable value of the feed, is_downloadable: bool # The new is_downloadable value of the feed, is_public: bool # The new is_public value of the feed, name: str # The new name of the feed}\n@returns(200) Get update public field response\n@errors {4XX: Get update public field response failure}\n\n@endpoint GET /accounts/{account_id}/intel/indicator-feeds/{feed_id}/data\n@desc Get indicator feed data\n@required {account_id: str, feed_id: int}\n@returns(200) Get indicator feed metadata\n@errors {4XX: Get indicator feeds response failure}\n\n@endpoint GET /accounts/{account_id}/intel/indicator-feeds/{feed_id}/download\n@desc Download indicator feed data\n@required {account_id: str, feed_id: int}\n@returns(200) Get indicator feed metadata\n@errors {4XX: Get indicator feeds response failure}\n\n@endpoint PUT /accounts/{account_id}/intel/indicator-feeds/{feed_id}/snapshot\n@desc Update indicator feed data\n@required {account_id: str, feed_id: int}\n@optional {Cf-Async-Upload: str # Set to the literal value `1` to enqueue the upload and receive a `202` response with a polling URL. Any other value uses the legacy synchronous response.}\n@returns(200) Get indicator feed metadata\n@returns(202) Upload accepted for asynchronous processing\n@errors {413: Decompressed upload exceeds the maximum allowed size. The server caps the decompressed body at a configured limit (default 6 GiB) as a gzip-bomb defence; this response is returned before any feed state changes. Resubmit a smaller (or non-pathologically-compressed) body., 4XX: Get indicator feeds response failure}\n\n@endpoint GET /accounts/{account_id}/intel/indicator-feeds/{feed_id}/uploads/{upload_id}\n@desc Get indicator feed upload status\n@required {account_id: str, feed_id: int, upload_id: int(int64)}\n@returns(200) Current upload status\n@errors {4XX: Upload status lookup failure}\n\n@endpoint GET /accounts/{account_id}/intel/ip\n@desc Get IP Overview\n@required {account_id: str}\n@optional {ipv4: str, ipv6: str}\n@returns(200) Get IP Overview response.\n@errors {4XX: Get IP Overview response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/ip-lists\n@desc Get Available IP Lists\n@required {account_id: str}\n@returns(200) Get Available IP Lists response.\n@errors {4XX: Get Available IP Lists response failure.}\n\n@endpoint POST /accounts/{account_id}/intel/miscategorization\n@desc Create Miscategorization\n@required {account_id: str}\n@optional {content_adds: [int] # Content category IDs to add., content_removes: [int] # Content category IDs to remove., indicator_type: str(domain/ipv4/ipv6/url), ip: str # Provide only if indicator_type is `ipv4` or `ipv6`., security_adds: [int] # Security category IDs to add., security_removes: [int] # Security category IDs to remove., url: str # Provide only if indicator_type is `domain` or `url`. Example if indicator_type is `domain`: `example.com`. Example if indicator_type is `url`: `https://example.com/news/`.}\n@returns(200) Create Miscategorization response.\n@errors {4XX: Create Miscategorization response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/sinkholes\n@desc List sinkholes owned by this account\n@required {account_id: str # The unique identifier for the Cloudflare account.}\n@returns(200) Successful response.\n@errors {4XX: Error response.}\n\n@endpoint POST /accounts/{account_id}/intel/sinkholes\n@desc Create a new sinkhole for your account\n@required {account_id: str # The unique identifier for the Cloudflare account., name: str # The name of the sinkhole.}\n@optional {r2_bucket: str # The name of the R2 bucket to store results. Required if you want to store large request bodies in R2., r2_id: str # The id of the R2 instance. Required if you want to store large request bodies in R2., r2_secret: str # The secret key for the R2 API token. Required if you want to store large request bodies in R2.}\n@returns(201) Sinkhole created.\n@errors {4XX: Error response.}\n\n@endpoint DELETE /accounts/{account_id}/intel/sinkholes/{sinkhole_id}\n@desc Delete a sinkhole\n@required {account_id: str # The unique identifier for the Cloudflare account., sinkhole_id: str # The unique identifier for the sinkhole.}\n@returns(200) Successful response.\n@errors {409: Conflict -- the sinkhole has active ingress rules that must be deleted first., 4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/intel/sinkholes/{sinkhole_id}\n@desc Get a sinkhole\n@required {account_id: str # The unique identifier for the Cloudflare account., sinkhole_id: str # The unique identifier for the sinkhole.}\n@returns(200) Successful response.\n@errors {4XX: Error response.}\n\n@endpoint PUT /accounts/{account_id}/intel/sinkholes/{sinkhole_id}\n@desc Update a sinkhole\n@required {account_id: str # The unique identifier for the Cloudflare account., sinkhole_id: str # The unique identifier for the sinkhole., name: str # The name of the sinkhole.}\n@optional {r2_bucket: str # The name of the R2 bucket to store results. Required if you want to store large request bodies in R2., r2_id: str # The id of the R2 instance. Required if you want to store large request bodies in R2., r2_secret: str # The secret key for the R2 API token. Required if you want to store large request bodies in R2.}\n@returns(200) Successful response.\n@errors {4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/intel/sinkholes/{sinkhole_id}/ingresses\n@desc List ingresses for a sinkhole\n@required {account_id: str # The unique identifier for the Cloudflare account., sinkhole_id: str # The unique identifier for the sinkhole.}\n@returns(200) Successful response.\n@errors {4XX: Error response.}\n\n@endpoint GET /accounts/{account_id}/intel/url\n@desc Get URL Intelligence\n@required {account_id: str, url: str # The URL to look up.}\n@returns(200) Get URL Intelligence response.\n@errors {4XX: Get URL Intelligence response failure.}\n\n@endpoint GET /accounts/{account_id}/intel/whois\n@desc Get WHOIS Record\n@required {account_id: str}\n@optional {domain: str}\n@returns(200) Get WHOIS Record response.\n@errors {4XX: Get WHOIS Record response failure.}\n\n@endpoint PATCH /accounts/{account_id}/invoices\n@desc Toggle PDF Invoices\n@required {account_id: str}\n@optional {toggle: bool # Whether to enable or disable PDF invoice generation.}\n@returns(200) Toggle PDF Invoices response\n@errors {4XX: Toggle PDF Invoices response failure}\n\n@endpoint GET /accounts/{account_id}/load_balancers\n@desc List Account Load Balancers\n@required {account_id: str}\n@returns(200) List Account Load Balancers response.\n@errors {4XX: List Account Load Balancers response failure.}\n\n@endpoint POST /accounts/{account_id}/load_balancers\n@desc Create Account Load Balancer\n@required {account_id: str}\n@returns(200) Create Account Load Balancer response.\n@errors {4XX: Create Account Load Balancer response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/monitor_groups\n@desc List Monitor Groups\n@required {account_id: str}\n@returns(200) List Monitor Groups response\n@errors {4XX: List Monitor Groups response failure}\n\n@endpoint POST /accounts/{account_id}/load_balancers/monitor_groups\n@desc Create Monitor Group\n@required {account_id: str, description: str # A short description of the monitor group, id: any, members: [map{created_at: str(date-time), enabled!: bool, monitor_id!: str, monitoring_only!: bool, must_be_healthy!: bool, updated_at: str(date-time)}] # List of monitors in this group}\n@optional {created_on: str(date-time) # The timestamp of when the monitor group was created, modified_on: str(date-time) # The timestamp of when the monitor group was last updated}\n@returns(200) Create Monitor Group response\n@errors {412: Precondition Failed - Referenced monitor does not exist, 4XX: Create Monitor Group response failure}\n\n@endpoint DELETE /accounts/{account_id}/load_balancers/monitor_groups/{monitor_group_id}\n@desc Delete Monitor Group\n@required {monitor_group_id: str, account_id: str}\n@returns(200) Delete Monitor Group response\n@errors {412: Precondition Failed - Monitor group is in use by one or more pools, 4XX: Delete Monitor Group response failure}\n\n@endpoint GET /accounts/{account_id}/load_balancers/monitor_groups/{monitor_group_id}\n@desc Monitor Group Details\n@required {monitor_group_id: str, account_id: str}\n@returns(200) Monitor Group Details response\n@errors {4XX: Monitor Group Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/load_balancers/monitor_groups/{monitor_group_id}\n@desc Patch Monitor Group\n@required {monitor_group_id: str, account_id: str, description: str # A short description of the monitor group, id: any, members: [map{created_at: str(date-time), enabled!: bool, monitor_id!: str, monitoring_only!: bool, must_be_healthy!: bool, updated_at: str(date-time)}] # List of monitors in this group}\n@optional {created_on: str(date-time) # The timestamp of when the monitor group was created, modified_on: str(date-time) # The timestamp of when the monitor group was last updated}\n@returns(200) Patch Monitor Group response\n@errors {412: Precondition Failed - Referenced monitor does not exist, 4XX: Patch Monitor Group response failure}\n\n@endpoint PUT /accounts/{account_id}/load_balancers/monitor_groups/{monitor_group_id}\n@desc Update Monitor Group\n@required {monitor_group_id: str, account_id: str, description: str # A short description of the monitor group, id: any, members: [map{created_at: str(date-time), enabled!: bool, monitor_id!: str, monitoring_only!: bool, must_be_healthy!: bool, updated_at: str(date-time)}] # List of monitors in this group}\n@optional {created_on: str(date-time) # The timestamp of when the monitor group was created, modified_on: str(date-time) # The timestamp of when the monitor group was last updated}\n@returns(200) Update Monitor Group response\n@errors {412: Precondition Failed - Referenced monitor does not exist, 4XX: Update Monitor Group response failure}\n\n@endpoint GET /accounts/{account_id}/load_balancers/monitor_groups/{monitor_group_id}/references\n@desc List Monitor Group References\n@required {monitor_group_id: str, account_id: str}\n@returns(200) List Monitor Group References response.\n@errors {4XX: List Monitor Group References response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/monitors\n@desc List Monitors\n@required {account_id: str}\n@returns(200) List Monitors response.\n@errors {4XX: List Monitors response failure.}\n\n@endpoint POST /accounts/{account_id}/load_balancers/monitors\n@desc Create Monitor\n@required {account_id: str}\n@returns(200) Create Monitor response.\n@errors {4XX: Create Monitor response failure.}\n\n@endpoint DELETE /accounts/{account_id}/load_balancers/monitors/{monitor_id}\n@desc Delete Monitor\n@required {monitor_id: str, account_id: str}\n@returns(200) Delete Monitor response.\n@errors {4XX: Delete Monitor response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/monitors/{monitor_id}\n@desc Monitor Details\n@required {monitor_id: str, account_id: str}\n@returns(200) Monitor Details response.\n@errors {4XX: Monitor Details response failure.}\n\n@endpoint PATCH /accounts/{account_id}/load_balancers/monitors/{monitor_id}\n@desc Patch Monitor\n@required {monitor_id: str, account_id: str}\n@returns(200) Patch Monitor response.\n@errors {4XX: Patch Monitor response failure.}\n\n@endpoint PUT /accounts/{account_id}/load_balancers/monitors/{monitor_id}\n@desc Update Monitor\n@required {monitor_id: str, account_id: str}\n@returns(200) Update Monitor response.\n@errors {4XX: Update Monitor response failure.}\n\n@endpoint POST /accounts/{account_id}/load_balancers/monitors/{monitor_id}/preview\n@desc Preview Monitor\n@required {monitor_id: str, account_id: str}\n@returns(200) Preview Monitor response.\n@errors {4XX: Preview Monitor response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/monitors/{monitor_id}/references\n@desc List Monitor References\n@required {monitor_id: str, account_id: str}\n@returns(200) List Monitor References response.\n@errors {4XX: List Monitor References response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/pools\n@desc List Pools\n@required {account_id: str}\n@optional {monitor: str}\n@returns(200) List Pools response.\n@errors {4XX: List Pools response failure.}\n\n@endpoint PATCH /accounts/{account_id}/load_balancers/pools\n@desc Patch Pools\n@required {account_id: str}\n@optional {notification_email: str # The email address to send health status notifications to. This field is now deprecated in favor of Cloudflare Notifications for Load Balancing, so only resetting this field with an empty string `\"\"` is accepted.}\n@returns(200) Patch Pools response.\n@errors {4XX: Patch Pools response failure.}\n\n@endpoint POST /accounts/{account_id}/load_balancers/pools\n@desc Create Pool\n@required {account_id: str, name: str # A short name (tag) for the pool. Only alphanumeric characters, hyphens, and underscores are allowed., origins: [map{address: str, disabled_at: str(date-time), enabled: bool, flatten_cname: bool, header: map, name: str, port: int, virtual_network_id: str, weight: num}] # The list of origins within this pool. Traffic directed at this pool is balanced across all currently healthy origins, provided the pool itself is healthy.}\n@optional {description: str= # A human-readable description of the pool., enabled: bool=true # Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any)., latitude: num # The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set., load_shedding: map{default_percent: num, default_policy: str, session_percent: num, session_policy: str} # Configures load shedding policies and percentages for the pool., longitude: num # The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set., minimum_origins: int=1 # The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool., monitor: str # The ID of the Monitor to use for checking the health of origins within this pool., monitor_group: str # The ID of the Monitor Group to use for checking the health of origins within this pool., notification_email: str= # This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list., notification_filter: map{origin: map, pool: map} # Filter pool and origin health notifications by resource type or health status. Use null to reset., origin_steering: map{policy: str} # Configures origin steering for the pool. Controls how origins are selected for new sessions and traffic without session affinity.}\n@returns(200) Create Pool response.\n@errors {4XX: Create Pool response failure.}\n\n@endpoint DELETE /accounts/{account_id}/load_balancers/pools/{pool_id}\n@desc Delete Pool\n@required {pool_id: str, account_id: str}\n@returns(200) Delete Pool response.\n@errors {4XX: Delete Pool response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/pools/{pool_id}\n@desc Pool Details\n@required {pool_id: str, account_id: str}\n@returns(200) Pool Details response.\n@errors {4XX: Pool Details response failure.}\n\n@endpoint PATCH /accounts/{account_id}/load_balancers/pools/{pool_id}\n@desc Patch Pool\n@required {pool_id: str, account_id: str}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means every Cloudflare data center., description: str= # A human-readable description of the pool., disabled_at: str(date-time) # This field shows up only if the pool is disabled. This field is set with the time the pool was disabled at., enabled: bool=true # Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any)., health_sources: [str] # A list of health sources, ordered from highest to lowest priority, used to evaluate individual origin health and overall pool health. The load balancer uses the first source that has data and falls back to the next. Currently accepted values are null or the exact array [\"regional\", \"global\"]; any other combination is rejected. Null (the default) behaves like [\"local\", \"global\"]. [\"regional\", \"global\"] makes each region steer on its own health, falling back to the global decision when a region has no fresh data. Setting regional requires at least one region in check_regions., latitude: num # The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set., load_shedding: map{default_percent: num, default_policy: str, session_percent: num, session_policy: str} # Configures load shedding policies and percentages for the pool., longitude: num # The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set., minimum_origins: int=1 # The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool., monitor: str # The ID of the Monitor to use for checking the health of origins within this pool., monitor_group: str # The ID of the Monitor Group to use for checking the health of origins within this pool., name: str # A short name (tag) for the pool. Only alphanumeric characters, hyphens, and underscores are allowed., notification_email: str= # This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list., notification_filter: map{origin: map, pool: map} # Filter pool and origin health notifications by resource type or health status. Use null to reset., origin_steering: map{policy: str} # Configures origin steering for the pool. Controls how origins are selected for new sessions and traffic without session affinity., origins: [map{address: str, disabled_at: str(date-time), enabled: bool, flatten_cname: bool, header: map, name: str, port: int, virtual_network_id: str, weight: num}] # The list of origins within this pool. Traffic directed at this pool is balanced across all currently healthy origins, provided the pool itself is healthy.}\n@returns(200) Patch Pool response.\n@errors {4XX: Patch Pool response failure.}\n\n@endpoint PUT /accounts/{account_id}/load_balancers/pools/{pool_id}\n@desc Update Pool\n@required {pool_id: str, account_id: str, name: str # A short name (tag) for the pool. Only alphanumeric characters, hyphens, and underscores are allowed., origins: [map{address: str, disabled_at: str(date-time), enabled: bool, flatten_cname: bool, header: map, name: str, port: int, virtual_network_id: str, weight: num}] # The list of origins within this pool. Traffic directed at this pool is balanced across all currently healthy origins, provided the pool itself is healthy.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means every Cloudflare data center., description: str= # A human-readable description of the pool., disabled_at: str(date-time) # This field shows up only if the pool is disabled. This field is set with the time the pool was disabled at., enabled: bool=true # Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any)., health_sources: [str] # A list of health sources, ordered from highest to lowest priority, used to evaluate individual origin health and overall pool health. The load balancer uses the first source that has data and falls back to the next. Currently accepted values are null or the exact array [\"regional\", \"global\"]; any other combination is rejected. Null (the default) behaves like [\"local\", \"global\"]. [\"regional\", \"global\"] makes each region steer on its own health, falling back to the global decision when a region has no fresh data. Setting regional requires at least one region in check_regions., latitude: num # The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set., load_shedding: map{default_percent: num, default_policy: str, session_percent: num, session_policy: str} # Configures load shedding policies and percentages for the pool., longitude: num # The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set., minimum_origins: int=1 # The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool., monitor: str # The ID of the Monitor to use for checking the health of origins within this pool., monitor_group: str # The ID of the Monitor Group to use for checking the health of origins within this pool., notification_email: str= # This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list., notification_filter: map{origin: map, pool: map} # Filter pool and origin health notifications by resource type or health status. Use null to reset., origin_steering: map{policy: str} # Configures origin steering for the pool. Controls how origins are selected for new sessions and traffic without session affinity.}\n@returns(200) Update Pool response.\n@errors {4XX: Update Pool response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/pools/{pool_id}/health\n@desc Pool Health Details\n@required {pool_id: str, account_id: str}\n@returns(200) Pool Health Details response.\n@errors {4XX: Pool Health Details response failure.}\n\n@endpoint POST /accounts/{account_id}/load_balancers/pools/{pool_id}/preview\n@desc Preview Pool\n@required {pool_id: str, account_id: str}\n@returns(200) Preview Pool response.\n@errors {4XX: Preview Pool response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/pools/{pool_id}/references\n@desc List Pool References\n@required {pool_id: str, account_id: str}\n@returns(200) List Pool References response.\n@errors {4XX: List Pool References response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/preview/{preview_id}\n@desc Preview Result\n@required {preview_id: str, account_id: str}\n@returns(200) Preview Result response.\n@errors {4XX: Preview Result response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/regions\n@desc List Regions\n@required {account_id: str}\n@optional {subdivision_code: str, subdivision_code_a2: str, country_code_a2: str}\n@returns(200) List Regions response.\n@errors {4XX: List Regions response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/regions/{region_id}\n@desc Get Region\n@required {region_id: str, account_id: str}\n@returns(200) Get Region response.\n@errors {4XX: Get Region response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/search\n@desc Search Resources\n@required {account_id: str}\n@optional {query: str=, references: str(/*/referral/referrer)=, page: num, per_page: num=25}\n@returns(200) Search Resources response.\n@errors {4XX: Search Resources response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/usage\n@desc List Load Balancer Usage\n@required {account_id: str}\n@returns(200) Load Balancer Usage response.\n@errors {4XX: Load Balancer Usage response failure.}\n\n@endpoint DELETE /accounts/{account_id}/load_balancers/{load_balancer_id}\n@desc Delete Account Load Balancer\n@required {account_id: str, load_balancer_id: str}\n@returns(200) Delete Account Load Balancer response.\n@errors {4XX: Delete Account Load Balancer response failure.}\n\n@endpoint GET /accounts/{account_id}/load_balancers/{load_balancer_id}\n@desc Account Load Balancer Details\n@required {account_id: str, load_balancer_id: str}\n@returns(200) Account Load Balancer Details response.\n@errors {4XX: Account Load Balancer Details response failure.}\n\n@endpoint PATCH /accounts/{account_id}/load_balancers/{load_balancer_id}\n@desc Patch Account Load Balancer\n@required {account_id: str, load_balancer_id: str}\n@returns(200) Patch Account Load Balancer response.\n@errors {4XX: Patch Account Load Balancer response failure.}\n\n@endpoint PUT /accounts/{account_id}/load_balancers/{load_balancer_id}\n@desc Update Account Load Balancer\n@required {account_id: str, load_balancer_id: str}\n@returns(200) Update Account Load Balancer response.\n@errors {4XX: Update Account Load Balancer response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/datasets/{dataset_id}/fields\n@desc List fields\n@required {dataset_id: str, account_id: str}\n@returns(200) List fields response.\n@errors {4XX: List fields response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/datasets/{dataset_id}/jobs\n@desc List Logpush jobs for a dataset\n@required {dataset_id: str, account_id: str}\n@returns(200) List Logpush jobs for a dataset response.\n@errors {4XX: List Logpush jobs for a dataset response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/jobs\n@desc List Logpush jobs\n@required {account_id: str}\n@returns(200) List Logpush jobs response.\n@errors {4XX: List Logpush jobs response failure.}\n\n@endpoint POST /accounts/{account_id}/logpush/jobs\n@desc Create Logpush job\n@required {account_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@optional {dataset: str(access_requests/account_abuse_protection_events/audit_logs/audit_logs_v2/biso_user_actions/casb_findings/device_posture_results/dex_application_tests/dex_device_state_events/dlp_forensic_copies/dns_firewall_logs/dns_logs/email_security_alerts/email_security_post_delivery_events/firewall_events/gateway_dns/gateway_http/gateway_network/http_requests/ipsec_logs/magic_bgp_logs/magic_ids_detections/mcp_portal_logs/mnm_flow_logs/nel_reports/network_analytics_logs/page_shield_events/sinkhole_http_logs/spectrum_events/ssh_logs/turnstile_events/warp_config_changes/warp_toggle_changes/websocket_analytics/workers_trace_events/zaraz_events/zero_trust_network_sessions)=http_requests # Name of the dataset. A list of supported datasets can be found on the [Developer Docs](https://developers.cloudflare.com/logs/reference/log-fields/)., enabled: bool=false # Flag that indicates if the job is enabled., filter: str # The filters to select the events to include and/or remove from your logs. For more information, refer to [Filters](https://developers.cloudflare.com/logs/reference/filters/)., filter_attack_traffic: bool=false # When true, excludes DDoS attack traffic from logs. This option is supported for the `http_requests`, `firewall_events`, and `network_analytics_logs` datasets., frequency: str(high/low)=high # This field is deprecated. Please use `max_upload_*` parameters instead. . The frequency at which Cloudflare sends batches of logs to your destination. Setting frequency to high sends your logs in larger quantities of smaller files. Setting frequency to low sends logs in smaller quantities of larger files., kind: str(/edge)= # The kind parameter (optional) is used to differentiate between Logpush and Edge Log Delivery jobs (when supported by the dataset)., logpull_options: str(uri-reference) # This field is deprecated. Use `output_options` instead. Configuration string. It specifies things like requested fields and timestamp formats. If migrating from the logpull api, copy the url (full url or just the query string) of your call here, and logpush will keep on making this call for you, setting start and end times appropriately., max_upload_bytes: int # The maximum uncompressed file size of a batch of logs. This setting value must be between `5 MB` and `1 GB`, or `0` to disable it. Note that you cannot set a minimum file size; this means that log files may be much smaller than this batch size., max_upload_interval_seconds: int # The maximum interval in seconds for log batches. This setting must be between 30 and 300 seconds (5 minutes), or `0` to disable it. Note that you cannot specify a minimum interval for log batches; this means that log files may be sent in shorter intervals than this., max_upload_records: int # The maximum number of log lines per batch. This setting must be between 1000 and 1,000,000 lines, or `0` to disable it. Note that you cannot specify a minimum number of log lines per batch; this means that log files may contain many fewer lines than this., name: str # Optional human readable job name. Not unique. Cloudflare suggests. that you set this to a meaningful string, like the domain name, to make it easier to identify your job., output_options: map{CVE-2021-44228: bool, batch_prefix: str, batch_suffix: str, field_delimiter: str, field_names: [str], merge_subrequests: bool, output_type: str, record_delimiter: str, record_prefix: str, record_suffix: str, record_template: str, sample_rate: num(float), timestamp_format: str} # The structured replacement for `logpull_options`. When including this field, the `logpull_option` field will be ignored., ownership_challenge: str # Ownership challenge token to prove destination ownership.}\n@returns(200) Create Logpush job response.\n@errors {4XX: Create Logpush job response failure.}\n@example_request {\"dataset\":\"gateway_dns\",\"destination_conf\":\"s3://mybucket/logs?region=us-west-2\",\"enabled\":false,\"filter\":\"{\\\"where\\\":{\\\"and\\\":[{\\\"key\\\":\\\"ClientRequestPath\\\",\\\"operator\\\":\\\"contains\\\",\\\"value\\\":\\\"/static\\\"},{\\\"key\\\":\\\"ClientRequestHost\\\",\\\"operator\\\":\\\"eq\\\",\\\"value\\\":\\\"example.com\\\"}]}}\",\"kind\":\"\",\"max_upload_bytes\":5000000,\"max_upload_interval_seconds\":30,\"max_upload_records\":1000,\"name\":\"example.com\",\"output_options\":{\"CVE-2021-44228\":false,\"batch_prefix\":\"\",\"batch_suffix\":\"\",\"field_delimiter\":\",\",\"field_names\":[\"Datetime\",\"DstIP\",\"SrcIP\"],\"output_type\":\"ndjson\",\"record_delimiter\":\"\",\"record_prefix\":\"{\",\"record_suffix\":\"}\\n\",\"sample_rate\":1,\"timestamp_format\":\"unixnano\"},\"ownership_challenge\":\"00000000000000000000\"}\n\n@endpoint DELETE /accounts/{account_id}/logpush/jobs/{job_id}\n@desc Delete Logpush job\n@required {job_id: int, account_id: str}\n@returns(200) Delete Logpush job response.\n@errors {4XX: Delete Logpush job response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/jobs/{job_id}\n@desc Get Logpush job details\n@required {job_id: int, account_id: str}\n@returns(200) Get Logpush job details response.\n@errors {4XX: Get Logpush job details response failure.}\n\n@endpoint PUT /accounts/{account_id}/logpush/jobs/{job_id}\n@desc Update Logpush job\n@required {job_id: int, account_id: str}\n@optional {destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included., enabled: bool=false # Flag that indicates if the job is enabled., filter: str # The filters to select the events to include and/or remove from your logs. For more information, refer to [Filters](https://developers.cloudflare.com/logs/reference/filters/)., filter_attack_traffic: bool=false # When true, excludes DDoS attack traffic from logs. This option is supported for the `http_requests`, `firewall_events`, and `network_analytics_logs` datasets., frequency: str(high/low)=high # This field is deprecated. Please use `max_upload_*` parameters instead. . The frequency at which Cloudflare sends batches of logs to your destination. Setting frequency to high sends your logs in larger quantities of smaller files. Setting frequency to low sends logs in smaller quantities of larger files., kind: str(/edge)= # The kind parameter (optional) is used to differentiate between Logpush and Edge Log Delivery jobs (when supported by the dataset)., logpull_options: str(uri-reference) # This field is deprecated. Use `output_options` instead. Configuration string. It specifies things like requested fields and timestamp formats. If migrating from the logpull api, copy the url (full url or just the query string) of your call here, and logpush will keep on making this call for you, setting start and end times appropriately., max_upload_bytes: int # The maximum uncompressed file size of a batch of logs. This setting value must be between `5 MB` and `1 GB`, or `0` to disable it. Note that you cannot set a minimum file size; this means that log files may be much smaller than this batch size., max_upload_interval_seconds: int # The maximum interval in seconds for log batches. This setting must be between 30 and 300 seconds (5 minutes), or `0` to disable it. Note that you cannot specify a minimum interval for log batches; this means that log files may be sent in shorter intervals than this., max_upload_records: int # The maximum number of log lines per batch. This setting must be between 1000 and 1,000,000 lines, or `0` to disable it. Note that you cannot specify a minimum number of log lines per batch; this means that log files may contain many fewer lines than this., name: str # Optional human readable job name. Not unique. Cloudflare suggests. that you set this to a meaningful string, like the domain name, to make it easier to identify your job., output_options: map{CVE-2021-44228: bool, batch_prefix: str, batch_suffix: str, field_delimiter: str, field_names: [str], merge_subrequests: bool, output_type: str, record_delimiter: str, record_prefix: str, record_suffix: str, record_template: str, sample_rate: num(float), timestamp_format: str} # The structured replacement for `logpull_options`. When including this field, the `logpull_option` field will be ignored., ownership_challenge: str # Ownership challenge token to prove destination ownership.}\n@returns(200) Update Logpush job response.\n@errors {4XX: Update Logpush job response failure.}\n@example_request {\"destination_conf\":\"s3://mybucket/logs?region=us-west-2\",\"enabled\":false,\"filter\":\"{\\\"where\\\":{\\\"and\\\":[{\\\"key\\\":\\\"ClientRequestPath\\\",\\\"operator\\\":\\\"contains\\\",\\\"value\\\":\\\"/static\\\"},{\\\"key\\\":\\\"ClientRequestHost\\\",\\\"operator\\\":\\\"eq\\\",\\\"value\\\":\\\"example.com\\\"}]}}\",\"kind\":\"\",\"max_upload_bytes\":5000000,\"max_upload_interval_seconds\":30,\"max_upload_records\":1000,\"output_options\":{\"CVE-2021-44228\":false,\"batch_prefix\":\"\",\"batch_suffix\":\"\",\"field_delimiter\":\",\",\"field_names\":[\"Datetime\",\"DstIP\",\"SrcIP\"],\"output_type\":\"ndjson\",\"record_delimiter\":\"\",\"record_prefix\":\"{\",\"record_suffix\":\"}\\n\",\"sample_rate\":1,\"timestamp_format\":\"unixnano\"},\"ownership_challenge\":\"00000000000000000000\"}\n\n@endpoint POST /accounts/{account_id}/logpush/ownership\n@desc Get ownership challenge\n@required {account_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@returns(200) Get ownership challenge response.\n@errors {4XX: Get ownership challenge response failure.}\n\n@endpoint POST /accounts/{account_id}/logpush/ownership/validate\n@desc Validate ownership challenge\n@required {account_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included., ownership_challenge: str # Ownership challenge token to prove destination ownership.}\n@returns(200) Validate ownership challenge response.\n@errors {4XX: Validate ownership challenge response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/transformers\n@desc List transformers\n@required {account_id: str}\n@returns(200) List transformers response.\n@errors {4XX: List transformers response failure.}\n\n@endpoint POST /accounts/{account_id}/logpush/transformers\n@desc Create transformer\n@required {account_id: str, code: str # The SQL transformer query. Maximum 32 KB. The query must contain a FROM clause referencing a valid logpush dataset., name: str # Customer-provided name for identification.}\n@optional {description: str # Optional customer-provided description.}\n@returns(201) Create transformer response.\n@errors {4XX: Create transformer response failure.}\n\n@endpoint POST /accounts/{account_id}/logpush/transformers/preview\n@desc Preview transformer\n@required {account_id: str, input: map # A single log record to transform (JSON object)., sql: str # The SQL transformer query. Maximum 32 KB. The query must contain a FROM clause referencing a valid logpush dataset.}\n@returns(200) Preview transformer response.\n@errors {4XX: Preview transformer response failure.}\n\n@endpoint DELETE /accounts/{account_id}/logpush/transformers/{transformer_id}\n@desc Delete transformer\n@required {account_id: str, transformer_id: int}\n@returns(200) Delete transformer response.\n@errors {409: Conflict — transformer is referenced by active logpush jobs., 4XX: Delete transformer response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/transformers/{transformer_id}\n@desc Get transformer\n@required {account_id: str, transformer_id: int}\n@returns(200) Get transformer response.\n@errors {4XX: Get transformer response failure.}\n\n@endpoint PUT /accounts/{account_id}/logpush/transformers/{transformer_id}\n@desc Update transformer\n@required {account_id: str, transformer_id: int, name: str # Customer-provided name for identification.}\n@optional {code: str # The SQL transformer query. Maximum 32 KB. The query must contain a FROM clause referencing a valid logpush dataset., description: str # Optional customer-provided description.}\n@returns(200) Update transformer response.\n@errors {4XX: Update transformer response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/transformers/{transformer_id}/content\n@desc Get transformer content\n@required {account_id: str, transformer_id: int}\n@optional {version_id: int(int64) # Specific version ID to retrieve. When omitted, the latest version is returned.}\n@returns(200) Get transformer content response.\n@errors {4XX: Get transformer content response failure.}\n\n@endpoint GET /accounts/{account_id}/logpush/transformers/{transformer_id}/versions\n@desc List transformer versions\n@required {account_id: str, transformer_id: int}\n@optional {limit: int=10 # Maximum number of versions to return.}\n@returns(200) List transformer versions response.\n@errors {4XX: List transformer versions response failure.}\n\n@endpoint POST /accounts/{account_id}/logpush/validate/destination\n@desc Validate destination\n@required {account_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@returns(200) Validate destination response.\n@errors {4XX: Validate destination response failure.}\n\n@endpoint POST /accounts/{account_id}/logpush/validate/destination/exists\n@desc Check destination exists\n@required {account_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@returns(200) Check destination exists response.\n@errors {4XX: Check destination exists response failure.}\n\n@endpoint POST /accounts/{account_id}/logpush/validate/origin\n@desc Validate origin\n@required {account_id: str, logpull_options: str(uri-reference) # This field is deprecated. Use `output_options` instead. Configuration string. It specifies things like requested fields and timestamp formats. If migrating from the logpull api, copy the url (full url or just the query string) of your call here, and logpush will keep on making this call for you, setting start and end times appropriately.}\n@returns(200) Validate origin response.\n@errors {4XX: Validate origin response failure.}\n\n@endpoint GET /accounts/{account_id}/logs/audit\n@desc Get account audit logs (Version 2)\n@required {account_id: str, since: str(date) # Limits the returned results to logs newer than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339., before: str(date) # Limits the returned results to logs older than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339.}\n@optional {account_name: [str], action_result: [str], action_type: [str], actor_context: [str], actor_email: [str(email)], actor_id: [str], actor_ip_address: [str], actor_token_id: [str], actor_token_name: [str], actor_type: [str], audit_log_id: [str], id: [str], raw_cf_ray_id: [str], raw_method: [str], raw_status_code: [int], raw_uri: [str], resource_id: [str], resource_product: [str], resource_type: [str], resource_scope: [str], product_category: [str], zone_id: [str], zone_name: [str], account_name.not: [str], action_result.not: [str], action_type.not: [str], actor_context.not: [str], actor_email.not: [str(email)], actor_id.not: [str], actor_ip_address.not: [str], actor_token_id.not: [str], actor_token_name.not: [str], actor_type.not: [str], audit_log_id.not: [str], id.not: [str], raw_cf_ray_id.not: [str], raw_method.not: [str], raw_status_code.not: [int], raw_uri.not: [str], resource_id.not: [str], resource_product.not: [str], resource_type.not: [str], resource_scope.not: [str], zone_id.not: [str], zone_name.not: [str], direction: str(desc/asc)=desc, limit: num=100, cursor: str}\n@returns(200) Get account audit logs successful response\n@errors {4XX: Get account audit logs failed response}\n\n@endpoint GET /accounts/{account_id}/logs/audit/product_categories\n@desc List account audit log product categories (Version 2)\n@required {account_id: str}\n@returns(200) {errors: [map], result: [map], success: bool} # List account audit log product categories successful response\n@errors {4XX: List account audit log product categories failed response}\n\n@endpoint GET /accounts/{account_id}/logs/audit/{id}/history\n@desc Get resource change history from an account audit log entry (Version 2)\n@required {account_id: str, id: str(uuid), action_time: str(date-time) # RFC3339 timestamp of the source audit log entry's action time. Used to narrow the source-entry lookup window. Provide the `action.time` value from the audit log identified by `id`., since: str(date) # Limits the returned results to logs newer than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339., before: str(date) # Limits the returned results to logs older than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339.}\n@optional {direction: str(desc/asc)=desc, limit: num=100, cursor: str}\n@returns(200) {errors: [map], result: [map], result_info: map{count: int, cursor: str, history_status: str}, success: bool} # Get account resource history successful response\n@errors {404: Audit log entry not found, 4XX: Get account resource history failed response}\n\n@endpoint DELETE /accounts/{account_id}/logs/control/cmb/config\n@desc Delete CMB config\n@required {account_id: str}\n@returns(200) Delete CMB config response\n@errors {4XX: Delete CMB config response failure}\n\n@endpoint GET /accounts/{account_id}/logs/control/cmb/config\n@desc Get CMB config\n@required {account_id: str}\n@returns(200) Get CMB config response\n@errors {4XX: Get CMB config response failure}\n\n@endpoint POST /accounts/{account_id}/logs/control/cmb/config\n@desc Update CMB config\n@required {account_id: str}\n@optional {allow_out_of_region_access: bool # Allow out of region access, regions: str # Name of the region.}\n@returns(200) Update CMB config response\n@errors {4XX: Update CMB config response failure}\n\n@endpoint GET /accounts/{account_id}/logs/explorer/datasets\n@desc List account datasets\n@required {account_id: str # Cloudflare account ID.}\n@optional {include_zones: bool # Set to true to include zone-scoped datasets belonging to this account.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # The datasets the account has configured.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint POST /accounts/{account_id}/logs/explorer/datasets\n@desc Create an account dataset\n@required {account_id: str # Cloudflare account ID., dataset: str # Dataset type name to create (e.g. `http_requests`).}\n@optional {fields: [map{enabled!: bool, name!: str}] # Controls which fields the API ingests. Defaults to all available fields when absent., filter: str # Optional Logpush filter predicate to restrict which events are ingested. If provided, replaces the dataset's default filter entirely. See [Logpush filters](https://developers.cloudflare.com/logs/reference/filters/) for syntax and examples.}\n@returns(201) {errors: [map], messages: [str], result: any, success: bool} # Dataset created successfully.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist., 409: A dataset of this type already exists for this account or zone.}\n\n@endpoint GET /accounts/{account_id}/logs/explorer/datasets/available\n@desc List available account datasets\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # List of dataset types available to create.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint DELETE /accounts/{account_id}/logs/explorer/datasets/{dataset_id}\n@desc Delete an account dataset\n@required {account_id: str # Cloudflare account ID., dataset_id: str # Log Explorer dataset ID.}\n@returns(202) {errors: [map], messages: [str], result: any, success: bool} # Dataset deletion accepted.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist., 409: A dataset of this type already exists for this account or zone.}\n\n@endpoint GET /accounts/{account_id}/logs/explorer/datasets/{dataset_id}\n@desc Get an account dataset\n@required {account_id: str # Cloudflare account ID., dataset_id: str # Log Explorer dataset ID.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Dataset details, including the fields active for ingestion.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint PUT /accounts/{account_id}/logs/explorer/datasets/{dataset_id}\n@desc Update an account dataset\n@required {account_id: str # Cloudflare account ID., dataset_id: str # Log Explorer dataset ID., enabled: bool # Whether to enable or disable log ingest for this dataset.}\n@optional {deletion_protection: bool # Set to `false` to allow deletion of this dataset., fields: [map{enabled!: bool, name!: str}] # Controls which fields the API ingests after the update. Defaults to all available fields when absent., filter: str # Optional Logpush filter predicate to restrict which events are ingested. If omitted, the existing filter is left unchanged. Set to an empty string (`\"\"`) to clear the filter. Otherwise, replaces the dataset's filter entirely. See [Logpush filters](https://developers.cloudflare.com/logs/reference/filters/) for syntax and examples.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # The dataset after the update.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint GET /accounts/{account_id}/logs/explorer/query/sql\n@desc Run a log query\n@required {account_id: str # Cloudflare account ID., query: str # SQL query to execute.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # Query results.\n@errors {400: Invalid request or unsupported query., 403: Missing permission to access the requested resource., 404: Requested resource not found., 507: Query exceeded internal memory or resource limits.}\n\n@endpoint POST /accounts/{account_id}/logs/explorer/query/sql\n@desc Run a log query\n@required {account_id: str # Cloudflare account ID.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # Query results.\n@errors {400: Invalid request or unsupported query., 403: Missing permission to access the requested resource., 404: Requested resource not found., 507: Query exceeded internal memory or resource limits.}\n\n@endpoint GET /accounts/{account_id}/logs/list\n@desc List log files\n@required {account_id: str # Cloudflare account ID (32-character hex string)., R2-Access-Key-Id: str, R2-Secret-Access-Key: str, start: str(date-time) # Start time in RFC3339 format., end: str(date-time) # End time in RFC3339 format., bucket: str # R2 bucket name.}\n@optional {prefix: str # R2 bucket prefix logs are stored under., limit: int # Maximum number of results to return.}\n@returns(200) {errors: [str], messages: [str], result: map{keys: [str]}, success: bool} # List of keys matching query.\n@errors {400: Error message detailing issue with request., 401: Authentication credentials are missing or invalid.}\n\n@endpoint GET /accounts/{account_id}/logs/retrieve\n@desc Retrieve logs\n@required {account_id: str # Cloudflare account ID (32-character hex string)., R2-Access-Key-Id: str, R2-Secret-Access-Key: str, start: str(date-time) # Start time in RFC3339 format., end: str(date-time) # End time in RFC3339 format., bucket: str # R2 bucket name.}\n@optional {prefix: str # R2 bucket prefix logs are stored under.}\n@returns(200) Newline-delimited JSON logs.\n@errors {400: Error message detailing issue with request., 401: Authentication credentials are missing or invalid.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules\n@desc Delete all DNS Protection rules.\n@required {account_id: str # The ID of the account.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete all DNS Protection rules response.\n@errors {4XX: Delete all DNS Protection rules failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules\n@desc List all DNS Protection rules.\n@required {account_id: str # The ID of the account.}\n@optional {page: int(int64) # The page number for pagination. Defaults to 1., per_page: int(int64) # The number of items per page. Must be between 10 and 1000. Defaults to 25., order: str # The field to order by. Defaults to 'prefix'., direction: str # The direction of ordering (ASC or DESC). Defaults to 'ASC'.}\n@returns(200) List all DNS Protection rules response.\n@errors {4XX: List all DNS Protection rules failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules\n@desc Create DNS Protection rule.\n@required {account_id: str # The ID of the account., burst_sensitivity: str # The burst sensitivity. Must be one of 'low', 'medium', 'high'., mode: str # The mode for DNS Protection. Must be one of 'enabled', 'disabled', 'monitoring'., name: str # The name of the DNS Protection rule. Value is relative to the 'scope' setting. For 'global' scope, name should be 'global'. For either the 'region' or 'datacenter' scope, name should be the actual name of the region or datacenter, e.g., 'wnam' or 'lax'., profile_sensitivity: str # The profile sensitivity. Recommended setting is 'low'. Must be one of 'low', 'medium', 'high', or 'very_high'., rate_sensitivity: str # The rate sensitivity. Must be one of 'low', 'medium', 'high'., scope: str # The scope for the DNS Protection rule. Must be one of 'global', 'region', or 'datacenter'.}\n@optional {block_any_queries: bool # Whether to block DNS ANY queries. Optional. Defaults to true.}\n@returns(200) Create DNS Protection rule response.\n@errors {4XX: Create DNS Protection rule failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}\n@desc Delete DNS Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the DNS Protection rule to delete.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete DNS Protection rule response.\n@errors {4XX: Delete DNS Protection rule failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}\n@desc Get DNS Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the DNS Protection rule.}\n@returns(200) Get DNS Protection rule response.\n@errors {4XX: Get DNS Protection rule failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}\n@desc Update DNS Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the DNS Protection rule to update.}\n@optional {block_any_queries: bool # The new value for whether to block DNS ANY queries. Optional., burst_sensitivity: str # The new burst sensitivity. Optional. Must be one of 'low', 'medium', 'high'., mode: str # The new mode for DNS Protection. Optional. Must be one of 'enabled', 'disabled', 'monitoring'., profile_sensitivity: str # The new profile sensitivity. Optional. Recommended setting is 'low'. Must be one of 'low', 'medium', 'high', or 'very_high'., rate_sensitivity: str # The new rate sensitivity. Optional. Must be one of 'low', 'medium', 'high'.}\n@returns(200) Update DNS Protection rule response.\n@errors {4XX: Update DNS Protection rule failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist\n@desc Delete all allowlist prefixes.\n@required {account_id: str # The ID of the account.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete all allowlist prefixes response.\n@errors {4XX: Delete all allowlist prefixes failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist\n@desc List all allowlist prefixes.\n@required {account_id: str # The ID of the account.}\n@optional {page: int(int64) # The page number for pagination. Defaults to 1., per_page: int(int64) # The number of items per page. Must be between 10 and 1000. Defaults to 25., order: str # The field to order by. Defaults to 'prefix'., direction: str # The direction of ordering (ASC or DESC). Defaults to 'ASC'.}\n@returns(200) List all allowlist prefixes response.\n@errors {4XX: List all allowlist prefixes failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist\n@desc Create allowlist prefix.\n@required {account_id: str # The ID of the account., comment: str # An comment describing the allowlist prefix., enabled: bool # Whether to enable the allowlist prefix into effect., prefix: str # The allowlist prefix to add in CIDR format.}\n@returns(200) Create allowlist prefix response.\n@errors {4XX: Create allowlist prefix failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{prefix_id}\n@desc Delete allowlist prefix.\n@required {account_id: str # The ID of the account., prefix_id: str # The UUID of the allowlist prefix to delete.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete allowlist prefix response.\n@errors {4XX: Delete allowlist prefix failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{prefix_id}\n@desc Get allowlist prefix.\n@required {account_id: str # The ID of the account., prefix_id: str # The UUID of the allowlist prefix.}\n@returns(200) Get allowlist prefix response.\n@errors {4XX: Get allowlist prefix failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{prefix_id}\n@desc Update allowlist prefix.\n@required {account_id: str # The ID of the account., prefix_id: str # The UUID of the allowlist prefix to update.}\n@optional {comment: str # A comment describing the allowlist prefix. Optional., enabled: bool # Whether to enable the allowlist prefix into effect. Optional.}\n@returns(200) Update allowlist prefix response.\n@errors {4XX: Update allowlist prefix failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes\n@desc Delete all prefixes.\n@required {account_id: str # The ID of the account.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete all prefixes response.\n@errors {4XX: Delete all prefixes failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes\n@desc List all prefixes.\n@required {account_id: str # The ID of the account.}\n@optional {page: int(int64) # The page number for pagination. Defaults to 1., per_page: int(int64) # The number of items per page. Must be between 10 and 1000. Defaults to 25., order: str # The field to order by. Defaults to 'prefix'., direction: str # The direction of ordering (ASC or DESC). Defaults to 'ASC'.}\n@returns(200) List all prefixes response.\n@errors {4XX: List all allowlist prefixes failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes\n@desc Create prefix.\n@required {account_id: str # The ID of the account., comment: str # A comment describing the prefix., excluded: bool # Whether to exclude the prefix from protection., prefix: str # The prefix to add in CIDR format.}\n@returns(200) Create prefix response.\n@errors {4XX: Create prefix failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/bulk\n@desc Create multiple prefixes.\n@required {account_id: str # The ID of the account.}\n@returns(200) Create multiple prefixes response.\n@errors {4XX: Create multiple prefixes failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}\n@desc Delete prefix.\n@required {account_id: str # The ID of the account., prefix_id: str # The UUID of the prefix to delete.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete prefix response.\n@errors {4XX: Delete prefix failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}\n@desc Get prefix.\n@required {account_id: str # The ID of the account., prefix_id: str # The UUID of the prefix.}\n@returns(200) Get prefix response.\n@errors {4XX: Get prefix failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}\n@desc Update prefix.\n@required {account_id: str # The ID of the account., prefix_id: str # The UUID of the prefix to update.}\n@optional {comment: str # A new comment for the prefix. Optional., excluded: bool # Whether to exclude the prefix from protection. Optional.}\n@returns(200) Update prefix response.\n@errors {4XX: Update prefix failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters\n@desc Delete all SYN Protection filters.\n@required {account_id: str # The ID of the account.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete all SYN Protection filters response.\n@errors {4XX: Delete all SYN Protection filters failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters\n@desc List all SYN Protection filters.\n@required {account_id: str # The ID of the account.}\n@optional {mode: str # The mode of the filters to get. Optional. Valid values: 'enabled', 'disabled', 'monitoring'., page: int(int64) # The page number for pagination. Defaults to 1., per_page: int(int64) # The number of items per page. Must be between 10 and 1000. Defaults to 25., order: str # The field to order by. Defaults to 'prefix'., direction: str # The direction of ordering (ASC or DESC). Defaults to 'ASC'.}\n@returns(200) List all SYN Protection filters response.\n@errors {4XX: List all SYN Protection filters failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters\n@desc Create a SYN Protection filter.\n@required {account_id: str # The ID of the account., expression: str # The filter expression., mode: str # The filter's mode. Must be one of 'enabled', 'disabled', 'monitoring'.}\n@returns(200) Create SYN Protection filter response.\n@errors {4XX: Create SYN Protection filter failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}\n@desc Delete SYN Protection filter.\n@required {account_id: str # The ID of the account., filter_id: str # The UUID of the filter to delete.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete SYN Protection filter response.\n@errors {4XX: Delete SYN Protection filter failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}\n@desc Get SYN Protection filter.\n@required {account_id: str # The ID of the account., filter_id: str # The UUID of the filter to retrieve.}\n@returns(200) Get SYN Protection filter response.\n@errors {4XX: Get SYN Protection filter failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}\n@desc Update SYN Protection filter.\n@required {account_id: str # The ID of the account., filter_id: str # The UUID of the filter to update.}\n@optional {expression: str # The new filter expression. Optional., mode: str # The new mode for the filter. Optional. Must be one of 'enabled', 'disabled', 'monitoring'.}\n@returns(200) Update SYN Protection filter response.\n@errors {4XX: Update SYN Protection filter failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules\n@desc Delete all SYN Protection rules.\n@required {account_id: str # The ID of the account.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete all SYN Protection rules response.\n@errors {4XX: Delete all SYN Protection rules failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules\n@desc List all SYN Protection rules.\n@required {account_id: str # The ID of the account.}\n@optional {page: int(int64) # The page number for pagination. Defaults to 1., per_page: int(int64) # The number of items per page. Must be between 10 and 1000. Defaults to 25., order: str # The field to order by. Defaults to 'prefix'., direction: str # The direction of ordering (ASC or DESC). Defaults to 'ASC'.}\n@returns(200) List all SYN Protection rules response.\n@errors {4XX: List all SYN Protection rules failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules\n@desc Create SYN Protection rule.\n@required {account_id: str # The ID of the account., burst_sensitivity: str # The burst sensitivity. Must be one of 'low', 'medium', 'high'., mode: str # The mode for SYN Protection. Must be one of 'enabled', 'disabled', 'monitoring'., name: str # The name of the SYN Protection rule. Value is relative to the 'scope' setting. For 'global' scope, name should be 'global'. For either the 'region' or 'datacenter' scope, name should be the actual name of the region or datacenter, e.g., 'wnam' or 'lax'., rate_sensitivity: str # The rate sensitivity. Must be one of 'low', 'medium', 'high'., scope: str # The scope for the SYN Protection rule. Must be one of 'global', 'region', or 'datacenter'.}\n@optional {mitigation_type: str # The type of mitigation. Must be one of 'challenge' or 'retransmit'. Optional. Defaults to 'challenge'.}\n@returns(200) Create SYN Protection rule response.\n@errors {4XX: Create SYN Protection rule failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}\n@desc Delete SYN Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the SYN Protection rule to delete.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete SYN Protection rule response.\n@errors {4XX: Delete SYN Protection rule failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}\n@desc Get SYN Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the SYN Protection rule.}\n@returns(200) Get SYN Protection rule response.\n@errors {4XX: Get SYN Protection rule failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}\n@desc Update SYN Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the SYN Protection rule to update.}\n@optional {burst_sensitivity: str # The new burst sensitivity. Optional. Must be one of 'low', 'medium', 'high'., mitigation_type: str # The new mitigation type. Optional. Must be one of 'challenge' or 'retransmit'., mode: str # The new mode for SYN Protection. Optional. Must be one of 'enabled', 'disabled', 'monitoring'., rate_sensitivity: str # The new rate sensitivity. Optional. Must be one of 'low', 'medium', 'high'.}\n@returns(200) Update SYN Protection rule response.\n@errors {4XX: Update SYN Protection rule failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters\n@desc Delete all TCP Flow Protection filters.\n@required {account_id: str # The ID of the account.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete all TCP Flow Protection filters response.\n@errors {4XX: Delete all TCP Flow Protection filters failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters\n@desc List all TCP Flow Protection filters.\n@required {account_id: str # The ID of the account.}\n@optional {mode: str # The mode of the filters to get. Optional. Valid values: 'enabled', 'disabled', 'monitoring'., page: int(int64) # The page number for pagination. Defaults to 1., per_page: int(int64) # The number of items per page. Must be between 10 and 1000. Defaults to 25., order: str # The field to order by. Defaults to 'prefix'., direction: str # The direction of ordering (ASC or DESC). Defaults to 'ASC'.}\n@returns(200) List all TCP Flow Protection filters response.\n@errors {4XX: List all TCP Flow Protection filters failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters\n@desc Create a TCP Flow Protection filter.\n@required {account_id: str # The ID of the account., expression: str # The filter expression., mode: str # The filter's mode. Must be one of 'enabled', 'disabled', 'monitoring'.}\n@returns(200) Create TCP Flow Protection filter response.\n@errors {4XX: Create TCP Flow Protection filter failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}\n@desc Delete TCP Flow Protection filter.\n@required {account_id: str # The ID of the account., filter_id: str # The UUID of the filter to delete.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete TCP Flow Protection filter response.\n@errors {4XX: Delete TCP Flow Protection filter failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}\n@desc Get TCP Flow Protection filter.\n@required {account_id: str # The ID of the account., filter_id: str # The UUID of the filter to retrieve.}\n@returns(200) Get TCP Flow Protection filter response.\n@errors {4XX: Get TCP Flow Protection filter failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}\n@desc Update TCP Flow Protection filter.\n@required {account_id: str # The ID of the account., filter_id: str # The UUID of the filter to update.}\n@optional {expression: str # The new filter expression. Optional., mode: str # The new mode for the filter. Optional. Must be one of 'enabled', 'disabled', 'monitoring'.}\n@returns(200) Update TCP Flow Protection filter response.\n@errors {4XX: Update TCP Flow Protection filter failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules\n@desc Delete all TCP Flow Protection rules.\n@required {account_id: str # The ID of the account.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete all TCP Flow Protection rules response.\n@errors {4XX: Delete all TCP Flow Protection rules failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules\n@desc List all TCP Flow Protection rules.\n@required {account_id: str # The ID of the account.}\n@optional {page: int(int64) # The page number for pagination. Defaults to 1., per_page: int(int64) # The number of items per page. Must be between 10 and 1000. Defaults to 25., order: str # The field to order by. Defaults to 'prefix'., direction: str # The direction of ordering (ASC or DESC). Defaults to 'ASC'.}\n@returns(200) List all TCP Flow Protection rules response.\n@errors {4XX: List all TCP Flow Protection rules failure.}\n\n@endpoint POST /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules\n@desc Create TCP Flow Protection rule.\n@required {account_id: str # The ID of the account., burst_sensitivity: str # The burst sensitivity. Must be one of 'low', 'medium', 'high'., mode: str # The mode for the TCP Flow Protection. Must be one of 'enabled', 'disabled', 'monitoring'., name: str # The name of the TCP Flow Protection rule. Value is relative to the 'scope' setting. For 'global' scope, name should be 'global'. For either the 'region' or 'datacenter' scope, name should be the actual name of the region or datacenter, e.g., 'wnam' or 'lax'., rate_sensitivity: str # The rate sensitivity. Must be one of 'low', 'medium', 'high'., scope: str # The scope for the TCP Flow Protection rule.}\n@returns(200) Create TCP Flow Protection rule response.\n@errors {4XX: Create TCP Flow Protection rule failure.}\n\n@endpoint DELETE /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}\n@desc Delete TCP Flow Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the TCP Flow Protection rule to delete.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete TCP Flow Protection rule response.\n@errors {4XX: Delete TCP Flow Protection rule failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}\n@desc Get TCP Flow Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the TCP Flow Protection rule.}\n@returns(200) Get TCP Flow Protection rule response.\n@errors {4XX: Get TCP Flow Protection rule failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}\n@desc Update TCP Flow Protection rule.\n@required {account_id: str # The ID of the account., rule_id: str # The UUID of the TCP Flow Protection rule to update.}\n@optional {burst_sensitivity: str # The new burst sensitivity. Optional. Must be one of 'low', 'medium', 'high'., mode: str # The new mode for TCP Flow Protection. Optional. Must be one of 'enabled', 'disabled', 'monitoring'., rate_sensitivity: str # The new rate sensitivity. Optional. Must be one of 'low', 'medium', 'high'.}\n@returns(200) Update TCP Flow Protection rule response.\n@errors {4XX: Update TCP Flow Protection rule failure.}\n\n@endpoint GET /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_protection_status\n@desc Get protection status.\n@required {account_id: str # The account ID.}\n@returns(200) Get protection status response.\n@errors {4XX: Get protection status failure.}\n\n@endpoint PATCH /accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_protection_status\n@desc Update protection status.\n@required {account_id: str # The account ID., enabled: bool # Enables or disables protection.}\n@returns(200) Update protection status response.\n@errors {4XX: Update protection status failure.}\n\n@endpoint GET /accounts/{account_id}/magic/apps\n@desc List Apps\n@required {account_id: str}\n@returns(200) List Apps response\n@errors {4XX: List Apps response failure}\n\n@endpoint POST /accounts/{account_id}/magic/apps\n@desc Create a new App\n@required {account_id: str, name: str # Display name for the app., type: str # Category of the app.}\n@optional {hostnames: [str] # FQDNs to associate with traffic decisions., ip_subnets: [any] # IPv4 CIDRs to associate with traffic decisions. (IPv6 CIDRs are currently unsupported), source_subnets: [any] # IPv4 CIDRs to associate with traffic decisions. (IPv6 CIDRs are currently unsupported)}\n@returns(201) Create Account App response\n@errors {4XX: Create Account App response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/apps/{account_app_id}\n@desc Delete Account App\n@required {account_id: str, account_app_id: str}\n@returns(200) Delete App response\n@errors {4XX: Delete App response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/apps/{account_app_id}\n@desc Update an App\n@required {account_id: str, account_app_id: str}\n@optional {hostnames: [str] # FQDNs to associate with traffic decisions., ip_subnets: [any] # IPv4 CIDRs to associate with traffic decisions. (IPv6 CIDRs are currently unsupported), name: str # Display name for the app., source_subnets: [any] # IPv4 CIDRs to associate with traffic decisions. (IPv6 CIDRs are currently unsupported), type: str # Category of the app.}\n@returns(200) Update App response\n@errors {4XX: Update App response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/apps/{account_app_id}\n@desc Update an App\n@required {account_id: str, account_app_id: str}\n@optional {hostnames: [str] # FQDNs to associate with traffic decisions., ip_subnets: [any] # IPv4 CIDRs to associate with traffic decisions. (IPv6 CIDRs are currently unsupported), name: str # Display name for the app., source_subnets: [any] # IPv4 CIDRs to associate with traffic decisions. (IPv6 CIDRs are currently unsupported), type: str # Category of the app.}\n@returns(200) Update App response\n@errors {4XX: Update App response failure}\n\n@endpoint GET /accounts/{account_id}/magic/bgp/filter_profiles\n@desc List BGP Filter Profiles\n@required {account_id: str}\n@returns(200) List BGP Filter Profiles response\n@errors {4XX: List BGP Filter Profiles response failure}\n\n@endpoint POST /accounts/{account_id}/magic/bgp/filter_profiles\n@desc Create BGP Filter Profile\n@required {account_id: str, match_action: str(allow/deny) # Action to take when a route matches one of the targets in this profile, name: str # Friendly name for the filter profile, targets: [str] # List of CIDR prefixes. Each entry may carry an optional suffix that specifies which prefix lengths to match relative to the prefix length N: '{X,Y}' matches prefix lengths in the inclusive range [X, Y] where N <= X <= Y <= max (max is 32 for IPv4, 128 for IPv6), '{X}' matches exactly length X (equivalent to {X,X}), '+' is shorthand for {N, max} (the prefix and all more-specific subnets, including at length N itself; valid even when N is the maximum length). Omit the suffix to match the prefix exactly at length N.}\n@optional {description: str= # Description of the filter profile}\n@returns(200) Create BGP Filter Profile response\n@errors {4XX: Create BGP Filter Profile response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/bgp/filter_profiles/{profile_id}\n@desc Delete BGP Filter Profile\n@required {account_id: str, profile_id: str}\n@returns(200) Delete BGP Filter Profile response\n@errors {4XX: Delete BGP Filter Profile response failure}\n\n@endpoint GET /accounts/{account_id}/magic/bgp/filter_profiles/{profile_id}\n@desc Get BGP Filter Profile\n@required {account_id: str, profile_id: str}\n@returns(200) Get BGP Filter Profile response\n@errors {4XX: Get BGP Filter Profile response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/bgp/filter_profiles/{profile_id}\n@desc Update BGP Filter Profile\n@required {account_id: str, profile_id: str}\n@optional {description: str # Description of the filter profile, match_action: str(allow/deny) # Action to take when a route matches one of the targets in this profile, name: str # Friendly name for the filter profile, targets: [str] # List of CIDR prefixes. Each entry may carry an optional suffix that specifies which prefix lengths to match relative to the prefix length N: '{X,Y}' matches prefix lengths in the inclusive range [X, Y] where N <= X <= Y <= max (max is 32 for IPv4, 128 for IPv6), '{X}' matches exactly length X (equivalent to {X,X}), '+' is shorthand for {N, max} (the prefix and all more-specific subnets, including at length N itself; valid even when N is the maximum length). Omit the suffix to match the prefix exactly at length N.}\n@returns(200) Update BGP Filter Profile response\n@errors {4XX: Update BGP Filter Profile response failure}\n\n@endpoint GET /accounts/{account_id}/magic/bgp/settings\n@desc Get BGP Settings\n@required {account_id: str}\n@returns(200) Get BGP Settings response\n@errors {4XX: Get BGP Settings response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/bgp/settings\n@desc Update BGP Settings\n@required {account_id: str}\n@optional {cloudflare_asn: int(uint32) # Route advertisements from Cloudflare to ramps in this account will use this ASN., redistribute: map{static:wan: bool} # Per-source toggles controlling which route sources are redistributed into BGP. Each property enables redistribution for one route source.}\n@returns(200) Update BGP Settings response\n@errors {4XX: Update BGP Settings response failure}\n\n@endpoint GET /accounts/{account_id}/magic/cf1_sites\n@desc List CF1 Sites\n@required {account_id: str}\n@returns(200) List CF1 Sites response\n@errors {4XX: List CF1 Sites response failure}\n\n@endpoint POST /accounts/{account_id}/magic/cf1_sites\n@desc Create CF1 Sites\n@required {account_id: str}\n@returns(200) Create CF1 Sites response\n@errors {4XX: Create CF1 Sites response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/cf1_sites/{cf1_site_id}\n@desc Delete CF1 Site\n@required {account_id: str, cf1_site_id: str}\n@returns(200) Delete CF1 Site response\n@errors {4XX: Delete CF1 Site response failure}\n\n@endpoint GET /accounts/{account_id}/magic/cf1_sites/{cf1_site_id}\n@desc Get CF1 Site\n@required {account_id: str, cf1_site_id: str}\n@returns(200) Get CF1 Site response\n@errors {4XX: Get CF1 Site response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/cf1_sites/{cf1_site_id}\n@desc Update CF1 Site\n@required {account_id: str, cf1_site_id: str}\n@optional {description: str # A human-provided description of the CF1 Site., location: map{lat: num(float), long: num(float), name: str}, name: str # A human-provided name describing the CF1 Site that should be unique within the account.}\n@returns(200) Update CF1 Site response\n@errors {4XX: Update CF1 Site response failure}\n\n@endpoint GET /accounts/{account_id}/magic/cf1_sites/{cf1_site_id}/ramps\n@desc List CF1 Site Ramps\n@required {account_id: str, cf1_site_id: str}\n@returns(200) List CF1 Site Ramps response\n@errors {4XX: List CF1 Site Ramps response failure}\n\n@endpoint POST /accounts/{account_id}/magic/cf1_sites/{cf1_site_id}/ramps\n@desc Create CF1 Site Ramps\n@required {account_id: str, cf1_site_id: str}\n@returns(200) Create CF1 Site Ramps response\n@errors {4XX: Create CF1 Site Ramps response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/cf1_sites/{cf1_site_id}/ramps/{ramp_id}\n@desc Delete CF1 Site Ramp\n@required {account_id: str, cf1_site_id: str, ramp_id: str}\n@returns(200) Delete CF1 Site Ramp response\n@errors {4XX: Delete CF1 Site Ramp response failure}\n\n@endpoint GET /accounts/{account_id}/magic/cf1_sites/{cf1_site_id}/ramps/{ramp_id}\n@desc Get CF1 Site Ramp\n@required {account_id: str, cf1_site_id: str, ramp_id: str}\n@returns(200) Get CF1 Site Ramp response\n@errors {4XX: Get CF1 Site Ramp response failure}\n\n@endpoint GET /accounts/{account_id}/magic/cf_interconnects\n@desc List interconnects\n@required {account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) List interconnects response\n@errors {4XX: List interconnects response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/cf_interconnects\n@desc Update multiple interconnects\n@required {account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false.}\n@returns(200) Update multiple interconnects response\n@errors {4XX: Update multiple interconnects response failure}\n\n@endpoint GET /accounts/{account_id}/magic/cf_interconnects/{cf_interconnect_id}\n@desc List interconnect Details\n@required {cf_interconnect_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) List interconnect Details response\n@errors {4XX: List interconnect Details response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/cf_interconnects/{cf_interconnect_id}\n@desc Update interconnect\n@required {cf_interconnect_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false., automatic_return_routing: bool=false # True if automatic stateful return routing should be enabled for a tunnel, false otherwise. Requires the `coupler_integration` account flag to be enabled; requests setting this to `true` without that flag will be rejected., bgp: map{as_no: int(int32), cloudflare_endpoint: str(ipv4), customer_asn: int(int32), customer_endpoint: str(ipv4), export_filter_id: str, extra_prefixes: [str(cidr)], import_filter_id: str, md5_key: str}, description: str # An optional description of the interconnect., gre: any, health_check: any, interface_address: str # The IPv4 interface address for the interconnect. For MPLS Interconnects, use a /30 or /31 prefix. For GRE Interconnects, a /30 or /31 prefix may be used. Version 1.5 interconnects require a /31 prefix and may also use a prefix from the account's authorized prefixes; otherwise, select the subnet from RFC 1918 or the approved link-local ranges., interface_address6: str # A 127 bit IPV6 prefix from within the virtual_subnet6 prefix space with the address being the first IP of the subnet and not same as the address of virtual_subnet6. Eg if virtual_subnet6 is 2606:54c1:7:0:a9fe:12d2::/127 , interface_address6 could be 2606:54c1:7:0:a9fe:12d2:1:200/127, mtu: int=1476 # The Maximum Transmission Unit (MTU) in bytes for the interconnect. The minimum value is 576., name: str # The name of the interconnect. The name cannot share a name with other tunnels.}\n@returns(200) Update interconnect response\n@errors {4XX: Update interconnect response failure}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/catalog-syncs\n@desc List Catalog Syncs\n@required {account_id: str}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/catalog-syncs\n@desc Create Catalog Sync\n@required {account_id: str, destination_type: str(NONE/ZERO_TRUST_LIST), name: str, update_mode: str(AUTO/MANUAL)}\n@optional {forwarded: str, description: str, policy: str}\n@returns(201) Created.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/catalog-syncs/prebuilt-policies\n@desc List Prebuilt Policies\n@required {account_id: str}\n@optional {destination_type: str # Specify type of destination, omit to return all.}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 500: Internal Server Error.}\n\n@endpoint DELETE /accounts/{account_id}/magic/cloud/catalog-syncs/{sync_id}\n@desc Delete Catalog Sync\n@required {account_id: str, sync_id: str(uuid)}\n@optional {delete_destination: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/catalog-syncs/{sync_id}\n@desc Read Catalog Sync\n@required {account_id: str, sync_id: str(uuid)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint PATCH /accounts/{account_id}/magic/cloud/catalog-syncs/{sync_id}\n@desc Patch Catalog Sync\n@required {account_id: str, sync_id: str(uuid)}\n@optional {description: str, name: str, policy: str, update_mode: str(AUTO/MANUAL)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint PUT /accounts/{account_id}/magic/cloud/catalog-syncs/{sync_id}\n@desc Update Catalog Sync\n@required {account_id: str, sync_id: str(uuid)}\n@optional {description: str, name: str, policy: str, update_mode: str(AUTO/MANUAL)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/catalog-syncs/{sync_id}/refresh\n@desc Run Catalog Sync\n@required {account_id: str, sync_id: str(uuid)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/onramps\n@desc List On-ramps\n@required {account_id: str}\n@optional {order_by: str # One of [\"updated_at\", \"id\", \"cloud_type\", \"name\"]., desc: bool, status: bool, vpcs: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/onramps\n@desc Create On-ramp\n@required {account_id: str, cloud_type: str(AWS/AZURE/GOOGLE), dynamic_routing: bool # Enables BGP routing. When enabling this feature, set both install_routes_in_cloud and install_routes_in_magic_wan to false., install_routes_in_cloud: bool, install_routes_in_magic_wan: bool, name: str, type: str(OnrampTypeSingle/OnrampTypeHub)}\n@optional {forwarded: str, adopted_hub_id: str(uuid), attached_hubs: [str(uuid)], attached_vpcs: [str(uuid)], cloud_asn: int(uint32) # Sets the cloud-side ASN. If unset or zero, the cloud's default ASN takes effect., description: str, hub_provider_id: str(uuid), manage_hub_to_hub_attachments: bool, manage_vpc_to_hub_attachments: bool, region: str, vpc: str(uuid)}\n@returns(201) Created.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/onramps/magic_wan_address_space\n@desc Read Magic WAN Address Space\n@required {account_id: str}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint PATCH /accounts/{account_id}/magic/cloud/onramps/magic_wan_address_space\n@desc Patch Magic WAN Address Space\n@required {account_id: str, prefixes: [str]}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint PUT /accounts/{account_id}/magic/cloud/onramps/magic_wan_address_space\n@desc Update Magic WAN Address Space\n@required {account_id: str, prefixes: [str]}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint DELETE /accounts/{account_id}/magic/cloud/onramps/{onramp_id}\n@desc Delete On-ramp\n@required {account_id: str, onramp_id: str(uuid)}\n@optional {destroy: bool, force: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/onramps/{onramp_id}\n@desc Read On-ramp\n@required {account_id: str, onramp_id: str(uuid)}\n@optional {status: bool, vpcs: bool, post_apply_resources: bool, planned_resources: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint PATCH /accounts/{account_id}/magic/cloud/onramps/{onramp_id}\n@desc Patch On-ramp\n@required {account_id: str, onramp_id: str(uuid)}\n@optional {attached_hubs: [str(uuid)], attached_vpcs: [str(uuid)], description: str, install_routes_in_cloud: bool, install_routes_in_magic_wan: bool, manage_hub_to_hub_attachments: bool, manage_vpc_to_hub_attachments: bool, name: str, vpc: str(uuid)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint PUT /accounts/{account_id}/magic/cloud/onramps/{onramp_id}\n@desc Update On-ramp\n@required {account_id: str, onramp_id: str(uuid)}\n@optional {attached_hubs: [str(uuid)], attached_vpcs: [str(uuid)], description: str, install_routes_in_cloud: bool, install_routes_in_magic_wan: bool, manage_hub_to_hub_attachments: bool, manage_vpc_to_hub_attachments: bool, name: str, vpc: str(uuid)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/onramps/{onramp_id}/apply\n@desc Apply On-ramp\n@required {account_id: str, onramp_id: str(uuid)}\n@returns(202) Accepted.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/onramps/{onramp_id}/export\n@desc Export as Terraform\n@required {account_id: str, onramp_id: str(uuid)}\n@returns(201) Exported file.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/onramps/{onramp_id}/plan\n@desc Plan On-ramp\n@required {account_id: str, onramp_id: str(uuid)}\n@returns(202) Accepted.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/providers\n@desc List Cloud Integrations\n@required {account_id: str}\n@optional {status: bool, order_by: str # One of [\"updated_at\", \"id\", \"cloud_type\", \"name\"]., desc: bool, cloudflare: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/providers\n@desc Create Cloud Integration\n@required {account_id: str, cloud_type: str(AWS/AZURE/GOOGLE/CLOUDFLARE), friendly_name: str}\n@optional {forwarded: str, description: str}\n@returns(201) Created.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/providers/discover\n@desc Run Discovery for All Integrations\n@required {account_id: str}\n@returns(202) Accepted.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 409: Conflict., 500: Internal Server Error.}\n\n@endpoint DELETE /accounts/{account_id}/magic/cloud/providers/{provider_id}\n@desc Delete Cloud Integration\n@required {account_id: str, provider_id: str(uuid)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/providers/{provider_id}\n@desc Read Cloud Integration\n@required {account_id: str, provider_id: str(uuid)}\n@optional {status: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint PATCH /accounts/{account_id}/magic/cloud/providers/{provider_id}\n@desc Patch Cloud Integration\n@required {account_id: str, provider_id: str(uuid)}\n@optional {aws_arn: str, azure_subscription_id: str, azure_tenant_id: str, description: str, friendly_name: str, gcp_project_id: str, gcp_service_account_email: str}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint PUT /accounts/{account_id}/magic/cloud/providers/{provider_id}\n@desc Update Cloud Integration\n@required {account_id: str, provider_id: str(uuid)}\n@optional {aws_arn: str, azure_subscription_id: str, azure_tenant_id: str, description: str, friendly_name: str, gcp_project_id: str, gcp_service_account_email: str}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/providers/{provider_id}/discover\n@desc Run Discovery\n@required {account_id: str, provider_id: str(uuid)}\n@optional {v2: bool}\n@returns(202) Accepted.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 409: Conflict., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/providers/{provider_id}/initial_setup\n@desc Get Cloud Integration Setup Config\n@required {account_id: str, provider_id: str(uuid)}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/resources\n@desc List Resources\n@required {account_id: str}\n@optional {provider_id: str, resource_type: [str], resource_id: [str(uuid)], region: str, resource_group: str, managed: bool, search: [str], order_by: str # One of [\"id\", \"resource_type\", \"region\"]., desc: bool, per_page: int, page: int, cloudflare: bool, v2: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/resources/export\n@desc Export Resources\n@required {account_id: str}\n@optional {provider_id: str, resource_type: [str], resource_id: [str(uuid)], region: str, resource_group: str, search: [str], order_by: str # One of [\"id\", \"resource_type\", \"region\"]., desc: bool, v2: bool}\n@returns(200) Exported file.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint POST /accounts/{account_id}/magic/cloud/resources/policy-preview\n@desc Preview Rego Query\n@required {account_id: str, policy: str}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 422: Unprocessable Entity., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/cloud/resources/{resource_id}\n@desc Read Resource\n@required {account_id: str, resource_id: str(uuid)}\n@optional {v2: bool}\n@returns(200) OK.\n@errors {400: Bad Request., 401: Invalid Credentials., 403: Forbidden., 404: Not Found., 500: Internal Server Error.}\n\n@endpoint GET /accounts/{account_id}/magic/connectors\n@desc List Connectors\n@required {account_id: str}\n@optional {device_type: str(MANAGED/LICENSED) # Filter connectors by device type.}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal Server Error}\n\n@endpoint POST /accounts/{account_id}/magic/connectors\n@desc Create Connector\n@required {account_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 500: Internal Server Error}\n\n@endpoint DELETE /accounts/{account_id}/magic/connectors/{connector_id}\n@desc Delete Connector\n@required {account_id: str, connector_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}\n@desc Get Connector\n@required {account_id: str, connector_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint PATCH /accounts/{account_id}/magic/connectors/{connector_id}\n@desc Edit Connector\n@required {account_id: str, connector_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint PUT /accounts/{account_id}/magic/connectors/{connector_id}\n@desc Update Connector\n@required {account_id: str, connector_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}/interrupts\n@desc List Interrupts\n@required {account_id: str, connector_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 500: Internal Server Error}\n\n@endpoint POST /accounts/{account_id}/magic/connectors/{connector_id}/interrupts\n@desc Create Interrupt\n@required {account_id: str, connector_id: str}\n@optional {reboot: map{purge: bool}, restart: map{purge: bool}, shutdown: map{purge: bool}}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}/telemetry/events\n@desc List Events\n@required {account_id: str, connector_id: str, from: num, to: num}\n@optional {limit: num, cursor: str, k: str # Filter by event kind}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 429: Too Many Requests, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}/telemetry/events/latest\n@desc Get latest Events\n@required {account_id: str, connector_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 429: Too Many Requests, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}/telemetry/events/{event_t}.{event_n}\n@desc Get Event\n@required {account_id: str, connector_id: str, event_t: num, event_n: num}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 429: Too Many Requests, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}/telemetry/snapshots\n@desc List Snapshots\n@required {account_id: str, connector_id: str, from: num, to: num}\n@optional {limit: num, cursor: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 429: Too Many Requests, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}/telemetry/snapshots/latest\n@desc Get latest Snapshots\n@required {account_id: str, connector_id: str}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 429: Too Many Requests, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/connectors/{connector_id}/telemetry/snapshots/{snapshot_t}\n@desc Get Snapshot\n@required {account_id: str, connector_id: str, snapshot_t: num}\n@returns(200) OK\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 429: Too Many Requests, 500: Internal Server Error}\n\n@endpoint GET /accounts/{account_id}/magic/gre_tunnels\n@desc List GRE tunnels\n@required {account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) List GRE tunnels response\n@errors {4XX: List GRE tunnels response failure}\n\n@endpoint POST /accounts/{account_id}/magic/gre_tunnels\n@desc Create a GRE tunnel\n@required {account_id: str, cloudflare_gre_endpoint: str # The IP address assigned to the Cloudflare side of the GRE tunnel., customer_gre_endpoint: str # The IP address assigned to the customer side of the GRE tunnel., interface_address: str # A 31-bit prefix (/31 in CIDR notation) supporting two hosts, one for each side of the tunnel. Select the subnet from the following private IP space: 10.0.0.0–10.255.255.255, 172.16.0.0–172.31.255.255, 192.168.0.0–192.168.255.255., name: str # The name of the tunnel. The name cannot contain spaces or special characters, must be 15 characters or less, and cannot share a name with another GRE tunnel.}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false., automatic_return_routing: bool=false # True if automatic stateful return routing should be enabled for a tunnel, false otherwise. Requires the `coupler_integration` account flag to be enabled; requests setting this to `true` without that flag will be rejected., bgp: map{customer_asn!: int(int32), export_filter_id: str, extra_prefixes: [str(cidr)], import_filter_id: str, md5_key: str}, description: str # An optional description of the GRE tunnel., health_check: any, interface_address6: str # A 127 bit IPV6 prefix from within the virtual_subnet6 prefix space with the address being the first IP of the subnet and not same as the address of virtual_subnet6. Eg if virtual_subnet6 is 2606:54c1:7:0:a9fe:12d2::/127 , interface_address6 could be 2606:54c1:7:0:a9fe:12d2:1:200/127, mtu: int=1476 # Maximum Transmission Unit (MTU) in bytes for the GRE tunnel. The minimum value is 576., ttl: int=64 # Time To Live (TTL) in number of hops of the GRE tunnel.}\n@returns(200) Create GRE tunnels response\n@errors {4XX: Create GRE tunnels response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/gre_tunnels\n@desc Update multiple GRE tunnels\n@required {account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false.}\n@returns(200) Update multiple GRE tunnels response\n@errors {4XX: Update multiple GRE tunnels response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/gre_tunnels/{gre_tunnel_id}\n@desc Delete GRE Tunnel\n@required {gre_tunnel_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) Delete GRE Tunnel response\n@errors {4XX: Delete GRE Tunnel response failure}\n\n@endpoint GET /accounts/{account_id}/magic/gre_tunnels/{gre_tunnel_id}\n@desc List GRE Tunnel Details\n@required {gre_tunnel_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) List GRE Tunnel Details response\n@errors {4XX: List GRE Tunnel Details response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/gre_tunnels/{gre_tunnel_id}\n@desc Update GRE Tunnel\n@required {gre_tunnel_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false.}\n@returns(200) Update GRE Tunnel response\n@errors {4XX: Update GRE Tunnel response failure}\n\n@endpoint GET /accounts/{account_id}/magic/ipsec_tunnels\n@desc List IPsec tunnels\n@required {account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) List IPsec tunnels response\n@errors {4XX: List IPsec tunnels response failure}\n\n@endpoint POST /accounts/{account_id}/magic/ipsec_tunnels\n@desc Create an IPsec tunnel\n@required {account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false.}\n@returns(200) Create IPsec tunnels response\n@errors {4XX: Create IPsec tunnels response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/ipsec_tunnels\n@desc Update multiple IPsec tunnels\n@required {account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false.}\n@returns(200) Update multiple IPsec tunnels response\n@errors {4XX: Update multiple IPsec tunnels response failure}\n\n@endpoint POST /accounts/{account_id}/magic/ipsec_tunnels/psk\n@desc Set Pre-Shared Keys (PSK) for IPsec tunnels\n@required {account_id: str, psks: [map{id!: any, psk!: str}] # List of tunnel ID and PSK pairs.}\n@optional {validate_only: bool # If `true`, only run validation without persisting changes.}\n@returns(200) Set Pre-Shared Keys (PSK) for IPsec tunnels response\n@errors {4XX: Set Pre-Shared Keys (PSK) for IPsec tunnels response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/ipsec_tunnels/{ipsec_tunnel_id}\n@desc Delete IPsec Tunnel\n@required {ipsec_tunnel_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) Delete IPsec Tunnel response\n@errors {4XX: Delete IPsec Tunnel response failure}\n\n@endpoint GET /accounts/{account_id}/magic/ipsec_tunnels/{ipsec_tunnel_id}\n@desc List IPsec tunnel details\n@required {ipsec_tunnel_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) List IPsec tunnel details response\n@errors {4XX: List IPsec tunnel details response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/ipsec_tunnels/{ipsec_tunnel_id}\n@desc Update IPsec Tunnel\n@required {ipsec_tunnel_id: str, account_id: str, cloudflare_endpoint: str # The IP address assigned to the Cloudflare side of the IPsec tunnel., interface_address: str # A 31-bit prefix (/31 in CIDR notation) supporting two hosts, one for each side of the tunnel. Select the subnet from the following private IP space: 10.0.0.0–10.255.255.255, 172.16.0.0–172.31.255.255, 192.168.0.0–192.168.255.255., name: str # The name of the IPsec tunnel. The name cannot share a name with other tunnels.}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the request and response bodies will be presented using the new object format. Defaults to false., automatic_return_routing: bool=false # True if automatic stateful return routing should be enabled for a tunnel, false otherwise. Requires the `coupler_integration` account flag to be enabled; requests setting this to `true` without that flag will be rejected., bgp: map{customer_asn!: int(int32), export_filter_id: str, extra_prefixes: [str(cidr)], import_filter_id: str, md5_key: str}, custom_remote_identities: map{fqdn_id: str}, customer_endpoint: str # The IP address assigned to the customer side of the IPsec tunnel. Not required, but must be set for proactive traceroutes to work., description: str # An optional description forthe IPsec tunnel., health_check: any, interface_address6: str # A 127 bit IPV6 prefix from within the virtual_subnet6 prefix space with the address being the first IP of the subnet and not same as the address of virtual_subnet6. Eg if virtual_subnet6 is 2606:54c1:7:0:a9fe:12d2::/127 , interface_address6 could be 2606:54c1:7:0:a9fe:12d2:1:200/127, psk: str # A randomly generated or provided string for use in the IPsec tunnel., replay_protection: bool=false # If `true`, then IPsec replay protection will be supported in the Cloudflare-to-customer direction.}\n@returns(200) Update IPsec Tunnel response\n@errors {4XX: Update IPsec Tunnel response failure}\n\n@endpoint POST /accounts/{account_id}/magic/ipsec_tunnels/{ipsec_tunnel_id}/psk_generate\n@desc Generate Pre-Shared Key (PSK) for IPsec tunnels\n@required {ipsec_tunnel_id: str, account_id: str}\n@returns(200) Generate Pre-Shared Key (PSK) for IPsec tunnels response\n@errors {4XX: Generate Pre-Shared Key (PSK) for IPsec tunnels response failure}\n\n@endpoint GET /accounts/{account_id}/magic/redundancy_groups\n@desc List Redundancy Groups\n@required {account_id: str}\n@returns(200) List Redundancy Groups response\n@errors {4XX: List Redundancy Groups response failure}\n\n@endpoint POST /accounts/{account_id}/magic/redundancy_groups\n@desc Create a Redundancy Group\n@required {account_id: str, name: str # Human-readable name for the redundancy group}\n@optional {description: str= # Optional description, members: [map{id!: str, type!: str}]= # Tunnels to add to the group}\n@returns(201) Create Redundancy Group response\n@errors {4XX: Create Redundancy Group response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/redundancy_groups/{redundancy_group_id}\n@desc Delete a Redundancy Group\n@required {account_id: str, redundancy_group_id: str}\n@returns(200) Delete Redundancy Group response\n@errors {4XX: Delete Redundancy Group response failure}\n\n@endpoint GET /accounts/{account_id}/magic/redundancy_groups/{redundancy_group_id}\n@desc Get Redundancy Group Details\n@required {account_id: str, redundancy_group_id: str}\n@returns(200) Get Redundancy Group response\n@errors {4XX: Get Redundancy Group response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/redundancy_groups/{redundancy_group_id}\n@desc Update a Redundancy Group\n@required {account_id: str, redundancy_group_id: str, name: str # Human-readable name for the redundancy group}\n@optional {description: str= # Optional description, members: [map{id!: str, type!: str}]= # Tunnels to add to the group}\n@returns(200) Update Redundancy Group response\n@errors {4XX: Update Redundancy Group response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/routes\n@desc Delete Many Routes\n@required {account_id: str, routes: [any]}\n@returns(200) Delete Many Routes response\n@errors {4XX: Delete Many Routes response failure}\n\n@endpoint GET /accounts/{account_id}/magic/routes\n@desc List Routes\n@required {account_id: str}\n@returns(200) List Routes response\n@errors {4XX: List Routes response failure}\n\n@endpoint POST /accounts/{account_id}/magic/routes\n@desc Create a Route\n@required {account_id: str, nexthop: str # The next-hop IP Address for the static route., prefix: str # IP Prefix in Classless Inter-Domain Routing format., priority: int # Priority of the static route.}\n@optional {description: str # An optional human provided description of the static route., scope: map{colo_names: [str], colo_regions: [str]} # Used only for ECMP routes., weight: int # Optional weight of the ECMP scope - if provided.}\n@returns(200) Create Routes response\n@errors {4XX: Create Routes response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/routes\n@desc Update Many Routes\n@required {account_id: str, routes: [any]}\n@returns(200) Update Many Routes response\n@errors {4XX: Update Many Routes response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/routes/{route_id}\n@desc Delete Route\n@required {route_id: str, account_id: str}\n@returns(200) Delete Route response\n@errors {4XX: Delete Route response failure}\n\n@endpoint GET /accounts/{account_id}/magic/routes/{route_id}\n@desc Route Details\n@required {route_id: str, account_id: str}\n@returns(200) Route Details response\n@errors {4XX: Route Details response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/routes/{route_id}\n@desc Update Route\n@required {route_id: str, account_id: str}\n@returns(200) Update Route response\n@errors {4XX: Update Route response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites\n@desc List Sites\n@required {account_id: str}\n@optional {connectorid: str}\n@returns(200) List Sites response\n@errors {4XX: List Sites response failure}\n\n@endpoint POST /accounts/{account_id}/magic/sites\n@desc Create a new Site\n@required {account_id: str, name: str # The name of the site.}\n@optional {connector_id: str # Magic Connector identifier tag., description: str, ha_mode: bool # Site high availability mode. If set to true, the site can have two connectors and runs in high availability mode., location: map{lat: str, lon: str} # Location of site in latitude and longitude., secondary_connector_id: str # Magic Connector identifier tag. Used when high availability mode is on.}\n@returns(200) Create Site response\n@errors {4XX: Create Site response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/sites/{site_id}\n@desc Delete Site\n@required {site_id: str, account_id: str}\n@returns(200) Delete Site response\n@errors {4XX: Delete Site response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}\n@desc Site Details\n@required {site_id: str, account_id: str}\n@optional {x-magic-new-hc-target: bool # If true, the health check target in the response body will be presented using the new object format. Defaults to false.}\n@returns(200) Site Details response\n@errors {4XX: Site Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/sites/{site_id}\n@desc Patch Site\n@required {site_id: str, account_id: str}\n@optional {connector_id: str # Magic Connector identifier tag., description: str, location: map{lat: str, lon: str} # Location of site in latitude and longitude., name: str # The name of the site., secondary_connector_id: str # Magic Connector identifier tag. Used when high availability mode is on.}\n@returns(200) Patch Site response\n@errors {4XX: Patch Site response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/sites/{site_id}\n@desc Update Site\n@required {site_id: str, account_id: str}\n@optional {connector_id: str # Magic Connector identifier tag., description: str, location: map{lat: str, lon: str} # Location of site in latitude and longitude., name: str # The name of the site., secondary_connector_id: str # Magic Connector identifier tag. Used when high availability mode is on.}\n@returns(200) Update Site response\n@errors {4XX: Update Site response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/acls\n@desc List Site ACLs\n@required {account_id: str, site_id: str}\n@returns(200) List Site ACLs response\n@errors {4XX: List Site ACLs response failure}\n\n@endpoint POST /accounts/{account_id}/magic/sites/{site_id}/acls\n@desc Create a new Site ACL\n@required {account_id: str, site_id: str, lan_1: map{lan_id!: str, lan_name: str, port_ranges: [str], ports: [int], subnets: [any]}, lan_2: map{lan_id!: str, lan_name: str, port_ranges: [str], ports: [int], subnets: [any]}, name: str # The name of the ACL.}\n@optional {description: str # Description for the ACL., forward_locally: bool # The desired forwarding action for this ACL policy. If set to \"false\", the policy will forward traffic to Cloudflare. If set to \"true\", the policy will forward traffic locally on the Magic Connector. If not included in request, will default to false., protocols: [str], unidirectional: bool # The desired traffic direction for this ACL policy. If set to \"false\", the policy will allow bidirectional traffic. If set to \"true\", the policy will only allow traffic in one direction. If not included in request, will default to false.}\n@returns(200) Create Site ACL response\n@errors {4XX: Create Site ACL response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/sites/{site_id}/acls/{acl_id}\n@desc Delete Site ACL\n@required {site_id: str, account_id: str, acl_id: str}\n@returns(200) Delete Site ACL response\n@errors {4XX: Delete Site ACL response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/acls/{acl_id}\n@desc Site ACL Details\n@required {site_id: str, account_id: str, acl_id: str}\n@returns(200) Site ACL Details response\n@errors {4XX: Site ACL Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/sites/{site_id}/acls/{acl_id}\n@desc Patch Site ACL\n@required {site_id: str, account_id: str, acl_id: str}\n@optional {description: str # Description for the ACL., forward_locally: bool # The desired forwarding action for this ACL policy. If set to \"false\", the policy will forward traffic to Cloudflare. If set to \"true\", the policy will forward traffic locally on the Magic Connector. If not included in request, will default to false., lan_1: map{lan_id!: str, lan_name: str, port_ranges: [str], ports: [int], subnets: [any]}, lan_2: map{lan_id!: str, lan_name: str, port_ranges: [str], ports: [int], subnets: [any]}, name: str # The name of the ACL., protocols: [str], unidirectional: bool # The desired traffic direction for this ACL policy. If set to \"false\", the policy will allow bidirectional traffic. If set to \"true\", the policy will only allow traffic in one direction. If not included in request, will default to false.}\n@returns(200) Patch Site ACL response\n@errors {4XX: Patch Site ACL response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/sites/{site_id}/acls/{acl_id}\n@desc Update Site ACL\n@required {site_id: str, account_id: str, acl_id: str}\n@optional {description: str # Description for the ACL., forward_locally: bool # The desired forwarding action for this ACL policy. If set to \"false\", the policy will forward traffic to Cloudflare. If set to \"true\", the policy will forward traffic locally on the Magic Connector. If not included in request, will default to false., lan_1: map{lan_id!: str, lan_name: str, port_ranges: [str], ports: [int], subnets: [any]}, lan_2: map{lan_id!: str, lan_name: str, port_ranges: [str], ports: [int], subnets: [any]}, name: str # The name of the ACL., protocols: [str], unidirectional: bool # The desired traffic direction for this ACL policy. If set to \"false\", the policy will allow bidirectional traffic. If set to \"true\", the policy will only allow traffic in one direction. If not included in request, will default to false.}\n@returns(200) Update Site ACL response\n@errors {4XX: Update Site ACL response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/app_configs\n@desc List App Configs\n@required {account_id: str, site_id: str}\n@returns(200) List App Configs response\n@errors {4XX: List App Configs response failure}\n\n@endpoint POST /accounts/{account_id}/magic/sites/{site_id}/app_configs\n@desc Create a new App Config\n@required {account_id: str, site_id: str}\n@returns(201) Create Site App Config response\n@errors {4XX: Create Site App Config response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/sites/{site_id}/app_configs/{app_config_id}\n@desc Delete App Config\n@required {account_id: str, site_id: str, app_config_id: str}\n@returns(200) Delete App Config response\n@errors {4XX: Delete App Config response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/sites/{site_id}/app_configs/{app_config_id}\n@desc Update an App Config\n@required {account_id: str, site_id: str, app_config_id: str}\n@optional {account_app_id: str # Magic account app ID., breakout: bool # Whether to breakout traffic to the app's endpoints directly. Null preserves default behavior., managed_app_id: str # Managed app ID., preferred_wans: [str] # WAN interfaces to prefer over default WANs, highest-priority first. Can only be specified for breakout rules (breakout must be true)., priority: int # Priority of traffic. 0 is default, anything greater is prioritized. (Currently only 0 and 1 are supported)}\n@returns(200) Update Site App Config response\n@errors {4XX: Update Site App Config response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/sites/{site_id}/app_configs/{app_config_id}\n@desc Update an App Config\n@required {account_id: str, site_id: str, app_config_id: str}\n@optional {account_app_id: str # Magic account app ID., breakout: bool # Whether to breakout traffic to the app's endpoints directly. Null preserves default behavior., managed_app_id: str # Managed app ID., preferred_wans: [str] # WAN interfaces to prefer over default WANs, highest-priority first. Can only be specified for breakout rules (breakout must be true)., priority: int # Priority of traffic. 0 is default, anything greater is prioritized. (Currently only 0 and 1 are supported)}\n@returns(200) Update Site App Config response\n@errors {4XX: Update Site App Config response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/lans\n@desc List Site LANs\n@required {account_id: str, site_id: str}\n@returns(200) List Site LANs response\n@errors {4XX: List Site LANs response failure}\n\n@endpoint POST /accounts/{account_id}/magic/sites/{site_id}/lans\n@desc Create a new Site LAN\n@required {account_id: str, site_id: str}\n@optional {bond_id: int, ha_link: bool # mark true to use this LAN for HA probing. only works for site with HA turned on. only one LAN can be set as the ha_link., is_breakout: bool # mark true to use this LAN for source-based breakout traffic, is_prioritized: bool # mark true to use this LAN for source-based prioritized traffic, name: str, nat: map{static_prefix: str}, physport: int, routed_subnets: [map{nat: map, next_hop!: str, prefix!: str}], static_addressing: map{address!: str, dhcp_relay: map, dhcp_server: map, secondary_address: str, virtual_address: str} # If the site is not configured in high availability mode, this configuration is optional (if omitted, use DHCP). However, if in high availability mode, static_address is required along with secondary and virtual address., vlan_tag: int # VLAN ID. Use zero for untagged.}\n@returns(200) Create Site LAN response\n@errors {4XX: Create Site LAN response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/sites/{site_id}/lans/{lan_id}\n@desc Delete Site LAN\n@required {site_id: str, account_id: str, lan_id: str}\n@returns(200) Delete Site LAN response\n@errors {4XX: Delete Site LAN response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/lans/{lan_id}\n@desc Site LAN Details\n@required {site_id: str, account_id: str, lan_id: str}\n@returns(200) Site LAN Details response\n@errors {4XX: Site LAN Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/sites/{site_id}/lans/{lan_id}\n@desc Patch Site LAN\n@required {site_id: str, account_id: str, lan_id: str}\n@optional {bond_id: int, is_breakout: bool # mark true to use this LAN for source-based breakout traffic, is_prioritized: bool # mark true to use this LAN for source-based prioritized traffic, name: str, nat: map{static_prefix: str}, physport: int, routed_subnets: [map{nat: map, next_hop!: str, prefix!: str}], static_addressing: map{address!: str, dhcp_relay: map, dhcp_server: map, secondary_address: str, virtual_address: str} # If the site is not configured in high availability mode, this configuration is optional (if omitted, use DHCP). However, if in high availability mode, static_address is required along with secondary and virtual address., vlan_tag: int # VLAN ID. Use zero for untagged.}\n@returns(200) Patch Site LAN response\n@errors {4XX: Patch Site LAN response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/sites/{site_id}/lans/{lan_id}\n@desc Update Site LAN\n@required {site_id: str, account_id: str, lan_id: str}\n@optional {bond_id: int, is_breakout: bool # mark true to use this LAN for source-based breakout traffic, is_prioritized: bool # mark true to use this LAN for source-based prioritized traffic, name: str, nat: map{static_prefix: str}, physport: int, routed_subnets: [map{nat: map, next_hop!: str, prefix!: str}], static_addressing: map{address!: str, dhcp_relay: map, dhcp_server: map, secondary_address: str, virtual_address: str} # If the site is not configured in high availability mode, this configuration is optional (if omitted, use DHCP). However, if in high availability mode, static_address is required along with secondary and virtual address., vlan_tag: int # VLAN ID. Use zero for untagged.}\n@returns(200) Update Site LAN response\n@errors {4XX: Update Site LAN response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/sites/{site_id}/netflow_config\n@desc Delete NetFlow Configuration\n@required {account_id: str, site_id: str}\n@returns(200) Delete NetFlow Configuration response\n@errors {4XX: Delete NetFlow Configuration response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/netflow_config\n@desc NetFlow Configuration Details\n@required {account_id: str, site_id: str}\n@returns(200) Get NetFlow Configuration response\n@errors {4XX: Get NetFlow Configuration response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/sites/{site_id}/netflow_config\n@desc Update NetFlow Configuration\n@required {account_id: str, site_id: str}\n@optional {active_timeout: int # Timeout in seconds for active flows., collector_ip: str # IPv4 address of the NetFlow collector., collector_port: int # UDP port of the NetFlow collector., inactive_timeout: int # Timeout in seconds for inactive flows., sampling_rate: int # Sampling rate for NetFlow records (1 = every packet).}\n@returns(200) Update NetFlow Configuration response\n@errors {4XX: Update NetFlow Configuration response failure}\n\n@endpoint POST /accounts/{account_id}/magic/sites/{site_id}/netflow_config\n@desc Create NetFlow Configuration\n@required {account_id: str, site_id: str}\n@optional {active_timeout: int # Timeout in seconds for active flows., collector_ip: str # IPv4 address of the NetFlow collector., collector_port: int # UDP port of the NetFlow collector., inactive_timeout: int # Timeout in seconds for inactive flows., sampling_rate: int # Sampling rate for NetFlow records (1 = every packet).}\n@returns(201) Create NetFlow Configuration response\n@errors {4XX: Create NetFlow Configuration response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/sites/{site_id}/netflow_config\n@desc Update NetFlow Configuration\n@required {account_id: str, site_id: str}\n@optional {active_timeout: int # Timeout in seconds for active flows., collector_ip: str # IPv4 address of the NetFlow collector., collector_port: int # UDP port of the NetFlow collector., inactive_timeout: int # Timeout in seconds for inactive flows., sampling_rate: int # Sampling rate for NetFlow records (1 = every packet).}\n@returns(200) Update NetFlow Configuration response\n@errors {4XX: Update NetFlow Configuration response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/wans\n@desc List Site WANs\n@required {account_id: str, site_id: str}\n@returns(200) List Site WANs response\n@errors {4XX: List Site WANs response failure}\n\n@endpoint POST /accounts/{account_id}/magic/sites/{site_id}/wans\n@desc Create a new Site WAN\n@required {account_id: str, site_id: str, physport: int}\n@optional {name: str, priority: int, static_addressing: map{address!: str, gateway_address!: str, secondary_address: str} # (optional) if omitted, use DHCP. Submit secondary_address when site is in high availability mode., vlan_tag: int # VLAN ID. Use zero for untagged.}\n@returns(200) Create Site WAN response\n@errors {4XX: Create Site WAN response failure}\n\n@endpoint DELETE /accounts/{account_id}/magic/sites/{site_id}/wans/{wan_id}\n@desc Delete Site WAN\n@required {site_id: str, account_id: str, wan_id: str}\n@returns(200) Delete Site WAN response\n@errors {4XX: Delete Site WAN response failure}\n\n@endpoint GET /accounts/{account_id}/magic/sites/{site_id}/wans/{wan_id}\n@desc Site WAN Details\n@required {site_id: str, account_id: str, wan_id: str}\n@returns(200) Site WAN Details response\n@errors {4XX: Site WAN Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/magic/sites/{site_id}/wans/{wan_id}\n@desc Patch Site WAN\n@required {site_id: str, account_id: str, wan_id: str}\n@optional {name: str, physport: int, priority: int, static_addressing: map{address!: str, gateway_address!: str, secondary_address: str} # (optional) if omitted, use DHCP. Submit secondary_address when site is in high availability mode., vlan_tag: int # VLAN ID. Use zero for untagged.}\n@returns(200) Patch Site WAN response\n@errors {4XX: Patch Site WAN response failure}\n\n@endpoint PUT /accounts/{account_id}/magic/sites/{site_id}/wans/{wan_id}\n@desc Update Site WAN\n@required {site_id: str, account_id: str, wan_id: str}\n@optional {name: str, physport: int, priority: int, static_addressing: map{address!: str, gateway_address!: str, secondary_address: str} # (optional) if omitted, use DHCP. Submit secondary_address when site is in high availability mode., vlan_tag: int # VLAN ID. Use zero for untagged.}\n@returns(200) Update Site WAN response\n@errors {4XX: Update Site WAN response failure}\n\n@endpoint GET /accounts/{account_id}/media/usage\n@desc Get account Media usage\n@required {account_id: str # Standard Cloudflare hex account identifier. The API gateway translates this to an internal numeric ID before forwarding to the backend service.}\n@optional {metrics: str # Comma-separated list of metrics to include in the response. Available metrics depend on the endpoint. Billing usage supports: streamMinutesViewed, rateLimitingRequestsAllowed, loadBalancingQueries, argoAcceleratedBytes, workersRequests, workersKVReads, imageResizingRequests, spectrumBytesTransferred, mediaUniqueTransformations. Stream/media usage supports: streamMinutesViewed., since: str(date-time) # Start of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to 6 hours before the current time., until: str(date-time) # End of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to the current time., time_delta: str(hour/day/week/month/quarter/year)=hour # Time unit to aggregate usage observations into. Data retention is approximately 18 months. The effective number of data points returned depends on the time range and granularity selected. For example, requesting hourly granularity over 18 months could produce up to ~13,000 data points; use the limit parameter to cap results and be aware that responses may be truncated., limit: int=100 # Maximum number of data points to return. The actual number of results depends on the interaction between the time range (since/until) and time_delta granularity. Results are truncated to this limit without error if the time range produces more data points than the limit allows., filters: str # Filter expressions to apply to the query. Format: field==value. Multiple filters can be combined.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Usage analytics response.\n@errors {400: Bad request - invalid parameters or query., 401: Authentication required., 403: Insufficient permissions to access this resource.}\n\n@endpoint GET /accounts/{account_id}/members\n@desc List Members\n@required {account_id: any}\n@optional {order: any(user.first_name/user.last_name/user.email/status), status: str(accepted/pending/rejected), page: num=1, per_page: num=20, direction: str(asc/desc)}\n@returns(200) List Members response\n@errors {4XX: List Members response failure}\n\n@endpoint POST /accounts/{account_id}/members\n@desc Add Member\n@required {account_id: any}\n@returns(200) Add Member response\n@errors {4XX: Add Member response failure}\n\n@endpoint DELETE /accounts/{account_id}/members/{member_id}\n@desc Remove Member\n@required {member_id: str, account_id: any}\n@returns(200) Remove Member response\n@errors {4XX: Remove Member response failure}\n\n@endpoint GET /accounts/{account_id}/members/{member_id}\n@desc Member Details\n@required {member_id: str, account_id: any}\n@returns(200) Member Details response\n@errors {4XX: Member Details response failure}\n\n@endpoint PUT /accounts/{account_id}/members/{member_id}\n@desc Update Member\n@required {member_id: str, account_id: any}\n@returns(200) Update Member response\n@errors {4XX: Update Member response failure}\n\n@endpoint DELETE /accounts/{account_id}/mnm/config\n@desc Delete account configuration\n@required {account_id: str}\n@returns(200) Delete account configuration response\n@errors {4XX: Delete account configuration response failure}\n\n@endpoint GET /accounts/{account_id}/mnm/config\n@desc List account configuration\n@required {account_id: str}\n@returns(200) List account configuration response\n@errors {4XX: List account configuration response failure}\n\n@endpoint PATCH /accounts/{account_id}/mnm/config\n@desc Update account configuration fields\n@required {account_id: str}\n@optional {default_sampling: num=1 # Fallback sampling rate of flow messages being sent in packets per second. This should match the packet sampling rate configured on the router., name: str # The account name., router_ips: [str], warp_devices: [map{id!: str, name!: str, router_ip!: str}]}\n@returns(200) Update account configuration fields response\n@errors {4XX: Update account configuration fields response failure}\n\n@endpoint POST /accounts/{account_id}/mnm/config\n@desc Create account configuration\n@required {account_id: str, default_sampling: num=1 # Fallback sampling rate of flow messages being sent in packets per second. This should match the packet sampling rate configured on the router., name: str # The account name.}\n@optional {router_ips: [str], warp_devices: [map{id!: str, name!: str, router_ip!: str}]}\n@returns(200) Create account configuration response\n@errors {4XX: Create account configuration response failure}\n\n@endpoint PUT /accounts/{account_id}/mnm/config\n@desc Update an entire account configuration\n@required {account_id: str, default_sampling: num=1 # Fallback sampling rate of flow messages being sent in packets per second. This should match the packet sampling rate configured on the router., name: str # The account name.}\n@optional {router_ips: [str], warp_devices: [map{id!: str, name!: str, router_ip!: str}]}\n@returns(200) Update an entire account configuration response\n@errors {4XX: Update an entire account configuration response failure}\n\n@endpoint GET /accounts/{account_id}/mnm/config/full\n@desc List rules and account configuration\n@required {account_id: str}\n@returns(200) List rules and account configuration response\n@errors {4XX: List rules and account configuration response failure}\n\n@endpoint GET /accounts/{account_id}/mnm/rules\n@desc List rules\n@required {account_id: str}\n@returns(200) List rules response\n@errors {4XX: List rules response failure}\n\n@endpoint POST /accounts/{account_id}/mnm/rules\n@desc Create rules\n@required {account_id: str, automatic_advertisement: bool # Toggle on if you would like Cloudflare to automatically advertise the IP Prefixes within the rule via Magic Transit when the rule is triggered. Only available for users of Magic Transit., name: str # The name of the rule. Must be unique. Supports characters A-Z, a-z, 0-9, underscore (_), dash (-), period (.), and tilde (~). You can’t have a space in the rule name. Max 256 characters., prefixes: [str], type: str(threshold/zscore/advanced_ddos) # MNM rule type.}\n@optional {bandwidth_threshold: num # The number of bits per second for the rule. When this value is exceeded for the set duration, an alert notification is sent. Minimum of 1 and no maximum., duration: str(1m/5m/10m/15m/20m/30m/45m/60m)=1m # The amount of time that the rule threshold must be exceeded to send an alert notification. The final value must be equivalent to one of the following 8 values [\"1m\",\"5m\",\"10m\",\"15m\",\"20m\",\"30m\",\"45m\",\"60m\"]., packet_threshold: num # The number of packets per second for the rule. When this value is exceeded for the set duration, an alert notification is sent. Minimum of 1 and no maximum., prefix_match: str(exact/subnet/supernet) # Prefix match type to be applied for a prefix auto advertisement when using an advanced_ddos rule., zscore_sensitivity: str(low/medium/high) # Level of sensitivity set for zscore rules., zscore_target: str(bits/packets) # Target of the zscore rule analysis.}\n@returns(200) Create rules response\n@errors {4XX: Create rules response failure}\n\n@endpoint PUT /accounts/{account_id}/mnm/rules\n@desc Update rules\n@required {account_id: str, automatic_advertisement: bool # Toggle on if you would like Cloudflare to automatically advertise the IP Prefixes within the rule via Magic Transit when the rule is triggered. Only available for users of Magic Transit., name: str # The name of the rule. Must be unique. Supports characters A-Z, a-z, 0-9, underscore (_), dash (-), period (.), and tilde (~). You can’t have a space in the rule name. Max 256 characters., prefixes: [str], type: str(threshold/zscore/advanced_ddos) # MNM rule type.}\n@optional {bandwidth_threshold: num # The number of bits per second for the rule. When this value is exceeded for the set duration, an alert notification is sent. Minimum of 1 and no maximum., duration: str(1m/5m/10m/15m/20m/30m/45m/60m)=1m # The amount of time that the rule threshold must be exceeded to send an alert notification. The final value must be equivalent to one of the following 8 values [\"1m\",\"5m\",\"10m\",\"15m\",\"20m\",\"30m\",\"45m\",\"60m\"]., packet_threshold: num # The number of packets per second for the rule. When this value is exceeded for the set duration, an alert notification is sent. Minimum of 1 and no maximum., prefix_match: str(exact/subnet/supernet) # Prefix match type to be applied for a prefix auto advertisement when using an advanced_ddos rule., zscore_sensitivity: str(low/medium/high) # Level of sensitivity set for zscore rules., zscore_target: str(bits/packets) # Target of the zscore rule analysis.}\n@returns(200) Update rules response\n@errors {4XX: Update rules response failure}\n\n@endpoint POST /accounts/{account_id}/mnm/rules/bulk\n@desc Create rules in bulk\n@required {account_id: str}\n@returns(200) Create rules in bulk response\n@errors {4XX: Create rules in bulk response failure}\n\n@endpoint PUT /accounts/{account_id}/mnm/rules/bulk\n@desc Update rules in bulk\n@required {account_id: str}\n@returns(200) Update rules in bulk response\n@errors {4XX: Update rules in bulk response failure}\n\n@endpoint DELETE /accounts/{account_id}/mnm/rules/{rule_id}\n@desc Delete rule\n@required {rule_id: str, account_id: str}\n@returns(200) Delete rule response\n@errors {4XX: Delete rule response failure}\n\n@endpoint GET /accounts/{account_id}/mnm/rules/{rule_id}\n@desc Get rule\n@required {rule_id: str, account_id: str}\n@returns(200) Get rule response\n@errors {4XX: Get rule response failure}\n\n@endpoint PATCH /accounts/{account_id}/mnm/rules/{rule_id}\n@desc Update rule\n@required {rule_id: str, account_id: str, automatic_advertisement: bool # Toggle on if you would like Cloudflare to automatically advertise the IP Prefixes within the rule via Magic Transit when the rule is triggered. Only available for users of Magic Transit., name: str # The name of the rule. Must be unique. Supports characters A-Z, a-z, 0-9, underscore (_), dash (-), period (.), and tilde (~). You can’t have a space in the rule name. Max 256 characters., prefixes: [str], type: str(threshold/zscore/advanced_ddos) # MNM rule type.}\n@optional {bandwidth_threshold: num # The number of bits per second for the rule. When this value is exceeded for the set duration, an alert notification is sent. Minimum of 1 and no maximum., duration: str(1m/5m/10m/15m/20m/30m/45m/60m)=1m # The amount of time that the rule threshold must be exceeded to send an alert notification. The final value must be equivalent to one of the following 8 values [\"1m\",\"5m\",\"10m\",\"15m\",\"20m\",\"30m\",\"45m\",\"60m\"]., packet_threshold: num # The number of packets per second for the rule. When this value is exceeded for the set duration, an alert notification is sent. Minimum of 1 and no maximum., prefix_match: str(exact/subnet/supernet) # Prefix match type to be applied for a prefix auto advertisement when using an advanced_ddos rule., zscore_sensitivity: str(low/medium/high) # Level of sensitivity set for zscore rules., zscore_target: str(bits/packets) # Target of the zscore rule analysis.}\n@returns(200) Update rule response\n@errors {4XX: Update rule response failure}\n\n@endpoint PATCH /accounts/{account_id}/mnm/rules/{rule_id}/advertisement\n@desc Update advertisement for rule\n@required {rule_id: str, account_id: str}\n@returns(200) Update advertisement for rule response\n@errors {4XX: Update advertisement for rule response failure}\n\n@endpoint POST /accounts/{account_id}/mnm/vpc-flows/token\n@desc Generate authentication token for VPC flow logs export.\n@required {account_id: str}\n@returns(200) Generate authentication token for VPC flow logs export response.\n@errors {4XX: Generate authentication token for VPC flow logs export failure.}\n\n@endpoint GET /accounts/{account_id}/moq/relays\n@desc List relays\n@required {account_id: str # Cloudflare account identifier.}\n@optional {created_before: str(date-time) # Cursor for pagination. Returns relays created strictly before this RFC 3339 timestamp (typically the `created` value of the first item on the current page, to fetch the previous page)., created_after: str(date-time) # Cursor for pagination. Returns relays created strictly after this RFC 3339 timestamp (typically the `created` value of the last item on the current page, to fetch the next page)., per_page: int=1000 # Maximum number of relays to return per page. Values above the maximum are clamped to it rather than rejected., asc: bool=false # Sort order by `created`. When true, results are returned oldest-first (ascending); otherwise newest-first (descending, the default).}\n@returns(200) Relay list retrieved successfully.\n@errors {400: Error 10005: Invalid cursor, pagination, or sort parameter., 500: Error 21006: Unexpected server error.}\n\n@endpoint POST /accounts/{account_id}/moq/relays\n@desc Create a relay\n@required {account_id: str # Cloudflare account identifier., name: str # Human-readable name for the relay.}\n@returns(201) Relay created successfully.\n@errors {400: Bad request. Possible errors: - 21002: Request body too small - 21004: Failed to decode body (invalid JSON) - 21011: Invalid relay name (must not be empty) - 21014: Config cannot be set on create (set it via PUT after the relay exists), 409: Error 21008: Relay limit exceeded for this account., 413: Error 21001: Request body too large., 500: Error 21006: Unexpected server error.}\n\n@endpoint DELETE /accounts/{account_id}/moq/relays/{relay_id}\n@desc Delete a relay\n@required {account_id: str # Cloudflare account identifier., relay_id: str # Relay unique identifier (32 hex characters).}\n@returns(200) Relay deleted successfully.\n@errors {400: Error 21003: Relay ID should be 32 hex characters., 404: Error 21007: Relay not found., 500: Error 21006: Unexpected server error.}\n\n@endpoint GET /accounts/{account_id}/moq/relays/{relay_id}\n@desc Get a relay\n@required {account_id: str # Cloudflare account identifier., relay_id: str # Relay unique identifier (32 hex characters).}\n@returns(200) Relay retrieved successfully.\n@errors {400: Error 21003: Relay ID should be 32 hex characters., 404: Error 21007: Relay not found., 500: Error 21006: Unexpected server error.}\n\n@endpoint PUT /accounts/{account_id}/moq/relays/{relay_id}\n@desc Update a relay\n@required {account_id: str # Cloudflare account identifier., relay_id: str # Relay unique identifier (32 hex characters).}\n@optional {config: map{upstreams: map}, name: str}\n@returns(200) Relay updated successfully.\n@errors {400: Bad request. Possible errors: 21003 (relay ID should be 32 hex characters), 21004 (failed to decode body, invalid JSON), 21011 (name must not be empty), 21013 (invalid upstream URL — must be an absolute moqt:// or https:// URL with a host)., 404: Error 21007: Relay not found., 500: Error 21006: Unexpected server error.}\n\n@endpoint GET /accounts/{account_id}/moq/relays/{relay_id}/tokens\n@desc List tokens\n@required {account_id: str # Cloudflare account identifier., relay_id: str # Relay unique identifier (32 hex characters).}\n@returns(200) Token metadata (no secrets).\n@errors {400: Error 21003: Relay ID should be 32 hex characters., 404: Error 21007: Relay not found., 500: Error 21006: Unexpected server error.}\n\n@endpoint POST /accounts/{account_id}/moq/relays/{relay_id}/tokens\n@desc Create a token\n@required {account_id: str # Cloudflare account identifier., relay_id: str # Relay unique identifier (32 hex characters)., operations: [str] # Non-empty subset of the V1 roles the token is allowed to perform. Signed into the token.}\n@optional {expires: str(date-time) # Optional expiry (RFC 3339). Defaults to 1 year from creation; rejected if more than 1 year in the future., label: str # Optional, customer-set label.}\n@returns(201) Token created. The secret is shown once.\n@errors {400: Bad request. Possible errors: 21003 (relay ID should be 32 hex characters), 21004 (failed to decode body, invalid JSON), 21010 (invalid operations), 21012 (expires more than 1 year out)., 404: Error 21007: Relay not found., 409: Error 21009: Token limit reached (a relay may hold at most 10 tokens)., 500: Error 21006: Unexpected server error.}\n\n@endpoint DELETE /accounts/{account_id}/moq/relays/{relay_id}/tokens/{jti}\n@desc Revoke a token\n@required {account_id: str # Cloudflare account identifier., relay_id: str # Relay unique identifier (32 hex characters)., jti: str # Token identifier (jti — 32 hex characters).}\n@returns(200) {errors: [map], messages: [map], success: bool} # Token revoked.\n@errors {400: Bad request. Possible errors: 21003 (relay ID should be 32 hex characters), invalid token id., 404: Error 21007: Relay not found., 500: Error 21006: Unexpected server error.}\n\n@endpoint POST /accounts/{account_id}/move\n@desc Move account\n@required {account_id: str, destination_organization_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{account_id: str, destination_organization_id: str, source_organization_id: str}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /accounts/{account_id}/mtls_certificates\n@desc List mTLS certificates\n@required {account_id: str}\n@optional {type: [str] # Filters results by certificate type. Multiple types can be comma-separated.}\n@returns(200) List mTLS certificates response.\n@errors {4XX: List mTLS certificates response failure.}\n\n@endpoint POST /accounts/{account_id}/mtls_certificates\n@desc Upload mTLS certificate\n@required {account_id: str, ca: bool # Indicates whether the certificate is a CA or leaf certificate., certificates: str # The uploaded root CA certificate.}\n@optional {name: str # Optional unique name for the certificate. Only used for human readability., private_key: str # The private key for the certificate. This field is only needed for specific use cases such as using a custom certificate with Zero Trust's block page.}\n@returns(200) Upload mTLS certificate response.\n@errors {4XX: Upload mTLS certificate response failure.}\n\n@endpoint DELETE /accounts/{account_id}/mtls_certificates/{mtls_certificate_id}\n@desc Delete mTLS certificate\n@required {mtls_certificate_id: str, account_id: str}\n@returns(200) Delete mTLS certificate response.\n@errors {4XX: Delete mTLS certificate response failure.}\n\n@endpoint GET /accounts/{account_id}/mtls_certificates/{mtls_certificate_id}\n@desc Get mTLS certificate\n@required {mtls_certificate_id: str, account_id: str}\n@returns(200) Get mTLS certificate response.\n@errors {4XX: Get mTLS certificate response failure.}\n\n@endpoint GET /accounts/{account_id}/mtls_certificates/{mtls_certificate_id}/associations\n@desc List mTLS certificate associations\n@required {mtls_certificate_id: str, account_id: str}\n@returns(200) List mTLS certificate associations response.\n@errors {4XX: List mTLS certificate associations response failure.}\n\n@endpoint GET /accounts/{account_id}/oauth_clients\n@desc List OAuth Clients\n@required {account_id: any}\n@returns(200) List OAuth Clients response\n@errors {4XX: List OAuth Clients response failure}\n\n@endpoint POST /accounts/{account_id}/oauth_clients\n@desc Create OAuth Client\n@required {account_id: any}\n@returns(200) Create OAuth Client response\n@errors {4XX: Create OAuth Client response failure}\n\n@endpoint DELETE /accounts/{account_id}/oauth_clients/{oauth_client_id}\n@desc Delete OAuth Client\n@required {account_id: any, oauth_client_id: str}\n@returns(200) Delete OAuth Client response\n@errors {4XX: Delete OAuth Client response failure}\n\n@endpoint GET /accounts/{account_id}/oauth_clients/{oauth_client_id}\n@desc OAuth Client Details\n@required {account_id: any, oauth_client_id: str}\n@returns(200) OAuth Client Details response\n@errors {4XX: OAuth Client Details response failure}\n\n@endpoint PATCH /accounts/{account_id}/oauth_clients/{oauth_client_id}\n@desc Update OAuth Client\n@required {account_id: any, oauth_client_id: str}\n@returns(200) Update OAuth Client response\n@errors {4XX: Update OAuth Client response failure}\n\n@endpoint DELETE /accounts/{account_id}/oauth_clients/{oauth_client_id}/rotate_secret\n@desc Delete Rotated OAuth Client Secret\n@required {account_id: any, oauth_client_id: str}\n@returns(200) Delete Rotated OAuth Client Secret response\n@errors {4XX: Delete Rotated OAuth Client Secret response failure}\n\n@endpoint POST /accounts/{account_id}/oauth_clients/{oauth_client_id}/rotate_secret\n@desc Rotate OAuth Client Secret\n@required {account_id: any, oauth_client_id: str}\n@returns(200) Rotate OAuth Client Secret response\n@errors {4XX: Rotate OAuth Client Secret response failure}\n\n@endpoint GET /accounts/{account_id}/one/applications\n@desc List applications\n@required {account_id: str # Cloudflare account identifier.}\n@optional {environment: str # Filter by supported environment (standard, fedramp)., page: int # A page number within the paginated result set., page_size: int # Number of results to return per page.}\n@returns(200) {errors: [map], messages: [str], result: [map], result_info: map{count: int, next: str(uri)?, page: int, per_page: int, previous: str(uri)?, total_count: int}, success: bool} # List of applications.\n@errors {400: Invalid request.}\n\n@endpoint GET /accounts/{account_id}/one/applications/{application_id}\n@desc Get application details\n@required {account_id: str # Cloudflare account identifier., application_id: str(ANTHROPIC/AWS/BITBUCKET/BOX/CONFLUENCE/DROPBOX/GITHUB/GOOGLE_CLOUD_PLATFORM/GOOGLE_WORKSPACE/JIRA/MICROSOFT_INTERNAL/OPENAI/SALESFORCE/SERVICENOW/SLACK) # Application/vendor identifier.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Application details.\n@errors {404: Application not found.}\n\n@endpoint GET /accounts/{account_id}/one/applications/{application_id}/auth-methods\n@desc Get auth methods\n@required {account_id: str # Cloudflare account identifier., application_id: str(ANTHROPIC/AWS/BITBUCKET/BOX/CONFLUENCE/DROPBOX/GITHUB/GOOGLE_CLOUD_PLATFORM/GOOGLE_WORKSPACE/JIRA/MICROSOFT_INTERNAL/OPENAI/SALESFORCE/SERVICENOW/SLACK) # Application/vendor identifier.}\n@optional {page: int # A page number within the paginated result set., page_size: int # Number of results to return per page.}\n@returns(200) {errors: [map], messages: [str], result: [map], result_info: map{count: int, next: str(uri)?, page: int, per_page: int, previous: str(uri)?, total_count: int}, success: bool} # Auth methods available for this application.\n@errors {404: Application not found.}\n\n@endpoint GET /accounts/{account_id}/one/applications/{application_id}/setup-flows\n@desc Get application setup flows\n@required {account_id: str # Cloudflare account identifier., application_id: str(ANTHROPIC/AWS/BITBUCKET/BOX/CONFLUENCE/DROPBOX/GITHUB/GOOGLE_CLOUD_PLATFORM/GOOGLE_WORKSPACE/JIRA/MICROSOFT_INTERNAL/OPENAI/SALESFORCE/SERVICENOW/SLACK) # Application/vendor identifier.}\n@optional {auth_method: str # Filter by auth method id. Get available ids from GET /v2/applications., environment: str(fedramp/standard) # Filter by environment., page: int # A page number within the paginated result set., page_size: int # Number of results to return per page.}\n@returns(200) {errors: [map], messages: [str], result: [map], result_info: map{count: int, next: str(uri)?, page: int, per_page: int, previous: str(uri)?, total_count: int}, success: bool} # List of setup flows.\n@errors {404: Application not found or no flows available.}\n\n@endpoint GET /accounts/{account_id}/one/integrations\n@desc List integrations\n@required {account_id: str # Cloudflare account identifier.}\n@optional {application: str # Filter by application/vendor (e.g., GOOGLE_WORKSPACE, MICROSOFT_INTERNAL)., direction: str(asc/desc) # Direction to order results., dlp_enabled: bool # Filter by DLP enabled status (true/false)., order: str(application/created/name/status) # Field to order results by., page: int # Page number within the paginated result set., page_size: int # Number of results per page., search: str # Search integrations by name or application., status: str(Healthy/Initializing/Offline/Unhealthy) # Filter by integration status., use_cases: str # Filter by enabled use cases (e.g., casb, ces). Matches integrations enrolled in any of the specified values. Can be specified multiple times.}\n@returns(200) {errors: [map], messages: [str], result: [map], result_info: map{count: int, next: str(uri)?, page: int, per_page: int, previous: str(uri)?, total_count: int}, success: bool} # List of integrations.\n@errors {400: Invalid request.}\n\n@endpoint POST /accounts/{account_id}/one/integrations\n@desc Create integration\n@required {account_id: str # Cloudflare account identifier., application: str(ANTHROPIC/AWS/BITBUCKET/BOX/CONFLUENCE/DROPBOX/GITHUB/GOOGLE_CLOUD_PLATFORM/GOOGLE_WORKSPACE/JIRA/MICROSOFT_INTERNAL/OPENAI/SALESFORCE/SERVICENOW/SLACK) # Vendor/application slug (e.g., GOOGLE_WORKSPACE).  * `ANTHROPIC` - ANTHROPIC * `AWS` - AWS * `BITBUCKET` - BITBUCKET * `BOX` - BOX * `CONFLUENCE` - CONFLUENCE * `DROPBOX` - DROPBOX * `GITHUB` - GITHUB * `GOOGLE_CLOUD_PLATFORM` - GOOGLE_CLOUD_PLATFORM * `GOOGLE_WORKSPACE` - GOOGLE_WORKSPACE * `JIRA` - JIRA * `MICROSOFT_INTERNAL` - MICROSOFT_INTERNAL * `OPENAI` - OPENAI * `SALESFORCE` - SALESFORCE * `SERVICENOW` - SERVICENOW * `SLACK` - SLACK, credentials: map # Credentials for the integration., name: str # Name of the integration.}\n@optional {auth_method: str # Authentication method slug (uses default if omitted)., dlp_profiles: [str(uuid)] # List of DLP profile IDs to associate., permissions: [str] # List of permission scopes (uses policy defaults if empty)., use_cases: [str] # List of use case or feature slugs to enroll (e.g., ['casb', 'ces', 'auto_remediation']).}\n@returns(201) {errors: [map], messages: [str], result: any, success: bool} # Integration created successfully.\n@errors {400: Invalid request.}\n@example_request {\"application\":\"GOOGLE_WORKSPACE\",\"auth_method\":\"service_account\",\"credentials\":{\"admin_email\":\"admin@corp.com\"},\"dlp_profiles\":[\"e91a2360-da51-4fdf-9711-bcdecd462614\"],\"name\":\"My Google Workspace\",\"permissions\":[\"https://www.googleapis.com/auth/drive.readonly\"],\"use_cases\":[\"casb\",\"ces\"]}\n\n@endpoint DELETE /accounts/{account_id}/one/integrations/{id}\n@desc Delete integration\n@required {account_id: str # Cloudflare account identifier., id: str # Integration ID.}\n@returns(200) Integration deleted successfully.\n@errors {400: Invalid request.}\n\n@endpoint GET /accounts/{account_id}/one/integrations/{id}\n@desc Get integration details\n@required {account_id: str # Cloudflare account identifier., id: str # Integration ID.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Integration details.\n@errors {404: Integration not found.}\n\n@endpoint PATCH /accounts/{account_id}/one/integrations/{id}\n@desc Update integration\n@required {account_id: str # Cloudflare account identifier., id: str # Integration ID.}\n@optional {credentials: map # Partial credential fields to merge with existing., dlp_profiles: [str(uuid)] # List of DLP profile IDs to associate with the integration., name: str # Name of the integration., permissions: [str] # List of permission scopes granted to the integration., use_cases: [str] # List of use case or feature slugs to enroll (e.g., ['casb', 'ces', 'auto_remediation']).}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Integration updated successfully.\n@errors {400: Invalid request.}\n@example_request {\"credentials\":{\"access_token\":\"new_access_token\",\"refresh_token\":\"new_refresh_token\"}}\n\n@endpoint POST /accounts/{account_id}/one/integrations/{id}/pause\n@desc Pause integration\n@required {account_id: str # Cloudflare account identifier., id: str # Integration ID.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Integration paused successfully.\n@errors {400: Invalid request.}\n\n@endpoint POST /accounts/{account_id}/one/integrations/{id}/resume\n@desc Resume integration\n@required {account_id: str # Cloudflare account identifier., id: str # Integration ID.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Integration resumed successfully.\n@errors {400: Invalid request.}\n\n@endpoint GET /accounts/{account_id}/organizations\n@desc List account organizations\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /accounts/{account_id}/pages/projects\n@desc Get projects\n@required {account_id: str}\n@optional {page: int, per_page: int}\n@returns(200) Get projects response.\n@errors {4XX: Get projects response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects\n@desc Create project\n@required {account_id: str, name: str # Name of the project., production_branch: str # Production branch of the project. Used to identify production deployments.}\n@optional {build_config: map{build_caching: bool, build_command: str, destination_dir: str, root_dir: str, web_analytics_tag: str, web_analytics_token: str} # Configs for the project build process., deployment_configs: map{preview: any, production: any} # Configs for deployments in a project., source: map{config!: map, type!: str} # Configs for the project source control.}\n@returns(200) Create project response.\n@errors {4XX: Create project response failure.}\n\n@endpoint DELETE /accounts/{account_id}/pages/projects/{project_name}\n@desc Delete project\n@required {project_name: str, account_id: str}\n@returns(200) Delete project response.\n@errors {4XX: Delete project response failure.}\n\n@endpoint GET /accounts/{account_id}/pages/projects/{project_name}\n@desc Get project\n@required {project_name: str, account_id: str}\n@returns(200) Get project response.\n@errors {4XX: Get project response failure.}\n\n@endpoint PATCH /accounts/{account_id}/pages/projects/{project_name}\n@desc Update project\n@required {project_name: str, account_id: str}\n@optional {build_config: map{build_caching: bool, build_command: str, destination_dir: str, root_dir: str, web_analytics_tag: str, web_analytics_token: str} # Configs for the project build process., deployment_configs: map{preview: any, production: any} # Configs for deployments in a project., name: str # Name of the project., production_branch: str # Production branch of the project. Used to identify production deployments., source: map{config!: map, type!: str} # Configs for the project source control.}\n@returns(200) Update project response.\n@errors {4XX: Update project response failure.}\n\n@endpoint GET /accounts/{account_id}/pages/projects/{project_name}/deployments\n@desc Get deployments\n@required {project_name: str, account_id: str}\n@optional {env: str(production/preview), page: int, per_page: int}\n@returns(200) Get deployments response.\n@errors {4XX: Get deployments response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects/{project_name}/deployments\n@desc Create deployment\n@required {project_name: str, account_id: str}\n@returns(200) Create deployment response.\n@errors {4XX: Create deployment response failure.}\n\n@endpoint DELETE /accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}\n@desc Delete deployment\n@required {deployment_id: str, project_name: str, account_id: str}\n@optional {force: bool}\n@returns(200) Delete deployment response.\n@errors {4XX: Delete deployment response failure.}\n\n@endpoint GET /accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}\n@desc Get deployment info\n@required {deployment_id: str, project_name: str, account_id: str}\n@returns(200) Get deployment info response.\n@errors {4XX: Get deployment info response failure.}\n\n@endpoint GET /accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}/history/logs\n@desc Get deployment logs\n@required {deployment_id: str, project_name: str, account_id: str}\n@returns(200) Get deployment logs response.\n@errors {4XX: Get deployment logs response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}/retry\n@desc Retry deployment\n@required {deployment_id: str, project_name: str, account_id: str}\n@returns(200) Retry deployment response.\n@errors {4XX: Retry deployment response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}/rollback\n@desc Rollback deployment\n@required {deployment_id: str, project_name: str, account_id: str}\n@returns(200) Rollback deployment response.\n@errors {4XX: Rollback deployment response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}/tails\n@desc Create deployment tail\n@required {deployment_id: str, project_name: str, account_id: str}\n@optional {filters: [map] # Filters to apply to the tail session.}\n@returns(200) Create deployment tail response.\n@errors {4XX: Create deployment tail response failure.}\n\n@endpoint DELETE /accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}/tails/{tail_id}\n@desc Delete deployment tail\n@required {tail_id: str, deployment_id: str, project_name: str, account_id: str}\n@returns(200) Delete deployment tail response.\n@errors {4XX: Delete deployment tail response failure.}\n\n@endpoint GET /accounts/{account_id}/pages/projects/{project_name}/domains\n@desc Get domains\n@required {project_name: str, account_id: str}\n@returns(200) Get domains response.\n@errors {4XX: Get domains response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects/{project_name}/domains\n@desc Add domain\n@required {project_name: str, account_id: str, name: str # The domain name.}\n@returns(200) Add domain response.\n@errors {4XX: Add domain response failure.}\n\n@endpoint DELETE /accounts/{account_id}/pages/projects/{project_name}/domains/{domain_name}\n@desc Delete domain\n@required {domain_name: str, project_name: str, account_id: str}\n@returns(200) Delete domain response.\n@errors {4XX: Delete domain response failure.}\n\n@endpoint GET /accounts/{account_id}/pages/projects/{project_name}/domains/{domain_name}\n@desc Get domain\n@required {domain_name: str, project_name: str, account_id: str}\n@returns(200) Get domain response.\n@errors {4XX: Get domain response failure.}\n\n@endpoint PATCH /accounts/{account_id}/pages/projects/{project_name}/domains/{domain_name}\n@desc Patch domain\n@required {domain_name: str, project_name: str, account_id: str}\n@returns(200) Patch domain response.\n@errors {4XX: Patch domain response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects/{project_name}/purge_build_cache\n@desc Purge build cache\n@required {project_name: str, account_id: str}\n@returns(200) Purge build cache response.\n@errors {4XX: Purge build cache failure.}\n\n@endpoint DELETE /accounts/{account_id}/pages/projects/{project_name}/source\n@desc Disconnect project source\n@required {project_name: str, account_id: str}\n@returns(200) Disconnect project source response.\n@errors {4XX: Disconnect project source response failure.}\n\n@endpoint POST /accounts/{account_id}/pages/projects/{project_name}/source\n@desc Connect project source\n@required {project_name: str, account_id: str, config: map{deployments_enabled!: bool, owner!: str, owner_id!: str, path_excludes!: [str], path_includes!: [str], pr_comments_enabled!: bool, preview_branch_excludes!: [str], preview_branch_includes!: [str], preview_deployment_setting!: str, production_branch!: str, production_deployments_enabled!: bool, repo_id!: str, repo_name!: str}, type: str(github/gitlab) # The source control management provider.}\n@returns(200) Connect project source response.\n@errors {4XX: Connect project source response failure.}\n\n@endpoint GET /accounts/{account_id}/pages/projects/{project_name}/upload-token\n@desc Get upload token\n@required {project_name: str, account_id: str}\n@returns(200) Upload token response.\n@errors {4XX: Upload token failure.}\n\n@endpoint POST /accounts/{account_id}/pay-bad-debt\n@desc Pay Bad Debt\n@required {account_id: str}\n@optional {payment_method_id: str # The payment method to use. If omitted, the default payment method is used.}\n@returns(200) Pay Bad Debt response\n@errors {4XX: Pay Bad Debt response failure}\n\n@endpoint POST /accounts/{account_id}/pay-invoice\n@desc Pay Invoice\n@required {account_id: str}\n@optional {invoice_id: str # The identifier of the invoice to pay., payment_method_id: str # The payment method to use. If omitted, the default payment method is used., validate_payment_method: bool # Whether to validate the payment method before processing.}\n@returns(200) Pay Invoice response\n@errors {4XX: Pay Invoice response failure}\n\n@endpoint DELETE /accounts/{account_id}/pay-per-crawl/crawler/stripe\n@desc Deletes the stripe config for a crawler\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/pay-per-crawl/crawler/stripe\n@desc Gets the stripe config for a crawler\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result: map{connect_status: str, stripe_account_id: str}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/pay-per-crawl/crawler/stripe\n@desc Creates the stripe config for a crawler\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result: map{url: str}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/pay-per-crawl/crawlers\n@desc List pay-per-crawl crawlers\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result: map{crawlers: [map]}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint DELETE /accounts/{account_id}/pay-per-crawl/publisher/stripe\n@desc Deletes the stripe config for a publisher\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/pay-per-crawl/publisher/stripe\n@desc Gets the stripe config for a publisher\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result: map{connect_status: str, stripe_account_id: str}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/pay-per-crawl/publisher/stripe\n@desc Creates the stripe config for a publisher\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result: map{url: str}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/pay-per-crawl/signature_link\n@desc Get signed pay-per-crawl terms link\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result: map{link: str(uri)}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/pay-per-crawl/terms\n@desc Get pay-per-crawl terms\n@required {account_id: str # account id}\n@returns(200) {errors: [map], messages: [map], result: map{body: str, id: str}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/pay-per-crawl/terms/signature\n@desc Get pay-per-crawl terms signature status\n@required {account_id: str # account id}\n@optional {remote: bool # Refresh the signature status from Ironclad.}\n@returns(200) {errors: [map], messages: [map], result: str?, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/pay-per-crawl/terms/signature\n@desc Record pay-per-crawl terms activity\n@required {account_id: str # account id, event_type: str(agreed/displayed) # The terms activity to record., vid: str # Ironclad contract version ID.}\n@returns(200) {errors: [map], messages: [map], result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint PATCH /accounts/{account_id}/pay-per-crawl/zones_can_be_enabled\n@desc Set can_be_enabled setting on zones\n@required {account_id: str # account id}\n@optional {zones: [map{can_be_enabled: bool, enabled: bool, id: str}]}\n@returns(200) {errors: [map], messages: [map], result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint POST /accounts/{account_id}/pay-per-crawl/zones_can_be_enabled/query\n@desc Gets the can_be_enabled zone setting\n@required {account_id: str # account id}\n@optional {zones: [str]}\n@returns(200) {errors: [map], messages: [map], result: map{zones: [map]}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/payment-methods\n@desc List Payment Methods\n@required {account_id: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) List Payment Methods response\n@errors {4XX: List Payment Methods response failure}\n\n@endpoint POST /accounts/{account_id}/payment-methods\n@desc Create Payment Method\n@required {account_id: str}\n@optional {address: str # Billing address line 1., address2: str # Billing address line 2., bank_account_type: str # Bank account type., bank_code: str # Bank code., bank_country: str # Bank country., bank_name: str # Bank name for bank-based payment methods., bank_routing_number: str # Bank routing number., cashapp_cash_tag: str # Cash App cash tag., city: str # Billing city., country: str # Billing country., default: bool # Whether this is the default payment method., device_data: str # Device data for fraud prevention., expiration_date: str # Card expiration date., first_name: str # Billing first name., id: str # Payment method identifier., last_four: str # Last four digits of the card number., last_name: str # Billing last name., nick_name: str # A nickname for the payment method., payment_account_email: str # Email associated with the payment account., payment_email: str # Payment email address., payment_gateway: str # The payment gateway used., payment_nonce: str # Payment nonce for tokenized payments., state: str # Billing state., type: str(CREDIT_CARD/PAYPAL/CASHAPP/SEPA_DEBIT/LINK/ACH_DIRECT_DEBIT) # The payment method type., zipcode: str # Billing zip code.}\n@returns(200) Create Payment Method response\n@errors {4XX: Create Payment Method response failure}\n\n@endpoint DELETE /accounts/{account_id}/payment-methods/{payment_method_id}\n@desc Delete Payment Method\n@required {account_id: str, payment_method_id: str # Payment method identifier.}\n@returns(200) Delete Payment Method response\n@returns(204) Delete Payment Method response (no content)\n@errors {4XX: Delete Payment Method response failure}\n\n@endpoint GET /accounts/{account_id}/payment-methods/{payment_method_id}\n@desc Get Payment Method\n@required {account_id: str, payment_method_id: str # Payment method identifier.}\n@returns(200) Get Payment Method response\n@errors {4XX: Get Payment Method response failure}\n\n@endpoint PUT /accounts/{account_id}/payment-methods/{payment_method_id}\n@desc Update Payment Method\n@required {account_id: str, payment_method_id: str # Payment method identifier.}\n@optional {address: str # Billing address line 1., address2: str # Billing address line 2., bank_account_type: str # Bank account type., bank_code: str # Bank code., bank_country: str # Bank country., bank_name: str # Bank name for bank-based payment methods., bank_routing_number: str # Bank routing number., cashapp_cash_tag: str # Cash App cash tag., city: str # Billing city., country: str # Billing country., default: bool # Whether this is the default payment method., device_data: str # Device data for fraud prevention., expiration_date: str # Card expiration date., first_name: str # Billing first name., id: str # Payment method identifier., last_four: str # Last four digits of the card number., last_name: str # Billing last name., nick_name: str # A nickname for the payment method., payment_account_email: str # Email associated with the payment account., payment_email: str # Payment email address., payment_gateway: str # The payment gateway used., payment_nonce: str # Payment nonce for tokenized payments., state: str # Billing state., type: str(CREDIT_CARD/PAYPAL/CASHAPP/SEPA_DEBIT/LINK/ACH_DIRECT_DEBIT) # The payment method type., zipcode: str # Billing zip code.}\n@returns(200) Update Payment Method response\n@errors {4XX: Update Payment Method response failure}\n\n@endpoint POST /accounts/{account_id}/payment-methods/{payment_method_id}/set-as-default\n@desc Set Default Payment Method\n@required {account_id: str, payment_method_id: str # Payment method identifier.}\n@returns(200) Set Default Payment Method response\n@returns(204) Set Default Payment Method response (no content)\n@errors {4XX: Set Default Payment Method response failure}\n\n@endpoint GET /accounts/{account_id}/pcaps\n@desc List packet capture requests\n@required {account_id: str}\n@returns(200) List packet capture requests response.\n@errors {4XX: List packet capture requests response failure (client error)., 5XX: List packet capture requests response failure (server error).}\n\n@endpoint POST /accounts/{account_id}/pcaps\n@desc Create PCAP request\n@required {account_id: str}\n@returns(200) Create PCAP request response.\n@errors {4XX: Create PCAP request response failure (client error)., 5XX: Create PCAP request response failure (server error).}\n\n@endpoint GET /accounts/{account_id}/pcaps/ownership\n@desc List PCAPs Bucket Ownership\n@required {account_id: str}\n@returns(200) List PCAPs Bucket Ownership response.\n@errors {4XX: List PCAPs Bucket Ownership response failure (client error)., 5XX: List PCAPs Bucket Ownership response failure (server error).}\n\n@endpoint POST /accounts/{account_id}/pcaps/ownership\n@desc Add buckets for full packet captures\n@required {account_id: str, destination_conf: str # The full URI for the bucket. This field only applies to `full` packet captures.}\n@returns(200) Add buckets for full packet captures response.\n@errors {4XX: Add buckets for full packet captures response failure (client error)., 5XX: Add buckets for full packet captures response failure (server error).}\n\n@endpoint POST /accounts/{account_id}/pcaps/ownership/validate\n@desc Validate buckets for full packet captures\n@required {account_id: str, destination_conf: str # The full URI for the bucket. This field only applies to `full` packet captures., ownership_challenge: str # The ownership challenge filename stored in the bucket.}\n@returns(200) Validate buckets for full packet captures response.\n@errors {4XX: Validate buckets for full packet captures response failure (client error)., 5XX: Validate buckets for full packet captures response failure (server error).}\n\n@endpoint DELETE /accounts/{account_id}/pcaps/ownership/{ownership_id}\n@desc Delete buckets for full packet captures\n@required {ownership_id: str, account_id: str}\n@returns(204) Delete buckets for full packet captures response.\n@errors {4XX: Delete buckets for full packet captures response failure (client error)., 5XX: Delete buckets for full packet captures response failure (server error).}\n\n@endpoint GET /accounts/{account_id}/pcaps/{pcap_id}\n@desc Get PCAP request\n@required {pcap_id: str, account_id: str}\n@returns(200) Get PCAP request response.\n@errors {4XX: Get PCAP request response failure (client error)., 5XX: Get PCAP request response failure (server error).}\n\n@endpoint GET /accounts/{account_id}/pcaps/{pcap_id}/download\n@desc Download Simple PCAP\n@required {pcap_id: str, account_id: str}\n@returns(200) Download Simple PCAP response.\n@errors {4XX: Download Simple PCAP response failure (client error)., 5XX: Download Simple PCAP response failure (server error).}\n\n@endpoint PUT /accounts/{account_id}/pcaps/{pcap_id}/stop\n@desc Stop full PCAP\n@required {pcap_id: str, account_id: str}\n@returns(204) Stop full PCAP response.\n@errors {4XX: Stop full PCAP response failure (client error)., 5XX: Stop full PCAP response failure (server error).}\n\n@endpoint GET /accounts/{account_id}/pipelines\n@desc [DEPRECATED] List Pipelines\n@required {account_id: str}\n@optional {search: str, page: str=1, per_page: str=25}\n@returns(200) {result_info: map{count: num, page: num, per_page: num, total_count: num}, results: [map], success: bool} # [DEPRECATED] Lists the pipelines. Use /pipelines/v1/pipelines instead.\n@errors {4XX: Indicates the error trying to list pipelines.}\n\n@endpoint POST /accounts/{account_id}/pipelines\n@desc [DEPRECATED] Create Pipeline\n@required {account_id: str, destination: map{batch!: map, compression!: map, credentials!: map, format!: str, path!: map, type!: str}, name: str # Defines the name of the pipeline., source: [any]}\n@returns(200) {result: map{destination: map{batch: map{max_bytes: int, max_duration_s: num, max_rows: int}, compression: map{type: str}, format: str, path: map{bucket: str, filename: any, filepath: str, prefix: str}, type: str}, endpoint: str, id: str, name: str, source: [any], version: num}, success: bool} # [DEPRECATED] Indicates a successfully created pipeline. Use /pipelines/v1/pipelines instead.\n@errors {4XX: Indicates an error in creating a pipeline.}\n\n@endpoint GET /accounts/{account_id}/pipelines/v1/pipelines\n@desc List Pipelines\n@required {account_id: str}\n@optional {page: num=1, per_page: num, name: str # Filters pipelines by name (case-insensitive substring).}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # Indicates a successfully listed Pipelines.\n@errors {4XX: Indicates an error in listing Pipelines.}\n\n@endpoint POST /accounts/{account_id}/pipelines/v1/pipelines\n@desc Create Pipeline\n@required {account_id: str, name: str # Specifies the name of the Pipeline., sql: str # Specifies SQL for the Pipeline processing flow.}\n@returns(200) {result: map{created_at: str, id: str, modified_at: str, name: str, sql: str, status: str}, success: bool} # Indicates a successfully created Pipeline.\n@errors {4XX: Indicates an error in creating a Pipeline.}\n\n@endpoint DELETE /accounts/{account_id}/pipelines/v1/pipelines/{pipeline_id}\n@desc Delete Pipeline\n@required {account_id: str, pipeline_id: str}\n@returns(200) {result: map, success: bool} # Indicates a successfully deleted Pipeline.\n@errors {4XX: Indicates an error in listing Pipelines.}\n\n@endpoint GET /accounts/{account_id}/pipelines/v1/pipelines/{pipeline_id}\n@desc Get Pipeline Details\n@required {account_id: str, pipeline_id: str}\n@returns(200) {result: map{created_at: str, failure_reason: str, id: str, modified_at: str, name: str, sql: str, status: str, tables: [map]}, success: bool} # Indicates a successfully retrieved Pipeline.\n@errors {4XX: Indicates an error in retrieving Pipelines.}\n\n@endpoint GET /accounts/{account_id}/pipelines/v1/sinks\n@desc List Sinks\n@required {account_id: str}\n@optional {pipeline_id: str, name: str # Filters sinks by name (case-insensitive substring)., page: num=1, per_page: num}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # Indicates successfully listed Sinks.\n@errors {4XX: Indicates an error in listing Sinks.}\n\n@endpoint POST /accounts/{account_id}/pipelines/v1/sinks\n@desc Create Sink\n@required {account_id: str, name: str # Defines the name of the Sink., type: str(r2/r2_data_catalog) # Specifies the type of sink.}\n@optional {config: any # Defines the configuration of the R2 Sink., format: any # Defines the output data format of a sink., schema: map{fields: [any], inferred: bool} # Defines the schema of the events in the data stream.}\n@returns(200) {result: map{config: any, created_at: str(date-time), format: any, id: str, modified_at: str(date-time), name: str, schema: map{fields: [any], inferred: bool?}, type: str}, success: bool} # Indicates a successfully created Sink.\n@errors {4XX: Indicates an error in creating a Sink.}\n\n@endpoint DELETE /accounts/{account_id}/pipelines/v1/sinks/{sink_id}\n@desc Delete Sink\n@required {account_id: str, sink_id: str}\n@returns(200) {result: map, success: bool} # Indicates a successfully deleted Sink.\n@errors {4XX: Indicates an error in listing Sinks.}\n\n@endpoint GET /accounts/{account_id}/pipelines/v1/sinks/{sink_id}\n@desc Get Sink Details\n@required {account_id: str, sink_id: str}\n@returns(200) {result: map{config: any, created_at: str(date-time), format: any, id: str, modified_at: str(date-time), name: str, schema: map{fields: [any], inferred: bool?}, type: str}, success: bool} # Indicates that Sink was retrieved.\n@errors {4XX: Indicates an error in listing Sinks.}\n\n@endpoint GET /accounts/{account_id}/pipelines/v1/streams\n@desc List Streams\n@required {account_id: str}\n@optional {pipeline_id: str, name: str # Filters streams by name (case-insensitive substring)., page: num=1, per_page: num}\n@returns(200) {result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num}, success: bool} # Indicates a successfully created Stream.\n@errors {4XX: Indicates an error in listing Streams.}\n\n@endpoint POST /accounts/{account_id}/pipelines/v1/streams\n@desc Create Stream\n@required {account_id: str, name: str # Specifies the name of the Stream.}\n@optional {format: any # Defines the data format of the events., http: map{authentication!: bool, cors: map, enabled!: bool}=[object Object], schema: map{fields: [any], inferred: bool} # Defines the schema of the events in the data stream., worker_binding: map{enabled!: bool}=[object Object]}\n@returns(200) {result: map{created_at: str(date-time), endpoint: str(uri), format: any, http: map{authentication: bool, cors: map{origins: [str]}, enabled: bool}, id: str, modified_at: str(date-time), name: str, schema: map{fields: [any], inferred: bool?}, version: int, worker_binding: map{enabled: bool}}, success: bool} # Indicates a successfully created Stream.\n@errors {4XX: Indicates an error in creating a Stream.}\n\n@endpoint DELETE /accounts/{account_id}/pipelines/v1/streams/{stream_id}\n@desc Delete Stream\n@required {account_id: str, stream_id: str}\n@returns(200) {result: map, success: bool} # Indicates a successfully deleted Stream.\n@errors {4XX: Indicates an error in listing Streams.}\n\n@endpoint GET /accounts/{account_id}/pipelines/v1/streams/{stream_id}\n@desc Get Stream Details\n@required {account_id: str, stream_id: str}\n@returns(200) {result: map{created_at: str(date-time), endpoint: str(uri), format: any, http: map{authentication: bool, cors: map{origins: [str]}, enabled: bool}, id: str, modified_at: str(date-time), name: str, schema: map{fields: [any], inferred: bool?}, version: int, worker_binding: map{enabled: bool}}, success: bool} # Indicates a successfully retrieved Stream.\n@errors {4XX: Indicates an error in retrieving Stream.}\n\n@endpoint PATCH /accounts/{account_id}/pipelines/v1/streams/{stream_id}\n@desc Update Stream\n@required {account_id: str, stream_id: str}\n@optional {http: map{authentication!: bool, cors: map, enabled!: bool}, worker_binding: map{enabled!: bool}}\n@returns(200) {result: map{created_at: str(date-time), endpoint: str(uri), format: any, http: map{authentication: bool, cors: map{origins: [str]}, enabled: bool}, id: str, modified_at: str(date-time), name: str, schema: map{fields: [any], inferred: bool?}, version: int, worker_binding: map{enabled: bool}}, success: bool} # Indicates a successfully updated Stream.\n@errors {4XX: Indicates an error in creating a Stream.}\n\n@endpoint POST /accounts/{account_id}/pipelines/v1/validate_sql\n@desc Validate SQL\n@required {account_id: str, sql: str # Specifies SQL to validate.}\n@returns(200) {result: map{graph: map{edges: [map], nodes: [map]}, tables: map}, success: bool} # Indicates SQL validation success.\n@errors {422: Indicates SQL validation failed., 4XX: Indicates SQL validation failed.}\n\n@endpoint DELETE /accounts/{account_id}/pipelines/{pipeline_name}\n@desc [DEPRECATED] Delete Pipeline\n@required {account_id: str, pipeline_name: str}\n@returns(200) [DEPRECATED] Indicates a successfully deleted pipeline.\n@errors {4XX: Indicates an error in deleting a pipeline.}\n\n@endpoint GET /accounts/{account_id}/pipelines/{pipeline_name}\n@desc [DEPRECATED] Get Pipeline\n@required {account_id: str, pipeline_name: str}\n@returns(200) {result: map{destination: map{batch: map{max_bytes: int, max_duration_s: num, max_rows: int}, compression: map{type: str}, format: str, path: map{bucket: str, filename: any, filepath: str, prefix: str}, type: str}, endpoint: str, id: str, name: str, source: [any], version: num}, success: bool} # [DEPRECATED] Describes the configuration of a pipeline.\n@errors {404: Indicates that the pipeline was not found.}\n\n@endpoint PUT /accounts/{account_id}/pipelines/{pipeline_name}\n@desc [DEPRECATED] Update Pipeline\n@required {account_id: str, pipeline_name: str, destination: map{batch!: map, compression!: map, credentials: map, format!: str, path!: map, type!: str}, name: str # Defines the name of the pipeline., source: [any]}\n@returns(200) {result: map{destination: map{batch: map{max_bytes: int, max_duration_s: num, max_rows: int}, compression: map{type: str}, format: str, path: map{bucket: str, filename: any, filepath: str, prefix: str}, type: str}, endpoint: str, id: str, name: str, source: [any], version: num}, success: bool} # [DEPRECATED] Indicates a successfully updated pipeline.\n@errors {4XX: Indicates an error updating pipeline.}\n\n@endpoint GET /accounts/{account_id}/profile\n@desc Get account profile\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{business_address: str, business_email: str, business_name: str, business_phone: str, external_metadata: str}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint PUT /accounts/{account_id}/profile\n@desc Modify account profile\n@required {account_id: str, business_address: str, business_email: str, business_name: str, business_phone: str, external_metadata: str}\n@returns(204) There is no content to send for this request, but the headers may be useful.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /accounts/{account_id}/queues\n@desc List Queues\n@required {account_id: str}\n@returns(200) List of all Queues that belong to this account\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues\n@desc Create Queue\n@required {account_id: str, queue_name: str}\n@optional {jurisdiction: str(eu/us/fedramp)}\n@returns(200) Created Queue\n@errors {4XX: Failure response}\n\n@endpoint DELETE /accounts/{account_id}/queues/{queue_id}\n@desc Delete Queue\n@required {queue_id: str, account_id: str}\n@returns(200) {errors: [map], messages: [str], success: bool} # Successful delete\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/queues/{queue_id}\n@desc Get Queue\n@required {queue_id: str, account_id: str}\n@returns(200) Details of the requested Queue\n@errors {4XX: Failure response}\n\n@endpoint PATCH /accounts/{account_id}/queues/{queue_id}\n@desc Update Queue\n@required {queue_id: str, account_id: str}\n@optional {consumers: [map], consumers_total_count: num, created_on: str, jurisdiction: str(eu/us/fedramp), modified_on: str, producers: [map], producers_total_count: num, queue_id: str, queue_name: str, settings: map{delivery_delay: num, delivery_paused: bool, message_retention_period: num}}\n@returns(200) Updated Queue\n@errors {4XX: Failure response}\n\n@endpoint PUT /accounts/{account_id}/queues/{queue_id}\n@desc Update Queue\n@required {queue_id: str, account_id: str}\n@optional {consumers: [map], consumers_total_count: num, created_on: str, jurisdiction: str(eu/us/fedramp), modified_on: str, producers: [map], producers_total_count: num, queue_id: str, queue_name: str, settings: map{delivery_delay: num, delivery_paused: bool, message_retention_period: num}}\n@returns(200) Updated Queue\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/queues/{queue_id}/consumers\n@desc List Queue Consumers\n@required {queue_id: str, account_id: str}\n@returns(200) All consumers attached to this Queue\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/consumers\n@desc Create a Queue Consumer\n@required {queue_id: str, account_id: str}\n@returns(200) Create Queue Consumer response.\n@errors {4XX: Failure response}\n\n@endpoint DELETE /accounts/{account_id}/queues/{queue_id}/consumers/{consumer_id}\n@desc Delete Queue Consumer\n@required {consumer_id: str, queue_id: str, account_id: str}\n@returns(200) {errors: [map], messages: [str], success: bool} # Successful consumer delete\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/queues/{queue_id}/consumers/{consumer_id}\n@desc Get Queue Consumer\n@required {consumer_id: str, queue_id: str, account_id: str}\n@returns(200) Get Queue Consumer response.\n@errors {4XX: Get Queue Consumer response failure.}\n\n@endpoint PUT /accounts/{account_id}/queues/{queue_id}/consumers/{consumer_id}\n@desc Update Queue Consumer\n@required {consumer_id: str, queue_id: str, account_id: str}\n@returns(200) Update Queue Consumer response.\n@errors {4XX: Update Queue Consumer response failure.}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages\n@desc Push Message\n@required {queue_id: str, account_id: str}\n@returns(200) Successful message ingestion.\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/ack\n@desc Acknowledge + Retry Queue Messages\n@required {queue_id: str, account_id: str}\n@optional {acks: [map{lease_id: str}], retries: [map{delay_seconds: num, lease_id: str}]}\n@returns(200) Details of ACKs and retries\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/batch\n@desc Push Message Batch\n@required {queue_id: str, account_id: str}\n@optional {delay_seconds: num # The number of seconds to wait for attempting to deliver this batch to consumers, messages: [any]}\n@returns(200) Successful batch ingestion.\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/extend\n@desc Extend Message Leases\n@required {queue_id: str, account_id: str}\n@optional {extend: [map{lease_id: str}], visibility_timeout_ms: num # The number of milliseconds that a message is exclusively leased. After the timeout, the message becomes available for another attempt.}\n@returns(200) New lease IDs\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/peek\n@desc Peek Queue Messages\n@required {queue_id: str, account_id: str}\n@optional {batch_size: num # The maximum number of messages to include in a batch.}\n@returns(200) A batch of peeked messages from the Queue\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/preview\n@desc Preview Queue Messages\n@required {queue_id: str, account_id: str}\n@optional {batch_size: num # The maximum number of messages to include in a batch.}\n@returns(200) A batch of previewed messages from the Queue\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/preview/ack\n@desc Delete Previewed Queue Messages\n@required {queue_id: str, account_id: str}\n@optional {acks: [map{lease_id: str}], retries: [map{delay_seconds: num, lease_id: str}]}\n@returns(200) Result of acknowledging previewed messages\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/pull\n@desc Pull Queue Messages\n@required {queue_id: str, account_id: str}\n@optional {batch_size: num # The maximum number of messages to include in a batch., visibility_timeout_ms: num # The number of milliseconds that a message is exclusively leased. After the timeout, the message becomes available for another attempt.}\n@returns(200) A batch of messages in the Queue\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/messages/purge\n@desc Purge Peeked Queue Messages\n@required {queue_id: str, account_id: str, refs: [map{ref!: str}]}\n@returns(200) Result of purging peeked messages\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/queues/{queue_id}/metrics\n@desc Get Queue Metrics\n@required {queue_id: str, account_id: str}\n@returns(200) Queue metrics.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/queues/{queue_id}/purge\n@desc Get Queue Purge Status\n@required {queue_id: str, account_id: str}\n@returns(200) Details of the requested Queue\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/queues/{queue_id}/purge\n@desc Purge Queue\n@required {queue_id: str, account_id: str}\n@optional {delete_messages_permanently: bool # Confimation that all messages will be deleted permanently.}\n@returns(200) Updated Queue\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/r2-catalog\n@desc List R2 catalogs\n@required {account_id: str # Identifies the account.}\n@returns(200) List of R2 catalogs.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/r2-catalog/{bucket_name}\n@desc Get R2 catalog details\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name.}\n@returns(200) R2 catalog details.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Catalog not found., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/r2-catalog/{bucket_name}/credential\n@desc Store catalog credentials\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name., token: str # Provides the Cloudflare API token for accessing R2.}\n@returns(200) Credentials stored successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Catalog not found., 500: Internal server error.}\n@example_request {\"token\":\"your-cloudflare-api-token-here\"}\n\n@endpoint POST /accounts/{account_id}/r2-catalog/{bucket_name}/delete\n@desc Delete R2 catalog metadata\n@required {account_id: str, bucket_name: str}\n@optional {force: bool=false # Remove child metadata before deleting the catalog.}\n@returns(204) Catalog metadata deleted successfully.\n@errors {400: Bad request., 401: Authentication failed., 404: Catalog not found., 409: Catalog is non-empty, has unfinished work, is protected, or exceeds the force-delete limit., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/r2-catalog/{bucket_name}/disable\n@desc Disable R2 catalog\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name to disable as catalog.}\n@returns(204) Catalog disabled successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Catalog not found., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/r2-catalog/{bucket_name}/enable\n@desc Enable R2 bucket as a catalog\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name to enable as catalog.}\n@returns(200) Catalog enabled successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: R2 bucket not found., 409: Catalog already enabled., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/r2-catalog/{bucket_name}/maintenance-configs\n@desc Get catalog maintenance configuration\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name.}\n@returns(200) Maintenance configuration retrieved successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Catalog not found., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/r2-catalog/{bucket_name}/maintenance-configs\n@desc Update catalog maintenance configuration\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name.}\n@returns(200) Maintenance configuration updated successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Catalog not found., 500: Internal server error.}\n@example_request {\"compaction\":{\"state\":\"enabled\",\"target_size_mb\":\"256\"},\"snapshot_expiration\":{\"max_snapshot_age\":\"14d\",\"min_snapshots_to_keep\":5,\"state\":\"enabled\"}}\n\n@endpoint GET /accounts/{account_id}/r2-catalog/{bucket_name}/namespaces\n@desc List namespaces in catalog\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name.}\n@optional {page_token: str # Opaque pagination token from a previous response. Use this to fetch the next page of results., page_size: int=100 # Maximum number of namespaces to return per page. Defaults to 100, maximum 1000., parent: str # Parent namespace to filter by. Only returns direct children of this namespace. For nested namespaces, use %1F as separator (e.g., \"bronze%1Fanalytics\"). Omit this parameter to list top-level namespaces., return_uuids: bool=false # Whether to include namespace UUIDs in the response. Set to true to receive the namespace_uuids array., return_details: bool=false # Whether to include additional metadata (timestamps). When true, response includes created_at and updated_at arrays.}\n@returns(200) List of namespaces retrieved successfully.\n@errors {400: Bad request (e.g., invalid page_size, malformed parent namespace)., 401: Authentication failed., 403: Forbidden., 404: Catalog not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/r2-catalog/{bucket_name}/namespaces/{namespace}/tables\n@desc List tables in namespace\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name., namespace: str # The namespace identifier. For nested namespaces, use %1F as separator (e.g., \"bronze%1Fanalytics\").}\n@optional {page_token: str # Opaque pagination token from a previous response. Use this to fetch the next page of results., page_size: int=100 # Maximum number of tables to return per page. Defaults to 100, maximum 1000., return_uuids: bool=false # Whether to include table UUIDs in the response. Set to true to receive the table_uuids array., return_details: bool=false # Whether to include additional metadata (timestamps, locations). When true, response includes created_at, updated_at, metadata_locations, and locations arrays.}\n@returns(200) List of tables retrieved successfully.\n@errors {400: Bad request (e.g., invalid page_size, malformed namespace)., 401: Authentication failed., 403: Forbidden., 404: Catalog or namespace not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/r2-catalog/{bucket_name}/namespaces/{namespace}/tables/{table_name}\n@desc Get table details\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name., namespace: str # The namespace identifier. For nested namespaces, use %1F as separator (e.g., \"bronze%1Fanalytics\")., table_name: str # The table name within the given namespace.}\n@returns(200) Table details retrieved successfully.\n@errors {400: Bad request (e.g., malformed namespace)., 401: Authentication failed., 403: Forbidden — JWT claims do not match account., 404: Catalog, namespace, or table not found., 500: Internal server error.}\n\n@endpoint GET /accounts/{account_id}/r2-catalog/{bucket_name}/namespaces/{namespace}/tables/{table_name}/maintenance-configs\n@desc Get table maintenance configuration\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name., namespace: str # The namespace identifier (use %1F as separator for nested namespaces)., table_name: str # The table name.}\n@returns(200) Table maintenance configuration retrieved successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Table not found., 500: Internal server error.}\n\n@endpoint POST /accounts/{account_id}/r2-catalog/{bucket_name}/namespaces/{namespace}/tables/{table_name}/maintenance-configs\n@desc Update table maintenance configuration\n@required {account_id: str # Identifies the account., bucket_name: str # Specifies the R2 bucket name., namespace: str # The namespace identifier (use %1F as separator for nested namespaces)., table_name: str # The table name.}\n@optional {compaction: map{state: str, target_size_mb: str} # Updates table compaction configuration; all fields are optional., snapshot_expiration: map{max_snapshot_age: str, min_snapshots_to_keep: int(int64), state: any} # Updates snapshot expiration configuration (all fields optional).}\n@returns(200) Table maintenance configuration updated successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Table not found., 500: Internal server error.}\n@example_request {\"compaction\":{\"state\":\"enabled\",\"target_size_mb\":\"256\"},\"snapshot_expiration\":{\"max_snapshot_age\":\"14d\",\"min_snapshots_to_keep\":5,\"state\":\"enabled\"}}\n\n@endpoint POST /accounts/{account_id}/r2-catalog/{bucket_name}/namespaces/{namespace}/tables/{table_name}/maintenance-configs/{configuration_type}/queue\n@desc Queue table maintenance\n@required {account_id: str, bucket_name: str, namespace: str, table_name: str, configuration_type: str(compaction/snapshot_expiration)}\n@optional {request_id: str(uuid)}\n@returns(202) Maintenance was queued for normal polling.\n@errors {400: Bad request., 403: Forbidden., 404: Table or maintenance configuration not found., 409: Maintenance is currently assigned to an executor., 429: Manual queue request limit reached.}\n\n@endpoint GET /accounts/{account_id}/r2-catalog/{bucket_name}/namespaces/{namespace}/tables/{table_name}/maintenance-runs\n@desc List table maintenance runs\n@required {account_id: str, bucket_name: str, namespace: str, table_name: str}\n@optional {page_size: int, page_token: str}\n@returns(200) Maintenance runs retrieved successfully.\n@errors {400: Bad request., 401: Authentication failed., 403: Forbidden., 404: Table not found.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets\n@desc List Buckets\n@required {account_id: str}\n@optional {name_contains: str, start_after: str, per_page: num=20, order: str, direction: str(asc/desc), cursor: str, cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) List Buckets response.\n@errors {4XX: List Buckets response failure.}\n\n@endpoint POST /accounts/{account_id}/r2/buckets\n@desc Create Bucket\n@required {account_id: str, name: str # Name of the bucket.}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., locationHint: str(apac/eeur/enam/weur/wnam/oc) # Location of the bucket., storageClass: str(Standard/InfrequentAccess)=Standard # Storage class for newly uploaded objects, unless specified otherwise.}\n@returns(200) Create Bucket response.\n@errors {4XX: Create Bucket response failure.}\n\n@endpoint DELETE /accounts/{account_id}/r2/buckets/{bucket_name}\n@desc Delete Bucket\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) {errors: [map], messages: [str], result: map, success: bool} # Delete Bucket response.\n@errors {4XX: Delete Bucket response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}\n@desc Get Bucket\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Get Bucket response.\n@errors {4XX: Get Bucket response failure.}\n\n@endpoint PATCH /accounts/{account_id}/r2/buckets/{bucket_name}\n@desc Patch Bucket\n@required {account_id: str, bucket_name: str, cf-r2-storage-class: any}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Patch Bucket response.\n@errors {4XX: Get Bucket response failure.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}\n@desc Create Bucket (by name)\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., cf-r2-storage-class: any}\n@returns(200) Create Bucket response.\n@errors {4XX: Create Bucket response failure.}\n\n@endpoint DELETE /accounts/{account_id}/r2/buckets/{bucket_name}/cors\n@desc Delete Bucket CORS Policy\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/cors\n@desc Get Bucket CORS Policy\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/cors\n@desc Put Bucket CORS Policy\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., rules: [map{allowed!: map, exposeHeaders: [str], id: str, maxAgeSeconds: num}]}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/domains/custom\n@desc List Custom Domains of Bucket\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) List Custom Domains response.\n@errors {4XX: List Custom Domains response failure.}\n\n@endpoint POST /accounts/{account_id}/r2/buckets/{bucket_name}/domains/custom\n@desc Attach Custom Domain To Bucket\n@required {account_id: str, bucket_name: str, domain: str # Name of the custom domain to be added., enabled: bool # Whether to enable public bucket access at the custom domain. If undefined, the domain will be enabled., zoneId: str # Zone ID of the custom domain.}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., ciphers: [str] # An allowlist of ciphers for TLS termination. These ciphers must be in the BoringSSL format., minTLS: str(1.0/1.1/1.2/1.3) # Minimum TLS Version the custom domain will accept for incoming connections. If not set, defaults to 1.0.}\n@returns(200) Add Custom Domain response.\n@errors {4XX: Add Custom Domain response failure.}\n\n@endpoint DELETE /accounts/{account_id}/r2/buckets/{bucket_name}/domains/custom/{domain}\n@desc Remove Custom Domain From Bucket\n@required {bucket_name: str, account_id: str, domain: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Delete Custom Domain response.\n@errors {4XX: Delete Custom Domain response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/domains/custom/{domain}\n@desc Get Custom Domain Settings\n@required {account_id: str, bucket_name: str, domain: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Get Custom Domain Configuration response.\n@errors {4XX: Get Custom Domain Configuration response failure.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/domains/custom/{domain}\n@desc Configure Custom Domain Settings\n@required {account_id: str, bucket_name: str, domain: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., ciphers: [str] # An allowlist of ciphers for TLS termination. These ciphers must be in the BoringSSL format., enabled: bool # Whether to enable public bucket access at the specified custom domain., minTLS: str(1.0/1.1/1.2/1.3) # Minimum TLS Version the custom domain will accept for incoming connections. If not set, defaults to previous value.}\n@returns(200) Edit Custom Domain Configuration response.\n@errors {4XX: Edit Custom Domain Configuration response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/domains/managed\n@desc Get r2.dev Domain of Bucket\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Get Managed Subdomain response.\n@errors {4XX: Get Managed Subdomain response failure.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/domains/managed\n@desc Update r2.dev Domain of Bucket\n@required {account_id: str, bucket_name: str, enabled: bool # Whether to enable public bucket access at the r2.dev domain.}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Update Managed Subdomain response.\n@errors {4XX: Update Managed Subdomain response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/jobs\n@desc List Bucket Jobs\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., jobType: str # Restricts results to jobs of the specified type., status: str # Restricts results to jobs with the specified status. `jobType` is required when this parameter is provided., maxKeys: int # Maximum number of jobs to return., continuationToken: str # Pagination token received as `nextContinuationToken` in the previous response.}\n@returns(200) List Bucket Jobs response.\n@errors {4XX: List Bucket Jobs response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/jobs/{job_id}\n@desc Get Bucket Job\n@required {account_id: str, bucket_name: str, job_id: str # Identifier returned when the background job was submitted.}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Get Bucket Job response.\n@errors {4XX: Get Bucket Job response failure. The bucket or job may not exist, or the caller may not be authorized to access it.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/lifecycle\n@desc Get Object Lifecycle Rules\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/lifecycle\n@desc Put Object Lifecycle Rules\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., rules: [map{abortMultipartUploadsTransition: map, conditions!: map, deleteObjectsTransition: map, enabled!: bool, id!: str, storageClassTransitions: [any]}]}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/local-uploads\n@desc Get Local Uploads Configuration\n@required {bucket_name: str, account_id: str}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/local-uploads\n@desc Put Local Uploads Configuration\n@required {bucket_name: str, account_id: str, enabled: bool # Whether to enable local uploads for this bucket.}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint DELETE /accounts/{account_id}/r2/buckets/{bucket_name}/lock\n@desc Delete Bucket Lock Rules\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/lock\n@desc Get Bucket Lock Rules\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/lock\n@desc Put Bucket Lock Rules\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., rules: [map{condition!: any, enabled!: bool, id!: str, prefix: str}]}\n@returns(200) Success Response.\n@errors {4XX: Error Response.}\n\n@endpoint DELETE /accounts/{account_id}/r2/buckets/{bucket_name}/objects\n@desc Delete Objects or Empty a Bucket\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., prefix: str, cf-r2-data-catalog-check: str # Set this header to reject the operation when R2 Data Catalog is enabled for the bucket.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Delete Objects response. Body shape depends on the operation mode: - \"delete by list\" returns an array of `{ key }` entries for successfully deleted objects; - \"delete by prefix\" returns the prefix-delete job descriptor.\n@errors {409: Empty Bucket conflict. Event notification rules are still configured (error code 10034), or the Data Catalog check was requested and R2 Data Catalog is enabled for the bucket (error code 10081). Remove the conflicting configuration before retrying., 429: Too many active prefix-delete or bucket-emptying jobs. Wait for an existing job to finish, then retry., 4XX: Delete Objects response failure. The bucket may not exist, the request may be invalid, or the caller may not be authorized.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/objects\n@desc List Objects\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., per_page: int=20, prefix: str, delimiter: str, cursor: str, start_after: str}\n@returns(200) {errors: [map], messages: [str], result: [map], result_info: map{cursor: str, delimited: [str], is_truncated: bool, per_page: int}, success: bool} # List Objects response.\n@errors {4XX: List Objects response failure.}\n\n@endpoint DELETE /accounts/{account_id}/r2/buckets/{bucket_name}/objects/{object_key}\n@desc Delete Object\n@required {account_id: str, bucket_name: str, object_key: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Delete Object response.\n@errors {4XX: Delete Object response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/objects/{object_key}\n@desc Get Object\n@required {account_id: str, bucket_name: str, object_key: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., If-None-Match: str, If-Modified-Since: str}\n@returns(200) Get Object response. Returns the object body with metadata headers.\n@errors {304: Not Modified. Returned when conditional request headers indicate the object has not changed., 4XX: Get Object response failure.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/objects/{object_key}\n@desc Upload Object\n@required {account_id: str, bucket_name: str, object_key: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., Content-Type: str, Content-Length: int, cf-r2-storage-class: str # Storage class for this object. Overrides the bucket default.}\n@returns(200) Upload Object response.\n@errors {4XX: Upload Object response failure.}\n\n@endpoint DELETE /accounts/{account_id}/r2/buckets/{bucket_name}/sippy\n@desc Disable Sippy\n@required {bucket_name: str, account_id: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Delete Sippy Configuration response.\n@errors {4XX: Delete Sippy Configuration response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/sippy\n@desc Get Sippy Configuration\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Get Sippy Configuration response.\n@errors {4XX: Get Sippy Configuration response failure.}\n\n@endpoint PUT /accounts/{account_id}/r2/buckets/{bucket_name}/sippy\n@desc Enable Sippy\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Set Sippy Configuration response.\n@errors {4XX: Get Sippy Configuration response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/storage-class-migration-jobs\n@desc List Storage Class Migration Jobs\n@required {account_id: str, bucket_name: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., status: str # Restricts results to jobs with the specified status., maxKeys: int # Maximum number of jobs to return., continuationToken: str # Pagination token received as `nextContinuationToken` in the previous response.}\n@returns(200) List Storage Class Migration Jobs response.\n@errors {4XX: List Storage Class Migration Jobs response failure.}\n\n@endpoint POST /accounts/{account_id}/r2/buckets/{bucket_name}/storage-class-migration-jobs\n@desc Create a Storage Class Migration Job\n@required {account_id: str, bucket_name: str, jobType: str}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored., destinationStorageClass: str(Standard/InfrequentAccess), sourceStorageClass: str(Standard/InfrequentAccess)}\n@returns(200) The enqueued storage-class migration job.\n@errors {4XX: Create Storage Class Migration Job response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/buckets/{bucket_name}/storage-class-migration-jobs/{job_id}\n@desc Get Storage Class Migration Job\n@required {account_id: str, bucket_name: str, job_id: str # Identifier returned when the migration job was submitted.}\n@optional {cf-r2-jurisdiction: str(default/eu/us/fedramp/fedramp-high)=default # Jurisdiction where objects in this bucket are guaranteed to be stored.}\n@returns(200) Get Storage Class Migration Job response.\n@errors {4XX: Get Storage Class Migration Job response failure.}\n\n@endpoint GET /accounts/{account_id}/r2/metrics\n@desc Get Account-Level Metrics\n@required {account_id: str}\n@returns(200) Get Account-Level Metrics response.\n@errors {4XX: Get Account-Level Metrics response failure.}\n\n@endpoint POST /accounts/{account_id}/r2/temp-access-credentials\n@desc Create Temporary Access Credentials\n@required {account_id: str, bucket: str # Name of the R2 bucket., parentAccessKeyId: str # The parent access key id to use for signing., permission: str(admin-read-write/admin-read-only/object-read-write/object-read-only) # Permissions allowed on the credentials., ttlSeconds: num=900 # How long the credentials will live for in seconds.}\n@optional {objects: [str] # Optional object paths to scope the credentials to., prefixes: [str] # Optional prefix paths to scope the credentials to.}\n@returns(200) Create temporary access credentials response.\n@errors {4XX: Create temporary access credentials response failure.}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/apps\n@desc Fetch all apps\n@optional {page_no: int=1 # The page number from which you want your page search results to be displayed., per_page: int=20 # Number of results per page., search: str # Search string that matches apps by name., sort_order: str(ASC/DESC)=DESC # Sort order for apps by creation time.}\n@returns(200) {data: [map], paging: map{end_offset: num, start_offset: num, total_count: num}, success: bool} # OK\n\n@endpoint POST /accounts/{account_id}/realtime/kit/apps\n@desc Create App\n@required {name: str}\n@returns(200) {data: map{app: map{created_at: str(date-time), id: str(uuid), name: str}}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/apps/{app_id}\n@desc Fetch app details\n@required {account_id: str, app_id: str}\n@returns(200) {data: map{created_at: str(date-time), id: str(uuid), name: str?}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/analytics/daywise\n@desc Fetch day-wise session and recording analytics data for an App\n@required {account_id: str, app_id: str}\n@optional {start_date: str # start date in YYYY-MM-DD format, end_date: str # end date in YYYY-MM-DD format}\n@returns(200) {data: map{recording_stats: map{day_stats: [map], recording_count: int, recording_minutes_consumed: num}, session_stats: map{day_stats: [map], sessions_count: int, sessions_minutes_consumed: num}}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/analytics/livestreams/daywise\n@desc Fetch day-wise analytics data for your livestreams\n@required {account_id: str, app_id: str}\n@optional {start_time: int(int64) # Specify the start time as a Unix timestamp in seconds to access the livestream analytics., end_time: int(int64) # Specify the end time as a Unix timestamp in seconds to access the livestream analytics., filters: str # Optional filters for livestream analytics.}\n@returns(200) {data: [map], success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/analytics/livestreams/overall\n@desc Fetch complete analytics data for your livestreams\n@required {account_id: str, app_id: str}\n@optional {start_time: int(int64) # Specify the start time as a Unix timestamp in seconds to access the livestream analytics., end_time: int(int64) # Specify the end time as a Unix timestamp in seconds to access the livestream analytics., filters: str # Optional filters for livestream analytics.}\n@returns(200) {data: map{count: int, total_ingest_seconds: int, total_viewer_seconds: int}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/livestreams\n@desc Fetch all livestreams\n@optional {exclude_meetings: bool=false # Exclude the RealtimeKit meetings that are livestreamed., per_page: int # Number of results per page., page_no: int # The page number from which you want your page search results to be displayed., status: str(LIVE/IDLE/ERRORED/INVOKED) # Specifies the status of the operation., start_time: str(date-time) # Specify the start time range in ISO format to access the live stream., end_time: str(date-time) # Specify the end time range in ISO format to access the live stream., sort_order: str(ASC/DSC) # Specifies the sorting order for the results.}\n@returns(200) {data: map{created_at: str(date-time), disabled: str, id: str(uuid), ingest_server: str, meeting_id: str, name: str, paging: map{end_offset: int, start_offset: int, total_count: int}, playback_url: str, status: str, stream_key: str, updated_at: str(date-time)}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/livestreams/sessions/{livestream-session-id}\n@desc Fetch livestream session details using livestream session ID\n@required {account_id: str, app_id: str, livestream-session-id: str}\n@returns(200) {data: map{created_at: str(date-time), err_message: str, id: str, ingest_seconds: int, livestream_id: str, started_time: str, stopped_time: str, updated_at: str, viewer_seconds: int}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/livestreams/{livestream_id}\n@desc Fetch livestream details using livestream ID\n@required {account_id: str, app_id: str, livestream_id: str}\n@optional {page_no: int # The page number from which you want your page search results to be displayed., per_page: int # Number of results per page.}\n@returns(200) {data: map{livestream: map{created_at: str, disabled: str, id: str, ingest_server: str, meeting_id: str, name: str, playback_url: str, status: str, stream_key: str, updated_at: str}, paging: map{end_offset: int, start_offset: int, total_count: int}, session: map{created_at: str(date-time), err_message: str, id: str, ingest_seconds: num, invoked_time: str(date-time), livestream_id: str, started_time: str(date-time), stopped_time: str(date-time), updated_at: str(date-time), viewer_seconds: num}}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/livestreams/{livestream_id}/active-livestream-session\n@desc Fetch active livestream session details\n@required {account_id: str, app_id: str, livestream_id: str}\n@returns(200) {data: map{livestream: map{created_at: str(date-time), disabled: str, id: str, ingest_server: str, meeting_id: str, name: str, playback_url: str, status: str, stream_key: str, updated_at: str(date-time)}, session: map{created_at: str(date-time), err_message: str, id: str, ingest_seconds: str, invoked_time: str(date-time), livestream_id: str, started_time: str(date-time), stopped_time: str(date-time), updated_at: str(date-time), viewer_seconds: str}}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/meetings\n@desc Fetch all meetings for an App\n@required {account_id: str, app_id: str}\n@optional {page_no: num # The page number from which you want your page search results to be displayed., per_page: num # Number of results per page, start_time: str(date-time) # The start time range for which you want to retrieve the meetings. The time must be specified in ISO format., end_time: str(date-time) # The end time range for which you want to retrieve the meetings. The time must be specified in ISO format., search: str # The search query string. You can search using the meeting ID or title., status: str(ACTIVE/INACTIVE) # Filter meetings by status.}\n@returns(200) Success response\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings\n@desc Create a meeting\n@required {account_id: str, app_id: str}\n@optional {ai_config: map{summarization: map, transcription: map} # The AI Config allows you to customize the behavior of meeting transcriptions and summaries, live_stream_on_start: bool=false # Specifies if the meeting should start getting livestreamed on start., persist_chat: bool=false # If a meeting is set to persist_chat, meeting chat would remain for a week within the meeting space., record_on_start: bool=false # Specifies if the meeting should start getting recorded as soon as someone joins the meeting., recording_config: map{audio_config: map, file_name_prefix: str, live_streaming_config: map, max_seconds: num, realtimekit_bucket_config: map, storage_config: map, video_config: map} # Recording Configurations to be used for this meeting. This level of configs takes higher preference over App level configs on the RealtimeKit developer portal., session_keep_alive_time_in_secs: num=60 # Time in seconds, for which a session remains active, after the last participant has left the meeting., summarize_on_end: bool=false # Automatically generate summary of meetings using transcripts. Requires Transcriptions to be enabled, and can be retrieved via Webhooks or summary API., title: str # Title of the meeting, transcribe_on_end: bool=false # Automatically generate transcripts when the meeting ends.}\n@returns(201) Success Response\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}\n@desc Fetch a meeting for an App\n@required {meeting_id: str(uuid) # ID of the meeting. Fetch the meeting ID using the create a meeting API.}\n@optional {name: str}\n@returns(200) Success Response\n@errors {500: Failure response}\n\n@endpoint PATCH /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}\n@desc Update a meeting\n@required {meeting_id: str(uuid) # ID of the meeting. Fetch the meeting ID using the create a meeting API.}\n@optional {ai_config: map{summarization: map, transcription: map} # The AI Config allows you to customize the behavior of meeting transcriptions and summaries, live_stream_on_start: bool # Specifies if the meeting should start getting livestreamed on start., persist_chat: bool # If a meeting is updated to persist_chat, meeting chat would remain for a week within the meeting space., record_on_start: bool # Specifies if the meeting should start getting recorded as soon as someone joins the meeting., recording_config: map{audio_config: map, file_name_prefix: str, live_streaming_config: map, max_seconds: num, realtimekit_bucket_config: map, storage_config: map, video_config: map} # Recording Configurations to be used for this meeting. This level of configs takes higher preference over App level configs on the RealtimeKit developer portal., session_keep_alive_time_in_secs: num # Time in seconds, for which a session remains active, after the last participant has left the meeting., status: str(ACTIVE/INACTIVE) # Whether the meeting is `ACTIVE` or `INACTIVE`. Users will not be able to join an `INACTIVE` meeting., summarize_on_end: bool # Automatically generate summary of meetings using transcripts. Requires Transcriptions to be enabled, and can be retrieved via Webhooks or summary API., title: str # Title of the meeting, transcribe_on_end: bool # Automatically generate transcripts when the meeting ends.}\n@returns(200) Success Response\n@errors {500: Failure response}\n\n@endpoint PUT /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}\n@desc Replace a meeting\n@required {meeting_id: str(uuid) # ID of the meeting. Fetch the meeting ID using the create a meeting API.}\n@optional {ai_config: map{summarization: map, transcription: map} # The AI Config allows you to customize the behavior of meeting transcriptions and summaries, live_stream_on_start: bool=false # Specifies if the meeting should start getting livestreamed on start., persist_chat: bool=false # If a meeting is set to persist_chat, meeting chat would remain for a week within the meeting space., record_on_start: bool=false # Specifies if the meeting should start getting recorded as soon as someone joins the meeting., recording_config: map{audio_config: map, file_name_prefix: str, live_streaming_config: map, max_seconds: num, realtimekit_bucket_config: map, storage_config: map, video_config: map} # Recording Configurations to be used for this meeting. This level of configs takes higher preference over App level configs on the RealtimeKit developer portal., session_keep_alive_time_in_secs: num=60 # Time in seconds, for which a session remains active, after the last participant has left the meeting., summarize_on_end: bool=false # Automatically generate summary of meetings using transcripts. Requires Transcriptions to be enabled, and can be retrieved via Webhooks or summary API., title: str # Title of the meeting, transcribe_on_end: bool=false # Automatically generate transcripts when the meeting ends.}\n@returns(200) Success Response\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-livestream\n@desc Fetch active livestreams for a meeting\n@required {meeting_id: str(uuid) # ID of the meeting}\n@returns(200) {data: map{created_at: str(date-time), disabled: str, id: str, ingest_server: str, meeting_id: str, name: str?, playback_url: str, status: str, stream_key: str, updated_at: str(date-time)}, success: bool} # OK\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-livestream/stop\n@desc Stop livestreaming a meeting\n@required {meeting_id: str(uuid) # ID of the meeting}\n@returns(200) {data: map{message: str}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-session\n@desc Fetch details of an active session\n@required {meeting_id: str # ID of the meeting}\n@returns(200) {data: map{associated_id: str, breakout_rooms: [map], created_at: str, ended_at: str, id: str, live_participants: num, max_concurrent_participants: num, meeting_display_name: str, minutes_consumed: num, organization_id: str, started_at: str, status: str, type: str, updated_at: str}, success: bool} # Active Session Success response\n@errors {404: Active Session is not found for the given meetingId}\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-session/kick\n@desc Kick participants from an active session\n@required {account_id: str, app_id: str, meeting_id: str # ID of the meeting}\n@optional {custom_participant_ids: [str], participant_ids: [str(uuid)]}\n@returns(200) {data: map{action: str, participants: [map]}, success: bool} # Kick participants success response\n@errors {404: No participant found for the given `participant_id` or `custom_participant_id`}\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-session/kick-all\n@desc Kick all participants\n@required {account_id: str, app_id: str, meeting_id: str # ID of the meeting}\n@returns(200) {data: map{action: str, kicked_participants_count: num}, success: bool} # Kick all participants from a meeting\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-session/mute\n@desc Mute participants of an active session\n@required {account_id: str, app_id: str, meeting_id: str # ID of the meeting}\n@optional {custom_participant_ids: [str], participant_ids: [str]}\n@returns(200) {data: map{action: str, participants: [map]}, success: bool} # Mute one or more participants of a meeting\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-session/mute-all\n@desc Mute all participants\n@required {account_id: str, app_id: str, meeting_id: str # ID of the meeting}\n@optional {allow_unmute: bool=false # if false, participants won't be able to unmute themselves after they are muted}\n@returns(200) {data: map{action: str, muted_participants_count: num}, success: bool} # Mute all participants of a meeting\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/active-session/poll\n@desc Create a poll\n@required {account_id: str, app_id: str, meeting_id: str # ID of the meeting, options: [str] # Different options for the question, question: str # Question of the poll}\n@optional {anonymous: bool # if voters on a poll are anonymous, hide_votes: bool # if votes on an option are visible before a person votes}\n@returns(201) {data: map{action: str, poll: map{anonymous: bool, created_by: str, hide_votes: bool, id: str, options: [map], question: str, voted: [str]}}, success: bool} # response for creating a poll\n@errors {400: Bad Request}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/livestream\n@desc Fetch livestream session details for a meeting\n@required {meeting_id: str(uuid) # ID of the meeting}\n@optional {page_no: int # The page number from which you want your page search results to be displayed., per_page: int # Number of results per page.}\n@returns(200) {data: map{livestreams: [map], paging: map{end_offset: int, start_offset: int, total_count: int}, sessions: map{created_at: str(date-time), err_message: str, id: str, ingest_seconds: str, invoked_time: str(date-time), livestream_id: str, started_time: str(date-time), stopped_time: str(date-time), updated_at: str(date-time)}}, success: bool} # OK\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/livestreams\n@desc Start livestreaming a meeting\n@required {meeting_id: str(uuid) # ID of the meeting}\n@optional {name: str, video_config: map{height: int, width: int}}\n@returns(201) {data: map{id: str, ingest_server: str, playback_url: str, status: str, stream_key: str}, success: bool} # Created\n@example_request {\"name\":\"prdmmp-xhycsl\"}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/participants\n@desc Fetch all participants of a meeting\n@required {account_id: str, app_id: str, meeting_id: str(uuid) # ID of the meeting. Fetch the meeting ID using the create a meeting API.}\n@optional {page_no: num # The page number from which you want your page search results to be displayed., per_page: num # Number of results per page}\n@returns(200) Success response\n@errors {500: Failure response}\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/participants\n@desc Add a participant\n@required {account_id: str, app_id: str, meeting_id: str(uuid) # ID of the meeting. Fetch the meeting ID using the create a meeting API., custom_participant_id: str # A unique participant ID. You must specify a unique ID for the participant, for example, UUID, email address, and so on., preset_name: str=group_call_host # Name of the preset to apply to this participant.}\n@optional {name: str # (Optional) Name of the participant., picture: str(uri) # (Optional) A URL to a picture to be used for the participant.}\n@returns(201) Success response\n@errors {500: Failure response}\n\n@endpoint DELETE /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/participants/{participant_id}\n@desc Delete a participant\n@required {meeting_id: str(uuid) # ID of the meeting. You can fetch the meeting ID using the create a meeting API., participant_id: str # ID of the participant. You can fetch the participant ID using the add a participant API.}\n@returns(200) Success response\n@errors {500: Failure response}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/participants/{participant_id}\n@desc Fetch a participant's detail\n@required {meeting_id: str(uuid) # ID of the meeting. You can fetch the meeting ID using the create a meeting API., participant_id: str # ID of the participant. You can fetch the participant ID using the add a participant API.}\n@returns(200) Success response\n@errors {500: Failure response}\n\n@endpoint PATCH /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/participants/{participant_id}\n@desc Edit a participant's detail\n@required {meeting_id: str(uuid) # ID of the meeting. You can fetch the meeting ID using the create a meeting API., participant_id: str # ID of the participant. You can fetch the participant ID using the add a participant API.}\n@optional {name: str # (Optional) Name of the participant., picture: str(uri) # (Optional) A URL to a picture to be used for the participant., preset_name: str # (Optional) Name of the preset to apply to this participant.}\n@returns(200) Success response\n@errors {500: Failure response}\n\n@endpoint PUT /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/participants/{participant_id}\n@desc Replace a participant's detail\n@required {meeting_id: str(uuid) # ID of the meeting. You can fetch the meeting ID using the create a meeting API., participant_id: str # ID of the participant. You can fetch the participant ID using the add a participant API., custom_participant_id: str # Unique participant ID accepted by the replace participant API., preset_name: str # Name of the preset to apply to this participant.}\n@optional {name: str # (Optional) Name of the participant., picture: str(uri) # (Optional) A URL to a picture to be used for the participant.}\n@returns(200) Success response\n@errors {500: Failure response}\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/meetings/{meeting_id}/participants/{participant_id}/token\n@desc Refresh participant's authentication token\n@required {account_id: str, app_id: str, meeting_id: str(uuid) # ID of the meeting. You can fetch the meeting ID using the create a meeting API., participant_id: str # ID of the participant. You can fetch the participant ID using the add a  participant API.}\n@returns(200) Example response\n@errors {500: Failure response}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/presets\n@desc Fetch all presets\n@required {account_id: str, app_id: str}\n@optional {per_page: num # Number of results per page, page_no: num # The page number from which you want your page search results to be displayed., search: str # Search presets by name.}\n@returns(200) Example response\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/presets\n@desc Create a preset\n@required {account_id: str, app_id: str, config: map{livestream_viewer_qualities: [int], max_screenshare_count!: num, max_video_streams!: map, media!: map, view_type!: str}, name: str # Name of the preset, permissions: map{accept_stage_requests: bool, accept_waiting_requests!: bool, can_accept_production_requests!: bool, can_change_participant_permissions!: bool, can_edit_display_name!: bool, can_livestream!: bool, can_record!: bool, can_spotlight!: bool, chat!: map, connected_meetings!: map, disable_participant_audio!: bool, disable_participant_screensharing!: bool, disable_participant_video!: bool, hidden_participant!: bool, is_recorder: bool, kick_participant!: bool, media!: map, pin_participant!: bool, plugins!: map, polls!: map, recorder_type!: str, show_participant_list!: bool, stage_access: str, stage_enabled: bool, transcription_enabled: bool, waiting_room_type!: str}, ui: map{design_tokens!: map}}\n@returns(201) Success response\n\n@endpoint DELETE /accounts/{account_id}/realtime/kit/{app_id}/presets/{preset_id}\n@desc Delete a preset\n@required {account_id: str, app_id: str, preset_id: str(uuid) # ID of the preset to fetch}\n@returns(200) Success response\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/presets/{preset_id}\n@desc Fetch details of a preset\n@required {account_id: str, app_id: str, preset_id: str(uuid) # ID of the preset to fetch}\n@returns(200) Success response\n\n@endpoint PATCH /accounts/{account_id}/realtime/kit/{app_id}/presets/{preset_id}\n@desc Update a preset\n@required {account_id: str, app_id: str, preset_id: str(uuid) # ID of the preset to fetch}\n@optional {config: map{livestream_viewer_qualities: [int], max_screenshare_count: num, max_video_streams: map, media: map, view_type: str}, name: str # Name of the preset, permissions: map{accept_stage_requests: bool, accept_waiting_requests: bool, can_accept_production_requests: bool, can_change_participant_permissions: bool, can_edit_display_name: bool, can_livestream: bool, can_record: bool, can_spotlight: bool, chat: map, connected_meetings: map, disable_participant_audio: bool, disable_participant_screensharing: bool, disable_participant_video: bool, hidden_participant: bool, is_recorder: bool, kick_participant: bool, media: map, pin_participant: bool, plugins: map, polls: map, recorder_type: str, show_participant_list: bool, stage_access: str, stage_enabled: bool, transcription_enabled: bool, waiting_room_type: str}, ui: map{design_tokens: map}}\n@returns(200) Success response\n\n@endpoint PUT /accounts/{account_id}/realtime/kit/{app_id}/presets/{preset_id}\n@desc Replace a preset\n@required {account_id: str, app_id: str, preset_id: str(uuid) # ID of the preset to replace, config: map{livestream_viewer_qualities: [int], max_screenshare_count!: num, max_video_streams!: map, media!: map, view_type!: str}, name: str # Name of the preset, permissions: map{accept_stage_requests: bool, accept_waiting_requests!: bool, can_accept_production_requests!: bool, can_change_participant_permissions!: bool, can_edit_display_name!: bool, can_livestream!: bool, can_record!: bool, can_spotlight!: bool, chat!: map, connected_meetings!: map, disable_participant_audio!: bool, disable_participant_screensharing!: bool, disable_participant_video!: bool, hidden_participant!: bool, is_recorder: bool, kick_participant!: bool, media!: map, pin_participant!: bool, plugins!: map, polls!: map, recorder_type!: str, show_participant_list!: bool, stage_access: str, stage_enabled: bool, transcription_enabled: bool, waiting_room_type!: str}, ui: map{design_tokens!: map}}\n@returns(200) Success response\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/recordings\n@desc Fetch all recordings for an App\n@required {account_id: str, app_id: str}\n@optional {meeting_id: str(uuid) # ID of a meeting. Optional. Will limit results to only this meeting if passed., page_no: num # The page number from which you want your page search results to be displayed., per_page: num # Number of results per page, expired: bool # If passed, only shows expired/non-expired recordings on RealtimeKit's bucket, search: str # The search query string. You can search using the meeting ID or title., sort_by: str, sort_order: str(ASC/DESC), start_time: str(date-time) # The start time range for which you want to retrieve the meetings. The time must be specified in ISO format., end_time: str(date-time) # The end time range for which you want to retrieve the meetings. The time must be specified in ISO format., status: [str] # Filter by one or more recording status}\n@returns(200) Success response\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/recordings\n@desc Start recording a meeting\n@required {account_id: str, app_id: str, meeting_id: str(uuid) # ID of the meeting to record.}\n@optional {allow_multiple_recordings: bool=false # By default, a meeting allows only one recording to run at a time. Enabling the `allow_multiple_recordings` parameter to true allows you to initiate multiple recordings concurrently in the same meeting. This allows you to record separate videos of the same meeting with different configurations, such as portrait mode or landscape mode., audio_config: map{channel: str, codec: str, export_file: bool} # Object containing configuration regarding the audio that is being recorded., file_name_prefix: str # Update the recording file name., interactive_config: map{type: str} # Allows you to add timed metadata to your recordings, which are digital markers inserted into a video file to provide contextual information at specific points in the content range. The ID3 tags containing this information are available to clients on the playback timeline in HLS format. The output files are generated in a compressed .tar format., max_seconds: int # Specifies the maximum duration for recording in seconds, ranging from a minimum of 60 seconds to a maximum of 24 hours., realtimekit_bucket_config: map{enabled!: bool}, rtmp_out_config: map{rtmp_url: str(uri)}, storage_config: map{access_key: str, auth_method: str, bucket!: str, host: str, password: str, path: str, port: num, private_key: str, region: str, secret: str, type!: str, username: str}, url: str(uri) # Pass a custom url to record arbitary screen, video_config: map{codec: str, export_file: bool, height: int, watermark: map, width: int}}\n@returns(200) Success response\n@example_request {\"allow_multiple_recordings\":false,\"audio_config\":{\"channel\":\"stereo\",\"codec\":\"AAC\",\"export_file\":true},\"file_name_prefix\":\"string\",\"interactive_config\":{\"type\":\"ID3\"},\"max_seconds\":60,\"meeting_id\":\"97440c6a-140b-40a9-9499-b23fd7a3868a\",\"realtimekit_bucket_config\":{\"enabled\":true},\"video_config\":{\"codec\":\"H264\",\"export_file\":true,\"height\":720,\"watermark\":{\"position\":\"left top\",\"size\":{\"height\":1,\"width\":1},\"url\":\"http://example.com\"},\"width\":1280}}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/recordings/active-recording/{meeting_id}\n@desc Fetch active recording\n@required {account_id: str, app_id: str, meeting_id: str # ID of the meeting}\n@returns(200) Success response\n@errors {404: Failure response}\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/recordings/track\n@desc Start recording participant audio tracks\n@required {account_id: str, app_id: str, meeting_id: str(uuid) # ID of the meeting to record.}\n@optional {layers: map # Optional audio layer configuration. If omitted, RealtimeKit records all participant audio using the default file name prefix., user_ids: [str] # Optional list of participant user IDs to record. Selective track recording (`user_ids`) is in early beta contact support to use this feature.}\n@returns(200) OK\n@example_request {\"meeting_id\":\"97440c6a-140b-40a9-9499-b23fd7a3868a\"}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/recordings/{recording_id}\n@desc Fetch details of a recording\n@required {account_id: str, app_id: str, recording_id: str(uuid) # ID of the recording}\n@returns(200) Success response\n\n@endpoint PUT /accounts/{account_id}/realtime/kit/{app_id}/recordings/{recording_id}\n@desc Pause/Resume/Stop recording\n@required {account_id: str, app_id: str # A Cloudflare-generated unique identifier for an item., recording_id: str(uuid) # ID of the recording, action: str(stop/pause/resume)}\n@returns(200) Success response\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions\n@desc Fetch all sessions of an App\n@required {account_id: str, app_id: str}\n@optional {page_no: num # The page number from which you want your page search results to be displayed., per_page: num # Number of results per page, sort_by: str(minutesConsumed/createdAt), sort_order: str(ASC/DESC), start_time: str(date-time) # The start time range for which you want to retrieve the meetings. The time must be specified in ISO format., end_time: str(date-time) # The end time range for which you want to retrieve the meetings. The time must be specified in ISO format., participants: str, status: str(LIVE/ENDED), search: str # Search string that matches sessions based on meeting title, meeting ID, and session ID, associated_id: str(uuid) # ID of the meeting that sessions should be associated with}\n@returns(200) {data: map{sessions: [map]}, paging: map{end_offset: num, start_offset: num, total_count: num}, success: bool} # Get all sessions success response\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/peer-report/{peer_id}\n@desc Fetch details of peer\n@required {account_id: str, app_id: str, peer_id: str(uuid) # ID of the peer}\n@optional {filters: str(device_info/ip_information/precall_network_information/events/quality_stats) # Filter to apply to the peer report., include_peer_events: bool=false # if true, response includes all the peer events of participant.}\n@returns(200) {data: map{participant: map{created_at: str, custom_participant_id: str, display_name: str, duration: num, id: str(uuid), joined_at: str, left_at: str, peer_events: [map], peer_report: map{metadata: map, quality: map}, role: str, session_id: str(uuid), updated_at: str, user_id: str}}, success: bool} # Returns details of a participant using peer ID, including the peer report.\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}\n@desc Fetch details of a session\n@required {account_id: str, app_id: str, session_id: str(uuid) # ID of the session}\n@optional {include_breakout_rooms: bool=false # List all breakout rooms}\n@returns(200) {data: map{associated_id: str, breakout_rooms: [map], created_at: str, ended_at: str, id: str, live_participants: num, max_concurrent_participants: num, meeting_display_name: str, minutes_consumed: num, organization_id: str, started_at: str, status: str, type: str, updated_at: str}, success: bool} # Get details about a particular session\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/chat\n@desc Fetch all chat messages of a session\n@required {account_id: str, app_id: str, session_id: str(uuid) # ID of the session}\n@returns(200) {data: map{chat_download_url: str, chat_download_url_expiry: str}, success: bool} # Returns all chat messages of a session.\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/livestream-sessions\n@desc Fetch livestream session details using a session ID\n@required {account_id: str, app_id: str, session_id: str(uuid)}\n@optional {per_page: num # Number of results per page., page_no: num # The page number from which you want your page search results to be displayed.}\n@returns(200) {data: map{created_at: str(date-time), err_message: str, id: str, ingest_seconds: num, invoked_time: str?, livestream_id: str, paging: map{end_offset: num, start_offset: num, total_count: num}, stopped_time: str(date-time), updated_at: str(date-time), viewer_seconds: num}, success: bool} # OK\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/participants\n@desc Fetch participants list of a session\n@required {account_id: str, app_id: str, session_id: str(uuid) # ID of the session}\n@optional {search: str # The search query string. You can search using participant ID, custom participant ID, or display name., page_no: num # The page number from which you want your page search results to be displayed., per_page: int=25 # Number of results per page., sort_order: str(ASC/DESC), sort_by: str(joinedAt/duration), include_peer_events: bool=false # if true, response includes all the peer events of participants., view: str(raw/consolidated)=raw # In breakout room sessions, the view parameter can be set to `raw` for session specific duration for participants or `consolidated` to accumulate breakout room durations.}\n@returns(200) {data: map{participants: [map]}, success: bool} # Get participants list of a particular session\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/participants/{participant_id}\n@desc Fetch details of a participant\n@required {account_id: str, app_id: str, participant_id: str(uuid) # ID of the participant, session_id: str(uuid) # ID of the session}\n@optional {include_peer_events: bool=false # if true, response includes all the peer events of participant.}\n@returns(200) {data: map{participant: map{created_at: str, custom_participant_id: str, display_name: str, duration: num, id: str, joined_at: str, left_at: str, peer_events: [map], preset_name: str, updated_at: str, user_id: str}}, success: bool} # Returns details of a participant.\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/summary\n@desc Fetch summary of transcripts for a session\n@required {account_id: str, app_id: str, session_id: str(uuid)}\n@returns(200) {data: map{sessionId: str, summaryDownloadUrl: str, summaryDownloadUrlExpiry: str}, success: bool} # Returns a complete summary of transcripts of a session.\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/summary\n@desc Generate summary of Transcripts for the session\n@required {account_id: str, app_id: str, session_id: str(uuid)}\n@returns(200) {data: map{session_id: str(uuid), status: str}, success: bool} # Success\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/sessions/{session_id}/transcript\n@desc Fetch the complete transcript for a session\n@required {account_id: str, app_id: str, session_id: str(uuid) # ID of the session}\n@optional {format: str(SRT/VTT/JSON/CSV)=CSV # Transcript file format to fetch.}\n@returns(200) {data: map{sessionId: str, transcript_download_url: str, transcript_download_url_expiry: str}, success: bool} # Returns the complete transcript of a session.\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/webhooks\n@desc Fetch all webhooks details\n@required {account_id: str, app_id: str}\n@returns(200) {data: [map], success: bool} # Operation successful\n@errors {401: Invalid credentials}\n\n@endpoint POST /accounts/{account_id}/realtime/kit/{app_id}/webhooks\n@desc Add a webhook\n@required {account_id: str, app_id: str, events: [str] # Events that this webhook will get triggered by, name: str # Name of the webhook, url: str(uri) # URL this webhook will send events to}\n@optional {enabled: bool=true # Set whether or not the webhook should be active when created}\n@returns(201) {data: map{created_at: str(date-time), enabled: bool, events: [str], id: str(uuid), name: str, updated_at: str(date-time), url: str(uri)}, success: bool} # Webhook registered successfully\n@errors {400: Error - malformed request, 401: Invalid credentials}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/webhooks/all\n@desc Fetch all supported webhook events\n@required {account_id: str, app_id: str}\n@returns(200) {data: [str], success: bool} # Operation successful\n\n@endpoint DELETE /accounts/{account_id}/realtime/kit/{app_id}/webhooks/{webhook_id}\n@desc Delete a webhook\n@required {account_id: str, app_id: str, webhook_id: str(uuid) # ID of the webhook}\n@returns(200) {data: map{created_at: str(date-time), enabled: bool, events: [str], id: str(uuid), name: str, updated_at: str(date-time), url: str(uri)}, success: bool} # Operation successful\n@errors {400: Error - malformed request, 401: Invalid credentials}\n\n@endpoint GET /accounts/{account_id}/realtime/kit/{app_id}/webhooks/{webhook_id}\n@desc Fetch details of a webhook\n@required {account_id: str, app_id: str, webhook_id: str(uuid) # ID of the webhook}\n@returns(200) {data: map{created_at: str(date-time), enabled: bool, events: [str], id: str(uuid), name: str, updated_at: str(date-time), url: str(uri)}, success: bool} # Operation successful\n@errors {400: Error - malformed request, 401: Invalid credentials}\n\n@endpoint PATCH /accounts/{account_id}/realtime/kit/{app_id}/webhooks/{webhook_id}\n@desc Edit a webhook\n@required {account_id: str, app_id: str, webhook_id: str(uuid) # ID of the webhook}\n@optional {enabled: bool=true, events: [str] # Events that the webhook will get triggered by, name: str # Name of the webhook, url: str(uri) # URL the webhook will send events to}\n@returns(200) {data: map{created_at: str(date-time), enabled: bool, events: [str], id: str(uuid), name: str, updated_at: str(date-time), url: str(uri)}, success: bool} # Operation successful\n@errors {400: Error - malformed request, 401: Invalid credentials}\n@example_request \"{\\n  \\\"name\\\": \\\"test\\\",\\n  \\\"events\\\": [ \\\"meeting.started\\\" ],\\n  \\\"url\\\": \\\"https://new-test-url.com\\\"\\n}\\n\"\n\n@endpoint PUT /accounts/{account_id}/realtime/kit/{app_id}/webhooks/{webhook_id}\n@desc Replace a webhook\n@required {account_id: str, app_id: str, webhook_id: str(uuid) # ID of the webhook, events: [str] # Events that this webhook will get triggered by, name: str # Name of the webhook, url: str(uri) # URL this webhook will send events to}\n@optional {enabled: bool=true # Set whether or not the webhook should be active when created}\n@returns(200) {data: map{created_at: str(date-time), enabled: bool, events: [str], id: str(uuid), name: str, updated_at: str(date-time), url: str(uri)}, success: bool} # Operation successful\n@errors {400: Error - malformed request, 401: Invalid credentials}\n@example_request \"{\\n  \\\"name\\\": \\\"test\\\",\\n  \\\"events\\\": [ \\\"meeting.started\\\" ],\\n  \\\"url\\\": \\\"https://new-test-url.com\\\"\\n}\\n\"\n\n@endpoint GET /accounts/{account_id}/receipts/{receipt_id}/pdf\n@desc Get Receipt PDF\n@required {account_id: str, receipt_id: str # Receipt identifier.}\n@optional {doctype: str}\n@returns(200) Receipt PDF document\n@errors {4XX: Get Receipt PDF response failure}\n\n@endpoint POST /accounts/{account_id}/registrar-sandbox/domain-check\n@desc Check domain availability\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., domains: [str] # List of fully qualified domain names (FQDNs) to check for availability. Each domain must include the extension. - Minimum: 1 domain. - Maximum: 20 domains per request. - The response returns domains on unsupported extensions with `registrable: false` and a `reason` field. - The response may omit malformed domain names (e.g., names missing an extension).}\n@returns(200) Successfully returned availability results. Each requested domain appears in the `domains` array with its current availability status and pricing (if available).\n@errors {400: Invalid request parameters. Common causes include: - Empty `domains` array. - More than 20 domains per request. - Malformed request body. - Zero valid domains after validation.}\n@example_request {\"domains\":[\"myawesomebrand.com\",\"myawesomebrand.net\",\"myawesomebrand.org\",\"myawesomebrand.app\",\"myawesomebrand.dev\"]}\n\n@endpoint GET /accounts/{account_id}/registrar-sandbox/domain-search\n@desc Search for available domains\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., q: str # The search term to find domain suggestions. Accepts keywords, phrases, or full domain names. - Phrases: \"coffee shop\" returns coffeeshop.com, mycoffeeshop.net, etc. - Domain names: \"example.com\" returns example.com and variations across extensions}\n@optional {extensions: [str] # Limits results to specific domain extensions from the supported set. If not specified, returns results across all supported extensions. Extensions not in the supported set are silently ignored., limit: int=20 # Maximum number of domain suggestions to return. Defaults to 20 if not specified.}\n@returns(200) Successfully returned domain search results.\n@errors {400: Invalid request parameters. Common causes include: - Missing required `q` parameter. - Query exceeds 100 character limit. - Invalid extension format.}\n\n@endpoint GET /accounts/{account_id}/registrar-sandbox/extensions\n@desc List extensions\n@required {account_id: str}\n@optional {name: str # Filter extensions by exact name match. For example, `name=com` returns only the `com` extension., cursor: str # Opaque token from a previous response's `result_info.cursor`. Pass this value to fetch the next page of results. Omit (or pass an empty string) for the first page., per_page: int=20 # Number of items to return per page., direction: str(asc/desc)=asc # Sort direction for results. Defaults to ascending order., sort_by: str(name/created_at/updated_at)=name # Column to sort results by. Defaults to `name` when omitted.}\n@returns(200) Successfully returned extensions.\n@errors {304: Not Modified — client cache is current. Returned when the request includes an `If-None-Match` header matching the current ETag., 4XX: List extensions failure.}\n\n@endpoint GET /accounts/{account_id}/registrar-sandbox/extensions/{extension}\n@desc Get extension\n@required {account_id: str, extension: str # The extension name (e.g., `com`, `co.uk`).}\n@returns(200) Successfully returned extension.\n@errors {304: Not Modified — client cache is current. Returned when the request includes an `If-None-Match` header matching the current ETag., 4XX: Get extension failure.}\n\n@endpoint GET /accounts/{account_id}/registrar-sandbox/registrations\n@desc List Registrations\n@required {account_id: str # Cloudflare account ID.}\n@optional {cursor: str # Opaque token from a previous response's `result_info.cursor`. Pass this value to fetch the next page of results. Omit (or pass an empty string) for the first page., per_page: int=20 # Number of items to return per page., direction: str(asc/desc)=asc # Sort direction for results. Defaults to ascending order., sort_by: str(registry_created_at/registry_expires_at/name)=registry_created_at # Column to sort results by. Defaults to registration date (`registry_created_at`) when omitted.}\n@returns(200) List of registrations for the account.\n@errors {4XX: List registrations failure.}\n\n@endpoint POST /accounts/{account_id}/registrar-sandbox/registrations\n@desc Create Registration\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., domain_name: str # Provides a fully qualified domain name (FQDN), including the extension (e.g., `example.com`, `mybrand.app`). The domain name uniquely identifies a registration. Cloudflare permits only one registration per domain, making the domain name a natural idempotency key for registration requests.}\n@optional {Prefer: str # Set to `respond-async` to receive an immediate `202 Accepted` without waiting for the operation to complete (RFC 7240).  The header may be combined with other preferences using standard comma-separated syntax., acknowledgements: map # Provides user acknowledgements for a specific extension or premium registration flow. The extension registration schema from the extension discovery endpoint identifies the required keys., auto_renew: bool=false # Enable or disable automatic renewal. Defaults to `false` if omitted. Setting this field to `true` is an explicit opt-in authorizing Cloudflare to charge the account's default payment method up to 30 days before domain expiry to renew the domain automatically. Renewal pricing may change over time based on registry pricing., contact_extensions: map # Provides registry-specific contact extension values for the registrant. `GET /accounts/{account_id}/registrar/extensions/{extension}` identifies the required keys and allowed values for each extension in the `registration_schema.properties.contact_extensions` object.  Examples include `.us` nexus fields, `.uk` registrant type fields, and `.ca` legal type fields. Omit this object when the extension's registration schema excludes `contact_extensions`., contacts: map{administrator: any, billing: any, registrant: any, technical: any} # Provides contact data for the registration request.  The per-extension schema from `GET /accounts/{account_id}/registrar/extensions/{extension}` defines the accepted contact roles. Every currently supported extension requires only `contacts.registrant` from API callers. Callers may provide additional roles such as `technical`, `administrator`, and `billing` when the extension schema includes them. When a registry requires an omitted role, Cloudflare may derive that contact from `contacts.registrant`.  When the request omits either the entire `contacts` object or `contacts.registrant`, the system uses the account's default address book entry as the registrant contact. The account owner must configure this default at `https://dash.cloudflare.com/{account_id}/domains/registrations`, where they can create or update the address book entry and accept the required agreement. Dashboard settings currently provide the only way to manage address book entries.  Without either a default address book entry or a registrant contact, the registration request fails validation., privacy_mode: str(off/redaction)=redaction # Sets the WHOIS privacy mode for the registration. Defaults to `redaction`. - `off`: Disables WHOIS privacy. - `redaction`: Requests WHOIS redaction where the extension supports it.   Some extensions exclude privacy and redaction., years: int # Sets the registration term from 1 to 10 years. When omitted, this field defaults to the registry's minimum registration period for the extension. Most extensions require 1 year, while some require longer minimum terms (e.g., `.ai` requires 2 years).  Each registry may also enforce its own maximum registration term. A request above that maximum fails. When uncertain, omit this field to use the default.}\n@returns(201) Registration completed successfully within the synchronous wait window. The workflow status will have `state: succeeded` and `completed: true`.\n@returns(202) Registration is still processing. This occurs when the operation did not complete within the synchronous wait window, or when `Prefer: respond-async` was sent. Poll the URL in `links.self` to track progress.\n@errors {4XX: Create registration failure.}\n@example_request {\"auto_renew\":false,\"contact_extensions\":{\"ca_legal_type\":\"CCT\"},\"contacts\":{\"registrant\":{\"email\":\"ada@example.ca\",\"phone\":\"+1.6135550100\",\"postal_info\":{\"address\":{\"city\":\"Ottawa\",\"country_code\":\"CA\",\"postal_code\":\"K1A 0B1\",\"state\":true,\"street\":\"123 Queen St\"},\"name\":\"Ada Lovelace\",\"organization\":\"Example Canada Inc\"}}},\"domain_name\":\"my-brand-example.ca\",\"years\":1}\n\n@endpoint GET /accounts/{account_id}/registrar-sandbox/registrations/{domain_name}\n@desc Get Registration\n@required {account_id: str # Cloudflare account ID., domain_name: str # Domain name to retrieve.}\n@returns(200) Registration details.\n@errors {4XX: Get registration failure.}\n\n@endpoint PATCH /accounts/{account_id}/registrar-sandbox/registrations/{domain_name}\n@desc Update Registration\n@required {account_id: str # Cloudflare account ID., domain_name: str # Domain name to update.}\n@optional {Prefer: str # Set to `respond-async` to receive an immediate `202 Accepted` without waiting for the operation to complete (RFC 7240)., auto_renew: bool # Enable or disable automatic renewal. Setting this field to `true` authorizes Cloudflare to charge the account's default payment method up to 30 days before domain expiry to renew the domain automatically. Renewal pricing may change over time based on registry pricing.}\n@returns(200) Update completed successfully within the synchronous wait window. The workflow status will have `state: succeeded` and `completed: true`.\n@returns(202) Update is still processing. This occurs when the operation did not complete within the synchronous wait window, or when `Prefer: respond-async` was sent. Poll the URL in `links.self` to track progress.\n@errors {4XX: Update registration failure.}\n@example_request {\"auto_renew\":false}\n\n@endpoint GET /accounts/{account_id}/registrar-sandbox/registrations/{domain_name}/registration-status\n@desc Get Registration Status\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., domain_name: str}\n@returns(200) Registration workflow status.\n@errors {4XX: Get status failure.}\n\n@endpoint GET /accounts/{account_id}/registrar-sandbox/registrations/{domain_name}/update-status\n@desc Get Update Status\n@required {account_id: str # Cloudflare account ID., domain_name: str}\n@returns(200) Update workflow status.\n@errors {4XX: Get update status failure.}\n\n@endpoint POST /accounts/{account_id}/registrar/domain-check\n@desc Check domain availability\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., domains: [str] # List of fully qualified domain names (FQDNs) to check for availability. Each domain must include the extension. - Minimum: 1 domain. - Maximum: 20 domains per request. - The response returns domains on unsupported extensions with `registrable: false` and a `reason` field. - The response may omit malformed domain names (e.g., names missing an extension).}\n@returns(200) Successfully returned availability results. Each requested domain appears in the `domains` array with its current availability status and pricing (if available).\n@errors {400: Invalid request parameters. Common causes include: - Empty `domains` array. - More than 20 domains per request. - Malformed request body. - Zero valid domains after validation.}\n@example_request {\"domains\":[\"myawesomebrand.com\",\"myawesomebrand.net\",\"myawesomebrand.org\",\"myawesomebrand.app\",\"myawesomebrand.dev\"]}\n\n@endpoint GET /accounts/{account_id}/registrar/domain-search\n@desc Search for available domains\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., q: str # The search term to find domain suggestions. Accepts keywords, phrases, or full domain names. - Phrases: \"coffee shop\" returns coffeeshop.com, mycoffeeshop.net, etc. - Domain names: \"example.com\" returns example.com and variations across extensions}\n@optional {extensions: [str] # Limits results to specific domain extensions from the supported set. If not specified, returns results across all supported extensions. Extensions not in the supported set are silently ignored., limit: int=20 # Maximum number of domain suggestions to return. Defaults to 20 if not specified.}\n@returns(200) Successfully returned domain search results.\n@errors {400: Invalid request parameters. Common causes include: - Missing required `q` parameter. - Query exceeds 100 character limit. - Invalid extension format.}\n\n@endpoint GET /accounts/{account_id}/registrar/domains\n@desc List domains\n@required {account_id: str}\n@returns(200) List domains response.\n@errors {4XX: List domains response failure.}\n\n@endpoint GET /accounts/{account_id}/registrar/domains/{domain_name}\n@desc Get domain\n@required {domain_name: str, account_id: str}\n@returns(200) Get domain response.\n@errors {4XX: Get domain response failure.}\n\n@endpoint PUT /accounts/{account_id}/registrar/domains/{domain_name}\n@desc Update domain\n@required {domain_name: str, account_id: str}\n@returns(200) Update domain response.\n@errors {4XX: Update domain response failure.}\n\n@endpoint GET /accounts/{account_id}/registrar/extensions\n@desc List extensions\n@required {account_id: str}\n@optional {name: str # Filter extensions by exact name match. For example, `name=com` returns only the `com` extension., cursor: str # Opaque token from a previous response's `result_info.cursor`. Pass this value to fetch the next page of results. Omit (or pass an empty string) for the first page., per_page: int=20 # Number of items to return per page., direction: str(asc/desc)=asc # Sort direction for results. Defaults to ascending order., sort_by: str(name/created_at/updated_at)=name # Column to sort results by. Defaults to `name` when omitted.}\n@returns(200) Successfully returned extensions.\n@errors {304: Not Modified — client cache is current. Returned when the request includes an `If-None-Match` header matching the current ETag., 4XX: List extensions failure.}\n\n@endpoint GET /accounts/{account_id}/registrar/extensions/{extension}\n@desc Get extension\n@required {account_id: str, extension: str # The extension name (e.g., `com`, `co.uk`).}\n@returns(200) Successfully returned extension.\n@errors {304: Not Modified — client cache is current. Returned when the request includes an `If-None-Match` header matching the current ETag., 4XX: Get extension failure.}\n\n@endpoint GET /accounts/{account_id}/registrar/registrations\n@desc List Registrations\n@required {account_id: str # Cloudflare account ID.}\n@optional {cursor: str # Opaque token from a previous response's `result_info.cursor`. Pass this value to fetch the next page of results. Omit (or pass an empty string) for the first page., per_page: int=20 # Number of items to return per page., direction: str(asc/desc)=asc # Sort direction for results. Defaults to ascending order., sort_by: str(registry_created_at/registry_expires_at/name)=registry_created_at # Column to sort results by. Defaults to registration date (`registry_created_at`) when omitted.}\n@returns(200) List of registrations for the account.\n@errors {4XX: List registrations failure.}\n\n@endpoint POST /accounts/{account_id}/registrar/registrations\n@desc Create Registration\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., domain_name: str # Provides a fully qualified domain name (FQDN), including the extension (e.g., `example.com`, `mybrand.app`). The domain name uniquely identifies a registration. Cloudflare permits only one registration per domain, making the domain name a natural idempotency key for registration requests.}\n@optional {Prefer: str # Set to `respond-async` to receive an immediate `202 Accepted` without waiting for the operation to complete (RFC 7240).  The header may be combined with other preferences using standard comma-separated syntax., acknowledgements: map # Provides user acknowledgements for a specific extension or premium registration flow. The extension registration schema from the extension discovery endpoint identifies the required keys., auto_renew: bool=false # Enable or disable automatic renewal. Defaults to `false` if omitted. Setting this field to `true` is an explicit opt-in authorizing Cloudflare to charge the account's default payment method up to 30 days before domain expiry to renew the domain automatically. Renewal pricing may change over time based on registry pricing., contact_extensions: map # Provides registry-specific contact extension values for the registrant. `GET /accounts/{account_id}/registrar/extensions/{extension}` identifies the required keys and allowed values for each extension in the `registration_schema.properties.contact_extensions` object.  Examples include `.us` nexus fields, `.uk` registrant type fields, and `.ca` legal type fields. Omit this object when the extension's registration schema excludes `contact_extensions`., contacts: map{administrator: any, billing: any, registrant: any, technical: any} # Provides contact data for the registration request.  The per-extension schema from `GET /accounts/{account_id}/registrar/extensions/{extension}` defines the accepted contact roles. Every currently supported extension requires only `contacts.registrant` from API callers. Callers may provide additional roles such as `technical`, `administrator`, and `billing` when the extension schema includes them. When a registry requires an omitted role, Cloudflare may derive that contact from `contacts.registrant`.  When the request omits either the entire `contacts` object or `contacts.registrant`, the system uses the account's default address book entry as the registrant contact. The account owner must configure this default at `https://dash.cloudflare.com/{account_id}/domains/registrations`, where they can create or update the address book entry and accept the required agreement. Dashboard settings currently provide the only way to manage address book entries.  Without either a default address book entry or a registrant contact, the registration request fails validation., privacy_mode: str(off/redaction)=redaction # Sets the WHOIS privacy mode for the registration. Defaults to `redaction`. - `off`: Disables WHOIS privacy. - `redaction`: Requests WHOIS redaction where the extension supports it.   Some extensions exclude privacy and redaction., years: int # Sets the registration term from 1 to 10 years. When omitted, this field defaults to the registry's minimum registration period for the extension. Most extensions require 1 year, while some require longer minimum terms (e.g., `.ai` requires 2 years).  Each registry may also enforce its own maximum registration term. A request above that maximum fails. When uncertain, omit this field to use the default.}\n@returns(201) Registration completed successfully within the synchronous wait window. The workflow status will have `state: succeeded` and `completed: true`.\n@returns(202) Registration is still processing. This occurs when the operation did not complete within the synchronous wait window, or when `Prefer: respond-async` was sent. Poll the URL in `links.self` to track progress.\n@errors {4XX: Create registration failure.}\n@example_request {\"auto_renew\":false,\"contact_extensions\":{\"ca_legal_type\":\"CCT\"},\"contacts\":{\"registrant\":{\"email\":\"ada@example.ca\",\"phone\":\"+1.6135550100\",\"postal_info\":{\"address\":{\"city\":\"Ottawa\",\"country_code\":\"CA\",\"postal_code\":\"K1A 0B1\",\"state\":true,\"street\":\"123 Queen St\"},\"name\":\"Ada Lovelace\",\"organization\":\"Example Canada Inc\"}}},\"domain_name\":\"my-brand-example.ca\",\"years\":1}\n\n@endpoint GET /accounts/{account_id}/registrar/registrations/{domain_name}\n@desc Get Registration\n@required {account_id: str # Cloudflare account ID., domain_name: str # Domain name to retrieve.}\n@returns(200) Registration details.\n@errors {4XX: Get registration failure.}\n\n@endpoint PATCH /accounts/{account_id}/registrar/registrations/{domain_name}\n@desc Update Registration\n@required {account_id: str # Cloudflare account ID., domain_name: str # Domain name to update.}\n@optional {Prefer: str # Set to `respond-async` to receive an immediate `202 Accepted` without waiting for the operation to complete (RFC 7240)., auto_renew: bool # Enable or disable automatic renewal. Setting this field to `true` authorizes Cloudflare to charge the account's default payment method up to 30 days before domain expiry to renew the domain automatically. Renewal pricing may change over time based on registry pricing.}\n@returns(200) Update completed successfully within the synchronous wait window. The workflow status will have `state: succeeded` and `completed: true`.\n@returns(202) Update is still processing. This occurs when the operation did not complete within the synchronous wait window, or when `Prefer: respond-async` was sent. Poll the URL in `links.self` to track progress.\n@errors {4XX: Update registration failure.}\n@example_request {\"auto_renew\":false}\n\n@endpoint GET /accounts/{account_id}/registrar/registrations/{domain_name}/registration-status\n@desc Get Registration Status\n@required {account_id: str # Cloudflare account ID. Required for all Registrar API operations., domain_name: str}\n@returns(200) Registration workflow status.\n@errors {4XX: Get status failure.}\n\n@endpoint GET /accounts/{account_id}/registrar/registrations/{domain_name}/update-status\n@desc Get Update Status\n@required {account_id: str # Cloudflare account ID., domain_name: str}\n@returns(200) Update workflow status.\n@errors {4XX: Get update status failure.}\n\n@endpoint GET /accounts/{account_id}/reporting/industry\n@desc Get an account industry\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map?{industry: any, unlock_time: str?}, success: bool} # Account industry retrieved successfully (returns 'unknown' if not set)\n\n@endpoint PATCH /accounts/{account_id}/reporting/industry\n@desc Update an account industry\n@required {account_id: str, industry: any # The industry of the account}\n@returns(200) {errors: [map], messages: [map], result: map?{industry: any, unlock_time: str?, valid_from: str?, version: int}, success: bool} # Account industry set successfully\n@errors {400: Invalid request body or industry already set to this value, 423: Industry is locked and cannot be updated until unlock_time, 500: Internal server error}\n\n@endpoint GET /accounts/{account_id}/reporting/policies\n@desc List reporting policies\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], result: [map]?, success: bool} # List of policies retrieved successfully\n@errors {400: Bad request}\n\n@endpoint GET /accounts/{account_id}/reporting/policies/{policy_id}\n@desc Get a reporting policy\n@required {policy_id: str(uuid), account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map?{enabled: bool, policy_description: str, policy_id: str(uuid), policy_name: str, policy_schedule: str, valid_from: str(date-time)?, valid_to: str(date-time)?, version: int}, success: bool} # Policy retrieved successfully\n@errors {404: Policy not found}\n\n@endpoint GET /accounts/{account_id}/reporting/reports\n@desc List generated reports\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], result: [map]?, success: bool} # List of reports retrieved successfully\n@errors {400: Bad request}\n\n@endpoint GET /accounts/{account_id}/reporting/reports/{report_id}\n@desc Get a generated report\n@required {account_id: str, report_id: str(uuid)}\n@returns(200) {errors: [map], messages: [map], result: map?{generated_on: str?, generation_id: str(uuid), policy_id: str(uuid), policy_version: int, reason: any, report: any, report_id: str(uuid), report_settings: any, report_status: any, scheduled_for: str(date-time)?, scheduled_on: str(date-time)?}, success: bool} # Report retrieved successfully\n@errors {404: Report not found}\n\n@endpoint POST /accounts/{account_id}/request-tracer/trace\n@desc Request Trace\n@required {account_id: str, method: str # HTTP Method of tracing request, url: str # URL to which perform tracing request}\n@optional {body: map{base64: str, json: map, plain_text: str}, context: map{bot_score: int, geoloc: map, skip_challenge: bool, threat_score: int} # Additional request parameters, cookies: map # Cookies added to tracing request, headers: map # Headers added to tracing request, protocol: str # HTTP Protocol of tracing request, skip_response: bool # Skip sending the request to the Origin server after all rules evaluation}\n@returns(200) Request Trace response\n@errors {4XX: Request Trace response failure}\n@example_request {\"body\":{\"base64\":\"c29tZV9yZXF1ZXN0X2JvZHk=\"},\"context\":{\"geoloc\":{\"city\":\"London\"},\"skip_challenge\":true},\"cookies\":{\"cookie_name_1\":\"cookie_value_1\",\"cookie_name_2\":\"cookie_value_2\"},\"headers\":{\"header_name_1\":\"header_value_1\",\"header_name_2\":\"header_value_2\"},\"method\":\"PUT\",\"protocol\":\"HTTP/1.1\",\"url\":\"https://some.zone/some_path\"}\n\n@endpoint GET /accounts/{account_id}/resource-library/applications\n@desc List applications\n@required {account_id: str # Account ID.}\n@optional {filter: str # Filter applications using key:value format. Supported filter keys: - name: Filter by application name (e.g., name:HR) - id: Filter by application ID (e.g., id:498) - human_id: Filter by human-readable ID (e.g., human_id:HR) - hostname: Filter by hostname or support domain (e.g., hostname:portal.example.com) - source: Filter by application source name (e.g., source:cloudflare) - ip_subnet: Filter by IP subnet using CIDR containment — returns applications where any stored subnet contains the search value (e.g., ip_subnet:10.0.1.5/32 matches apps with 10.0.0.0/16) - category_id: Filter by category ID (e.g., category_id:12). - category_name: Filter by category name (e.g., category_name:HR). - supported: Filter by supported Cloudflare product (e.g., supported:ACCESS). Values: GATEWAY, ACCESS, CASB. - review_status: Filter by the account's Gateway review status. Values: approved, unapproved, in_review, unreviewed. ., limit: int=25 # Limit of number of results to return (max 250)., offset: int=0 # Offset of results to return., order_by: str # Order results using field:direction format. Supported fields are name, id, human_id, category_id, application_type, application_confidence_score, and gen_ai_score. Supported directions are asc and desc. Ignored when search is provided; results are ranked by relevance instead., search: str # Fuzzy search across application name and hostnames. Results are ranked by relevance. Must be between 2 and 200 characters. Can be combined with filter parameters., fields: str # Return only the listed properties on each application, as a comma-separated list. Use this to keep responses small when you only need part of each application — for example populating a picker with `fields=id,name` instead of downloading every hostname and IP subnet.  Omit this parameter to receive the full application object.  `id` is always returned.  Selectable properties: `id`, `name`, `human_id`, `version`, `hostnames`, `support_domains`, `ip_subnets`, `port_protocols`, `supported`, `gen_ai_score`, `application_confidence_score`, `created_at`, `updated_at`, `review_status`.  Unknown or empty property names return `400`.}\n@returns(200) Get the application response.\n@errors {403: The authenticated principal does not have access to the requested account., 502: Application review statuses could not be retrieved., 503: Application review statuses were requested but are not available., 4XX: Get application response failure.}\n\n@endpoint POST /accounts/{account_id}/resource-library/applications\n@desc Create application\n@required {account_id: str # Account ID., category_id: int(int64) # Returns the category ID., human_id: str # Returns the human readable ID., name: str # Returns the application name.}\n@optional {hostnames: [str] # Hostnames matched by the application., ip_subnets: [str] # IP subnets matched by the application., port_protocols: [str] # Port and protocol pairs matched by the application., support_domains: [str] # Support domains matched by the application.}\n@returns(201) Create application response.\n@errors {4XX: Create application response failure.}\n\n@endpoint DELETE /accounts/{account_id}/resource-library/applications/{id}\n@desc Delete application\n@required {account_id: str # Account ID., id: int(int64) # Application ID.}\n@returns(200) Delete application response.\n@errors {409: The application is referenced by other resources and cannot be deleted., 502: Application deletion could not be safely completed because a required validation was unavailable., 4XX: Delete application response failure.}\n\n@endpoint GET /accounts/{account_id}/resource-library/applications/{id}\n@desc Get application\n@required {account_id: str # Account ID., id: int(int64) # Application ID.}\n@returns(200) Get the application response.\n@errors {4XX: Get application by id response failure.}\n\n@endpoint PATCH /accounts/{account_id}/resource-library/applications/{id}\n@desc Update application\n@required {account_id: str # Account ID., id: int(int64) # Application ID.}\n@optional {hostnames: [str] # Hostnames matched by the application., ip_subnets: [str] # IP subnets matched by the application., port_protocols: [str] # Port and protocol pairs matched by the application., support_domains: [str] # Support domains matched by the application.}\n@returns(200) Update application response.\n@errors {4XX: Update application response failure.}\n\n@endpoint GET /accounts/{account_id}/resource-library/categories\n@desc List application categories\n@required {account_id: str # Account ID.}\n@optional {limit: int=25 # Limit of number of results to return., offset: int=0 # Offset of results to return.}\n@returns(200) Get all application categories response.\n@errors {4XX: Get application categories response failure.}\n\n@endpoint GET /accounts/{account_id}/resource-library/categories/{id}\n@desc Get application category\n@required {account_id: str # Account ID., id: int(int64) # Application category ID.}\n@returns(200) Get application category by id response.\n@errors {4XX: Get application category by id response failure.}\n\n@endpoint GET /accounts/{account_id}/roles\n@desc List Roles\n@required {account_id: any}\n@optional {page: num=1, per_page: num=20}\n@returns(200) List Roles response\n@errors {4XX: List Roles response failure}\n\n@endpoint GET /accounts/{account_id}/roles/{role_id}\n@desc Role Details\n@required {role_id: str, account_id: any}\n@returns(200) Role Details response\n@errors {4XX: Role Details response failure}\n\n@endpoint GET /accounts/{account_id}/rules/lists\n@desc Get lists\n@required {account_id: str}\n@returns(200) Get lists response.\n@errors {4XX: Get lists response failure.}\n\n@endpoint POST /accounts/{account_id}/rules/lists\n@desc Create a list\n@required {account_id: str, kind: any(ip/redirect/hostname/asn) # The type of the list. Each type supports specific list items (IP addresses, ASNs, hostnames or redirects)., name: str # An informative name for the list. Use this name in filter and rule expressions.}\n@optional {description: str # An informative summary of the list.}\n@returns(200) Create a list response.\n@errors {4XX: Create a list response failure.}\n\n@endpoint GET /accounts/{account_id}/rules/lists/bulk_operations/{operation_id}\n@desc Get bulk operation status\n@required {operation_id: str, account_id: str}\n@returns(200) Get bulk operation status response.\n@errors {4XX: Get bulk operation status response failure.}\n\n@endpoint DELETE /accounts/{account_id}/rules/lists/{list_id}\n@desc Delete a list\n@required {list_id: str, account_id: str}\n@returns(200) Delete a list response.\n@errors {4XX: Delete a list response failure.}\n\n@endpoint GET /accounts/{account_id}/rules/lists/{list_id}\n@desc Get a list\n@required {list_id: str, account_id: str}\n@returns(200) Get a list response.\n@errors {4XX: Get a list response failure.}\n\n@endpoint PUT /accounts/{account_id}/rules/lists/{list_id}\n@desc Update a list\n@required {list_id: str, account_id: str}\n@optional {description: str # An informative summary of the list.}\n@returns(200) Update a list response.\n@errors {4XX: Update a list response failure.}\n\n@endpoint DELETE /accounts/{account_id}/rules/lists/{list_id}/items\n@desc Delete list items\n@required {list_id: str, account_id: str}\n@optional {items: [map{id!: str}]}\n@returns(200) Delete list items response.\n@errors {4XX: Delete list items response failure.}\n\n@endpoint GET /accounts/{account_id}/rules/lists/{list_id}/items\n@desc Get list items\n@required {list_id: str, account_id: str}\n@optional {cursor: str, per_page: int, search: str}\n@returns(200) Get list items response.\n@errors {4XX: Get list items response failure.}\n\n@endpoint POST /accounts/{account_id}/rules/lists/{list_id}/items\n@desc Create list items\n@required {list_id: str, account_id: str}\n@returns(200) Create list items response.\n@errors {4XX: Create list items response failure.}\n\n@endpoint PUT /accounts/{account_id}/rules/lists/{list_id}/items\n@desc Update all list items\n@required {list_id: str, account_id: str}\n@returns(200) Update all list items response.\n@errors {4XX: Update all list items response failure.}\n\n@endpoint GET /accounts/{account_id}/rules/lists/{list_id}/items/{item_id}\n@desc Get a list item\n@required {item_id: str, list_id: str, account_id: str}\n@returns(200) Get a list item response.\n@errors {4XX: Get a list item response failure.}\n\n@endpoint GET /accounts/{account_id}/rulesets\n@desc List account rulesets\n@required {account_id: str}\n@optional {cursor: str, per_page: int}\n@returns(200) A rulesets response.\n@errors {4XX: A failure response.}\n\n@endpoint POST /accounts/{account_id}/rulesets\n@desc Create an account ruleset\n@required {account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /accounts/{account_id}/rulesets/phases/{ruleset_phase}/entrypoint\n@desc Get an account entry point ruleset\n@required {ruleset_phase: str, account_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint PUT /accounts/{account_id}/rulesets/phases/{ruleset_phase}/entrypoint\n@desc Update an account entry point ruleset\n@required {ruleset_phase: str, account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /accounts/{account_id}/rulesets/phases/{ruleset_phase}/entrypoint/versions\n@desc List an account entry point ruleset's versions\n@required {ruleset_phase: str, account_id: str}\n@returns(200) A rulesets response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /accounts/{account_id}/rulesets/phases/{ruleset_phase}/entrypoint/versions/{ruleset_version}\n@desc Get an account entry point ruleset version\n@required {ruleset_version: str, ruleset_phase: str, account_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint DELETE /accounts/{account_id}/rulesets/{ruleset_id}\n@desc Delete an account ruleset\n@required {ruleset_id: str, account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(204) An empty response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /accounts/{account_id}/rulesets/{ruleset_id}\n@desc Get an account ruleset\n@required {ruleset_id: str, account_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint PUT /accounts/{account_id}/rulesets/{ruleset_id}\n@desc Update an account ruleset\n@required {ruleset_id: str, account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint POST /accounts/{account_id}/rulesets/{ruleset_id}/rules\n@desc Create an account ruleset rule\n@required {ruleset_id: str, account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint DELETE /accounts/{account_id}/rulesets/{ruleset_id}/rules/{rule_id}\n@desc Delete an account ruleset rule\n@required {rule_id: str, ruleset_id: str, account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint PATCH /accounts/{account_id}/rulesets/{ruleset_id}/rules/{rule_id}\n@desc Update an account ruleset rule\n@required {rule_id: str, ruleset_id: str, account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /accounts/{account_id}/rulesets/{ruleset_id}/versions\n@desc List an account ruleset's versions\n@required {ruleset_id: str, account_id: str}\n@returns(200) A rulesets response.\n@errors {4XX: A failure response.}\n\n@endpoint DELETE /accounts/{account_id}/rulesets/{ruleset_id}/versions/{ruleset_version}\n@desc Delete an account ruleset version\n@required {ruleset_version: str, ruleset_id: str, account_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(204) An empty response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /accounts/{account_id}/rulesets/{ruleset_id}/versions/{ruleset_version}\n@desc Get an account ruleset version\n@required {ruleset_version: str, ruleset_id: str, account_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /accounts/{account_id}/rulesets/{ruleset_id}/versions/{ruleset_version}/by_tag/{rule_tag}\n@desc List an account ruleset version's rules by tag\n@required {rule_tag: str, ruleset_version: str, ruleset_id: str, account_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint POST /accounts/{account_id}/rum/site_info\n@desc Create a Web Analytics site\n@required {account_id: str}\n@optional {auto_install: bool # If enabled, the JavaScript snippet is automatically injected for orange-clouded sites., host: str # The hostname to use for gray-clouded sites., zone_tag: str # The zone identifier.}\n@returns(200) Created Web Analytics site.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/rum/site_info/list\n@desc List Web Analytics sites\n@required {account_id: str}\n@optional {per_page: num, page: num, order_by: str}\n@returns(200) List of Web Analytics sites.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/rum/site_info/site_tag/list\n@desc List Web Analytics site tags\n@required {account_id: str}\n@optional {all: bool # When true, includes sites that are disabled or paused.}\n@returns(200) List of Web Analytics site tags.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/rum/site_info/validate/{hostname}\n@desc Validate a Web Analytics site hostname\n@required {account_id: str, hostname: str # The hostname to validate (e.g. example.com). The `pattern` below validates the hostname's structure (label syntax) only. In addition, the hostname must end in a valid public suffix (TLD). For the list of valid suffixes and how it is used, see the Public Suffix List: https://wiki.mozilla.org/Public_Suffix_List/Use_Cases}\n@returns(200) Hostname is valid.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/rum/site_info/zone_tag/list\n@desc List Web Analytics zone tags\n@required {account_id: str}\n@returns(200) List of zone tags.\n@errors {4XX: Failure response.}\n\n@endpoint DELETE /accounts/{account_id}/rum/site_info/{site_id}\n@desc Delete a Web Analytics site\n@required {account_id: str, site_id: str}\n@returns(200) Deleted Web Analytics site identifier.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/rum/site_info/{site_id}\n@desc Get a Web Analytics site\n@required {account_id: str, site_id: str}\n@returns(200) Web Analytics site.\n@errors {4XX: Failure response.}\n\n@endpoint PUT /accounts/{account_id}/rum/site_info/{site_id}\n@desc Update a Web Analytics site\n@required {account_id: str, site_id: str}\n@optional {auto_install: bool # If enabled, the JavaScript snippet is automatically injected for orange-clouded sites., enabled: bool # Enables or disables RUM. This option can be used only when auto_install is set to true., host: str # The hostname to use for gray-clouded sites., lite: bool # If enabled, the JavaScript snippet will not be injected for visitors from the EU., zone_tag: str # The zone identifier.}\n@returns(200) Updated Web Analytics site.\n@errors {4XX: Failure response.}\n\n@endpoint POST /accounts/{account_id}/rum/v2/{ruleset_id}/rule\n@desc Create a Web Analytics rule\n@required {account_id: str, ruleset_id: str}\n@optional {host: str, inclusive: bool # Whether the rule includes or excludes traffic from being measured., is_paused: bool # Whether the rule is paused or not., paths: [str]}\n@returns(200) Created Web Analytics rule.\n@errors {4XX: Failure response.}\n\n@endpoint DELETE /accounts/{account_id}/rum/v2/{ruleset_id}/rule/{rule_id}\n@desc Delete a Web Analytics rule\n@required {account_id: str, ruleset_id: str, rule_id: str}\n@returns(200) Deleted Web Analytics rule identifier.\n@errors {4XX: Failure response.}\n\n@endpoint PUT /accounts/{account_id}/rum/v2/{ruleset_id}/rule/{rule_id}\n@desc Update a Web Analytics rule\n@required {account_id: str, ruleset_id: str, rule_id: str}\n@optional {host: str, inclusive: bool # Whether the rule includes or excludes traffic from being measured., is_paused: bool # Whether the rule is paused or not., paths: [str]}\n@returns(200) Updated Web Analytics rule.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/rum/v2/{ruleset_id}/rules\n@desc List rules in Web Analytics ruleset\n@required {account_id: str, ruleset_id: str}\n@returns(200) List of Web Analytics rules in the ruleset.\n@errors {4XX: Failure response.}\n\n@endpoint POST /accounts/{account_id}/rum/v2/{ruleset_id}/rules\n@desc Update Web Analytics rules\n@required {account_id: str, ruleset_id: str}\n@optional {delete_rules: [str] # A list of rule identifiers to delete., rules: [map{host: str, id: str, inclusive: bool, is_paused: bool, paths: [str]}] # A list of rules to create or update.}\n@returns(200) List of modified Web Analytics rules.\n@errors {4XX: Failure response.}\n\n@endpoint GET /accounts/{account_id}/scim/v2/Groups\n@desc List SCIM Groups\n@required {account_id: any}\n@optional {startIndex: int=1, count: int, filter: str}\n@returns(200) List SCIM Groups response\n@errors {4XX: List SCIM Groups response failure}\n\n@endpoint POST /accounts/{account_id}/scim/v2/Groups\n@desc Create SCIM Group\n@required {account_id: any}\n@returns(201) Create SCIM Group response\n@errors {4XX: Create SCIM Group response failure}\n\n@endpoint DELETE /accounts/{account_id}/scim/v2/Groups/{group_id}\n@desc Delete SCIM Group\n@required {account_id: any, group_id: str}\n@returns(204) Delete SCIM Group response (no content)\n@errors {4XX: Delete SCIM Group response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/Groups/{group_id}\n@desc Get SCIM Group\n@required {account_id: any, group_id: str}\n@returns(200) Get SCIM Group response\n@errors {4XX: Get SCIM Group response failure}\n\n@endpoint PATCH /accounts/{account_id}/scim/v2/Groups/{group_id}\n@desc Patch SCIM Group\n@required {account_id: any, group_id: str}\n@returns(200) Patch SCIM Group response\n@errors {4XX: Patch SCIM Group response failure}\n\n@endpoint PUT /accounts/{account_id}/scim/v2/Groups/{group_id}\n@desc Replace SCIM Group\n@required {account_id: any, group_id: str}\n@returns(200) Replace SCIM Group response\n@errors {4XX: Replace SCIM Group response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/ResourceTypes\n@desc List SCIM Resource Types\n@required {account_id: any}\n@returns(200) List SCIM Resource Types response\n@errors {4XX: List SCIM Resource Types response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/ResourceTypes/{resource_type_id}\n@desc Get SCIM Resource Type\n@required {account_id: any, resource_type_id: str(User/Group)}\n@returns(200) Get SCIM Resource Type response\n@errors {4XX: Get SCIM Resource Type response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/Schemas\n@desc List SCIM Schemas\n@required {account_id: any}\n@returns(200) List SCIM Schemas response\n@errors {4XX: List SCIM Schemas response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/Schemas/{schema_id}\n@desc Get SCIM Schema\n@required {account_id: any, schema_id: str}\n@returns(200) Get SCIM Schema response\n@errors {4XX: Get SCIM Schema response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/ServiceProviderConfig\n@desc Get SCIM Service Provider Config\n@required {account_id: any}\n@returns(200) Get SCIM Service Provider Config response\n@errors {4XX: Get SCIM Service Provider Config response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/Users\n@desc List SCIM Users\n@required {account_id: any}\n@optional {startIndex: int=1, count: int, filter: str}\n@returns(200) List SCIM Users response\n@errors {4XX: List SCIM Users response failure}\n\n@endpoint POST /accounts/{account_id}/scim/v2/Users\n@desc Create SCIM User\n@required {account_id: any}\n@returns(201) Create SCIM User response\n@errors {4XX: Create SCIM User response failure}\n\n@endpoint DELETE /accounts/{account_id}/scim/v2/Users/{user_id}\n@desc Delete SCIM User\n@required {account_id: any, user_id: str}\n@returns(204) SCIM User deprovisioned\n@errors {4XX: Delete SCIM User response failure}\n\n@endpoint GET /accounts/{account_id}/scim/v2/Users/{user_id}\n@desc Get SCIM User\n@required {account_id: any, user_id: str}\n@returns(200) Get SCIM User response\n@errors {4XX: Get SCIM User response failure}\n\n@endpoint PATCH /accounts/{account_id}/scim/v2/Users/{user_id}\n@desc Patch SCIM User\n@required {account_id: any, user_id: str}\n@returns(200) Patch SCIM User response\n@errors {4XX: Patch SCIM User response failure}\n\n@endpoint PUT /accounts/{account_id}/scim/v2/Users/{user_id}\n@desc Replace SCIM User\n@required {account_id: any, user_id: str}\n@returns(200) Replace SCIM User response\n@errors {4XX: Replace SCIM User response failure}\n\n@endpoint GET /accounts/{account_id}/secondary_dns/acls\n@desc List ACLs\n@required {account_id: str}\n@returns(200) List ACLs response.\n@errors {4XX: List ACLs response failure.}\n\n@endpoint POST /accounts/{account_id}/secondary_dns/acls\n@desc Create ACL\n@required {account_id: str, ip_range: str # Allowed IPv4/IPv6 address range of primary or secondary nameservers. This will be applied for the entire account. The IP range is used to allow additional NOTIFY IPs for secondary zones and IPs Cloudflare allows AXFR/IXFR requests from for primary zones. CIDRs are limited to a maximum of /24 for IPv4 and /64 for IPv6 respectively., name: str # The name of the acl.}\n@returns(200) Create ACL response.\n@errors {4XX: Create ACL response failure.}\n\n@endpoint DELETE /accounts/{account_id}/secondary_dns/acls/{acl_id}\n@desc Delete ACL\n@required {acl_id: str, account_id: str}\n@returns(200) Delete ACL response.\n@errors {4XX: Delete ACL response failure.}\n\n@endpoint GET /accounts/{account_id}/secondary_dns/acls/{acl_id}\n@desc ACL Details\n@required {acl_id: str, account_id: str}\n@returns(200) ACL Details response.\n@errors {4XX: ACL Details response failure.}\n\n@endpoint PUT /accounts/{account_id}/secondary_dns/acls/{acl_id}\n@desc Update ACL\n@required {acl_id: str, account_id: str, id: str, ip_range: str # Allowed IPv4/IPv6 address range of primary or secondary nameservers. This will be applied for the entire account. The IP range is used to allow additional NOTIFY IPs for secondary zones and IPs Cloudflare allows AXFR/IXFR requests from for primary zones. CIDRs are limited to a maximum of /24 for IPv4 and /64 for IPv6 respectively., name: str # The name of the acl.}\n@returns(200) Update ACL response.\n@errors {4XX: Update ACL response failure.}\n\n@endpoint GET /accounts/{account_id}/secondary_dns/peers\n@desc List Peers\n@required {account_id: str}\n@returns(200) List Peers response.\n@errors {4XX: List Peers response failure.}\n\n@endpoint POST /accounts/{account_id}/secondary_dns/peers\n@desc Create Peer\n@required {account_id: str, name: str # The name of the peer.}\n@returns(200) Create Peer response.\n@errors {4XX: Create Peer response failure.}\n\n@endpoint DELETE /accounts/{account_id}/secondary_dns/peers/{peer_id}\n@desc Delete Peer\n@required {peer_id: str, account_id: str}\n@returns(200) Delete Peer response.\n@errors {4XX: Delete Peer response failure.}\n\n@endpoint GET /accounts/{account_id}/secondary_dns/peers/{peer_id}\n@desc Peer Details\n@required {peer_id: str, account_id: str}\n@returns(200) Peer Details response.\n@errors {4XX: Peer Details response failure.}\n\n@endpoint PUT /accounts/{account_id}/secondary_dns/peers/{peer_id}\n@desc Update Peer\n@required {peer_id: str, account_id: str, id: str, name: str # The name of the peer.}\n@optional {ip: str # IPv4/IPv6 address of primary or secondary nameserver, depending on what zone this peer is linked to. For primary zones this IP defines the IP of the secondary nameserver Cloudflare will NOTIFY upon zone changes. For secondary zones this IP defines the IP of the primary nameserver Cloudflare will send AXFR/IXFR requests to., ixfr_enable: bool # Enable IXFR transfer protocol, default is AXFR. Only applicable to secondary zones., port: num # DNS port of primary or secondary nameserver, depending on what zone this peer is linked to., tsig_id: str # TSIG authentication will be used for zone transfer if configured.}\n@returns(200) Update Peer response.\n@errors {4XX: Update Peer response failure.}\n\n@endpoint GET /accounts/{account_id}/secondary_dns/tsigs\n@desc List TSIGs\n@required {account_id: str}\n@returns(200) List TSIGs response.\n@errors {4XX: List TSIGs response failure.}\n\n@endpoint POST /accounts/{account_id}/secondary_dns/tsigs\n@desc Create TSIG\n@required {account_id: str, algo: str # TSIG algorithm., id: str, name: str # TSIG key name., secret: str # TSIG secret.}\n@returns(200) Create TSIG response.\n@errors {4XX: Create TSIG response failure.}\n\n@endpoint DELETE /accounts/{account_id}/secondary_dns/tsigs/{tsig_id}\n@desc Delete TSIG\n@required {tsig_id: str, account_id: str}\n@returns(200) Delete TSIG response.\n@errors {4XX: Delete TSIG response failure.}\n\n@endpoint GET /accounts/{account_id}/secondary_dns/tsigs/{tsig_id}\n@desc TSIG Details\n@required {tsig_id: str, account_id: str}\n@returns(200) TSIG Details response.\n@errors {4XX: TSIG Details response failure.}\n\n@endpoint PUT /accounts/{account_id}/secondary_dns/tsigs/{tsig_id}\n@desc Update TSIG\n@required {tsig_id: str, account_id: str, algo: str # TSIG algorithm., id: str, name: str # TSIG key name., secret: str # TSIG secret.}\n@returns(200) Update TSIG response.\n@errors {4XX: Update TSIG response failure.}\n\n@endpoint GET /accounts/{account_id}/secrets_store/quota\n@desc View secret usage\n@required {account_id: str # Account identifier.}\n@returns(200) Usage and quota.\n@errors {4XX: View quota response failure.}\n\n@endpoint GET /accounts/{account_id}/secrets_store/stores\n@desc List account stores\n@required {account_id: str # Account identifier.}\n@optional {direction: str(asc/desc)=desc # Direction to sort objects., page: int # Page number., per_page: int # Number of objects to return per page., order: str(name/created/modified)=created # Order stores by values in the given field.}\n@returns(200) List account stores response.\n@errors {4XX: List account stores response failure.}\n\n@endpoint POST /accounts/{account_id}/secrets_store/stores\n@desc Create a store\n@required {account_id: str # Account identifier., name: str # The name of the store.}\n@returns(200) Store details.\n@errors {4XX: Create store response failure.}\n\n@endpoint DELETE /accounts/{account_id}/secrets_store/stores/{store_id}\n@desc Delete a store\n@required {account_id: str # Account identifier., store_id: str # Store identifier.}\n@optional {force: bool=false # When true, cascade-deletes all secrets in the store before deleting the store itself. Required when deleting a non-empty store. Without this parameter, attempting to delete a non-empty store returns 409.}\n@returns(200) Store deleted.\n@errors {409: Store is not empty. Use force=true to cascade-delete all secrets., 4XX: Delete store failure.}\n\n@endpoint GET /accounts/{account_id}/secrets_store/stores/{store_id}\n@desc Get a store by ID\n@required {account_id: str # Account identifier., store_id: str # Store identifier.}\n@returns(200) Store details.\n@errors {4XX: Get store response failure.}\n\n@endpoint DELETE /accounts/{account_id}/secrets_store/stores/{store_id}/secrets\n@desc Delete secrets\n@required {account_id: str # Account identifier., store_id: str # Store identifier., ids: [str] # List of secret identifier tags to delete.}\n@returns(202) Secrets deletion accepted.\n@errors {4XX: Delete secrets response failure.}\n\n@endpoint GET /accounts/{account_id}/secrets_store/stores/{store_id}/secrets\n@desc List store secrets\n@required {account_id: str # Account identifier., store_id: str # Store identifier.}\n@optional {direction: str(asc/desc)=desc # Direction to sort objects., page: int # Page number., per_page: int # Number of objects to return per page., search: str # Search secrets using a filter string, filtering across name and comment., order: str(name/comment/created/modified/status)=created # Order secrets by values in the given field., scopes: [str] # Only secrets with the given scopes will be returned.}\n@returns(200) List store secrets response.\n@errors {4XX: List store secrets response failure.}\n\n@endpoint POST /accounts/{account_id}/secrets_store/stores/{store_id}/secrets\n@desc Create a secret\n@required {account_id: str # Account identifier., store_id: str # Store identifier.}\n@returns(200) Secret detail.\n@errors {4XX: Create secret response failure.}\n\n@endpoint DELETE /accounts/{account_id}/secrets_store/stores/{store_id}/secrets/{secret_id}\n@desc Delete a secret\n@required {account_id: str # Account identifier., store_id: str # Store identifier., secret_id: str # Secret identifier.}\n@returns(202) Secret deletion accepted.\n@errors {4XX: Delete secret failure.}\n\n@endpoint GET /accounts/{account_id}/secrets_store/stores/{store_id}/secrets/{secret_id}\n@desc Get a secret by ID\n@required {account_id: str # Account identifier., store_id: str # Store identifier., secret_id: str # Secret identifier.}\n@returns(200) Secret detail.\n@errors {4XX: Get secret response failure.}\n\n@endpoint PATCH /accounts/{account_id}/secrets_store/stores/{store_id}/secrets/{secret_id}\n@desc Patch a secret\n@required {account_id: str # Account identifier., store_id: str # Store identifier., secret_id: str # Secret identifier.}\n@optional {comment: str # Freeform text describing the secret., scopes: [str] # The list of services that can use this secret., value: str # The value of the secret. Maximum 64 KiB (65,536 bytes). Note that this is 'write only' - the API never returns this value; it exists only to create or modify secrets.}\n@returns(200) Secret detail.\n@errors {4XX: Patch secret response failure.}\n\n@endpoint POST /accounts/{account_id}/secrets_store/stores/{store_id}/secrets/{secret_id}/duplicate\n@desc Duplicate Secret\n@required {account_id: str # Account identifier., store_id: str # Store identifier., secret_id: str # Secret identifier., name: str # The name of the secret., scopes: [str] # The list of services that can use this secret.}\n@optional {comment: str # Freeform text describing the secret.}\n@returns(200) Secret detail.\n@errors {4XX: Duplicate secret response failure.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights\n@desc Retrieves Security Center Insights\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str], page: any=1, per_page: any=25}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/audit-log\n@desc Retrieves Account Audit Log\n@required {account_id: str}\n@optional {per_page: int=25 # Number of results per page., cursor: str # Opaque cursor for pagination. Use the cursor value from result_info of the previous response., field_changed: str(status/user_classification) # Filter by the field that was changed., changed_by: str # Filter by the actor that made the change., since: str(date-time) # Filter entries changed at or after this timestamp (RFC 3339)., before: str(date-time) # Filter entries changed before this timestamp (RFC 3339)., order: str(asc/desc)=desc # Sort order for results. Use 'asc' for oldest first or 'desc' for newest first.}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/class\n@desc Retrieves Security Center Insight Counts by Class\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/count\n@desc Retrieves a Partner Security Center Insight Count\n@required {account_id: str, source: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/scans\n@desc Get Recent Account Scans\n@required {account_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint POST /accounts/{account_id}/security-center/insights/scans\n@desc Start On-Demand Account Scan\n@required {account_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/severity\n@desc Retrieves Security Center Insight Counts by Severity\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/type\n@desc Retrieves Security Center Insight Counts by Type\n@required {account_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/{issue_id}/audit-log\n@desc Retrieves Issue Audit Log\n@required {account_id: str, issue_id: str}\n@optional {per_page: int=25 # Number of results per page., cursor: str # Opaque cursor for pagination. Use the cursor value from result_info of the previous response., field_changed: str(status/user_classification) # Filter by the field that was changed., changed_by: str # Filter by the actor that made the change., since: str(date-time) # Filter entries changed at or after this timestamp (RFC 3339)., before: str(date-time) # Filter entries changed before this timestamp (RFC 3339)., order: str(asc/desc)=desc # Sort order for results. Use 'asc' for oldest first or 'desc' for newest first.}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint PATCH /accounts/{account_id}/security-center/insights/{issue_id}/classification\n@desc Updates Security Center Insight Classification\n@required {account_id: str, issue_id: str}\n@optional {classification: str(false_positive/accept_risk/other) # User-defined classification for the insight. Can be 'false_positive', 'accept_risk', 'other', or null., rationale: str # Rationale for the classification change. Required when classification is 'accept_risk' or 'other'.}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/insights/{issue_id}/context\n@desc Retrieves Security Center Insight Context\n@required {account_id: str, issue_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint PUT /accounts/{account_id}/security-center/insights/{issue_id}/dismiss\n@desc Archives Security Center Insight\n@required {account_id: str, issue_id: str}\n@optional {dismiss: bool=true}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/security-center/state\n@desc Retrieves Account State\n@required {account_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint PUT /accounts/{account_id}/security-center/state\n@desc Updates Account State\n@required {account_id: str, scans_enabled: bool # Enable or disable scans for the account.}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /accounts/{account_id}/settings/transformations\n@desc List Image Resizing configurations for account\n@required {account_id: str}\n@returns(200) List Image Resizing configurations response.\n@errors {4XX: List Image Resizing configurations response failure.}\n\n@endpoint GET /accounts/{account_id}/settings/ut-billing\n@desc Get Unique Transformations billing setting\n@required {account_id: str}\n@returns(200) Get Unique Transformations billing setting response.\n@errors {4XX: Get Unique Transformations billing setting response failure.}\n\n@endpoint PATCH /accounts/{account_id}/settings/ut-billing\n@desc Change Unique Transformations billing setting\n@required {account_id: str, value: str # Enables Unique Transformations billing for the account. Note: once enabled, this setting cannot be set back to \"off\".}\n@returns(200) Change Unique Transformations billing setting response.\n@errors {4XX: Change Unique Transformations billing setting response failure.}\n\n@endpoint GET /accounts/{account_id}/shares\n@desc List account shares\n@required {account_id: str}\n@optional {status: str # Filter shares by status., kind: str # Filter shares by kind., target_type: str # Filter shares by target_type., resource_types: [str] # Filter share resources by resource_types., order: str(name/created)=created # Order shares by values in the given field., direction: str(asc/desc)=asc # Direction to sort objects., page: int=1 # Page number. Defaults to `1` when `per_page` is supplied without `page`. May be omitted entirely along with `per_page` to receive a non-paginated response., per_page: int=20 # Number of objects to return per page. Defaults to `20` when `page` is supplied without `per_page`. May be omitted entirely along with `page` to receive a non-paginated response., include_resources: bool # Include resources in the response., include_recipient_counts: bool # Include recipient counts in the response., tag: [str] # Filter shares by tag. Each value is either `key=value` (matches shares whose tags contain that key/value pair) or `key` alone (matches shares that have any value for that key). May be repeated; multiple `tag` parameters are ANDed together. Maximum 20 `tag` parameters per request.}\n@returns(200) List account shares response.\n@errors {4XX: List account shares response failure., 5XX: List account shares response failure.}\n\n@endpoint POST /accounts/{account_id}/shares\n@desc Create a new share\n@required {account_id: str, name: str # The name of the share., recipients: [map{account_id: any, organization_id: str, recipient_account_id: any}], resources: [map{meta!: map, resource_account_id!: str, resource_id!: str, resource_type!: str}]}\n@returns(201) Share created.\n@errors {4XX: Create share failure., 5XX: Create share failure.}\n\n@endpoint DELETE /accounts/{account_id}/shares/{share_id}\n@desc Delete a share\n@required {account_id: str, share_id: str}\n@returns(200) Share deleted.\n@errors {4XX: Delete share failure., 5XX: Delete share failure.}\n\n@endpoint GET /accounts/{account_id}/shares/{share_id}\n@desc Get account share by ID\n@required {account_id: str, share_id: str}\n@optional {include_resources: bool # Include resources in the response., include_recipient_counts: bool # Include recipient counts in the response.}\n@returns(200) Get account share response.\n@errors {4XX: Get account share response failure., 5XX: Get account share response failure.}\n\n@endpoint PUT /accounts/{account_id}/shares/{share_id}\n@desc Update a share\n@required {account_id: str, share_id: str, name: str # The name of the share.}\n@returns(200) Share updated.\n@errors {4XX: Update share failure., 5XX: Update share failure.}\n\n@endpoint GET /accounts/{account_id}/shares/{share_id}/excluded-recipients\n@desc List share excluded recipients by share ID\n@required {account_id: str, share_id: str}\n@optional {page: int=1 # Page number. Defaults to `1` when `per_page` is supplied without `page`. May be omitted entirely along with `per_page` to receive a non-paginated response., per_page: int=20 # Number of objects to return per page. Defaults to `20` when `page` is supplied without `per_page`. May be omitted entirely along with `page` to receive a non-paginated response.}\n@returns(200) List share excluded recipients response.\n@errors {4XX: List share excluded recipients response failure., 5XX: List share excluded recipients response failure.}\n\n@endpoint POST /accounts/{account_id}/shares/{share_id}/excluded-recipients\n@desc Create a new share excluded recipient\n@required {account_id: str, share_id: str, account_id: any # The account to exclude from the organization-targeted share.}\n@returns(201) Share excluded recipient created.\n@errors {4XX: Create share excluded recipient failure., 5XX: Create share excluded recipient failure.}\n\n@endpoint PUT /accounts/{account_id}/shares/{share_id}/excluded-recipients\n@desc Update a share's excluded recipients\n@required {account_id: str, share_id: str}\n@returns(204) Empty body\n@errors {4XX: Update share excluded recipients failure., 5XX: Update share excluded recipients failure.}\n\n@endpoint DELETE /accounts/{account_id}/shares/{share_id}/excluded-recipients/{excluded_recipient_id}\n@desc Delete a share excluded recipient\n@required {account_id: str, share_id: str, excluded_recipient_id: str}\n@returns(200) Share excluded recipient deleted.\n@errors {4XX: Delete share excluded recipient failure., 5XX: Delete share excluded recipient failure.}\n\n@endpoint GET /accounts/{account_id}/shares/{share_id}/excluded-recipients/{excluded_recipient_id}\n@desc Get share excluded recipient by ID\n@required {account_id: str, share_id: str, excluded_recipient_id: str}\n@returns(200) Get share excluded recipient response.\n@errors {4XX: Get share excluded recipient response failure., 5XX: Get share excluded recipient response failure.}\n\n@endpoint GET /accounts/{account_id}/shares/{share_id}/recipients\n@desc List share recipients by share ID\n@required {account_id: str, share_id: str}\n@optional {include_resources: bool # Include resources in the response., page: int=1 # Page number. Defaults to `1` when `per_page` is supplied without `page`. May be omitted entirely along with `per_page` to receive a non-paginated response., per_page: int=20 # Number of objects to return per page. Defaults to `20` when `page` is supplied without `per_page`. May be omitted entirely along with `page` to receive a non-paginated response.}\n@returns(200) List account share recipients response.\n@errors {4XX: List account share recipients response failure., 5XX: List account share recipients response failure.}\n\n@endpoint POST /accounts/{account_id}/shares/{share_id}/recipients\n@desc Create a new share recipient\n@required {account_id: str, share_id: str}\n@optional {account_id: any # Deprecated alias for `recipient_account_id`. Use `recipient_account_id` instead. The body field collided with the URL path parameter of the same name, which prevented SDK generators from distinguishing the source account (in the URL) from the recipient account (in the body). Both names will continue to be accepted until 2027-05-26 (see `x-sunset`)., organization_id: str # Organization identifier., recipient_account_id: any # The account that will receive the share.}\n@returns(201) Share recipient created.\n@errors {4XX: Create share recipient failure., 5XX: Create share recipient failure.}\n\n@endpoint PUT /accounts/{account_id}/shares/{share_id}/recipients\n@desc Update a share's recipients\n@required {account_id: str, share_id: str}\n@returns(204) Empty body\n@errors {4XX: Update share recipients failure., 5XX: Update share recipients failure.}\n\n@endpoint DELETE /accounts/{account_id}/shares/{share_id}/recipients/{recipient_id}\n@desc Delete a share recipient\n@required {account_id: str, share_id: str, recipient_id: str}\n@returns(200) Share recipient deleted.\n@errors {4XX: Delete share recipient failure., 5XX: Delete share recipient failure.}\n\n@endpoint GET /accounts/{account_id}/shares/{share_id}/recipients/{recipient_id}\n@desc Get share recipient by ID\n@required {account_id: str, share_id: str, recipient_id: str}\n@optional {include_resources: bool # Include resources in the response.}\n@returns(200) Get account share recipient response.\n@errors {4XX: Get account share recipient response failure., 5XX: Get account share recipient response failure.}\n\n@endpoint GET /accounts/{account_id}/shares/{share_id}/resources\n@desc List share resources by share ID\n@required {account_id: str, share_id: str}\n@optional {status: str # Filter share resources by status., resource_type: str # Filter share resources by resource_type., page: int=1 # Page number. Defaults to `1` when `per_page` is supplied without `page`. May be omitted entirely along with `per_page` to receive a non-paginated response., per_page: int=20 # Number of objects to return per page. Defaults to `20` when `page` is supplied without `per_page`. May be omitted entirely along with `page` to receive a non-paginated response.}\n@returns(200) List account share resources response.\n@errors {4XX: List account share resources response failure., 5XX: List account share resources response failure.}\n\n@endpoint POST /accounts/{account_id}/shares/{share_id}/resources\n@desc Create a new share resource\n@required {account_id: str, share_id: str, meta: map # Resource Metadata., resource_account_id: str # Account identifier., resource_id: str # Share Resource identifier., resource_type: str(custom-ruleset/gateway-policy/gateway-destination-ip/gateway-block-page-settings/gateway-extended-email-matching/idp-federation-grant/trust-grant) # Resource Type.}\n@returns(201) Share resource created.\n@errors {4XX: Create share resource failure., 5XX: Create share resource failure.}\n\n@endpoint DELETE /accounts/{account_id}/shares/{share_id}/resources/{share_resource_id}\n@desc Delete a share resource\n@required {account_id: str, share_id: str, share_resource_id: str}\n@returns(200) Share resource deleted.\n@errors {4XX: Delete share resource failure., 5XX: Delete share resource failure.}\n\n@endpoint GET /accounts/{account_id}/shares/{share_id}/resources/{share_resource_id}\n@desc Get share resource by ID\n@required {account_id: str, share_id: str, share_resource_id: str}\n@returns(200) Get account share resource response.\n@errors {4XX: Get account share resource response failure., 5XX: Get account share resource response failure.}\n\n@endpoint PUT /accounts/{account_id}/shares/{share_id}/resources/{share_resource_id}\n@desc Update a share resource\n@required {account_id: str, share_id: str, share_resource_id: str, meta: map # Resource Metadata.}\n@returns(200) Share resource updated.\n@errors {4XX: Update share resource failure., 5XX: Update share resource failure.}\n\n@endpoint GET /accounts/{account_id}/slurper/jobs\n@desc List jobs\n@required {account_id: str}\n@optional {limit: int, offset: int}\n@returns(200) A list of jobs\n@errors {4XX: Failure response}\n\n@endpoint POST /accounts/{account_id}/slurper/jobs\n@desc Create a job\n@required {account_id: str}\n@optional {overwrite: bool=true, source: map, target: map{bucket!: str, jurisdiction: str, secret!: map, vendor!: str}}\n@returns(201) Job created\n@errors {409: Maximum number of concurrent jobs has been reached, 4XX: Failure response}\n\n@endpoint PUT /accounts/{account_id}/slurper/jobs/abortAll\n@desc Abort all jobs\n@required {account_id: str}\n@returns(200) All jobs aborted\n@errors {4XX: Failure response}\n\n@endpoint DELETE /accounts/{account_id}/slurper/jobs/{job_id}\n@desc Delete a job\n@required {account_id: str, job_id: str}\n@returns(200) Job deleted\n@errors {409: Job is still active, 4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/slurper/jobs/{job_id}\n@desc Get job details\n@required {account_id: str, job_id: str}\n@returns(200) Job details\n@errors {4XX: Failure response}\n\n@endpoint PUT /accounts/{account_id}/slurper/jobs/{job_id}/abort\n@desc Abort a job\n@required {account_id: str, job_id: str}\n@returns(200) Job aborted\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/slurper/jobs/{job_id}/logs\n@desc Get job logs\n@required {account_id: str, job_id: str}\n@optional {limit: int, offset: int}\n@returns(200) Job logs\n@errors {4XX: Failure response}\n\n@endpoint PUT /accounts/{account_id}/slurper/jobs/{job_id}/pause\n@desc Pause a job\n@required {account_id: str, job_id: str}\n@returns(200) Job paused\n@errors {409: Job is not paused, 4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/slurper/jobs/{job_id}/progress\n@desc Get job progress\n@required {account_id: str, job_id: str}\n@returns(200) Job progress\n@errors {4XX: Failure response}\n\n@endpoint PUT /accounts/{account_id}/slurper/jobs/{job_id}/resume\n@desc Resume a job\n@required {account_id: str, job_id: str}\n@returns(200) Job resumed\n@errors {4XX: Failure response}\n\n@endpoint PUT /accounts/{account_id}/slurper/source/connectivity-precheck\n@desc Check source connectivity\n@required {account_id: str}\n@returns(200) Source connectivity checked\n@errors {4XX: Failure response}\n\n@endpoint PUT /accounts/{account_id}/slurper/target/connectivity-precheck\n@desc Check target connectivity\n@required {account_id: str, bucket: str, secret: map{accessKeyId!: str, secretAccessKey!: str}, vendor: str}\n@optional {jurisdiction: str(default/eu/us/fedramp)}\n@returns(200) Target connectivity checked\n@errors {4XX: Failure response}\n\n@endpoint GET /accounts/{account_id}/sso_connectors\n@desc Get all SSO connectors\n@required {account_id: any}\n@returns(200) Get all SSO connectors response\n@errors {4XX: Get all SSO connectors response failure}\n\n@endpoint POST /accounts/{account_id}/sso_connectors\n@desc Initialize new SSO connector\n@required {account_id: any, email_domain: str # Email domain of the new SSO connector}\n@optional {begin_verification: bool=true # Begin the verification process after creation, use_fedramp_language: bool=false # Controls the display of FedRAMP language to the user during SSO login}\n@returns(200) Initialize new SSO connector response\n@errors {4XX: Initialize new SSO connector response failure}\n\n@endpoint DELETE /accounts/{account_id}/sso_connectors/{sso_connector_id}\n@desc Delete SSO connector\n@required {account_id: any, sso_connector_id: any}\n@returns(200) Delete SSO connector response\n@errors {4XX: Delete SSO connector response failure}\n\n@endpoint GET /accounts/{account_id}/sso_connectors/{sso_connector_id}\n@desc Get single SSO connector\n@required {account_id: any, sso_connector_id: any}\n@returns(200) Get SSO connector response\n@errors {4XX: Get SSO connector response failure}\n\n@endpoint PATCH /accounts/{account_id}/sso_connectors/{sso_connector_id}\n@desc Update SSO connector state\n@required {account_id: any, sso_connector_id: any}\n@optional {enabled: bool # SSO Connector enabled state, use_fedramp_language: bool=false # Controls the display of FedRAMP language to the user during SSO login}\n@returns(200) Update SSO connector state response\n@errors {4XX: Update SSO connector state response failure}\n\n@endpoint POST /accounts/{account_id}/sso_connectors/{sso_connector_id}/begin_verification\n@desc Begin SSO connector verification\n@required {account_id: any, sso_connector_id: any}\n@returns(200) Begin SSO connector verification process response\n@errors {4XX: Begin SSO connector verification process response failure}\n\n@endpoint GET /accounts/{account_id}/storage/kv/namespaces\n@desc List Namespaces\n@required {account_id: str}\n@optional {page: num=1, per_page: num=20, order: str(id/title), direction: str(asc/desc)}\n@returns(200) List Namespaces response.\n@errors {4XX: List Namespaces response failure.}\n\n@endpoint POST /accounts/{account_id}/storage/kv/namespaces\n@desc Create a Namespace\n@required {account_id: str, title: str # A human-readable string name for a Namespace.}\n@optional {jurisdiction: str(eu/fedramp/us) # Specify the jurisdiction to restrict the KV namespace to durably store data within. Can only be set at namespace creation time.}\n@returns(200) Create a Namespace response.\n@errors {4XX: Create a Namespace response failure.}\n\n@endpoint DELETE /accounts/{account_id}/storage/kv/namespaces/{namespace_id}\n@desc Remove a Namespace\n@required {namespace_id: str, account_id: str}\n@returns(200) Remove a Namespace response.\n@errors {4XX: Remove a Namespace response failure.}\n\n@endpoint GET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}\n@desc Get a Namespace\n@required {namespace_id: str, account_id: str}\n@returns(200) Get a Namespace response.\n@errors {4XX: Get a Namespace response failure.}\n\n@endpoint PUT /accounts/{account_id}/storage/kv/namespaces/{namespace_id}\n@desc Rename a Namespace\n@required {namespace_id: str, account_id: str, title: str # A human-readable string name for a Namespace.}\n@returns(200) Rename a Namespace response.\n@errors {4XX: Rename a Namespace response failure.}\n\n@endpoint DELETE /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/bulk\n@desc Delete multiple key-value pairs\n@required {namespace_id: str, account_id: str}\n@returns(200) Delete multiple key-value pairs response.\n@errors {4XX: Delete multiple key-value pairs response failure.}\n\n@endpoint PUT /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/bulk\n@desc Write multiple key-value pairs\n@required {namespace_id: str, account_id: str}\n@returns(200) Write multiple key-value pairs response.\n@errors {4XX: Write multiple key-value pairs response failure.}\n\n@endpoint POST /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/bulk/delete\n@desc Delete multiple key-value pairs\n@required {namespace_id: str, account_id: str}\n@returns(200) Delete multiple key-value pairs response.\n@errors {4XX: Delete multiple key-value pairs response failure.}\n\n@endpoint POST /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/bulk/get\n@desc Get multiple key-value pairs\n@required {namespace_id: str, account_id: str, keys: [str] # Array of keys to retrieve (maximum of 100).}\n@optional {type: str(text/json)=text # Whether to parse JSON values in the response., withMetadata: bool=false # Whether to include metadata in the response.}\n@returns(200) Get multiple key-value pairs response.\n@errors {4XX: Get multiple key-value pairs response failure.}\n\n@endpoint GET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/keys\n@desc List a Namespace's Keys\n@required {namespace_id: str, account_id: str}\n@optional {limit: num=1000, prefix: str, cursor: str}\n@returns(200) List a Namespace's Keys response.\n@errors {4XX: List a Namespace's Keys response failure.}\n\n@endpoint GET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/metadata/{key_name}\n@desc Read the metadata for a key\n@required {key_name: str, namespace_id: str, account_id: str}\n@returns(200) Read the metadata for a key response.\n@errors {4XX: Read the metadata for a key response failure.}\n\n@endpoint DELETE /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/values/{key_name}\n@desc Delete key-value pair\n@required {key_name: str, namespace_id: str, account_id: str}\n@returns(200) Delete key-value pair response.\n@errors {4XX: Delete key-value pair response failure.}\n\n@endpoint GET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/values/{key_name}\n@desc Read key-value pair\n@required {key_name: str, namespace_id: str, account_id: str}\n@returns(200) Read key-value pair response.\n@errors {4XX: Read key-value pair response failure.}\n\n@endpoint PUT /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/values/{key_name}\n@desc Write key-value pair with optional metadata\n@required {key_name: str, namespace_id: str, account_id: str}\n@optional {expiration: num, expiration_ttl: num}\n@returns(200) Write key-value pair with metadata response.\n@errors {4XX: Write key-value pair with metadata response failure.}\n\n@endpoint GET /accounts/{account_id}/stream\n@desc List videos\n@required {account_id: str}\n@optional {status: str, creator: str, type: str, asc: bool, video_name: str, search: str, start: str(date-time), end: str(date-time), include_counts: bool, id: str # Filter by video ID(s). Can be a single ID or a comma-separated list of IDs., name: str # Filter by video name/UID(s). Can be a single name or a comma-separated list., live_input_id: str # Filter by live input ID to find videos associated with a specific live stream., before: str(date-time) # Alias for 'end'. Returns videos created before this date/time (RFC 3339 format)., after: str(date-time) # Alias for 'start'. Returns videos created after this date/time (RFC 3339 format)., limit: int # Maximum number of videos to return (default 1000, max 1000).}\n@returns(200) List videos response.\n@errors {4XX: List videos response failure.}\n\n@endpoint POST /accounts/{account_id}/stream\n@desc Initiate video uploads using TUS\n@required {Tus-Resumable: str, Upload-Length: int, account_id: str}\n@optional {Upload-Creator: str, Upload-Metadata: str, direct_user: bool}\n@returns(201) Initiate video uploads using TUS response. Returns a 201 Created status with Location header for TUS uploads.\n@errors {4XX: Initiate video uploads using TUS response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/clip\n@desc Clip videos given a start and end time\n@required {account_id: str, clippedFromVideoUID: str # The unique video identifier (UID)., endTimeSeconds: int # Specifies the end time for the video clip in seconds., startTimeSeconds: int # Specifies the start time for the video clip in seconds.}\n@optional {allowedOrigins: [str] # Lists the origins allowed to display the video. Enter allowed origin domains in an array and use `*` for wildcard subdomains. Empty arrays allow the video to be viewed on any origin., creator: str # A user-defined identifier for the media creator., input: str(uri) # A video's URL. Preferred over 'url'., meta: map # A user modifiable key-value store used to reference other systems of record for managing videos., name: str # A name for the video., requireSignedURLs: bool=false # Indicates whether the video can be a accessed using the UID. When set to `true`, a signed token must be generated with a signing key to view the video., scheduledDeletion: str(date-time) # Indicates the date and time at which the video will be deleted. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time., thumbnailTimestampPct: num=0 # The timestamp for a thumbnail image calculated as a percentage value of the video's duration. To convert from a second-wise timestamp to a percentage, divide the desired timestamp by the total duration of the video.  If this value is not set, the default thumbnail image is taken from 0s of the video., url: str(uri) # A video's URL (legacy field, use 'input' instead)., watermark: map{uid: str}}\n@returns(200) Clip videos given a start and end time response.\n@errors {4XX: Clip videos given a start and end time response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/copy\n@desc Upload videos from a URL\n@required {account_id: str}\n@optional {Upload-Creator: str, allowedOrigins: [str] # Lists the origins allowed to display the video. Enter allowed origin domains in an array and use `*` for wildcard subdomains. Empty arrays allow the video to be viewed on any origin., creator: str # A user-defined identifier for the media creator., input: str(uri) # A video's URL. The server must be publicly routable and support `HTTP HEAD` requests and `HTTP GET` range requests. The server should respond to `HTTP HEAD` requests with a `content-range` header that includes the size of the file. This is the preferred field over `url`., meta: map # A user modifiable key-value store used to reference other systems of record for managing videos., name: str # A video's name. Used for legacy compatibility., requireSignedURLs: bool=false # Indicates whether the video can be a accessed using the UID. When set to `true`, a signed token must be generated with a signing key to view the video., scheduledDeletion: str(date-time) # Indicates the date and time at which the video will be deleted. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time., thumbnailTimestampPct: num=0 # The timestamp for a thumbnail image calculated as a percentage value of the video's duration. To convert from a second-wise timestamp to a percentage, divide the desired timestamp by the total duration of the video.  If this value is not set, the default thumbnail image is taken from 0s of the video., url: str(uri) # A video's URL. The server must be publicly routable and support `HTTP HEAD` requests and `HTTP GET` range requests. The server should respond to `HTTP HEAD` requests with a `content-range` header that includes the size of the file. This field is deprecated in favor of `input`., watermark: map{uid: str}}\n@returns(200) Upload videos from a URL response.\n@errors {4XX: Upload videos from a URL response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/direct_upload\n@desc Upload videos via direct upload URLs\n@required {account_id: str, maxDurationSeconds: int # The maximum duration in seconds for a video upload. Can be set for a video that is not yet uploaded to limit its duration. Uploads that exceed the specified duration will fail during processing. A value of `-1` means the value is unknown.}\n@optional {Upload-Creator: str, allowedOrigins: [str] # Lists the origins allowed to display the video. Enter allowed origin domains in an array and use `*` for wildcard subdomains. Empty arrays allow the video to be viewed on any origin., creator: str # A user-defined identifier for the media creator., expiry: str(date-time)=Now + 30 minutes # The date and time after upload when videos will not be accepted., meta: map # A user modifiable key-value store used to reference other systems of record for managing videos., requireSignedURLs: bool=false # Indicates whether the video can be a accessed using the UID. When set to `true`, a signed token must be generated with a signing key to view the video., scheduledDeletion: str(date-time) # Indicates the date and time at which the video will be deleted. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time., thumbnailTimestampPct: num=0 # The timestamp for a thumbnail image calculated as a percentage value of the video's duration. To convert from a second-wise timestamp to a percentage, divide the desired timestamp by the total duration of the video.  If this value is not set, the default thumbnail image is taken from 0s of the video., watermark: map{uid: str}}\n@returns(200) Upload videos via direct upload URLs response.\n@errors {4XX: Upload videos via direct upload URLs response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/keys\n@desc List signing keys\n@required {account_id: str}\n@returns(200) List signing keys response.\n@errors {4XX: List signing keys response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/keys\n@desc Create signing keys\n@required {account_id: str}\n@returns(200) Create signing keys response.\n@errors {4XX: Create signing keys response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/keys/{identifier}\n@desc Delete signing keys\n@required {identifier: str, account_id: str}\n@returns(200) Delete signing keys response.\n@errors {4XX: Delete signing keys response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/live_inputs\n@desc List live inputs\n@required {account_id: str}\n@optional {include_counts: bool}\n@returns(200) List live inputs response.\n@errors {4XX: List live inputs response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/live_inputs\n@desc Create a live input\n@required {account_id: str}\n@optional {Idempotency-Key: str # Prevents duplicate live inputs from being created when retrying this request. The key is scoped to the account, may contain up to 255 bytes, and expires six hours after the live input is created. Reusing a key for a deleted input before expiry returns a 409 Conflict response., defaultCreator: str # Sets the creator ID asssociated with this live input., deleteRecordingAfterDays: num # Indicates the number of days after which the live inputs recordings will be deleted. When a stream completes and the recording is ready, the value is used to calculate a scheduled deletion date for that recording. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion., enabled: bool=true # Indicates whether the live input is enabled and can accept streams., meta: map # A user modifiable key-value store used to reference other systems of record for managing live inputs., preferLowLatency: bool=false # When enabled, the live stream is delivered using Low-Latency HLS (LL-HLS), reducing glass-to-glass latency for viewers at the cost of reduced player compatibility., recording: map{allowedOrigins: [str], hideLiveViewerCount: bool, mode: str, requireSignedURLs: bool, timeoutSeconds: int} # Records the input to a Cloudflare Stream video. Behavior depends on the mode. In most cases, the video will initially be viewable as a live video and transition to on-demand after a condition is satisfied.}\n@returns(200) Create a live input response.\n@errors {4XX: Create a live input response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/live_inputs/{live_input_identifier}\n@desc Delete a live input\n@required {live_input_identifier: str, account_id: str}\n@returns(200) Delete a live input response.\n@errors {4XX: Delete a live input response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/live_inputs/{live_input_identifier}\n@desc Retrieve a live input\n@required {live_input_identifier: str, account_id: str}\n@returns(200) Retrieve a live input response.\n@errors {4XX: Retrieve a live input response failure.}\n\n@endpoint PUT /accounts/{account_id}/stream/live_inputs/{live_input_identifier}\n@desc Update a live input\n@required {live_input_identifier: str, account_id: str}\n@optional {defaultCreator: str # Sets the creator ID asssociated with this live input., deleteRecordingAfterDays: num # Indicates the number of days after which the live inputs recordings will be deleted. When a stream completes and the recording is ready, the value is used to calculate a scheduled deletion date for that recording. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion., enabled: bool=true # Indicates whether the live input is enabled and can accept streams., meta: map # A user modifiable key-value store used to reference other systems of record for managing live inputs., preferLowLatency: bool=false # When enabled, the live stream is delivered using Low-Latency HLS (LL-HLS), reducing glass-to-glass latency for viewers at the cost of reduced player compatibility., recording: map{allowedOrigins: [str], hideLiveViewerCount: bool, mode: str, requireSignedURLs: bool, timeoutSeconds: int} # Records the input to a Cloudflare Stream video. Behavior depends on the mode. In most cases, the video will initially be viewable as a live video and transition to on-demand after a condition is satisfied.}\n@returns(200) Update a live input response.\n@errors {4XX: Update a live input response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/live_inputs/{live_input_identifier}/disable\n@desc Disable a live input\n@required {live_input_identifier: str, account_id: str}\n@returns(200) Disable a live input response.\n@errors {4XX: Disable a live input response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/live_inputs/{live_input_identifier}/enable\n@desc Enable a live input\n@required {live_input_identifier: str, account_id: str}\n@returns(200) Enable a live input response.\n@errors {4XX: Enable a live input response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs\n@desc List all outputs associated with a specified live input\n@required {live_input_identifier: str, account_id: str}\n@returns(200) List all outputs associated with a specified live input response.\n@errors {4XX: List all outputs associated with a specified live input response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs\n@desc Create a new output, connected to a live input\n@required {live_input_identifier: str, account_id: str, streamKey: str # The streamKey used to authenticate against an output's target., url: str # The URL an output uses to restream.}\n@optional {enabled: bool=true # When enabled, live video streamed to the associated live input will be sent to the output URL. When disabled, live video will not be sent to the output URL, even when streaming to the associated live input. Use this to control precisely when you start and stop simulcasting to specific destinations like YouTube and Twitch.}\n@returns(200) Create a new output, connected to a live input response.\n@errors {4XX: Create a new output, connected to a live input response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs/{output_identifier}\n@desc Delete an output\n@required {output_identifier: str, live_input_identifier: str, account_id: str}\n@returns(200) Delete an output response.\n@errors {4XX: Delete an output response failure.}\n\n@endpoint PUT /accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs/{output_identifier}\n@desc Update an output\n@required {output_identifier: str, live_input_identifier: str, account_id: str, enabled: bool=true # When enabled, live video streamed to the associated live input will be sent to the output URL. When disabled, live video will not be sent to the output URL, even when streaming to the associated live input. Use this to control precisely when you start and stop simulcasting to specific destinations like YouTube and Twitch.}\n@returns(200) Update an output response.\n@errors {4XX: Update an output response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/live_inputs/{live_input_identifier}/rotate_keys\n@desc Rotate keys for a live input\n@required {live_input_identifier: str, account_id: str}\n@returns(200) Rotate keys for a live input response.\n@errors {4XX: Rotate keys for a live input response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/storage-usage\n@desc Storage use\n@required {account_id: str}\n@optional {creator: str}\n@returns(200) Returns information about an account's storage use response.\n@errors {4XX: Returns information about an account's storage use response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/usage\n@desc Get account Stream usage\n@required {account_id: str # Standard Cloudflare hex account identifier. The API gateway translates this to an internal numeric ID before forwarding to the backend service.}\n@optional {metrics: str # Comma-separated list of metrics to include in the response. Available metrics depend on the endpoint. Billing usage supports: streamMinutesViewed, rateLimitingRequestsAllowed, loadBalancingQueries, argoAcceleratedBytes, workersRequests, workersKVReads, imageResizingRequests, spectrumBytesTransferred, mediaUniqueTransformations. Stream/media usage supports: streamMinutesViewed., since: str(date-time) # Start of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to 6 hours before the current time., until: str(date-time) # End of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to the current time., time_delta: str(hour/day/week/month/quarter/year)=hour # Time unit to aggregate usage observations into. Data retention is approximately 18 months. The effective number of data points returned depends on the time range and granularity selected. For example, requesting hourly granularity over 18 months could produce up to ~13,000 data points; use the limit parameter to cap results and be aware that responses may be truncated., limit: int=100 # Maximum number of data points to return. The actual number of results depends on the interaction between the time range (since/until) and time_delta granularity. Results are truncated to this limit without error if the time range produces more data points than the limit allows., filters: str # Filter expressions to apply to the query. Format: field==value. Multiple filters can be combined.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Usage analytics response.\n@errors {400: Bad request - invalid parameters or query., 401: Authentication required., 403: Insufficient permissions to access this resource.}\n\n@endpoint GET /accounts/{account_id}/stream/watermarks\n@desc List watermark profiles\n@required {account_id: str}\n@returns(200) List watermark profiles response.\n@errors {4XX: List watermark profiles response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/watermarks\n@desc Create watermark profiles via basic upload\n@required {account_id: str}\n@optional {name: str= # A short description of the watermark profile., opacity: num=1 # The translucency of the image. A value of `0.0` makes the image completely transparent, and `1.0` makes the image completely opaque. Note that if the image is already semi-transparent, setting this to `1.0` will not make the image completely opaque., padding: num=0.05 # The whitespace between the adjacent edges (determined by position) of the video and the image. `0.0` indicates no padding, and `1.0` indicates a fully padded video width or length, as determined by the algorithm., position: str=upperRight # The location of the image. Valid positions are: `upperRight`, `upperLeft`, `lowerLeft`, `lowerRight`, and `center`. Note that `center` ignores the `padding` parameter., scale: num=0.15 # The size of the image relative to the overall size of the video. This parameter will adapt to horizontal and vertical videos automatically. `0.0` indicates no scaling (use the size of the image as-is), and `1.0 `fills the entire video., url: str(uri) # URL of the watermark image to copy.}\n@returns(200) Create watermark profiles via basic upload response.\n@errors {4XX: Create watermark profiles via basic upload response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/watermarks/{identifier}\n@desc Delete watermark profiles\n@required {identifier: str, account_id: str}\n@returns(200) Delete watermark profiles response.\n@errors {4XX: Delete watermark profiles response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/watermarks/{identifier}\n@desc Watermark profile details\n@required {identifier: str, account_id: str}\n@returns(200) Watermark profile details response.\n@errors {4XX: Watermark profile details response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/webhook\n@desc Delete webhooks\n@required {account_id: str}\n@returns(200) Delete webhooks response.\n@errors {4XX: Delete webhooks response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/webhook\n@desc View webhook\n@required {account_id: str}\n@returns(200) View webhooks response.\n@errors {4XX: View webhooks response failure.}\n\n@endpoint PUT /accounts/{account_id}/stream/webhook\n@desc Create VOD webhooks\n@required {account_id: str}\n@optional {notificationUrl: str(uri) # The URL where webhooks will be sent., notification_url: str(uri) # The URL where webhooks will be sent.}\n@returns(200) Create webhooks response.\n@errors {4XX: Create webhooks response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/{identifier}\n@desc Delete video\n@required {identifier: str, account_id: str}\n@returns(200) Delete video response.\n@errors {4XX: Delete video response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/{identifier}\n@desc Retrieve video details\n@required {identifier: str, account_id: str}\n@returns(200) Retrieve video details response.\n@errors {4XX: Retrieve video details response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/{identifier}\n@desc Edit video details\n@required {identifier: str, account_id: str}\n@optional {allowedOrigins: [str] # Lists the origins allowed to display the video. Enter allowed origin domains in an array and use `*` for wildcard subdomains. Empty arrays allow the video to be viewed on any origin., creator: str # A user-defined identifier for the media creator., maxDurationSeconds: int # The maximum duration in seconds for a video upload. Can be set for a video that is not yet uploaded to limit its duration. Uploads that exceed the specified duration will fail during processing. A value of `-1` means the value is unknown., meta: map # A user modifiable key-value store used to reference other systems of record for managing videos., publicDetails: map{channel_link: str, logo: str, share_link: str, title: str} # Public details for the video including title, share link, channel link, and logo., requireSignedURLs: bool=false # Indicates whether the video can be a accessed using the UID. When set to `true`, a signed token must be generated with a signing key to view the video., scheduledDeletion: str(date-time) # Indicates the date and time at which the video will be deleted. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time., thumbnailTimestampPct: num=0 # The timestamp for a thumbnail image calculated as a percentage value of the video's duration. To convert from a second-wise timestamp to a percentage, divide the desired timestamp by the total duration of the video.  If this value is not set, the default thumbnail image is taken from 0s of the video., uid: str # The unique identifier for the video. Can be used to verify the video being updated., uploadExpiry: str(date-time) # The date and time when the video upload URL is no longer valid for direct user uploads.}\n@returns(200) Edit video details response.\n@errors {4XX: Edit video details response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/{identifier}/audio\n@desc List additional audio tracks on a video\n@required {account_id: str, identifier: str}\n@returns(200) Lists additional audio tracks on a video.\n@errors {4XX: Lists additional audio tracks on a video response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/{identifier}/audio/copy\n@desc Add audio tracks to a video\n@required {account_id: str, identifier: str, label: str # A string to uniquely identify the track amongst other audio track labels for the specified video.}\n@optional {url: str(uri) # An audio track URL. The server must be publicly routable and support `HTTP HEAD` requests and `HTTP GET` range requests. The server should respond to `HTTP HEAD` requests with a `content-range` header that includes the size of the file.}\n@returns(200) Add audio tracks to a video.\n@errors {4XX: Add audio tracks to a video response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/{identifier}/audio/{audio_identifier}\n@desc Delete additional audio tracks on a video\n@required {account_id: str, identifier: str, audio_identifier: str}\n@returns(200) Deletes additional audio tracks on a video.\n@errors {4XX: Deletes additional audio tracks on a video response failure.}\n\n@endpoint PATCH /accounts/{account_id}/stream/{identifier}/audio/{audio_identifier}\n@desc Edit additional audio tracks on a video\n@required {account_id: str, identifier: str, audio_identifier: str}\n@optional {default: bool=false # Denotes whether the audio track will be played by default in a player., label: str # A string to uniquely identify the track amongst other audio track labels for the specified video.}\n@returns(200) Edits additional audio tracks on a video.\n@errors {4XX: Edits additional audio tracks on a video response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/{identifier}/captions\n@desc List captions or subtitles\n@required {identifier: str, account_id: str}\n@returns(200) List captions or subtitles response.\n@errors {4XX: List captions or subtitles response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/{identifier}/captions/{language}\n@desc Delete captions or subtitles\n@required {language: str, identifier: str, account_id: str}\n@returns(200) Delete captions or subtitles response.\n@errors {4XX: Delete captions or subtitles response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/{identifier}/captions/{language}\n@desc List captions or subtitles for a provided language\n@required {language: str, identifier: str, account_id: str}\n@returns(200) List captions or subtitles response for a provided language.\n@errors {4XX: List captions or subtitles response for a provided language.}\n\n@endpoint PUT /accounts/{account_id}/stream/{identifier}/captions/{language}\n@desc Upload captions or subtitles\n@required {language: str, identifier: str, account_id: str}\n@returns(200) Upload captions or subtitles response.\n@errors {4XX: Upload captions or subtitles response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/{identifier}/captions/{language}/generate\n@desc Generate captions or subtitles for a provided language via AI\n@required {language: str, identifier: str, account_id: str}\n@returns(200) Generate captions or subtitles response for a provided language.\n@errors {4XX: Generate captions or subtitles response for a provided language.}\n\n@endpoint GET /accounts/{account_id}/stream/{identifier}/captions/{language}/vtt\n@desc Return WebVTT captions for a provided language\n@required {language: str, identifier: str, account_id: str}\n@returns(200) Return WebVTT caption or subtitle response.\n@errors {4XX: Return WebVTT caption or subtitle response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/{identifier}/downloads\n@desc Delete downloads\n@required {identifier: str, account_id: str}\n@returns(200) Delete downloads response.\n@errors {4XX: Delete downloads response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/{identifier}/downloads\n@desc List downloads\n@required {identifier: str, account_id: str}\n@returns(200) List downloads response.\n@errors {4XX: List downloads response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/{identifier}/downloads\n@desc Create downloads\n@required {identifier: str, account_id: str}\n@returns(200) Create downloads response.\n@errors {4XX: Create downloads response failure.}\n\n@endpoint DELETE /accounts/{account_id}/stream/{identifier}/downloads/{download_type}\n@desc Delete download\n@required {identifier: str, account_id: str, download_type: str}\n@returns(200) Delete downloads response.\n@errors {4XX: Delete downloads response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/{identifier}/downloads/{download_type}\n@desc Create download\n@required {identifier: str, account_id: str, download_type: str}\n@returns(200) Create download of specified type response.\n@errors {4XX: Create downloads of specified type response failure.}\n\n@endpoint GET /accounts/{account_id}/stream/{identifier}/embed\n@desc Deprecated: Retrieve legacy embed code HTML\n@required {identifier: str, account_id: str}\n@returns(200) Retrieve embed Code HTML response.\n@errors {4XX: Retrieve embed Code HTML response failure.}\n\n@endpoint POST /accounts/{account_id}/stream/{identifier}/token\n@desc Create signed URL tokens for videos\n@required {identifier: str, account_id: str}\n@optional {accessRules: [map{action: str, country: [str], ip: [str], type: str}] # The optional list of access rule constraints on the token. Access can be blocked or allowed based on an IP, IP range, or by country. Access rules are evaluated from first to last. If a rule matches, the associated action is applied and no further rules are evaluated., downloadable: bool=false # The optional boolean value that enables using signed tokens to access MP4 download links for a video., exp: int # The optional unix epoch timestamp that specficies the time after a token is not accepted. The maximum time specification is 24 hours from issuing time. If this field is not set, the default is one hour after issuing., flags: map{original: bool} # Optional flags for the signed token., id: str # The optional ID of a Stream signing key. If present, the `pem` field is also required., nbf: int # The optional unix epoch timestamp that specifies the time before a the token is not accepted. If this field is not set, the default is one hour before issuing., pem: str # The optional base64 encoded private key in PEM format associated with a Stream signing key. If present, the `id` field is also required.}\n@returns(200) Create signed URL tokens for videos response.\n@errors {4XX: Create signed URL tokens for videos response failure.}\n\n@endpoint GET /accounts/{account_id}/subscriptions\n@desc List Subscriptions\n@required {account_id: str}\n@returns(200) List Subscriptions response\n@errors {4XX: List Subscriptions response failure}\n\n@endpoint POST /accounts/{account_id}/subscriptions\n@desc Create Subscription\n@required {account_id: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Create Subscription response\n@errors {4XX: Create Subscription response failure}\n\n@endpoint POST /accounts/{account_id}/subscriptions/cancel-downgrade\n@desc Cancel Delayed Downgrade\n@required {account_id: str}\n@optional {subscription_ids: [str] # List of subscription identifiers to cancel downgrades for.}\n@returns(200) Cancel Delayed Downgrade response\n@returns(204) Cancel Delayed Downgrade response (no content)\n@errors {4XX: Cancel Delayed Downgrade response failure}\n\n@endpoint DELETE /accounts/{account_id}/subscriptions/{subscription_identifier}\n@desc Delete Subscription\n@required {subscription_identifier: str, account_id: str}\n@returns(200) Delete Subscription response\n@errors {4XX: Delete Subscription response failure}\n\n@endpoint GET /accounts/{account_id}/subscriptions/{subscription_identifier}\n@desc Get Subscription\n@required {subscription_identifier: str, account_id: str}\n@returns(200) Get Subscription response\n@errors {404: Subscription not found, 4XX: Get Subscription response failure}\n\n@endpoint PUT /accounts/{account_id}/subscriptions/{subscription_identifier}\n@desc Update Subscription\n@required {subscription_identifier: str, account_id: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Update Subscription response\n@errors {4XX: Update Subscription response failure}\n\n@endpoint POST /accounts/{account_id}/subscriptions/{subscription_identifier}/action/append\n@desc Append Subscription Action\n@required {subscription_identifier: str, account_id: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Append Subscription Action response\n@errors {4XX: Append Subscription Action response failure}\n\n@endpoint GET /accounts/{account_id}/subscriptions/{subscription_identifier}/cancel-reason\n@desc Get Cancel Reason\n@required {subscription_identifier: str, account_id: str}\n@returns(200) Get Cancel Reason response\n@errors {4XX: Get Cancel Reason response failure}\n\n@endpoint POST /accounts/{account_id}/subscriptions/{subscription_identifier}/cancel-reason\n@desc Create Cancel Reason\n@required {subscription_identifier: str, account_id: str}\n@optional {other: str # Additional cancellation details., reason_code: [str] # The cancellation reason codes.}\n@returns(200) Create Cancel Reason response\n@errors {4XX: Create Cancel Reason response failure}\n\n@endpoint DELETE /accounts/{account_id}/tags\n@desc Delete tags from an account-level resource\n@required {account_id: any}\n@optional {If-Match: str # ETag value for optimistic concurrency control. When provided, the server will verify the current resource ETag matches before applying the write. Returns 412 Precondition Failed if the resource has been modified since the ETag was obtained. Omit this header for unconditional writes.}\n@returns(204) Tags successfully deleted (no content).\n@errors {412: Precondition failed. The resource has been modified since the provided ETag was obtained., 4XX: Delete tags response failure., 5XX: Delete tags response failure.}\n\n@endpoint GET /accounts/{account_id}/tags\n@desc Get tags for an account-level resource\n@required {account_id: any, resource_id: str # The ID of the resource to retrieve tags for., resource_type: str # The type of the resource.}\n@optional {worker_id: str # Worker identifier. Required for worker_version resources.}\n@returns(200) Get tags for single resource response.\n@errors {4XX: Get tags for single resource response failure., 5XX: Get tags for single resource response failure.}\n\n@endpoint PUT /accounts/{account_id}/tags\n@desc Set tags for an account-level resource\n@required {account_id: any}\n@optional {If-Match: str # ETag value for optimistic concurrency control. When provided, the server will verify the current resource ETag matches before applying the write. Returns 412 Precondition Failed if the resource has been modified since the ETag was obtained. Omit this header for unconditional writes.}\n@returns(200) Set tags response.\n@errors {412: Precondition failed. The resource has been modified since the provided ETag was obtained., 4XX: Set tags response failure., 5XX: Set tags response failure.}\n\n@endpoint GET /accounts/{account_id}/tags/keys\n@desc List tag keys\n@required {account_id: any}\n@optional {cursor: str # Cursor for pagination.}\n@returns(200) List tag keys response.\n@errors {4XX: List tag keys response failure., 5XX: List tag keys response failure.}\n\n@endpoint GET /accounts/{account_id}/tags/resources\n@desc List tagged resources\n@required {account_id: any}\n@optional {type: [str] # Filter by resource type. Can be repeated to filter by multiple types (OR logic). Example: ?type=zone&type=worker, name: str # Filter by resource name. Performs a case-insensitive substring match. Example: ?name=my-zone, id: [str] # Filter by resource ID. Can be repeated up to 50 times to filter by multiple IDs. Example: ?id=abc&id=def, case_insensitive: bool=false # Match `tag` keys and values case-insensitively. Stored casing is unchanged. Example: ?tag=environment=production&case_insensitive=true, tag: [str] # Filter resources by tag criteria. This parameter can be repeated multiple times, with AND logic between parameters.  Supported syntax: - **Key-only**: `tag=` - Resource must have the tag key (e.g., `tag=production`) - **Key-value**: `tag==` - Resource must have the tag with specific value (e.g., `tag=env=prod`) - **Multiple values (OR)**: `tag==,` - Resource must have tag with any of the values (e.g., `tag=env=prod,staging`) - **Negate key-only**: `tag=!` - Resource must not have the tag key (e.g., `tag=!archived`) - **Negate key-value**: `tag=!=` - Resource must not have the tag with specific value (e.g., `tag=region!=us-west-1`)  Multiple tag parameters are combined with AND logic., cursor: str # Cursor for pagination.}\n@returns(200) List tagged resources response.\n@errors {4XX: List tagged resources response failure., 5XX: List tagged resources response failure.}\n\n@endpoint GET /accounts/{account_id}/tags/summary\n@desc List tag key summary\n@required {account_id: any}\n@optional {cursor: str # Cursor for pagination.}\n@returns(200) List tag key summary response.\n@errors {4XX: List tag key summary response failure., 5XX: List tag key summary response failure.}\n\n@endpoint GET /accounts/{account_id}/tags/values/{tag_key}\n@desc List tag values\n@required {account_id: any, tag_key: str # The tag key to retrieve values for.}\n@optional {type: str # Filter by resource type., cursor: str # Cursor for pagination.}\n@returns(200) List tag values response.\n@errors {4XX: List tag values response failure., 5XX: List tag values response failure.}\n\n@endpoint GET /accounts/{account_id}/teamnet/routes\n@desc List tunnel routes\n@required {account_id: str}\n@optional {comment: str, is_deleted: bool, network_subset: any, network_superset: any, existed_at: str(url-encoded-date-time), tunnel_id: str(uuid), route_id: str, tun_types: [str], virtual_network_id: str(uuid), per_page: num, page: num}\n@returns(200) List tunnel routes response\n@errors {4XX: List tunnel routes response failure}\n\n@endpoint POST /accounts/{account_id}/teamnet/routes\n@desc Create a tunnel route\n@required {account_id: str, network: str # The private IPv4 or IPv6 range connected by the route, in CIDR notation., tunnel_id: str(uuid) # UUID of the tunnel.}\n@optional {comment: str= # Optional remark describing the route., virtual_network_id: str(uuid) # UUID of the virtual network.}\n@returns(200) Create a tunnel route response\n@errors {4XX: Create a tunnel route response failure}\n\n@endpoint GET /accounts/{account_id}/teamnet/routes/ip/{ip}\n@desc Get tunnel route by IP\n@required {ip: str, account_id: str}\n@optional {virtual_network_id: str(uuid), default_virtual_network_fallback: bool=true # When the virtual_network_id parameter is not provided the request filter will default search routes that are in the default virtual network for the account. If this parameter is set to false, the search will include routes that do not have a virtual network.}\n@returns(200) Get tunnel route by IP response\n@errors {4XX: Get tunnel route by IP response failure}\n\n@endpoint DELETE /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded}\n@desc Delete a tunnel route (CIDR Endpoint)\n@required {ip_network_encoded: str, account_id: str}\n@optional {virtual_network_id: str(uuid), tun_type: str, tunnel_id: str(uuid)}\n@returns(200) Delete a tunnel route response\n@errors {4XX: Delete a tunnel route response failure}\n\n@endpoint PATCH /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded}\n@desc Update a tunnel route (CIDR Endpoint)\n@required {ip_network_encoded: str, account_id: str}\n@returns(200) Update a tunnel route response\n@errors {4XX: Update a tunnel route response failure}\n\n@endpoint POST /accounts/{account_id}/teamnet/routes/network/{ip_network_encoded}\n@desc Create a tunnel route (CIDR Endpoint)\n@required {ip_network_encoded: str, account_id: str, tunnel_id: str(uuid) # UUID of the tunnel.}\n@optional {comment: str= # Optional remark describing the route., virtual_network_id: str(uuid) # UUID of the virtual network.}\n@returns(200) Create a tunnel route response\n@errors {4XX: Create a tunnel route response failure}\n\n@endpoint DELETE /accounts/{account_id}/teamnet/routes/{route_id}\n@desc Delete a tunnel route\n@required {route_id: str, account_id: str}\n@returns(200) Delete a tunnel route response\n@errors {4XX: Delete a tunnel route response failure}\n\n@endpoint GET /accounts/{account_id}/teamnet/routes/{route_id}\n@desc Get tunnel route\n@required {account_id: str, route_id: str}\n@returns(200) Get a tunnel route response\n@errors {4XX: Get a tunnel route response failure}\n\n@endpoint PATCH /accounts/{account_id}/teamnet/routes/{route_id}\n@desc Update a tunnel route\n@required {route_id: str, account_id: str}\n@optional {comment: str= # Optional remark describing the route., network: str # The private IPv4 or IPv6 range connected by the route, in CIDR notation., tunnel_id: str(uuid) # UUID of the tunnel., virtual_network_id: str(uuid) # UUID of the virtual network.}\n@returns(200) Update a tunnel route response\n@errors {4XX: Update a tunnel route response failure}\n\n@endpoint GET /accounts/{account_id}/teamnet/virtual_networks\n@desc List virtual networks\n@required {account_id: str}\n@optional {id: str(uuid), name: str, is_default: bool, is_default_network: bool, is_deleted: bool}\n@returns(200) List virtual networks response\n@errors {4XX: List virtual networks response failure}\n\n@endpoint POST /accounts/{account_id}/teamnet/virtual_networks\n@desc Create a virtual network\n@required {account_id: str, name: str # A user-friendly name for the virtual network.}\n@optional {comment: str= # Optional remark describing the virtual network., is_default: bool # If `true`, this virtual network is the default for the account., is_default_network: bool=false # If `true`, this virtual network is the default for the account.}\n@returns(200) Create a virtual network response\n@errors {4XX: Create a virtual network response failure}\n\n@endpoint DELETE /accounts/{account_id}/teamnet/virtual_networks/{virtual_network_id}\n@desc Delete a virtual network\n@required {virtual_network_id: str(uuid), account_id: str}\n@returns(200) Delete a virtual network response\n@errors {4XX: Delete a virtual network response failure}\n\n@endpoint GET /accounts/{account_id}/teamnet/virtual_networks/{virtual_network_id}\n@desc Get a virtual network\n@required {account_id: str, virtual_network_id: str(uuid)}\n@optional {comment: str= # Optional remark describing the virtual network., is_default_network: bool # If `true`, this virtual network is the default for the account., name: str # A user-friendly name for the virtual network.}\n@returns(200) A virtual network response\n@errors {4XX: A virtual network response failure}\n\n@endpoint PATCH /accounts/{account_id}/teamnet/virtual_networks/{virtual_network_id}\n@desc Update a virtual network\n@required {account_id: str, virtual_network_id: str(uuid)}\n@optional {comment: str= # Optional remark describing the virtual network., is_default_network: bool=false # If `true`, this virtual network is the default for the account., name: str # A user-friendly name for the virtual network.}\n@returns(200) Update a virtual network response\n@errors {4XX: Update a virtual network response failure}\n\n@endpoint GET /accounts/{account_id}/tokens\n@desc List Tokens\n@required {account_id: any}\n@optional {page: num=1, per_page: num=20, direction: str(asc/desc), include_expired: bool=false # When true, includes recently-expired tokens in the response.}\n@returns(200) List Tokens response\n@errors {4XX: List Tokens response failure}\n\n@endpoint POST /accounts/{account_id}/tokens\n@desc Create Token\n@required {account_id: any, name: str # Token name., policies: [map{effect!: str, id!: str, permission_groups!: [map], resources!: any}] # List of access policies assigned to the token.}\n@optional {condition: map{request_ip: map}, expires_on: str(date-time) # The expiration time on or after which the JWT MUST NOT be accepted for processing., not_before: str(date-time) # The time before which the token MUST NOT be accepted for processing.}\n@returns(200) Create Token response\n@errors {4XX: Create Token response failure}\n\n@endpoint GET /accounts/{account_id}/tokens/permission_groups\n@desc List Permission Groups\n@required {account_id: any}\n@optional {name: str # Filter by the name of the permission group. The value must be URL-encoded., scope: str # Filter by the scope of the permission group. The value must be URL-encoded.}\n@returns(200) List Account Owned API Token Permission Groups response\n@errors {4XX: List Account Owned API Token Permission Groups response failure}\n\n@endpoint GET /accounts/{account_id}/tokens/verify\n@desc Verify Token\n@required {account_id: any}\n@returns(200) Verify Token response\n@errors {4XX: Verify Token response failure}\n\n@endpoint DELETE /accounts/{account_id}/tokens/{token_id}\n@desc Delete Token\n@required {account_id: any, token_id: str}\n@returns(200) Delete Token response\n@errors {4XX: Delete Token response failure}\n\n@endpoint GET /accounts/{account_id}/tokens/{token_id}\n@desc Token Details\n@required {account_id: any, token_id: str}\n@returns(200) Token Details response\n@errors {4XX: Token Details response failure}\n\n@endpoint PUT /accounts/{account_id}/tokens/{token_id}\n@desc Update Token\n@required {account_id: any, token_id: str}\n@returns(200) Update Token response\n@errors {4XX: Update Token response failure}\n\n@endpoint PUT /accounts/{account_id}/tokens/{token_id}/value\n@desc Roll Token\n@required {account_id: any, token_id: str}\n@returns(200) Roll Token response\n@errors {4XX: Roll Token response failure}\n\n@endpoint DELETE /accounts/{account_id}/triggers/{script_name}\n@desc Delete script triggers\n@required {script_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{deleted: int}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Number of deleted trigger declarations.\n@errors {400: Invalid trigger configuration., 404: Target workflow not found.}\n\n@endpoint GET /accounts/{account_id}/triggers/{script_name}\n@desc Get script triggers\n@required {script_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{script_name: str, triggers: [map]}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Script trigger declarations.\n@errors {400: Invalid trigger configuration., 404: Target workflow not found.}\n\n@endpoint PATCH /accounts/{account_id}/triggers/{script_name}\n@desc Add script triggers\n@required {script_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{script_name: str, triggers: [map]}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Effective script trigger declarations.\n@errors {400: Invalid trigger configuration., 404: Target workflow not found.}\n\n@endpoint PUT /accounts/{account_id}/triggers/{script_name}\n@desc Replace script triggers\n@required {script_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{script_name: str, triggers: [map]}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Effective script trigger declarations.\n@errors {400: Invalid trigger configuration., 404: Target workflow not found.}\n\n@endpoint GET /accounts/{account_id}/tunnels\n@desc List All Tunnels\n@required {account_id: str}\n@optional {name: str, is_deleted: bool, existed_at: str(url-encoded-date-time), uuid: str(uuid), was_active_at: str(date-time), was_inactive_at: str(date-time), include_prefix: str, exclude_prefix: str, tun_types: [str], status: str, per_page: num, page: num}\n@returns(200) List Tunnels response\n@errors {4XX: List Tunnels response failure}\n\n@endpoint GET /accounts/{account_id}/urlscanner/response/{response_id}\n@desc Get raw response\n@required {response_id: str # Response hash., account_id: str # Account ID.}\n@returns(200) When `har.log.entries[].response._cf.contentAvailable` is `true`, use `response._cf.hash` value to fetch the raw response.\n@errors {400: Invalid params., 404: Scan not found.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/scan\n@desc Search URL scans\n@required {account_id: str # Account ID.}\n@optional {scan_id: str(uuid) # Scan UUID., limit: int # Limit the number of objects in the response., next_cursor: str # Pagination cursor to get the next set of results., date_start: str(date-time) # Filter scans requested after date (inclusive)., date_end: str(date-time) # Filter scans requested before date (inclusive)., url: str # Filter scans by URL of _any_ request made by the webpage, hostname: str # Filter scans by hostname of _any_ request made by the webpage., path: str # Filter scans by url path of _any_ request made by the webpage., ip: str # Filter scans by IP address (IPv4 or IPv6) of _any_ request made by the webpage., hash: str # Filter scans by hash of any html/js/css request made by the webpage., page_url: str # Filter scans by submitted or scanned URL, page_hostname: str # Filter scans by main page hostname (domain of effective URL)., page_path: str # Filter scans by exact match of effective URL path (also supports suffix search)., page_asn: str # Filter scans by main page Autonomous System Number (ASN)., page_ip: str # Filter scans by  main page IP address (IPv4 or IPv6)., account_scans: bool # Return only scans created by account., is_malicious: bool # Filter scans by malicious verdict.}\n@returns(200) {errors: [map], messages: [map], result: map{tasks: [map]}, success: bool} # Search results\n@errors {400: Invalid params.}\n\n@endpoint POST /accounts/{account_id}/urlscanner/scan\n@desc Create URL Scan\n@required {account_id: str # Account ID., url: str}\n@optional {country: str(AF/AL/DZ/AD/AO/AG/AR/AM/AU/AT/AZ/BH/BD/BB/BY/BE/BZ/BJ/BM/BT/BO/BA/BW/BR/BN/BG/BF/BI/KH/CM/CA/CV/KY/CF/TD/CL/CN/CO/KM/CG/CR/CI/HR/CU/CY/CZ/CD/DK/DJ/DM/DO/EC/EG/SV/GQ/ER/EE/SZ/ET/FJ/FI/FR/GA/GE/DE/GH/GR/GL/GD/GT/GN/GW/GY/HT/HN/HU/IS/IN/ID/IR/IQ/IE/IL/IT/JM/JP/JO/KZ/KE/KI/KW/KG/LA/LV/LB/LS/LR/LY/LI/LT/LU/MO/MG/MW/MY/MV/ML/MR/MU/MX/FM/MD/MC/MN/MS/MA/MZ/MM/NA/NR/NP/NL/NZ/NI/NE/NG/KP/MK/NO/OM/PK/PS/PA/PG/PY/PE/PH/PL/PT/QA/RO/RU/RW/SH/KN/LC/VC/WS/SM/ST/SA/SN/RS/SC/SL/SK/SI/SB/SO/ZA/KR/SS/ES/LK/SD/SR/SE/CH/SY/TW/TJ/TZ/TH/BS/GM/TL/TG/TO/TT/TN/TR/TM/UG/UA/AE/GB/US/UY/UZ/VU/VE/VN/YE/ZM/ZW) # Country to geo egress from, customHeaders: map # Set custom headers., screenshotsResolutions: [str]=desktop # Take multiple screenshots targeting different device types., visibility: str(Public/Unlisted)=Public # The option `Public` means it will be included in listings like recent scans and search results. `Unlisted` means it will not be included in the aforementioned listings, users will need to have the scan's ID to access it. A a scan will be automatically marked as unlisted if it fails, if it contains potential PII or other sensitive material.}\n@returns(200) {errors: [map], messages: [map], result: map{time: str(date-time), url: str, uuid: str(uuid), visibility: str}, success: bool} # Scan request accepted successfully.\n@errors {400: Invalid params., 409: Scan request denied: hostname was recently scanned., 429: Scan request denied: rate limited.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/scan/{scan_id}\n@desc Get URL scan\n@required {scan_id: str(uuid) # Scan UUID., account_id: str # Account ID.}\n@optional {full: bool # Whether to return full report (scan summary and network log).}\n@returns(200) {errors: [map], messages: [map], result: map{scan: map{asns: map{asn: map}, certificates: [map], domains: map{example.com: map}, geo: map{continents: [str], locations: [str]}, ips: map{ip: map}, links: map{link: map}, meta: map{processors: map}, page: map{asn: str, asnLocationAlpha2: str, asnname: str, console: [map], cookies: [map], country: str, countryLocationAlpha2: str, domain: str, headers: [map], ip: str, js: map, securityViolations: [map], status: num, subdivision1Name: str, subdivision2name: str, url: str}, performance: [map], task: map{clientLocation: str, clientType: str, effectiveUrl: str, errors: [map], scannedFrom: map, status: str, success: bool, time: str, timeEnd: str, url: str, uuid: str, visibility: str}, verdicts: map{overall: map}}}, success: bool} # Scan has finished. It may or may not have been successful.\n@returns(202) {errors: [map], messages: [map], result: map{scan: map{task: map{effectiveUrl: str, errors: [map], location: str, region: str, status: str, success: bool, time: str, url: str, uuid: str, visibility: str}}}, success: bool} # Scan is in progress. Check current status in `result.scan.task.status`. Possible statuses: `Queued`,`InProgress`,`InPostProcessing`,`Finished`.\n@errors {400: Invalid params., 404: Scan not found.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/scan/{scan_id}/har\n@desc Get URL scan's HAR\n@required {scan_id: str(uuid) # Scan UUID., account_id: str # Account ID.}\n@returns(200) {errors: [map], messages: [map], result: map{har: map{log: map{creator: map, entries: [map], pages: [map], version: str}}}, success: bool} # Returns the scan's har.\n@returns(202) {errors: [map], messages: [map], result: map{scan: map{task: map{effectiveUrl: str, errors: [map], location: str, region: str, status: str, success: bool, time: str, url: str, uuid: str, visibility: str}}}, success: bool} # Scan is in progress. Check current status in `result.scan.task.status`. Possible statuses: `Queued`,`InProgress`,`InPostProcessing`,`Finished`.\n@errors {400: Invalid params., 404: Scan not found.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/scan/{scan_id}/screenshot\n@desc Get screenshot\n@required {scan_id: str(uuid) # Scan UUID., account_id: str # Account ID.}\n@optional {resolution: str(desktop/mobile/tablet)=desktop # Target device type.}\n@returns(200) Returns the scan's requested screenshot.\n@returns(202) {errors: [map], messages: [map], result: map{scan: map{task: map{effectiveUrl: str, errors: [map], location: str, region: str, status: str, success: bool, time: str, url: str, uuid: str, visibility: str}}}, success: bool} # Scan is in progress. Check current status in `result.scan.task.status`. Possible statuses: `Queued`,`InProgress`,`InPostProcessing`,`Finished`.\n@errors {400: Invalid params., 404: Scan not found.}\n\n@endpoint POST /accounts/{account_id}/urlscanner/v2/bulk\n@desc Bulk create URL Scans\n@required {account_id: str # Account ID.}\n@returns(200) Scan bulk request accepted successfully.\n@errors {400: Invalid input., 429: Scan request denied: rate limited.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/v2/dom/{scan_id}\n@desc Get URL scan's DOM\n@required {scan_id: str(uuid) # Scan UUID., account_id: str # Account ID.}\n@returns(200) Returns a plain text response, with the scan's DOM content as rendered by Chrome.\n@errors {400: Invalid input., 404: Scan not found or in progress.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/v2/har/{scan_id}\n@desc Get URL scan's HAR\n@required {scan_id: str(uuid) # Scan UUID., account_id: str # Account ID.}\n@returns(200) {log: map{creator: map{comment: str, name: str, version: str}, entries: [map], pages: [map], version: str}} # Returns the scan's har.\n@errors {400: Invalid input., 404: Scan not found or in progress.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/v2/responses/{response_id}\n@desc Get raw response\n@required {response_id: str # Response hash., account_id: str # Account ID.}\n@returns(200) Get the raw response by its hash.\n@errors {400: Invalid input.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/v2/result/{scan_id}\n@desc Get URL scan\n@required {scan_id: str(uuid) # Scan UUID., account_id: str # Account ID.}\n@returns(200) {data: map{console: [map], cookies: [map], globals: [map], links: [map], performance: [map], requests: [map]}, lists: map{asns: [str], certificates: [map], continents: [str], countries: [str], domains: [str], hashes: [str], ips: [str], linkDomains: [str], servers: [str], urls: [str]}, meta: map{processors: map{agentReadiness: map{checks: map, commerceSignals: [str], isCommerce: bool, level: int, levelName: str, nextLevel: map}, asn: map{data: [map]}, dns: map{data: [map]}, domainCategories: map{data: [map]}, geoip: map{data: [map]}, phishing: map{data: [str]}, phishing_v2: map{data: [str]}, radarRank: map{data: [map]}, robotsTxt: map{data: [map]}, urlCategories: map{data: [map]}, wappa: map{data: [map]}}}, page: map{apexDomain: str, asn: str, asnname: str, city: str, country: str, domain: str, ip: str, mimeType: str, screenshot: map{dhash: str, mm3Hash: num, name: str, phash: str}, server: str, status: str, title: str, tlsAgeDays: num, tlsIssuer: str, tlsValidDays: num, tlsValidFrom: str, url: str}, scanner: map{colo: str, country: str}, stats: map{IPv6Percentage: num, domainStats: [map], ipStats: [map], malicious: num, protocolStats: [map], resourceStats: [map], securePercentage: num, secureRequests: num, serverStats: [map], tlsStats: [map], totalLinks: num, uniqASNs: num, uniqCountries: num}, task: map{apexDomain: str, domURL: str, domain: str, method: str, options: map{customHeaders: map, screenshotsResolutions: [str]}, reportURL: str, screenshotURL: str, source: str, success: bool, time: str, url: str, uuid: str, visibility: str}, verdicts: map{overall: map{categories: [str], hasVerdicts: bool, malicious: bool, tags: [str]}}} # Scan has finished. It may or may not have been successful.\n@errors {400: Invalid input., 404: Scan not found or in progress.}\n\n@endpoint POST /accounts/{account_id}/urlscanner/v2/scan\n@desc Create URL Scan\n@required {account_id: str # Account ID., url: str}\n@optional {agentReadiness: bool # Enable agent readiness checks., country: str(AF/AL/DZ/AD/AO/AG/AR/AM/AU/AT/AZ/BH/BD/BB/BY/BE/BZ/BJ/BM/BT/BO/BA/BW/BR/BN/BG/BF/BI/KH/CM/CA/CV/KY/CF/TD/CL/CN/CO/KM/CG/CR/CI/HR/CU/CY/CZ/CD/DK/DJ/DM/DO/EC/EG/SV/GQ/ER/EE/SZ/ET/FJ/FI/FR/GA/GE/DE/GH/GR/GL/GD/GT/GN/GW/GY/HT/HN/HU/IS/IN/ID/IR/IQ/IE/IL/IT/JM/JP/JO/KZ/KE/KI/KW/KG/LA/LV/LB/LS/LR/LY/LI/LT/LU/MO/MG/MW/MY/MV/ML/MR/MU/MX/FM/MD/MC/MN/MS/MA/MZ/MM/NA/NR/NP/NL/NZ/NI/NE/NG/KP/MK/NO/OM/PK/PS/PA/PG/PY/PE/PH/PL/PT/QA/RO/RU/RW/SH/KN/LC/VC/WS/SM/ST/SA/SN/RS/SC/SL/SK/SI/SB/SO/ZA/KR/SS/ES/LK/SD/SR/SE/CH/SY/TW/TJ/TZ/TH/BS/GM/TL/TG/TO/TT/TN/TR/TM/UG/UA/AE/GB/US/UY/UZ/VU/VE/VN/YE/ZM/ZW) # Country to geo egress from, customHeaders: map # Set custom headers., customagent: str, referer: str, screenshotsResolutions: [str]=desktop # Take multiple screenshots targeting different device types., visibility: str(Public/Unlisted)=Public # The option `Public` means it will be included in listings like recent scans and search results. `Unlisted` means it will not be included in the aforementioned listings, users will need to have the scan's ID to access it. A a scan will be automatically marked as unlisted if it fails, if it contains potential PII or other sensitive material.}\n@returns(200) {api: str, message: str, options: map{useragent: str}, result: str, url: str, uuid: str(uuid), visibility: str} # Scan request accepted successfully.\n@errors {400: Invalid input., 409: Scan request denied: hostname was recently scanned., 429: Scan request denied: rate limited.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/v2/screenshots/{scan_id}.png\n@desc Get screenshot\n@required {scan_id: str(uuid) # Scan UUID., account_id: str # Account ID.}\n@optional {resolution: str(desktop/mobile/tablet)=desktop # Target device type.}\n@returns(200) Returns the scan's requested screenshot.\n@errors {400: Invalid input., 404: Scan not found or in progress.}\n\n@endpoint GET /accounts/{account_id}/urlscanner/v2/search\n@desc Search URL scans\n@required {account_id: str # Account ID.}\n@optional {size: int # Limit the number of objects in the response., q: str # Filter scans}\n@returns(200) {results: [map]} # Search results\n@errors {400: Invalid input.}\n\n@endpoint GET /accounts/{account_id}/vectorize/indexes\n@desc List Vectorize Indexes (Deprecated)\n@required {account_id: str}\n@returns(200) List Vectorize Index Response\n@errors {4XX: List Vectorize Index Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/indexes\n@desc Create Vectorize Index (Deprecated)\n@required {account_id: str, config: any, name: str}\n@optional {description: str # Specifies the description of the index.}\n@returns(200) Create Vectorize Index Response\n@errors {4XX: Create Vectorize Index Failure Response}\n\n@endpoint DELETE /accounts/{account_id}/vectorize/indexes/{index_name}\n@desc Delete Vectorize Index (Deprecated)\n@required {account_id: str, index_name: str}\n@returns(200) Delete Vectorize Index Response\n@errors {4XX: Delete Vectorize Index Failure}\n\n@endpoint GET /accounts/{account_id}/vectorize/indexes/{index_name}\n@desc Get Vectorize Index (Deprecated)\n@required {account_id: str, index_name: str}\n@returns(200) Get Vectorize Index Response\n@errors {4XX: Get Vectorize Index Failure}\n\n@endpoint PUT /accounts/{account_id}/vectorize/indexes/{index_name}\n@desc Update Vectorize Index (Deprecated)\n@required {account_id: str, index_name: str, description: str # Specifies the description of the index.}\n@returns(200) Update Vectorize Index Response\n@errors {4XX: Update Vectorize Index Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/indexes/{index_name}/delete-by-ids\n@desc Delete Vectors By Identifier (Deprecated)\n@required {account_id: str, index_name: str}\n@optional {ids: [str] # A list of vector identifiers to delete from the index indicated by the path.}\n@returns(200) Delete Vector Identifiers Response\n@errors {4XX: Delete Vector Identifiers Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/indexes/{index_name}/get-by-ids\n@desc Get Vectors By Identifier (Deprecated)\n@required {account_id: str, index_name: str}\n@optional {ids: [str] # A list of vector identifiers to retrieve from the index indicated by the path.}\n@returns(200) Get Vectors By Identifier Response\n@errors {4XX: Get Vectors By Identifier Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/indexes/{index_name}/insert\n@desc Insert Vectors (Deprecated)\n@required {account_id: str, index_name: str}\n@returns(200) Insert Vectors Response\n@errors {4XX: Insert Vectors Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/indexes/{index_name}/query\n@desc Query Vectors (Deprecated)\n@required {account_id: str, index_name: str, vector: [num] # The search vector that will be used to find the nearest neighbors.}\n@optional {filter: map # A metadata filter expression used to limit nearest neighbor results., returnMetadata: bool=false # Whether to return the metadata associated with the closest vectors., returnValues: bool=false # Whether to return the values associated with the closest vectors., topK: num=5 # The number of nearest neighbors to find.}\n@returns(200) Query Vectors Response\n@errors {4XX: Query Vectors Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/indexes/{index_name}/upsert\n@desc Upsert Vectors (Deprecated)\n@required {account_id: str, index_name: str}\n@returns(200) Insert Vectors Response\n@errors {4XX: Insert Vectors Failure Response}\n\n@endpoint GET /accounts/{account_id}/vectorize/v2/indexes\n@desc List Vectorize Indexes\n@required {account_id: str}\n@returns(200) List Vectorize Index Response\n@errors {4XX: List Vectorize Index Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes\n@desc Create Vectorize Index\n@required {account_id: str, config: any, name: str}\n@optional {description: str # Specifies the description of the index.}\n@returns(200) Create Vectorize Index Response\n@errors {4XX: Create Vectorize Index Failure Response}\n\n@endpoint DELETE /accounts/{account_id}/vectorize/v2/indexes/{index_name}\n@desc Delete Vectorize Index\n@required {account_id: str, index_name: str}\n@returns(200) Delete Vectorize Index Response\n@errors {4XX: Delete Vectorize Index Failure}\n\n@endpoint GET /accounts/{account_id}/vectorize/v2/indexes/{index_name}\n@desc Get Vectorize Index\n@required {account_id: str, index_name: str}\n@returns(200) Get Vectorize Index Response\n@errors {4XX: Get Vectorize Index Failure}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes/{index_name}/delete_by_ids\n@desc Delete Vectors By Identifier\n@required {account_id: str, index_name: str}\n@optional {ids: [str] # A list of vector identifiers to delete from the index indicated by the path.}\n@returns(200) Delete Vector Identifiers Response\n@errors {4XX: Delete Vector Identifiers Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes/{index_name}/get_by_ids\n@desc Get Vectors By Identifier\n@required {account_id: str, index_name: str}\n@optional {ids: [str] # A list of vector identifiers to retrieve from the index indicated by the path.}\n@returns(200) Get Vectors By Identifier Response\n@errors {4XX: Get Vectors By Identifier Failure Response}\n\n@endpoint GET /accounts/{account_id}/vectorize/v2/indexes/{index_name}/info\n@desc Get Vectorize Index Info\n@required {account_id: str, index_name: str}\n@returns(200) Get Vectorize Index Info Response\n@errors {4XX: Get Vectorize Index Info Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes/{index_name}/insert\n@desc Insert Vectors\n@required {account_id: str, index_name: str}\n@optional {unparsable-behavior: str(error/discard)}\n@returns(200) Insert Vectors Response\n@errors {4XX: Insert Vectors Failure Response}\n\n@endpoint GET /accounts/{account_id}/vectorize/v2/indexes/{index_name}/list\n@desc List Vectors\n@required {account_id: str, index_name: str}\n@optional {count: int=100, cursor: str}\n@returns(200) List Vectors Response\n@errors {4XX: List Vectors Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes/{index_name}/metadata_index/create\n@desc Create Metadata Index\n@required {account_id: str, index_name: str, indexType: str(string/number/boolean) # Specifies the type of metadata property to index., propertyName: str # Specifies the metadata property to index.}\n@returns(200) Create Metadata Index Response\n@errors {4XX: Create Metadata Index Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes/{index_name}/metadata_index/delete\n@desc Delete Metadata Index\n@required {account_id: str, index_name: str, propertyName: str # Specifies the metadata property for which the index must be deleted.}\n@returns(200) Delete Metadata Index Response\n@errors {4XX: Delete Metadata Index Failure}\n\n@endpoint GET /accounts/{account_id}/vectorize/v2/indexes/{index_name}/metadata_index/list\n@desc List Metadata Indexes\n@required {account_id: str, index_name: str}\n@returns(200) List Metadata Index Response\n@errors {4XX: List Metadata Index Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes/{index_name}/query\n@desc Query Vectors\n@required {account_id: str, index_name: str, vector: [num] # The search vector that will be used to find the nearest neighbors.}\n@optional {filter: map # A metadata filter expression used to limit nearest neighbor results., returnMetadata: str(none/indexed/all)=none # Whether to return no metadata, indexed metadata or all metadata associated with the closest vectors., returnValues: bool=false # Whether to return the values associated with the closest vectors., topK: num=5 # The number of nearest neighbors to find.}\n@returns(200) Query Vectors Response\n@errors {4XX: Query Vectors Failure Response}\n\n@endpoint POST /accounts/{account_id}/vectorize/v2/indexes/{index_name}/upsert\n@desc Upsert Vectors\n@required {account_id: str, index_name: str}\n@optional {unparsable-behavior: str(error/discard)}\n@returns(200) Upsert Vectors Response\n@errors {4XX: Upsert Vectors Failure Response}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/credential_sets\n@desc List credential sets\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Number of results per page.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/vuln_scanner/credential_sets\n@desc Create credential set\n@required {name: str # Human-readable name.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}\n@desc Delete credential set\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}\n@desc Get credential set\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}\n@desc Edit credential set\n@optional {name: str # Human-readable name.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint PUT /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}\n@desc Update credential set\n@required {name: str # Human-readable name.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}/credentials\n@desc List credentials\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Number of results per page.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}/credentials\n@desc Create credential\n@required {location: str(header/cookie) # Where the credential is attached in outgoing requests., location_name: str # Name of the header or cookie where the credential is attached., name: str # Human-readable name., value: str # The credential value (e.g. API key, session token). Write-only. Never returned in responses.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}/credentials/{credential_id}\n@desc Delete credential\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}/credentials/{credential_id}\n@desc Get credential\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}/credentials/{credential_id}\n@desc Edit credential\n@optional {location: str(header/cookie) # Where the credential is attached in outgoing requests., location_name: str # Name of the header or cookie where the credential is attached., name: str # Human-readable name., value: str # The credential value. Write-only. Never returned in responses.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint PUT /accounts/{account_id}/vuln_scanner/credential_sets/{credential_set_id}/credentials/{credential_id}\n@desc Update credential\n@required {location: str(header/cookie) # Where the credential is attached in outgoing requests., location_name: str # Name of the header or cookie where the credential is attached., name: str # Human-readable name., value: str # The credential value. Write-only. Never returned in responses.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/scans\n@desc List scans\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Number of results per page.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/vuln_scanner/scans\n@desc Create scan\n@returns(200) Successful response. Check the `messages` array for non-fatal warnings that arose during scan creation.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/vuln_scanner/scans/{scan_id}\n@desc Delete scan\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/scans/{scan_id}\n@desc Get scan\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/target_environments\n@desc List target environments\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Number of results per page.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint POST /accounts/{account_id}/vuln_scanner/target_environments\n@desc Create target environment\n@required {name: str # Human-readable name., target: any # Identifies the Cloudflare asset to scan. Uses a `type` discriminator. Currently the service supports only `zone` targets.}\n@optional {description: str # Optional description.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint DELETE /accounts/{account_id}/vuln_scanner/target_environments/{target_environment_id}\n@desc Delete target environment\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/vuln_scanner/target_environments/{target_environment_id}\n@desc Get target environment\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint PATCH /accounts/{account_id}/vuln_scanner/target_environments/{target_environment_id}\n@desc Edit target environment\n@optional {description: str # Optional description. Omit to leave unchanged, set to `null` to clear, or provide a string to update., name: str # Human-readable name., target: any # Identifies the Cloudflare asset to scan. Uses a `type` discriminator. Currently the service supports only `zone` targets.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint PUT /accounts/{account_id}/vuln_scanner/target_environments/{target_environment_id}\n@desc Update target environment\n@required {name: str # Human-readable name., target: any # Identifies the Cloudflare asset to scan. Uses a `type` discriminator. Currently the service supports only `zone` targets.}\n@optional {description: str # Optional description.}\n@returns(200) Successful response.\n@errors {4XX: Client error.}\n\n@endpoint GET /accounts/{account_id}/waiting_rooms\n@desc List waiting rooms for account\n@required {account_id: str}\n@optional {page: num=1 # Page number of paginated results., per_page: num=25 # Maximum number of results per page. Must be a multiple of 5.}\n@returns(200) List waiting rooms for account response\n@errors {4XX: List waiting rooms for account response failure}\n\n@endpoint GET /accounts/{account_id}/warp_connector\n@desc List Warp Connector Tunnels\n@required {account_id: str}\n@optional {name: str, is_deleted: bool, existed_at: str(url-encoded-date-time), uuid: str(uuid), was_active_at: str(date-time), was_inactive_at: str(date-time), include_prefix: str, exclude_prefix: str, status: str, per_page: num, page: num}\n@returns(200) List Warp Connector Tunnels response\n@errors {4XX: List Warp Connector Tunnels response failure}\n\n@endpoint POST /accounts/{account_id}/warp_connector\n@desc Create a Warp Connector Tunnel\n@required {account_id: str, name: str # A user-friendly name for a tunnel.}\n@optional {ha: bool=false # Indicates that the tunnel will be created to be highly available. If omitted, defaults to false.}\n@returns(200) Create a Warp Connector Tunnel response\n@errors {4XX: Create a Warp Connector Tunnel response failure}\n\n@endpoint DELETE /accounts/{account_id}/warp_connector/{tunnel_id}\n@desc Delete a Warp Connector Tunnel\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Delete a Warp Connector Tunnel response\n@errors {4XX: Delete a Warp Connector Tunnel response failure}\n\n@endpoint GET /accounts/{account_id}/warp_connector/{tunnel_id}\n@desc Get a Warp Connector Tunnel\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Get a Warp Connector Tunnel response\n@errors {4XX: Get a Warp Connector Tunnel response failure}\n\n@endpoint PATCH /accounts/{account_id}/warp_connector/{tunnel_id}\n@desc Update a Warp Connector Tunnel\n@required {account_id: str, tunnel_id: str(uuid)}\n@optional {name: str # A user-friendly name for a tunnel., tunnel_secret: str # Sets the password required to run a locally-managed tunnel. Must be at least 32 bytes and encoded as a base64 string.}\n@returns(200) Update a Warp Connector Tunnel response\n@errors {4XX: Update a Warp Connector Tunnel response failure}\n\n@endpoint GET /accounts/{account_id}/warp_connector/{tunnel_id}/configurations\n@desc Get WARP Connector HA configuration\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Get WARP Connector HA configuration response\n@errors {4XX: Get WARP Connector HA configuration response failure}\n\n@endpoint PUT /accounts/{account_id}/warp_connector/{tunnel_id}/configurations\n@desc Update WARP Connector HA configuration\n@required {account_id: str, tunnel_id: str(uuid), ha_mode: str(none/disabled/aws/local) # High-availability mode for the WARP Connector tunnel. `none` means HA is enabled but no provider is configured yet (newly created tunnels default to this). `disabled` means HA is explicitly turned off. `aws` uses AWS ENI move for failover. `local` uses virtual IPs (VIPs) on the local interface.}\n@optional {config: map # Provider-specific configuration. Required shape depends on ha_mode. For `aws`, must contain `fnr_id`. For `local`, must contain `vips`. For `none` and `disabled`, must be empty or omitted.}\n@returns(200) Update WARP Connector HA configuration response\n@errors {4XX: Update WARP Connector HA configuration response failure}\n\n@endpoint GET /accounts/{account_id}/warp_connector/{tunnel_id}/connections\n@desc List WARP Connector Tunnel connections\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) List WARP Connector Tunnel connections response\n@errors {4XX: List WARP Connector connections response failure}\n\n@endpoint GET /accounts/{account_id}/warp_connector/{tunnel_id}/connectors/{connector_id}\n@desc Get WARP Connector Tunnel connector\n@required {account_id: str, tunnel_id: str(uuid), connector_id: str(uuid)}\n@returns(200) Get WARP Connector Tunnel connector response\n@errors {4XX: Get WARP Connector Tunnel connector response failure}\n\n@endpoint PUT /accounts/{account_id}/warp_connector/{tunnel_id}/failover\n@desc Trigger a manual failover for a WARP Connector Tunnel\n@required {account_id: str, tunnel_id: str(uuid), client_id: str(uuid) # UUID of the Cloudflare Tunnel connector.}\n@returns(200) Manual failover response\n@errors {4XX: Manual failover response failure}\n\n@endpoint GET /accounts/{account_id}/warp_connector/{tunnel_id}/token\n@desc Get a Warp Connector Tunnel token\n@required {account_id: str, tunnel_id: str(uuid)}\n@returns(200) Get a Warp Connector Tunnel token response\n@errors {4XX: Get a Warp Connector Tunnel token response failure}\n\n@endpoint GET /accounts/{account_id}/workers/account-settings\n@desc Fetch Workers Account Settings\n@required {account_id: str}\n@returns(200) Fetch Workers Account Settings response.\n@errors {4XX: Fetch Workers Account Settings response failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/account-settings\n@desc Configure Workers Account Settings\n@required {account_id: str}\n@optional {default_usage_model: str, green_compute: bool}\n@returns(200) Create Workers Account Settings response.\n@errors {4XX: Create Workers Account Settings response failure.}\n\n@endpoint POST /accounts/{account_id}/workers/assets/upload\n@desc Upload Worker Assets\n@required {account_id: str, base64: bool}\n@returns(201) Upload Assets response.\n@returns(202) Upload Assets response.\n@errors {4XX: Upload Assets response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces\n@desc List Workers for Platforms Dispatch Namespaces\n@required {account_id: str}\n@returns(200) Fetch a list of Workers for Platforms namespaces.\n@errors {4XX: Failure to get list of Workers for Platforms namespaces.}\n\n@endpoint POST /accounts/{account_id}/workers/dispatch/namespaces\n@desc Create Workers for Platforms Dispatch Namespace\n@required {account_id: str}\n@optional {name: str # The name of the dispatch namespace.}\n@returns(200) Fetch a list of Workers for Platforms namespaces.\n@errors {4XX: Failure to get list of Workers for Platforms namespaces.}\n\n@endpoint DELETE /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}\n@desc Delete Workers for Platforms Dispatch Namespace\n@required {account_id: str, dispatch_namespace: str}\n@returns(200) Delete a Workers for Platforms namespace.\n@errors {4XX: Failure to delete Workers for Platforms namespace.}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}\n@desc Get Workers for Platforms Dispatch Namespace\n@required {account_id: str, dispatch_namespace: str}\n@returns(200) Get a Workers for Platforms namespace.\n@errors {4XX: Failure to get Workers for Platforms namespace.}\n\n@endpoint PATCH /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}\n@desc Patch Workers for Platforms Dispatch Namespace\n@required {account_id: str, dispatch_namespace: str}\n@optional {name: str # The name of the dispatch namespace., trusted_workers: bool=false # Whether the Workers in the namespace are executed in a \"trusted\" manner. When a Worker is trusted, it has access to the shared caches for the zone in the Cache API, and has access to the `request.cf` object on incoming Requests. When a Worker is untrusted, caches are not shared across the zone, and `request.cf` is undefined. By default, Workers in a namespace are \"untrusted\".}\n@returns(200) Patch a Workers for Platforms namespace.\n@errors {4XX: Failure to patch Workers for Platforms namespace.}\n\n@endpoint PUT /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}\n@desc Update Workers for Platforms Dispatch Namespace\n@required {account_id: str, dispatch_namespace: str}\n@optional {name: str # The name of the dispatch namespace., trusted_workers: bool=false # Whether the Workers in the namespace are executed in a \"trusted\" manner. When a Worker is trusted, it has access to the shared caches for the zone in the Cache API, and has access to the `request.cf` object on incoming Requests. When a Worker is untrusted, caches are not shared across the zone, and `request.cf` is undefined. By default, Workers in a namespace are \"untrusted\".}\n@returns(200) Update a Workers for Platforms namespace.\n@errors {4XX: Failure to update Workers for Platforms namespace.}\n\n@endpoint DELETE /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts\n@desc Delete Workers for Platforms Scripts\n@required {account_id: str, dispatch_namespace: str}\n@optional {tags: str # Filter scripts by tags before deletion. Format: comma-separated list of tag:allowed pairs where allowed is 'yes' or 'no'., limit: int # Limit the number of scripts to delete.}\n@returns(200) {deleted: [map], deleted_count: int, has_more: bool} # Delete scripts in namespace response.\n@errors {4XX: Delete scripts in namespace response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts\n@desc List Workers for Platforms Scripts\n@required {account_id: str, dispatch_namespace: str}\n@optional {tags: str # Filter scripts by tags. Format: comma-separated list of tag:allowed pairs where allowed is 'yes' or 'no'.}\n@returns(200) List scripts in namespace response.\n@errors {4XX: List scripts in namespace response failure.}\n\n@endpoint DELETE /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}\n@desc Delete Workers for Platforms Script\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@optional {force: bool # If set to true, delete will not be stopped by associated service binding, durable object, or other binding. Any of these associated bindings/durable objects will be deleted along with the script.}\n@returns(200) Delete Worker response.\n@errors {4XX: Delete Worker response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}\n@desc Get Workers for Platforms Script details\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Worker Details Response (Workers for Platforms).\n@errors {4XX: Worker Details Failure (Workers for Platforms).}\n\n@endpoint PUT /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}\n@desc Upload Workers for Platforms Script Module\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@optional {bindings_inherit: str # When set to \"strict\", the upload will fail if any `inherit` type bindings cannot be resolved against the previous version of the script. Without this, unresolvable inherit bindings are silently dropped.}\n@returns(200) Upload Worker Module response.\n@errors {4XX: Upload Worker Module response failure. When the upload uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint POST /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/assets-upload-session\n@desc Create Workers for Platforms Assets Upload Session\n@required {account_id: str, dispatch_namespace: str, script_name: str, manifest: map # A manifest ([path]: {hash, size}) map of files to upload. As an example, `/blog/hello-world.html` would be a valid path key.}\n@returns(200) Create Assets Upload Session response.\n@errors {4XX: Create Assets Upload Session response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/bindings\n@desc Get Workers for Platforms Script Bindings\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Fetch script bindings (Workers for Platforms).\n@errors {4XX: Fetch script bindings failure (Workers for Platforms).}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/content\n@desc Get Workers for Platforms Script Content\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Get script content.\n@errors {4XX: Get script content failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/content\n@desc Replace Workers for Platforms Script Content\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@optional {CF-WORKER-BODY-PART: str # The multipart name of a script upload part containing script content in service worker format. Alternative to including in a metadata part., CF-WORKER-MAIN-MODULE-PART: str # The multipart name of a script upload part containing script content in es module format. Alternative to including in a metadata part.}\n@returns(200) Put script content (Workers for Platforms).\n@errors {4XX: Put script content failure (Workers for Platforms).}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/secrets\n@desc List Workers for Platforms Script Secrets\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) List script secrets.\n@errors {4XX: List script secrets failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/secrets\n@desc Add a secret to a Workers for Platforms script\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Fetch script bindings (Workers for Platforms).\n@errors {429: Too many requests are currently modifying the script., 4XX: Fetch script bindings failure (Workers for Platforms).}\n\n@endpoint PATCH /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/secrets-bulk\n@desc Patch multiple Workers for Platforms script secrets\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@optional {secrets: map # Map of secret names to secret values: - Set to a secret object to create or update. - Set to `null` to delete. - Omit to leave unchanged., version_tags: map # Optional version tags to apply to the new script version.}\n@returns(200) Patch script secrets bulk success (Workers for Platforms).\n@errors {429: Too many requests are currently modifying the script., 4XX: Patch script secrets bulk failure (Workers for Platforms).}\n\n@endpoint DELETE /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/secrets/{secret_name}\n@desc Delete Workers for Platforms script secret\n@required {account_id: str, dispatch_namespace: str, script_name: str, secret_name: str}\n@optional {url_encoded: bool}\n@returns(200) Delete script secret binding (Workers for Platforms).\n@errors {4XX: Delete script secret failure (Workers for Platforms).}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/secrets/{secret_name}\n@desc Get Workers for Platforms Script Secret\n@required {account_id: str, dispatch_namespace: str, script_name: str, secret_name: str}\n@optional {url_encoded: bool}\n@returns(200) Get script secret (Workers for Platforms).\n@errors {4XX: Get script secret failure (Workers for Platforms).}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/settings\n@desc Get Workers for Platforms Script Settings\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Fetch script settings.\n@errors {4XX: Fetch script settings failure.}\n\n@endpoint PATCH /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/settings\n@desc Patch Workers for Platforms Script Settings\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Patch script settings.\n@errors {4XX: Patch script settings failure. When the patch uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint GET /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/tags\n@desc List Workers for Platforms Script Tags\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Fetch script tags.\n@errors {4XX: Fetch script tags failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/tags\n@desc Replace Workers for Platforms Script Tags\n@required {account_id: str, dispatch_namespace: str, script_name: str}\n@returns(200) Fetch script tags.\n@errors {4XX: Fetch script tags failure.}\n\n@endpoint DELETE /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/tags/{tag}\n@desc Delete Workers for Platforms Script Tag\n@required {account_id: str, dispatch_namespace: str, script_name: str, tag: str}\n@returns(200) Delete script tag.\n@errors {4XX: Delete script tag failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/dispatch/namespaces/{dispatch_namespace}/scripts/{script_name}/tags/{tag}\n@desc Create Workers for Platforms Script Tag\n@required {account_id: str, dispatch_namespace: str, script_name: str, tag: str}\n@returns(200) Put script tag.\n@errors {4XX: Put script tag failure.}\n\n@endpoint GET /accounts/{account_id}/workers/domains\n@desc List Worker Domains\n@required {account_id: str}\n@optional {zone_id: str, zone_name: str, service: str, hostname: str, environment: str}\n@returns(200) List domains response.\n@errors {4XX: List domains failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/domains\n@desc Attach Worker Domain\n@required {account_id: str}\n@returns(200) Attach domain response.\n@errors {4XX: Attach domain failure.}\n\n@endpoint DELETE /accounts/{account_id}/workers/domains/{domain_id}\n@desc Detach Worker Domain\n@required {account_id: str, domain_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Detach domain response.\n@errors {4XX: Detach domain failure.}\n\n@endpoint GET /accounts/{account_id}/workers/domains/{domain_id}\n@desc Get Worker Domain\n@required {account_id: str, domain_id: str}\n@returns(200) Get domain response.\n@errors {4XX: Get domain failure.}\n\n@endpoint GET /accounts/{account_id}/workers/durable_objects/namespaces\n@desc List Durable Object Namespaces\n@required {account_id: str}\n@optional {page: int=1 # Current page., per_page: int=20 # Items per-page.}\n@returns(200) List Namespaces response.\n@errors {4XX: List Namespaces response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/durable_objects/namespaces/{id}/objects\n@desc List Objects in a Durable Object namespace\n@required {account_id: str, id: str}\n@optional {limit: num=1000, cursor: str}\n@returns(200) List Objects response.\n@errors {4XX: List Objects response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/observability/destinations\n@desc Get Destinations\n@optional {page: num=1, perPage: num=20, order: str(asc/desc)=desc, orderBy: str(created/updated)=updated}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Successful request\n@errors {401: Unauthorized, 404: Not found, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/destinations\n@desc Create Destination\n@required {configuration: map{headers!: map, logpushDataset!: any, type!: str, url!: str}, enabled: bool, name: str}\n@optional {skipPreflightCheck: bool}\n@returns(201) {errors: [map], messages: [map], result: map{configuration: map{destination_conf: str, logpushDataset: any, logpushJob: num, type: str, url: str}, enabled: bool, name: str, scripts: [str], slug: str}, success: bool} # Resource created\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint DELETE /accounts/{account_id}/workers/observability/destinations/{slug}\n@desc Delete Destination\n@required {slug: str}\n@returns(200) {errors: [map], messages: [map], result: map{configuration: map{destination_conf: str, logpushDataset: any, logpushJob: num, type: str, url: str}, enabled: bool, name: str, scripts: [str], slug: str}, success: bool} # Successful request\n@errors {401: Unauthorized, 404: Not found, 409: Conflict, 500: Internal error}\n\n@endpoint PATCH /accounts/{account_id}/workers/observability/destinations/{slug}\n@desc Update Destination\n@required {slug: str, configuration: map{headers!: map, type!: str, url!: str}, enabled: bool}\n@returns(200) {errors: [map], messages: [map], result: map{configuration: map{destination_conf: str, logpushDataset: any, logpushJob: num, type: str, url: str}, enabled: bool, name: str, scripts: [str], slug: str}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 404: Not found, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/issues\n@desc List detected issues\n@optional {page: int, perPage: int, order: str(asc/desc), orderBy: str(id/service/fingerprint/title/type/status/statusUpdated/count/firstObserved/lastObserved/created/updated), search: str, service: str, status: str(active/resolved/ignored)}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: num, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/issues/automations\n@desc List issue automations\n@optional {service: str}\n@returns(200) {errors: [map], messages: [map], result: map{automations: [map]}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/issues/automations\n@desc Create an issue automation\n@required {policyId: str}\n@optional {afterInactivitySeconds: int, afterOccurrences: int, enabled: bool, name: str, service: str}\n@returns(200) {errors: [map], messages: [map], result: map{automation: map{ansPolicyId: str, created: num, createdByUserId: str?, enabled: bool, id: str, inactivitySeconds: num?, name: str, revision: num, scope: str, service: str?, serviceType: str?, threshold: num?, triggerType: str, updated: num, updatedByUserId: str?}}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint DELETE /accounts/{account_id}/workers/observability/issues/automations/{automationId}\n@desc Delete an issue automation\n@required {automationId: str}\n@returns(200) {errors: [map], messages: [map], result: map{automation: map{ansPolicyId: str, created: num, createdByUserId: str?, enabled: bool, id: str, inactivitySeconds: num?, name: str, revision: num, scope: str, service: str?, serviceType: str?, threshold: num?, triggerType: str, updated: num, updatedByUserId: str?}}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/issues/automations/{automationId}\n@desc Get an issue automation\n@required {automationId: str}\n@returns(200) {errors: [map], messages: [map], result: map{automation: map{ansPolicyId: str, created: num, createdByUserId: str?, enabled: bool, id: str, inactivitySeconds: num?, name: str, revision: num, scope: str, service: str?, serviceType: str?, threshold: num?, triggerType: str, updated: num, updatedByUserId: str?}}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint PUT /accounts/{account_id}/workers/observability/issues/automations/{automationId}\n@desc Update an issue automation\n@required {automationId: str, policyId: str}\n@optional {afterInactivitySeconds: int, afterOccurrences: int, enabled: bool, name: str, service: str}\n@returns(200) {errors: [map], messages: [map], result: map{automation: map{ansPolicyId: str, created: num, createdByUserId: str?, enabled: bool, id: str, inactivitySeconds: num?, name: str, revision: num, scope: str, service: str?, serviceType: str?, threshold: num?, triggerType: str, updated: num, updatedByUserId: str?}}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/issues/summary\n@desc Summarize detected issues\n@optional {service: str}\n@returns(200) {errors: [map], messages: [map], result: map{activeIssues: num, activeOccurrences: num, lastIssue: num?, resolvedIssues: num}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/issues/{issueId}\n@desc Get an issue\n@required {issueId: str}\n@returns(200) {errors: [map], messages: [map], result: map{issue: map{activity: [map], count: num, created: num, fingerprint: str, firstObserved: num, id: str, lastObserved: num, service: str, status: str, statusUpdated: num, title: str, type: str, updated: num}}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint PATCH /accounts/{account_id}/workers/observability/issues/{issueId}\n@desc Modify an issue\n@required {issueId: str, status: str(active/resolved/ignored)}\n@returns(200) {errors: [map], messages: [map], result: map{count: num, created: num, fingerprint: str, firstObserved: num, id: str, lastObserved: num, service: str, status: str, statusUpdated: num, title: str, type: str, updated: num}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/issues/{issueId}/notification-runs\n@desc Notify about an issue\n@required {issueId: str}\n@optional {policyId: str}\n@returns(200) {errors: [map], messages: [map], result: map{run: map{automationId: str, automationName: str, automationRevision: num, created: num, id: str, inactivitySeconds: num?, initiatedBy: str, issueCount: num, issueId: str, lastError: str?, policyId: str, scope: str, status: str, terminalAt: num?, threshold: num?, triggerType: str}}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not found, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/issues/{issueId}/occurrences\n@desc List issue occurrences\n@required {issueId: str # Issue ID returned by the issues API.}\n@optional {cursor: str # Opaque cursor returned in result_info.cursors.after., per_page: int}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: int, cursors: map{after: str?}, per_page: int}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not found, 429: Too many requests, 500: Internal error, 504: Gateway timeout}\n\n@endpoint GET /accounts/{account_id}/workers/observability/metricsexport\n@desc List Metrics Exports\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Successful request\n@errors {401: Unauthorized, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/metricsexport\n@desc Upsert Metrics Exports\n@required {requester: map{requesterId!: str, requesterType!: str}, resources: [map{destinations!: [str], resourceId!: str, resourceType!: str}]}\n@returns(201) {errors: [map], messages: [map], result: [map], success: bool} # Resource created\n@errors {400: Bad Request, 401: Unauthorized, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/queries\n@desc List queries\n@optional {page: num=1, perPage: num=20, order: str(asc/desc)=desc, orderBy: str(created/updated)=updated}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Successful request\n@errors {401: Unauthorized, 404: Not found, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/queries\n@desc Save query\n@required {description: str, name: str # Query name, parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [map], groupBys: [map], havings: [map], limit: int, needle: map, orderBy: map}}\n@returns(200) {errors: [map], messages: [map], result: map{adhoc: bool, created: str(date-time), createdBy: str, description: str?, id: str, name: str, parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [map], groupBys: [map], havings: [map], limit: int, needle: map{isRegex: bool, matchCase: bool, value: any}, orderBy: map{order: str, value: str}}, updated: str(date-time), updatedBy: str}, success: bool} # Successful request\n@errors {401: Unauthorized, 409: Conflict, 500: Internal error}\n\n@endpoint DELETE /accounts/{account_id}/workers/observability/queries/{queryId}\n@desc Delete query\n@required {queryId: str}\n@returns(200) {errors: [map], messages: [map], result: map{adhoc: bool, created: str(date-time), createdBy: str, description: str?, id: str, name: str, parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [map], groupBys: [map], havings: [map], limit: int, needle: map{isRegex: bool, matchCase: bool, value: any}, orderBy: map{order: str, value: str}}, updated: str(date-time), updatedBy: str}, success: bool} # Successful request\n@errors {401: Unauthorized, 404: Not found, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/queries/{queryId}\n@desc Get query\n@required {queryId: str}\n@returns(200) {errors: [map], messages: [map], result: map{adhoc: bool, created: str(date-time), createdBy: str, description: str?, id: str, name: str, parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [map], groupBys: [map], havings: [map], limit: int, needle: map{isRegex: bool, matchCase: bool, value: any}, orderBy: map{order: str, value: str}}, updated: str(date-time), updatedBy: str}, success: bool} # Successful request\n@errors {401: Unauthorized, 404: Not found, 500: Internal error}\n\n@endpoint PATCH /accounts/{account_id}/workers/observability/queries/{queryId}\n@desc Update query\n@required {queryId: str, description: str, name: str # Query name, parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [map], groupBys: [map], havings: [map], limit: int, needle: map, orderBy: map}}\n@returns(200) {errors: [map], messages: [map], result: map{adhoc: bool, created: str(date-time), createdBy: str, description: str?, id: str, name: str, parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [map], groupBys: [map], havings: [map], limit: int, needle: map{isRegex: bool, matchCase: bool, value: any}, orderBy: map{order: str, value: str}}, updated: str(date-time), updatedBy: str}, success: bool} # Successful request\n@errors {401: Unauthorized, 404: Not found, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/shared/query\n@desc Create a sharable link to a query result\n@required {queryId: str # Identifier for the query. When parameters are omitted, this ID is used to load a previously saved query's parameters. When providing parameters inline, pass any identifier (e.g. an ad-hoc ID)., timeframe: map{from!: int, to!: int} # Timeframe for the query using Unix timestamps in milliseconds. 'from' must be earlier than 'to'. Narrower timeframes produce faster responses and more specific results.}\n@optional {chart: bool # When true, includes time-series data in the response., chartType: str(timeseries_and_aggregate/timeseries/aggregate/distribution) # Controls the SQL shape and response payload for the 'calculations' view. Omitted or 'timeseries_and_aggregate': current behaviour — both the time-series and aggregate queries. 'timeseries': time-series only. 'aggregate': aggregate only. 'distribution': a bucketed 2D histogram (time × value buckets) returned in 'distribution' instead of 'calculations'. 'distribution' is not compatible with 'compare' — combining them returns a 400., compare: bool # When true, includes a comparison dataset from the previous time period of equal length., distributionScale: str(log/linear) # Value-axis bucketing for chartType 'distribution'. Omitted or 'log': geometric buckets, best for heavy-tailed latency. 'linear': fixed-width buckets, clearer for narrow or additive ranges. Ignored for other chartTypes. The response echoes the scheme used in distribution.bucketMode., dry: bool=false # When true, executes the query without persisting the results. Useful for validation or previewing., granularity: num # Number of time-series buckets. Only used when view is 'calculations'. Omit to let the system auto-detect an appropriate granularity., ignoreSeries: bool=false # When true, omits time-series data from the response and returns only aggregated values. Reduces response size when series are not needed., limit: num=50 # Maximum number of events to return when view is 'events'. Also controls the number of group-by rows when view is 'calculations'., offset: str # Cursor for pagination in event, trace, invocation, and agent views. Pass the $metadata.id of the last event, the trace cursor, or AgentRun.id to fetch the next page., offsetBy: num # Numeric offset for paginating grouped/pattern results (top-N lists). Use together with limit. Not used by cursor-based pagination., offsetDirection: str # Pagination direction: 'next' for forward, 'prev' for backward., parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [any], groupBys: [map], havings: [map], limit: int, needle: map, orderBy: map} # Query parameters defining what data to retrieve — filters, calculations, group-bys, and ordering. In practice this should always be provided for ad-hoc queries. Only omit when executing a previously saved query by queryId. Use the keys and values endpoints to discover available fields before building filters., view: str(traces/events/calculations/invocations/requests/agents)=calculations # Controls the shape of the response. 'events': individual log lines matching the query. 'calculations': aggregated metrics (count, avg, p99, etc.) with optional group-by breakdowns and time-series. 'invocations': events grouped by request ID. 'traces': distributed trace summaries. 'agents': agent-specific trace summaries.}\n@returns(200) {errors: [map], messages: [map], result: map{id: str}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 429: Too many requests, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/shared/query/{id}\n@desc View a query that has been shared\n@required {id: str # Specify the ID of the shared query.}\n@optional {view: str(events/invocations/calculations) # Select the view of the query result to return, defaults to events.}\n@returns(200) {errors: [map], messages: [map], result: map{agents: [map], calculations: [map], compare: [map], distribution: map{bins: [str], bucketBoundaries: [num], bucketMode: str, buckets: [str], matrix: [[num]]}, events: map{count: num, events: [map], fields: [map], series: [map]}, invocations: map, run: map{accountId: str, created: str, dry: bool, granularity: num, id: str, query: any, statistics: map{abr_level: num, bytes_read: num, elapsed: num, rows_read: num}, status: str, timeframe: map{from: int, to: int}, updated: str, userId: str}, statistics: map{abr_level: num, bytes_read: num, elapsed: num, rows_read: num}, traces: [map]}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/telemetry/keys\n@desc List keys\n@optional {datasets: [str]= # Leave this empty to use the default datasets, filters: [any]= # Apply filters to narrow key discovery. Supports nested groups via kind: 'group'. Maximum nesting depth is 4., from: num, keyNeedle: map{isRegex: bool, matchCase: bool, value!: any} # If the user suggests a key, use this to narrow down the list of keys returned. Make sure matchCase is false to avoid case sensitivity issues., limit: num # Advanced usage: set limit=1000+ to retrieve comprehensive key options without needing additional filtering., needle: map{isRegex: bool, matchCase: bool, value!: any} # Search for a specific substring in any of the events, to: num}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 429: Too many requests, 500: Internal error, 504: Gateway timeout}\n\n@endpoint POST /accounts/{account_id}/workers/observability/telemetry/live-tail\n@desc Prepare live tail\n@optional {filterCombination: str(and/or/AND/OR)=and # Set a flag to describe how to combine the filters on the query., filters: [any]= # Apply filters to the query. Supports nested groups via kind: 'group'., scriptId: str}\n@returns(200) {errors: [map], messages: [map], result: map{wsUrl: str(uri)}, success: bool} # Successful request\n@errors {401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/telemetry/live-tail/heartbeat\n@desc Live tail heartbeat\n@optional {scriptId: str}\n@returns(200) {errors: [map], messages: [map], result: map, success: bool} # Successful request\n@errors {401: Unauthorized, 500: Internal error}\n\n@endpoint POST /accounts/{account_id}/workers/observability/telemetry/query\n@desc Run a query\n@required {queryId: str # Identifier for the query. When parameters are omitted, this ID is used to load a previously saved query's parameters. When providing parameters inline, pass any identifier (e.g. an ad-hoc ID)., timeframe: map{from!: int, to!: int} # Timeframe for the query using Unix timestamps in milliseconds. 'from' must be earlier than 'to'. Narrower timeframes produce faster responses and more specific results.}\n@optional {chart: bool # When true, includes time-series data in the response., chartType: str(timeseries_and_aggregate/timeseries/aggregate/distribution) # Controls the SQL shape and response payload for the 'calculations' view. Omitted or 'timeseries_and_aggregate': current behaviour — both the time-series and aggregate queries. 'timeseries': time-series only. 'aggregate': aggregate only. 'distribution': a bucketed 2D histogram (time × value buckets) returned in 'distribution' instead of 'calculations'. 'distribution' is not compatible with 'compare' — combining them returns a 400., compare: bool # When true, includes a comparison dataset from the previous time period of equal length., distributionScale: str(log/linear) # Value-axis bucketing for chartType 'distribution'. Omitted or 'log': geometric buckets, best for heavy-tailed latency. 'linear': fixed-width buckets, clearer for narrow or additive ranges. Ignored for other chartTypes. The response echoes the scheme used in distribution.bucketMode., dry: bool=false # When true, executes the query without persisting the results. Useful for validation or previewing., granularity: num # Number of time-series buckets. Only used when view is 'calculations'. Omit to let the system auto-detect an appropriate granularity., ignoreSeries: bool=false # When true, omits time-series data from the response and returns only aggregated values. Reduces response size when series are not needed., limit: num=50 # Maximum number of events to return when view is 'events'. Also controls the number of group-by rows when view is 'calculations'., offset: str # Cursor for pagination in event, trace, invocation, and agent views. Pass the $metadata.id of the last event, the trace cursor, or AgentRun.id to fetch the next page., offsetBy: num # Numeric offset for paginating grouped/pattern results (top-N lists). Use together with limit. Not used by cursor-based pagination., offsetDirection: str # Pagination direction: 'next' for forward, 'prev' for backward., parameters: map{calculations: [any], datasets: [str], filterCombination: str, filters: [any], groupBys: [map], havings: [map], limit: int, needle: map, orderBy: map} # Query parameters defining what data to retrieve — filters, calculations, group-bys, and ordering. In practice this should always be provided for ad-hoc queries. Only omit when executing a previously saved query by queryId. Use the keys and values endpoints to discover available fields before building filters., view: str(traces/events/calculations/invocations/requests/agents)=calculations # Controls the shape of the response. 'events': individual log lines matching the query. 'calculations': aggregated metrics (count, avg, p99, etc.) with optional group-by breakdowns and time-series. 'invocations': events grouped by request ID. 'traces': distributed trace summaries. 'agents': agent-specific trace summaries.}\n@returns(200) {errors: [map], messages: [map], result: map{agents: [map], calculations: [map], compare: [map], distribution: map{bins: [str], bucketBoundaries: [num], bucketMode: str, buckets: [str], matrix: [[num]]}, events: map{count: num, events: [map], fields: [map], series: [map]}, invocations: map, run: map{accountId: str, created: str, dry: bool, granularity: num, id: str, query: any, statistics: map{abr_level: num, bytes_read: num, elapsed: num, rows_read: num}, status: str, timeframe: map{from: int, to: int}, updated: str, userId: str}, statistics: map{abr_level: num, bytes_read: num, elapsed: num, rows_read: num}, traces: [map]}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 429: Too many requests, 500: Internal error, 504: Gateway timeout}\n\n@endpoint POST /accounts/{account_id}/workers/observability/telemetry/values\n@desc List values\n@required {datasets: [str] # Leave this empty to use the default datasets, key: str, timeframe: map{from!: num, to!: num}, type: str(string/boolean/number)}\n@optional {filters: [any]= # Apply filters before listing values. Supports nested groups via kind: 'group'. Maximum nesting depth is 4., limit: num=50, needle: map{isRegex: bool, matchCase: bool, value!: any} # Full-text search expression to match events containing the specified text or pattern.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 429: Too many requests, 500: Internal error, 504: Gateway timeout}\n\n@endpoint GET /accounts/{account_id}/workers/observability/usage\n@desc Get event count\n@required {from: str # Unix timestamp in milliseconds for the start of the range., to: str # Unix timestamp in milliseconds for the end of the range.}\n@returns(200) {errors: [map], messages: [map], result: map{breakdown: [map], events: num}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 429: Too many requests, 500: Internal error, 504: Gateway timeout}\n\n@endpoint DELETE /accounts/{account_id}/workers/observability/zones/{zone_id}/observability/tracing/rules\n@desc Delete zone trace rules\n@required {zone_id: str # Specify the zone ID.}\n@returns(200) {errors: [map], messages: [map], result: map{rules: [map]}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/zones/{zone_id}/observability/tracing/rules\n@desc View zone trace rules\n@required {zone_id: str # Specify the zone ID.}\n@returns(200) {errors: [map], messages: [map], result: map{rules: [map]}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint PUT /accounts/{account_id}/workers/observability/zones/{zone_id}/observability/tracing/rules\n@desc Replace zone trace rules\n@required {zone_id: str # Specify the zone ID., rules: [map{action!: str, action_parameters!: map, description!: str, enabled!: bool, expression!: str}] # Trace rules in evaluation order.}\n@returns(200) {errors: [map], messages: [map], result: map{rules: [map]}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint DELETE /accounts/{account_id}/workers/observability/zones/{zone_id}/observability/tracing/settings\n@desc Reset zone tracing settings\n@required {zone_id: str # Specify the zone ID.}\n@returns(200) {errors: [map], messages: [map], result: map{destinations: [str], enabled: bool, forward_context: bool, persist: bool, propagation_policy: str, sampling_ratio: num}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/observability/zones/{zone_id}/observability/tracing/settings\n@desc View zone tracing settings\n@required {zone_id: str # Specify the zone ID.}\n@returns(200) {errors: [map], messages: [map], result: map{destinations: [str], enabled: bool, forward_context: bool, persist: bool, propagation_policy: str, sampling_ratio: num}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint PATCH /accounts/{account_id}/workers/observability/zones/{zone_id}/observability/tracing/settings\n@desc Update zone tracing settings\n@required {zone_id: str # Specify the zone ID.}\n@optional {destinations: [str] # Up to 100 OpenTelemetry destination identifiers that receive traces., enabled: bool # Whether Cloudflare Traces is enabled for the zone., forward_context: bool # Whether trace context is sent externally or across a zone boundary., persist: bool # Whether traces are persisted in Cloudflare., propagation_policy: str(authenticated/unauthenticated) # When inbound trace context may be continued., sampling_ratio: num # The ratio of requests sampled for tracing, from 0 to 1.}\n@returns(200) {errors: [map], messages: [map], result: map{destinations: [str], enabled: bool, forward_context: bool, persist: bool, propagation_policy: str, sampling_ratio: num}, success: bool} # Successful request\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 500: Internal error}\n\n@endpoint GET /accounts/{account_id}/workers/placement/regions\n@desc List Workers Smart Placement Regions\n@required {account_id: str}\n@returns(200) List Placement Regions response.\n@errors {4XX: List Placement Regions response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts\n@desc List Worker Scripts\n@required {account_id: str}\n@optional {tags: str # Filter scripts by tags. Format: comma-separated list of tag:allowed pairs where allowed is 'yes' or 'no'.}\n@returns(200) List Workers response.\n@errors {4XX: List Workers response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts-search\n@desc Search Worker Scripts\n@required {account_id: str}\n@optional {name: str, id: str, order_by: str(created_on/modified_on/name)=name, page: int=1 # Current page., per_page: int=10 # Items per page.}\n@returns(200) Search Workers success.\n@errors {4XX: Search Workers failure.}\n\n@endpoint DELETE /accounts/{account_id}/workers/scripts/{script_name}\n@desc Delete Worker\n@required {account_id: str, script_name: str}\n@optional {force: bool # If set to true, delete will not be stopped by associated service binding, durable object, or other binding. Any of these associated bindings/durable objects will be deleted along with the script.}\n@returns(200) Delete Worker response.\n@errors {4XX: Delete Worker response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}\n@desc Download Worker Script\n@required {account_id: str, script_name: str}\n@returns(200) Worker successfully downloaded. Returns script content as a multipart form, with no metadata part and no JSON encoding applied.\n@errors {4XX: Download Worker response failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/scripts/{script_name}\n@desc Upload Worker Module\n@required {account_id: str, script_name: str}\n@optional {bindings_inherit: str # When set to \"strict\", the upload will fail if any `inherit` type bindings cannot be resolved against the previous version of the Worker. Without this, unresolvable inherit bindings are silently dropped.}\n@returns(200) Upload Worker Module response.\n@errors {4XX: Upload Worker Module response failure. When the upload uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint POST /accounts/{account_id}/workers/scripts/{script_name}/assets-upload-session\n@desc Create Worker Assets Upload Session\n@required {account_id: str, script_name: str, manifest: map # A manifest ([path]: {hash, size}) map of files to upload. As an example, `/blog/hello-world.html` would be a valid path key.}\n@returns(200) Create Assets Upload Session response.\n@errors {4XX: Create Assets Upload Session response failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/scripts/{script_name}/content\n@desc Replace Worker Script Content\n@required {account_id: str, script_name: str}\n@optional {CF-WORKER-BODY-PART: str # The multipart name of a script upload part containing script content in service worker format. Alternative to including in a metadata part., CF-WORKER-MAIN-MODULE-PART: str # The multipart name of a script upload part containing script content in es module format. Alternative to including in a metadata part.}\n@returns(200) Put script content.\n@errors {4XX: Put script content failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/content/v2\n@desc Get Worker Script Content\n@required {account_id: str, script_name: str}\n@returns(200) Fetch script content.\n@errors {4XX: Fetch script content failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/deployments\n@desc List Worker Deployments\n@required {account_id: str, script_name: str}\n@optional {since: str(date-time) # Start of the deployment creation time range, inclusive., until: str(date-time) # End of the deployment creation time range, inclusive., page: int=1 # Current page., per_page: int=10 # Items per page.}\n@returns(200) List Deployments response.\n@errors {4XX: List Deployments response failure.}\n\n@endpoint POST /accounts/{account_id}/workers/scripts/{script_name}/deployments\n@desc Create Worker Deployment\n@required {account_id: str, script_name: str, created_on: str(date-time), id: str(uuid), source: str, strategy: str, versions: [map{percentage!: num, version_id!: str(uuid)}]}\n@optional {force: bool # If set to true, the deployment will be created even if normally blocked by something such rolling back to an older version when a secret has changed., annotations: map{workers/message: str, workers/triggered_by: str}, author_email: str(email)}\n@returns(200) Create Deployment response.\n@errors {4XX: Create Deployment response failure.}\n\n@endpoint DELETE /accounts/{account_id}/workers/scripts/{script_name}/deployments/{deployment_id}\n@desc Delete Worker Deployment\n@required {account_id: str, script_name: str, deployment_id: str(uuid)}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete Deployment response.\n@errors {4XX: Delete Deployment response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/deployments/{deployment_id}\n@desc Get Worker Deployment\n@required {account_id: str, script_name: str, deployment_id: str(uuid)}\n@returns(200) Get Deployment response.\n@errors {4XX: Get Deployment response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/schedules\n@desc Get Worker Script Schedules (Cron Triggers)\n@required {account_id: str, script_name: str}\n@returns(200) Get Cron Triggers response.\n@errors {4XX: Get Cron Triggers response failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/scripts/{script_name}/schedules\n@desc Update Worker Script Schedules (Cron Triggers)\n@required {account_id: str, script_name: str}\n@returns(200) Update Cron Triggers response.\n@errors {4XX: Update Cron Triggers response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/script-settings\n@desc Get Worker Script Settings\n@required {account_id: str, script_name: str}\n@returns(200) Fetch script settings.\n@errors {4XX: Fetch script settings failure.}\n\n@endpoint PATCH /accounts/{account_id}/workers/scripts/{script_name}/script-settings\n@desc Patch Worker Script Settings\n@required {account_id: str, script_name: str}\n@optional {logpush: bool=false # Whether Logpush is turned on for the Worker., observability: any, tags: any, tail_consumers: [map{environment: str, namespace: str, service!: str}] # List of Workers that will consume logs from the attached Worker.}\n@returns(200) Patch script settings.\n@errors {4XX: Patch script settings failure. When the patch uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/secrets\n@desc List secrets bound to a Worker script\n@required {account_id: str, script_name: str}\n@returns(200) List script secrets.\n@errors {4XX: List script secrets failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/scripts/{script_name}/secrets\n@desc Add a secret to a Worker script\n@required {account_id: str, script_name: str}\n@returns(200) Put script secret binding success.\n@errors {429: Too many requests are currently modifying the script., 4XX: Put script secret binding failure.}\n\n@endpoint PATCH /accounts/{account_id}/workers/scripts/{script_name}/secrets-bulk\n@desc Patch multiple Worker script secrets\n@required {account_id: str, script_name: str}\n@optional {secrets: map # Map of secret names to secret values: - Set to a secret object to create or update. - Set to `null` to delete. - Omit to leave unchanged., version_tags: map # Optional version tags to apply to the new script version.}\n@returns(200) Patch script secrets bulk success.\n@errors {429: Too many requests are currently modifying the script., 4XX: Patch script secrets bulk failure.}\n\n@endpoint DELETE /accounts/{account_id}/workers/scripts/{script_name}/secrets/{secret_name}\n@desc Delete Worker script secret\n@required {account_id: str, script_name: str, secret_name: str}\n@optional {url_encoded: bool}\n@returns(200) Delete script secret binding.\n@errors {4XX: Delete script secret failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/secrets/{secret_name}\n@desc Get a secret binding\n@required {account_id: str, script_name: str, secret_name: str}\n@optional {url_encoded: bool}\n@returns(200) Get script secret binding.\n@errors {4XX: Get script secret failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/settings\n@desc Get Worker Script and Version Settings\n@required {account_id: str, script_name: str}\n@returns(200) Fetch settings.\n@errors {4XX: Fetch settings failure.}\n\n@endpoint PATCH /accounts/{account_id}/workers/scripts/{script_name}/settings\n@desc Patch Worker Script and Version Settings\n@required {account_id: str, script_name: str}\n@returns(200) Patch settings.\n@errors {4XX: Patch settings failure. When the patch uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint DELETE /accounts/{account_id}/workers/scripts/{script_name}/subdomain\n@desc Delete Worker Script Subdomain\n@required {account_id: str, script_name: str}\n@returns(200) Delete subdomain response.\n@errors {4XX: Delete subdomain response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/subdomain\n@desc Get Worker Script Subdomain\n@required {account_id: str, script_name: str}\n@returns(200) Get subdomain response.\n@errors {4XX: Get subdomain response failure.}\n\n@endpoint POST /accounts/{account_id}/workers/scripts/{script_name}/subdomain\n@desc Update Worker Script Subdomain\n@required {account_id: str, script_name: str, enabled: bool # Whether the Worker should be available on the workers.dev subdomain.}\n@optional {previews_enabled: bool # Whether the Worker's Preview URLs should be available on the workers.dev subdomain.}\n@returns(200) Post subdomain response.\n@errors {4XX: Post subdomain response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/tails\n@desc List Worker Tails\n@required {account_id: str, script_name: str}\n@returns(200) List Tails response.\n@errors {4XX: List Tails response failure.}\n\n@endpoint POST /accounts/{account_id}/workers/scripts/{script_name}/tails\n@desc Start Worker Tail\n@required {account_id: str, script_name: str}\n@returns(200) Start Tail response.\n@errors {4XX: Start Tail response failure.}\n\n@endpoint DELETE /accounts/{account_id}/workers/scripts/{script_name}/tails/{id}\n@desc Delete Worker Tail\n@required {account_id: str, script_name: str, id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete Tail response.\n@errors {4XX: Delete Tail response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/usage-model\n@desc Get Worker Script Usage Model\n@required {account_id: str, script_name: str}\n@returns(200) Fetch Usage Model response.\n@errors {4XX: Fetch Usage Model response failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/scripts/{script_name}/usage-model\n@desc Replace Worker Script Usage Model\n@required {account_id: str, script_name: str}\n@optional {usage_model: str(standard/bundled/unbound)=standard # Usage model for the Worker invocations., user_limits: map{cpu_ms: int} # User-defined resource limits for Workers with standard usage model.}\n@returns(200) Update Usage Model response.\n@errors {4XX: Update Usage Model response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/versions\n@desc List Versions\n@required {account_id: str, script_name: str}\n@optional {deployable: bool=false # Only return versions that can be used in a deployment. Ignores pagination., page: int=1 # Current page., per_page: int # Items per-page.}\n@returns(200) List Versions response.\n@errors {4XX: List Versions response failure.}\n\n@endpoint POST /accounts/{account_id}/workers/scripts/{script_name}/versions\n@desc Upload Version\n@required {account_id: str, script_name: str}\n@optional {bindings_inherit: str # When set to \"strict\", the upload will fail if any `inherit` type bindings cannot be resolved against the previous version of the Worker. Without this, unresolvable inherit bindings are silently dropped.}\n@returns(200) Upload Version response.\n@errors {4XX: Upload Version response failure. When the upload uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint GET /accounts/{account_id}/workers/scripts/{script_name}/versions/{version_id}\n@desc Get Worker Script Version\n@required {account_id: str, script_name: str, version_id: str}\n@returns(200) Get Version Detail response.\n@errors {4XX: Get Version Detail response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/services/{service_name}/environments/{environment_name}/content\n@desc Get Worker Environment Script Content\n@required {account_id: str, service_name: str, environment_name: str}\n@returns(200) Get script content.\n@errors {4XX: Get script content failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/services/{service_name}/environments/{environment_name}/content\n@desc Replace Worker Environment Script Content\n@required {account_id: str, service_name: str, environment_name: str}\n@optional {CF-WORKER-BODY-PART: str # The multipart name of a script upload part containing script content in service worker format. Alternative to including in a metadata part., CF-WORKER-MAIN-MODULE-PART: str # The multipart name of a script upload part containing script content in es module format. Alternative to including in a metadata part.}\n@returns(200) Put script content.\n@errors {4XX: Put script content failure.}\n\n@endpoint GET /accounts/{account_id}/workers/services/{service_name}/environments/{environment_name}/settings\n@desc Get Worker Environment Settings\n@required {account_id: str, service_name: str, environment_name: str}\n@returns(200) Fetch script settings.\n@errors {4XX: Fetch script settings failure.}\n\n@endpoint PATCH /accounts/{account_id}/workers/services/{service_name}/environments/{environment_name}/settings\n@desc Patch Worker Environment Settings\n@required {account_id: str, service_name: str, environment_name: str}\n@returns(200) Patch script settings.\n@errors {4XX: Patch script settings failure. When the patch uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint DELETE /accounts/{account_id}/workers/subdomain\n@desc Delete Workers Subdomain\n@required {account_id: str}\n@returns(204) Subdomain deleted successfully.\n@errors {4XX: Delete Subdomain response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/subdomain\n@desc Get a Workers Subdomain\n@required {account_id: str}\n@returns(200) Get Subdomain response.\n@errors {4XX: Get Subdomain response failure.}\n\n@endpoint PUT /accounts/{account_id}/workers/subdomain\n@desc Create a Workers Subdomain\n@required {account_id: str, subdomain: str}\n@returns(200) Create Subdomain response.\n@errors {4XX: Create Subdomain response failure.}\n\n@endpoint GET /accounts/{account_id}/workers/workers\n@desc List Workers\n@required {account_id: str}\n@optional {page: int=1 # Current page., per_page: int=10 # Items per-page., order_by: str(deployed_on/updated_on/created_on/name)=deployed_on # Property to sort results by., order: str(asc/desc)=desc # Sort direction.}\n@returns(200) List Workers success.\n@errors {401: Authentication required or insufficient permissions., 500: Internal Server Error - An unexpected server error occurred.}\n\n@endpoint POST /accounts/{account_id}/workers/workers\n@desc Create Worker\n@required {account_id: str}\n@returns(200) Create Worker success.\n@errors {400: Bad Request - Invalid input data., 401: Authentication required or insufficient permissions., 403: Forbidden - Access denied or limit exceeded., 409: Conflict - Resource already exists., 500: Internal Server Error - An unexpected server error occurred.}\n\n@endpoint DELETE /accounts/{account_id}/workers/workers/{worker_id}\n@desc Delete Worker\n@required {account_id: str, worker_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete Worker success.\n@errors {400: Bad Request - Missing or invalid parameters., 401: Authentication required or insufficient permissions., 404: Not Found - Worker does not exist., 500: Internal Server Error - An unexpected server error occurred.}\n\n@endpoint GET /accounts/{account_id}/workers/workers/{worker_id}\n@desc Get Worker\n@required {account_id: str, worker_id: str}\n@returns(200) Get Worker success.\n@errors {400: Bad Request - Missing or invalid parameters., 404: Not Found - Worker does not exist., 500: Internal Server Error - An unexpected server error occurred.}\n\n@endpoint PATCH /accounts/{account_id}/workers/workers/{worker_id}\n@desc Edit Worker\n@required {account_id: str, worker_id: str}\n@returns(200) Partially Update Worker success.\n@errors {400: Bad Request - Invalid input data., 401: Authentication required or insufficient permissions., 403: Forbidden - Insufficient permissions or quota exceeded., 404: Not Found - Worker does not exist., 409: Conflict - Worker name already exists., 500: Internal Server Error - An unexpected server error occurred.}\n\n@endpoint PUT /accounts/{account_id}/workers/workers/{worker_id}\n@desc Update Worker\n@required {account_id: str, worker_id: str}\n@returns(200) Update Worker success.\n@errors {400: Bad Request - Invalid input data., 401: Authentication required or insufficient permissions., 403: Forbidden - Insufficient permissions or quota exceeded., 404: Not Found - Worker does not exist., 409: Conflict - Worker name already exists., 500: Internal Server Error - An unexpected server error occurred.}\n\n@endpoint GET /accounts/{account_id}/workers/workers/{worker_id}/versions\n@desc List Worker Versions\n@required {account_id: str, worker_id: str}\n@optional {page: int=1 # Current page., per_page: int=10 # Items per-page.}\n@returns(200) List versions success.\n@errors {4XX: List versions failure.}\n\n@endpoint POST /accounts/{account_id}/workers/workers/{worker_id}/versions\n@desc Create Worker Version\n@required {account_id: str, worker_id: str, created_on: str(date-time) # When the version was created., id: str(uuid) # Version identifier., number: int # The integer version number, starting from one., urls: [str(uri)] # All routable URLs that always point to this version. Does not include alias URLs, since aliases can be updated to point to a different version.}\n@optional {deploy: bool, annotations: map{workers/message: str, workers/tag: str, workers/triggered_by: str} # Metadata about the version., assets: map{config: map, jwt: str} # Configuration for assets within a Worker.  [`_headers`](https://developers.cloudflare.com/workers/static-assets/headers/#custom-headers) and [`_redirects`](https://developers.cloudflare.com/workers/static-assets/redirects/) files should be included as modules named `_headers` and `_redirects` with content type `text/plain`., author_email: str(email) # Email of the user who created the version., author_id: str # Identifier of the user who created the version., bindings: [map] # List of bindings attached to a Worker. You can find more about bindings on our docs: https://developers.cloudflare.com/workers/configuration/multipart-upload-metadata/#bindings., cache_options: map{cross_version_cache: bool, enabled!: bool} # Global CacheW configuration for the Worker. When caching is on, the platform provisions a `cloudflare.app` zone for the Worker. A `type: worker` entry in the `exports` map can override this value for a single entrypoint., compatibility_date: str # Date indicating targeted support in the Workers runtime. Backwards incompatible fixes to the runtime following this date will not affect this Worker., compatibility_flags: [str]= # Flags that enable or disable certain features in the Workers runtime. Used to enable upcoming features or opt in or out of specific changes not included in a `compatibility_date`., containers: [map{class_name!: str}] # List of containers attached to a Worker. Containers can only be attached to Durable Object classes of this Worker script., exports: any # Declarative exports for the version, including Durable Object classes (with their `storage` backend) and named Worker entrypoints. On reads, tombstoned lifecycle entries are omitted, so only live exports (`created` and `expecting-transfer`) are returned. `exports` and `migrations` are mutually exclusive on upload., exports_reconciliation: any # Summary of the declarative exports reconciliation that ran on this upload. Populated only when the uploaded metadata included an `exports` block. Durable Object entries drive reconciliation; `type: worker` entries do not contribute to this summary., limits: map{cpu_ms: int, subrequests: int} # Resource limits enforced at runtime., main_module: str # The name of the main module in the `modules` array (e.g. the name of the module that exports a `fetch` handler)., migration_tag: str # Durable Object migration tag. Set when the version is deployed. Omitted if the version has not been deployed or the Worker does not use Durable Objects., migrations: any # Migrations for Durable Objects associated with the version. Migrations are applied when the version is deployed., modules: [map{content_base64!: str(byte), content_type!: str, name!: str}] # Code, sourcemaps, and other content used at runtime.  This includes [`_headers`](https://developers.cloudflare.com/workers/static-assets/headers/#custom-headers) and [`_redirects`](https://developers.cloudflare.com/workers/static-assets/redirects/) files used to configure [Static Assets](https://developers.cloudflare.com/workers/static-assets/). `_headers` and `_redirects` files should be included as modules named `_headers` and `_redirects` with content type `text/plain`., package_dependencies: [map{installedVersion!: str, name!: str, packageJsonVersion!: str}] # The list of npm packages that were installed and used when this Worker version was built., placement: map # Configuration for [Smart Placement](https://developers.cloudflare.com/workers/configuration/smart-placement). Specify mode='smart' for Smart Placement, or one of region/hostname/host., source: str # The client used to create the version., startup_time_ms: int # Time in milliseconds spent on [Worker startup](https://developers.cloudflare.com/workers/platform/limits/#worker-startup-time)., usage_model: str(standard/bundled/unbound)=standard # Usage model for the version.}\n@returns(200) Create version success.\n@errors {4XX: Create version failure. When the upload uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint GET /accounts/{account_id}/workers/workers/{worker_id}/versions/latest\n@desc Get Latest Worker Version\n@required {account_id: str, worker_id: str}\n@optional {include: str}\n@returns(200) Get latest version success.\n@errors {4XX: Get latest version failure.}\n\n@endpoint PATCH /accounts/{account_id}/workers/workers/{worker_id}/versions/latest\n@desc Patch Latest Worker Version\n@required {account_id: str, worker_id: str}\n@optional {deploy: bool}\n@returns(200) Patch version success.\n@errors {4XX: Patch version failure. When the patch uses the declarative `exports` field and one or more entries fail reconciliation, the response is the exports reconciliation error envelope (error code 100402) with per-class detail in `errors[].meta.details`.}\n\n@endpoint DELETE /accounts/{account_id}/workers/workers/{worker_id}/versions/{version_id}\n@desc Delete Worker Version\n@required {account_id: str, worker_id: str, version_id: str}\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete version success.\n@errors {4XX: Delete version failure.}\n\n@endpoint GET /accounts/{account_id}/workers/workers/{worker_id}/versions/{version_id}\n@desc Get Worker Version\n@required {account_id: str, worker_id: str, version_id: str}\n@optional {include: str}\n@returns(200) Get version success.\n@errors {4XX: Get version failure.}\n\n@endpoint GET /accounts/{account_id}/workflows\n@desc List all Workflows\n@required {account_id: str}\n@optional {per_page: num=10, page: num=1, search: str # Allows filtering workflows` name.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # List of all Workflows belonging to a account.\n@errors {400: Input Validation Error.}\n\n@endpoint GET /accounts/{account_id}/workflows/settings\n@desc Get account settings\n@required {account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{default_retention: map{error_retention: int, success_retention: int}}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Account settings.\n@errors {400: Bad Request.}\n\n@endpoint PATCH /accounts/{account_id}/workflows/settings\n@desc Update account settings\n@required {account_id: str}\n@optional {default_retention: map{error_retention: any, success_retention: any} # Default retention applied to instances of this version when they do not set their own retention.}\n@returns(200) {errors: [map], messages: [map], result: map{default_retention: map{error_retention: int, success_retention: int}}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Updated account settings.\n@errors {400: Bad Request.}\n\n@endpoint DELETE /accounts/{account_id}/workflows/{workflow_name}\n@desc Deletes a Workflow\n@required {workflow_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{status: str, success: bool?}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Deletes a Workflow.\n@errors {400: Bad Request., 404: Workflow not found.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}\n@desc Get Workflow details\n@required {workflow_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{class_name: str, created_on: str(date-time), id: str(uuid), instances: map, modified_on: str(date-time), name: str, schedules: [map], script_name: str, triggered_on: str(date-time)?}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Get Workflow details.\n@errors {400: Workflow has no deployed versions., 404: Workflow not found.}\n\n@endpoint PUT /accounts/{account_id}/workflows/{workflow_name}\n@desc Create/modify Workflow\n@required {workflow_name: str, account_id: str, class_name: str, script_name: str}\n@optional {concurrency: map{limit: int}, default_retention: map{error_retention: any, success_retention: any} # Default retention applied to instances of this version when they do not set their own retention., limits: map{steps: int}, schedules: [map{cron!: str}]}\n@returns(200) {errors: [map], messages: [map], result: map{class_name: str, created_on: str(date-time), id: str(uuid), is_deleted: num, modified_on: str(date-time), name: str, script_name: str, terminator_running: num, triggered_on: str(date-time)?, version_id: str(uuid)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Create/modify a Workflow based on a deployed script with an existing `WorkflowEntrypoint` class. Must be done after deploying the corresponding script.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/instances\n@desc List of workflow instances\n@required {workflow_name: str, account_id: str}\n@optional {page: num # Deprecated: use `cursor` for pagination instead., per_page: num=50, cursor: str # Opaque token for cursor-based pagination. Mutually exclusive with `page`., direction: str(asc/desc) # Defines the direction for cursor-based pagination., status: str(queued/running/paused/errored/terminated/complete/waitingForPause/waiting/rollingBack), date_start: str(date-time) # Accepts ISO 8601 with no timezone offsets and in UTC., date_end: str(date-time) # Accepts ISO 8601 with no timezone offsets and in UTC.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # List of workflow instances.\n@errors {400: Input Validation Error., 404: Workflow Name not found.}\n\n@endpoint POST /accounts/{account_id}/workflows/{workflow_name}/instances\n@desc Create a new workflow instance\n@required {workflow_name: str, account_id: str}\n@optional {instance_id: str # The system reserves IDs that consist of the `cf_` prefix and exactly 64 lowercase hexadecimal characters., instance_retention: map{error_retention: any, success_retention: any}, location_hint: str(wnam/weur/enam/eeur/apac/apac-ne/apac-se/oc/sam/afr/me), params: str # JSON-encoded event payload passed into the new instance.}\n@returns(200) {errors: [map], messages: [map], result: map{id: str, status: str, trigger_source: str, version_id: str(uuid), workflow_id: str(uuid)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Create workflow instance. Body is a JSON parsable string that it's passed into the new instance as the event payload.\n@errors {400: Provided Workflow ID is not valid., 404: Workflow Name not found.}\n\n@endpoint POST /accounts/{account_id}/workflows/{workflow_name}/instances/batch\n@desc Batch create new Workflow instances\n@required {workflow_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Batch create workflow instances. Body is a JSON list that contain all payloads and ids that are passed into the new instance as the event payload.\n@errors {400: Provided Workflow ID is not valid., 404: Workflow Name not found.}\n\n@endpoint POST /accounts/{account_id}/workflows/{workflow_name}/instances/batch/delete\n@desc Batch delete instances of a workflow\n@required {workflow_name: str, account_id: str, instances: [str]}\n@returns(200) {errors: [map], messages: [map], result: map{deleted: [map], errors: [map]}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Returns deleted instances and any per-instance errors.\n@errors {400: Input Validation Error., 404: Workflow Name not found.}\n\n@endpoint POST /accounts/{account_id}/workflows/{workflow_name}/instances/batch/terminate\n@desc Batch terminate instances of a workflow\n@required {workflow_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{instancesTerminated: num, status: str}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Batch terminate instances of a workflow, via a async job. Body is a JSON list that contain the ids of the instances to terminate.\n@errors {400: Provided Workflow ID is not valid., 404: Workflow Name not found.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/instances/terminate\n@desc Get status of the job responsible for terminate all instances of a workflow\n@required {workflow_name: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{status: str}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Get status of the job responsible for terminate all instances of a workflow.\n@errors {400: Input Validation Error., 404: Workflow Name not found.}\n\n@endpoint DELETE /accounts/{account_id}/workflows/{workflow_name}/instances/{instance_id}\n@desc Delete a workflow instance\n@required {workflow_name: str, instance_id: str # Instance identifier. User-created instances match `^[a-zA-Z0-9_][a-zA-Z0-9-_]*$` (max 100 characters); cron-triggered instances can use a longer, system-generated id derived from the cron expression., account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{instanceId: str, timestamp: str(date-time)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Instance deleted.\n@errors {404: Workflow not found.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/instances/{instance_id}\n@desc Get logs and status from instance\n@required {workflow_name: str, instance_id: str # Instance identifier. User-created instances match `^[a-zA-Z0-9_][a-zA-Z0-9-_]*$` (max 100 characters); cron-triggered instances can use a longer, system-generated id derived from the cron expression., account_id: str}\n@optional {simple: str(true/false)=false # When true, omits step details and returns only metadata with step_count., order: str(asc/desc)=asc # Step ordering: \"asc\" (default, oldest first) or \"desc\" (newest first).}\n@returns(200) {errors: [map], messages: [map], result: map{end: str(date-time)?, error: map?{message: str, name: str}, output: any, params: map, queued: str(date-time), rollback: map?{error: map?{message: str, name: str}, outcome: str}, schedule: map{cron: str, scheduledTime: num}, start: str(date-time)?, status: str, step_count: int, steps: [any], success: bool?, trigger: map{source: str}, versionId: str(uuid)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Get all logs and status from the instance.\n@errors {400: Bad Request., 404: Instance not found.}\n\n@endpoint POST /accounts/{account_id}/workflows/{workflow_name}/instances/{instance_id}/events/{event_type}\n@desc Send event to instance\n@required {workflow_name: str, instance_id: str # Instance identifier. User-created instances match `^[a-zA-Z0-9_][a-zA-Z0-9-_]*$` (max 100 characters); cron-triggered instances can use a longer, system-generated id derived from the cron expression., event_type: str, account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{instanceId: str, timestamp: str(date-time)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Send an event to an instance.\n@errors {400: Bad Request., 404: Workflow not found.}\n\n@endpoint PATCH /accounts/{account_id}/workflows/{workflow_name}/instances/{instance_id}/status\n@desc Change status of instance\n@required {workflow_name: str, instance_id: str # Instance identifier. User-created instances match `^[a-zA-Z0-9_][a-zA-Z0-9-_]*$` (max 100 characters); cron-triggered instances can use a longer, system-generated id derived from the cron expression., account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{status: str, timestamp: str(date-time)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Change status of instance - it can be paused, resumed or terminated.\n@errors {400: Bad Request., 404: Instance not found., 409: Instance not in a restartable state.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/instances/{instance_id}/step\n@desc Get full step output from instance\n@required {workflow_name: str, instance_id: str # Instance identifier. User-created instances match `^[a-zA-Z0-9_][a-zA-Z0-9-_]*$` (max 100 characters); cron-triggered instances can use a longer, system-generated id derived from the cron expression., name: str # Exact step name from the instance logs response, including the generated counter suffix., type: str(step/waitForEvent) # Step type to disambiguate step.do and waitForEvent entries that share the same name., account_id: str}\n@optional {attempt: int # Specific attempt number to retrieve output or error for.}\n@returns(200) {errors: [map], messages: [map], result: map{error: map?{message: str, name: str}, event_type: str, output: map, status: str}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Get the full output from a specific instance step.\n@errors {400: Bad Request (e.g. 'attempt' parameter supplied with type='waitForEvent')., 404: Step not found on this instance, or requested attempt is out of range., 429: Step output requests are rate limited., 500: Step completed but its stored output is corrupt or missing (server-side data-integrity failure).}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/instances/{instance_id}/subscribe\n@desc Subscribe to workflow instance events\n@required {workflow_name: str, instance_id: str # Instance identifier. User-created instances match `^[a-zA-Z0-9_][a-zA-Z0-9-_]*$` (max 100 characters); cron-triggered instances can use a longer, system-generated id derived from the cron expression., account_id: str}\n@optional {cursor: int # Last event ID already received., filter: [str] # Workflow event types to include. Send multiple event types by repeating the filter query parameter.}\n@errors {101: WebSocket subscription established., 400: Invalid subscription options., 404: Instance not found.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/instances/{instance_id}/subscribe/token\n@desc Create a workflow instance event subscription token\n@required {workflow_name: str, instance_id: str # Instance identifier. User-created instances match `^[a-zA-Z0-9_][a-zA-Z0-9-_]*$` (max 100 characters); cron-triggered instances can use a longer, system-generated id derived from the cron expression., account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{token: str, websocketUrl: str}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # A five-minute subscription token.\n@errors {400: Workflow event subscriptions require control plane v2., 404: Instance not found.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/versions\n@desc List deployed Workflow versions\n@required {workflow_name: str, account_id: str}\n@optional {per_page: num=50, page: num=1}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # List deployed workflow versions.\n@errors {400: Bad Request.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/versions/{version_id}\n@desc Get Workflow version details\n@required {workflow_name: str, version_id: str(uuid), account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{class_name: str, concurrency: map{limit: int}, created_on: str(date-time), default_retention: map{error_retention: int, success_retention: int}, has_dag: bool, id: str(uuid), language: str, limits: map{steps: int}, modified_on: str(date-time), workflow_id: str(uuid)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Get specific version details.\n@errors {400: Bad Request., 404: Version not found.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/versions/{version_id}/dag\n@desc Get Workflow version dag\n@required {workflow_name: str, version_id: str(uuid), account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{class_name: str, created_on: str(date-time), dag: map?, id: str(uuid), modified_on: str(date-time), workflow_id: str(uuid)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Get the parsed DAG for a specific workflow version.\n@errors {404: Version not found.}\n\n@endpoint GET /accounts/{account_id}/workflows/{workflow_name}/versions/{version_id}/graph\n@desc Get Workflow version graph\n@required {workflow_name: str, version_id: str(uuid), account_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{class_name: str, created_on: str(date-time), graph: map?{version: num, workflow: map{class_name: str, functions: map, nodes: [any], payload: any}}, id: str(uuid), modified_on: str(date-time), workflow_id: str(uuid)}, result_info: map{count: num, cursor: str, page: num, per_page: num, total_count: num, total_pages: num}, success: bool} # Get the parsed graph for a specific workflow version.\n@errors {404: Version not found.}\n\n@endpoint GET /accounts/{account_id}/zerotrust/connectivity_settings\n@desc Get Zero Trust Connectivity Settings\n@required {account_id: str}\n@returns(200) Get Zero Trust Connectivity Settings response\n@errors {4XX: Get Zero Trust Connectivity Settings response failure}\n\n@endpoint PATCH /accounts/{account_id}/zerotrust/connectivity_settings\n@desc Updates the Zero Trust Connectivity Settings\n@required {account_id: str}\n@optional {icmp_proxy_enabled: bool # A flag to enable the ICMP proxy for the account network., offramp_warp_enabled: bool # A flag to enable WARP to WARP traffic.}\n@returns(200) Update Zero Trust Connectivity Settings response\n@errors {4XX: Update Zero Trust Connectivity Settings response failure}\n\n@endpoint GET /accounts/{account_id}/zerotrust/routes/hostname\n@desc List hostname routes\n@required {account_id: str}\n@optional {id: str(uuid), hostname: str # If set, only list hostname routes that contain a substring of the given value, the filter is case-insensitive., tunnel_id: str(uuid) # If set, only list hostname routes that point to a specific tunnel., comment: str, existed_at: str(url-encoded-date-time), is_deleted: bool=false, per_page: num, page: num}\n@returns(200) List hostname routes response\n@errors {4XX: List hostname routes failure}\n\n@endpoint POST /accounts/{account_id}/zerotrust/routes/hostname\n@desc Create hostname route\n@required {account_id: str}\n@optional {comment: str # An optional description of the hostname route., hostname: str # The hostname of the route., tunnel_id: str(uuid) # UUID of the tunnel.}\n@returns(200) Create hostname route response\n@errors {4XX: Create hostname route response failure}\n\n@endpoint DELETE /accounts/{account_id}/zerotrust/routes/hostname/{hostname_route_id}\n@desc Delete hostname route\n@required {account_id: str, hostname_route_id: str(uuid)}\n@returns(200) Delete hostname route response\n@errors {4XX: Delete hostname route response failure}\n\n@endpoint GET /accounts/{account_id}/zerotrust/routes/hostname/{hostname_route_id}\n@desc Get hostname route\n@required {account_id: str, hostname_route_id: str(uuid)}\n@returns(200) Get hostname route response\n@errors {4XX: Get hostname route response failure}\n\n@endpoint PATCH /accounts/{account_id}/zerotrust/routes/hostname/{hostname_route_id}\n@desc Update hostname route\n@required {account_id: str, hostname_route_id: str(uuid)}\n@optional {comment: str # An optional description of the hostname route., hostname: str # The hostname of the route., tunnel_id: str(uuid) # UUID of the tunnel.}\n@returns(200) Update hostname route response\n@errors {4XX: Update hostname route response failure}\n\n@endpoint GET /accounts/{account_id}/zerotrust/subnets\n@desc List Subnets\n@required {account_id: str}\n@optional {name: str # If set, only list subnets with the given name, comment: str, network: any, existed_at: str(url-encoded-date-time), address_family: str # If set, only include subnets in the given address family - `v4` or `v6`, is_default_network: bool, is_deleted: bool, sort_order: str(asc/desc), subnet_types: str(cloudflare_source/initial_resolved_ip/warp), per_page: num, page: num}\n@returns(200) List subnets response\n@errors {4XX: List subnets response failure}\n\n@endpoint PATCH /accounts/{account_id}/zerotrust/subnets/cloudflare_source/{address_family}\n@desc Update Cloudflare Source Subnet\n@required {account_id: str, address_family: str}\n@optional {comment: str= # An optional description of the subnet., name: str # A user-friendly name for the subnet., network: str # The private IPv4 or IPv6 range defining the subnet, in CIDR notation.}\n@returns(200) Update subnet response\n@errors {4XX: Update subnet response failure}\n\n@endpoint GET /accounts/{account_id}/zerotrust/subnets/initial_resolved_ip/{address_family}\n@desc Get Initial Resolved IP Subnet\n@required {account_id: str, address_family: str}\n@returns(200) Get Initial Resolved IP Subnet response\n@errors {4XX: Get Initial Resolved IP Subnet response failure}\n\n@endpoint PUT /accounts/{account_id}/zerotrust/subnets/initial_resolved_ip/{address_family}\n@desc Update Initial Resolved IP Subnet\n@required {account_id: str, address_family: str}\n@optional {comment: str= # An optional description of the subnet., name: str # A user-friendly name for the subnet., network: str # The private IPv4 or IPv6 range defining the subnet, in CIDR notation.}\n@returns(200) Update Initial Resolved IP Subnet response\n@errors {4XX: Update Initial Resolved IP Subnet response failure}\n\n@endpoint POST /accounts/{account_id}/zerotrust/subnets/warp\n@desc Create WARP IP subnet\n@required {account_id: str, name: str # A user-friendly name for the subnet., network: str # The private IPv4 or IPv6 range defining the subnet, in CIDR notation.}\n@optional {comment: str= # An optional description of the subnet., is_default_network: bool=false # If `true`, this is the default subnet for the account. There can only be one default subnet per account.}\n@returns(200) Create subnet response\n@errors {4XX: Create subnet response failure}\n\n@endpoint DELETE /accounts/{account_id}/zerotrust/subnets/warp/{subnet_id}\n@desc Delete WARP IP subnet\n@required {account_id: str, subnet_id: str(uuid)}\n@returns(200) Delete subnet response\n@errors {4XX: Delete subnet response failure}\n\n@endpoint GET /accounts/{account_id}/zerotrust/subnets/warp/{subnet_id}\n@desc Get WARP IP subnet\n@required {account_id: str, subnet_id: str(uuid)}\n@returns(200) Get subnet response\n@errors {4XX: Get subnet response failure}\n\n@endpoint PATCH /accounts/{account_id}/zerotrust/subnets/warp/{subnet_id}\n@desc Update WARP IP subnet\n@required {account_id: str, subnet_id: str(uuid)}\n@optional {comment: str= # An optional description of the subnet., is_default_network: bool=false # If `true`, this is the default subnet for the account. There can only be one default subnet per account., name: str # A user-friendly name for the subnet., network: str # The private IPv4 or IPv6 range defining the subnet, in CIDR notation.}\n@returns(200) Update subnet response\n@errors {4XX: Update subnet response failure}\n\n@endpoint GET /accounts/{account_id}/zt_risk_scoring/behaviors\n@desc Get all behaviors and associated configuration\n@required {account_id: str}\n@returns(200) Risk scoring behaviors.\n@errors {4XX: Failed to get risk scoring behaviors.}\n\n@endpoint PUT /accounts/{account_id}/zt_risk_scoring/behaviors\n@desc Update configuration for risk behaviors\n@required {account_id: str # Account ID., behaviors: map}\n@returns(200) Dataset created successfully.\n@errors {4XX: Dataset creation failed.}\n\n@endpoint GET /accounts/{account_id}/zt_risk_scoring/integrations\n@desc List all risk score integrations for the account.\n@required {account_id: str}\n@returns(200) List response.\n@errors {4XX: List failure response.}\n\n@endpoint POST /accounts/{account_id}/zt_risk_scoring/integrations\n@desc Create new risk score integration.\n@required {account_id: str, integration_type: str, tenant_url: str(uri) # The base url of the tenant, e.g. \"https://tenant.okta.com\".}\n@optional {reference_id: str # A reference id that can be supplied by the client. Currently this should be set to the Access-Okta IDP ID (a UUIDv4). https://developers.cloudflare.com/api/operations/access-identity-providers-get-an-access-identity-provider}\n@returns(200) Create response.\n@errors {4XX: Create failure response.}\n\n@endpoint GET /accounts/{account_id}/zt_risk_scoring/integrations/reference_id/{reference_id}\n@desc Get risk score integration by reference id.\n@required {account_id: str, reference_id: str}\n@returns(200) Get response.\n@errors {4XX: Get failure response.}\n\n@endpoint DELETE /accounts/{account_id}/zt_risk_scoring/integrations/{integration_id}\n@desc Delete a risk score integration.\n@required {account_id: str, integration_id: str(uuid)}\n@returns(200) Delete response.\n@errors {4XX: Delete failure response.}\n\n@endpoint GET /accounts/{account_id}/zt_risk_scoring/integrations/{integration_id}\n@desc Get risk score integration by id.\n@required {account_id: str, integration_id: str(uuid)}\n@returns(200) Get response.\n@errors {4XX: Get failure response.}\n\n@endpoint PUT /accounts/{account_id}/zt_risk_scoring/integrations/{integration_id}\n@desc Update a risk score integration.\n@required {account_id: str, integration_id: str(uuid), active: bool # Whether this integration is enabled. If disabled, no risk changes will be exported to the third-party., tenant_url: str(uri) # The base url of the tenant, e.g. \"https://tenant.okta.com\".}\n@optional {reference_id: str # A reference id that can be supplied by the client. Currently this should be set to the Access-Okta IDP ID (a UUIDv4). https://developers.cloudflare.com/api/operations/access-identity-providers-get-an-access-identity-provider}\n@returns(200) Update response.\n@errors {4XX: Update failure response.}\n\n@endpoint GET /accounts/{account_id}/zt_risk_scoring/summary\n@desc Get risk score info for all users in the account\n@required {account_id: str}\n@returns(200) Risk score for all users in the account.\n@errors {4XX: Failed to get risk scores.}\n\n@endpoint GET /accounts/{account_id}/zt_risk_scoring/{user_id}\n@desc Get risk event/score information for a specific user\n@required {account_id: str, user_id: str(uuid)}\n@returns(200) Risk events.\n@errors {4XX: Failed to get risk events.}\n\n@endpoint POST /accounts/{account_id}/zt_risk_scoring/{user_id}/reset\n@desc Clear the risk score for a particular user\n@required {account_id: str, user_id: str(uuid)}\n@returns(200) Dataset created successfully.\n@errors {4XX: Dataset creation failed.}\n\n@endgroup\n\n@group analytics\n@endpoint GET /analytics/sql\n@desc Query analytics datasets\n@required {query: str # SQL query to execute.}\n@returns(200) {data: [map], rows: int(int64), statistics: map{bytes_read: int(int64), elapsed_ms: int(int64), rows_read: int(int64)}} # Query executed successfully.\n@errors {400: The request is malformed., 403: Authentication failed or the caller is not authorized., 422: The SQL query or its parameters are invalid., 429: The query exceeded a resource or request-rate limit., 500: An internal error occurred., 501: The query uses a SQL feature that is not implemented., 503: A required service is temporarily unavailable., 507: The query exhausted available resources.}\n\n@endpoint POST /analytics/sql\n@desc Query analytics datasets\n@required {query: str # SQL query to execute.}\n@optional {params: any # Positional array values for `$1`, `$2`, and similar placeholders, or named object values for placeholders such as `$status`., scope: any # Account or zone scope applied to the query. Include exactly one scope tag. Do not include account or zone tenancy predicates in the SQL query when this field is present., time_range: map{end: str, start!: str} # Time bounds applied to the dataset's timestamp column. Do not include timestamp predicates in the SQL query when this field is present.}\n@returns(200) {data: [map], rows: int(int64), statistics: map{bytes_read: int(int64), elapsed_ms: int(int64), rows_read: int(int64)}} # Query executed successfully.\n@errors {400: The request is malformed., 403: Authentication failed or the caller is not authorized., 422: The SQL query or its parameters are invalid., 429: The query exceeded a resource or request-rate limit., 500: An internal error occurred., 501: The query uses a SQL feature that is not implemented., 503: A required service is temporarily unavailable., 507: The query exhausted available resources.}\n\n@endpoint GET /analytics/sql/introspection\n@desc List available analytics datasets\n@required {account_tag: str # Account whose available analytics datasets are returned.}\n@optional {include_columns: bool=false # Include column metadata for each returned dataset., include_custom_attributes: bool=false # Include custom attribute names and types for each dataset that supports them., dataset_name: str # Return only the dataset with this exact name. An empty value does not filter the catalogue. An unknown name returns a successful response with an empty `datasets` array.}\n@returns(200) {datasets: [map]} # Dataset catalogue returned successfully.\n@errors {400: The request is malformed., 403: Authentication failed or the caller does not have Account Analytics Read permission on the specified account., 422: The account tag is invalid or unknown., 500: An internal error occurred., 503: The authorization service is temporarily unavailable.}\n\n@endgroup\n\n@group api\n@endpoint GET /api/v4/health\n@desc API health check\n@returns(200) {errors: [map], messages: [map], result: map{healthy: bool}, success: bool} # The API is healthy.\n\n@endgroup\n\n@group billing\n@endpoint POST /billing/address-validation\n@desc Validate Billing Address\n@optional {address: str # Address line 1., address2: str # Address line 2., city: str # City., country: str # Country code., state: str # State or province., zipcode: str # Postal or zip code.}\n@returns(200) Validate Billing Address response\n@errors {4XX: Validate Billing Address response failure}\n\n@endpoint GET /billing/rate_plans/{public_key}\n@desc Get Rate Plan by Public Key\n@required {public_key: str # The public key identifier for the rate plan.}\n@returns(200) Get Rate Plan response\n@errors {4XX: Get Rate Plan response failure}\n\n@endgroup\n\n@group certificates\n@endpoint GET /certificates\n@desc List Certificates\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=20, limit: int, offset: int}\n@returns(200) List Certificates response.\n@errors {4XX: List Certificates response failure.}\n\n@endpoint POST /certificates\n@desc Create Certificate\n@required {csr: str # The Certificate Signing Request (CSR). Must be newline-encoded., hostnames: [str] # Array of hostnames or wildcard names bound to the certificate. Hostnames must be fully qualified domain names (FQDNs) belonging to zones on your account (e.g., `example.com` or `sub.example.com`). Wildcards are supported only as a `*.` prefix for a single level (e.g., `*.example.com`). Double wildcards (`*.*.example.com`) and interior wildcards (`foo.*.example.com`) are not allowed. The wildcard suffix must be a multi-label domain (`*.example.com` is valid, but `*.com` is not). Unicode/IDN hostnames are accepted and automatically converted to punycode., request_type: str(origin-rsa/origin-ecc/keyless-certificate) # Signature type desired on certificate (\"origin-rsa\" (rsa), \"origin-ecc\" (ecdsa), or \"keyless-certificate\" (for Keyless SSL servers).}\n@optional {requested_validity: num(7/30/90/365/730/1095/5475)=5475 # The number of days for which the certificate should be valid.}\n@returns(200) Create Certificate response.\n@errors {4XX: Create Certificate response failure.}\n\n@endpoint DELETE /certificates/{certificate_id}\n@desc Revoke Certificate\n@required {certificate_id: str}\n@returns(200) Revoke Certificate response.\n@errors {4XX: Revoke Certificate response failure.}\n\n@endpoint GET /certificates/{certificate_id}\n@desc Get Certificate\n@required {certificate_id: str}\n@returns(200) Get Certificate response.\n@errors {4XX: Get Certificate response failure.}\n\n@endgroup\n\n@group internal\n@endpoint POST /internal/submit\n@desc Internal route for testing URL submissions\n\n@endgroup\n\n@group ips\n@endpoint GET /ips\n@desc Cloudflare/JD Cloud IP Details\n@optional {networks: str # Specified as `jdcloud` to list IPs used by JD Cloud data centers.}\n@returns(200) Cloudflare IP Details response\n@errors {4XX: Cloudflare IP Details response failure}\n\n@endgroup\n\n@group live\n@endpoint GET /live\n@desc Run liveness checks\n\n@endgroup\n\n@group memberships\n@endpoint GET /memberships\n@desc List Memberships\n@optional {account.name: str, page: num=1, per_page: num=20, order: str(id/account.name/status), direction: str(asc/desc), name: str, status: str(accepted/pending/rejected)}\n@returns(200) List Memberships response\n@errors {4XX: List Memberships response failure}\n\n@endpoint DELETE /memberships/{membership_id}\n@desc Delete Membership\n@required {membership_id: str}\n@returns(200) Delete Membership response\n@errors {4XX: Delete Membership response failure}\n\n@endpoint GET /memberships/{membership_id}\n@desc Membership Details\n@required {membership_id: str}\n@returns(200) Membership Details response\n@errors {4XX: Membership Details response failure}\n\n@endpoint PUT /memberships/{membership_id}\n@desc Update Membership\n@required {membership_id: str, status: any(accepted/rejected) # Whether to accept or reject this account invitation.}\n@returns(200) Update Membership response\n@errors {4XX: Update Membership response failure}\n\n@endgroup\n\n@group oauth\n@endpoint GET /oauth/scopes\n@desc List OAuth Scopes\n@returns(200) List OAuth Scopes response\n@errors {4XX: List OAuth Scopes response failure}\n\n@endgroup\n\n@group organizations\n@endpoint GET /organizations\n@desc List organizations the user has access to\n@optional {id: [str] # Only return organizations with the specified IDs (ex. id=foo&id=bar). Send multiple elements by repeating the query value., name: str # (case-sensitive) Filter the list of organizations to where the name is equal to a particular string., name.startsWith: str # (case-insensitive) Filter the list of organizations to where the name starts with a particular string., name.endsWith: str # (case-insensitive) Filter the list of organizations to where the name ends with a particular string., name.contains: str # (case-insensitive) Filter the list of organizations to where the name contains a particular string., containing.account: str # Filter the list of organizations to the ones that contain this particular account., containing.user: str # Filter the list of organizations to the ones that contain this particular user.  IMPORTANT: Just because an organization \"contains\" a user is not a representation of any authorization or privilege to manage any resources therein. An organization \"containing\" a user simply means the user is managed by that organization., containing.organization: str # Filter the list of organizations to the ones that contain this particular organization., parent.id: any # Filter the list of organizations to the ones that are a sub-organization of the specified organization.  \"null\" is a valid value to provide for this parameter. It means \"where an organization has no parent (i.e. it is a 'root' organization).\", page_token: str # An opaque token returned from the last list response that when provided will retrieve the next page.  Parameters used to filter the retrieved list must remain in subsequent requests with a page token., page_size: int # The amount of items to return. Defaults to 10.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{next_page_token: str, total_size: int}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint POST /organizations\n@desc Create organization\n@required {create_time: str(date-time), id: any, meta: map{hierarchy_tags: [str], managed_by: str, tenant_flags: any}, name: str}\n@optional {parent: map{id!: str, name!: str}, profile: map{business_address!: str, business_email!: str, business_name!: str, business_phone!: str, external_metadata!: str}}\n@returns(200) {errors: [map], messages: [map], result: map{create_time: str(date-time), id: any, meta: map{hierarchy_tags: [str], managed_by: str, tenant_flags: any}, name: str, parent: map{id: str, name: str}, profile: map{business_address: str, business_email: str, business_name: str, business_phone: str, external_metadata: str}}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint DELETE /organizations/{organization_id}\n@desc Delete organization.\n@required {organization_id: str # The ID of the organization to delete.}\n@returns(200) {errors: [map], messages: [map], result: map{id: str}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /organizations/{organization_id}\n@desc Get organization\n@required {organization_id: str # The ID of the organization to retrieve.}\n@returns(200) {errors: [map], messages: [map], result: map{create_time: str(date-time), id: any, meta: map{hierarchy_tags: [str], managed_by: str, tenant_flags: any}, name: str, parent: map{id: str, name: str}, profile: map{business_address: str, business_email: str, business_name: str, business_phone: str, external_metadata: str}}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint PUT /organizations/{organization_id}\n@desc Modify organization.\n@required {organization_id: str # The ID of the organization to modify., create_time: str(date-time), id: any, meta: map{hierarchy_tags: [str], managed_by: str, tenant_flags: any}, name: str}\n@optional {parent: map{id!: str, name!: str}, profile: map{business_address!: str, business_email!: str, business_name!: str, business_phone!: str, external_metadata!: str}}\n@returns(200) {errors: [map], messages: [map], result: map{create_time: str(date-time), id: any, meta: map{hierarchy_tags: [str], managed_by: str, tenant_flags: any}, name: str, parent: map{id: str, name: str}, profile: map{business_address: str, business_email: str, business_name: str, business_phone: str, external_metadata: str}}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /organizations/{organization_id}/accounts\n@desc Get organization accounts\n@required {organization_id: str # The ID of the organization to retrieve a list of accounts for.}\n@optional {account_pubname: str # (case-insensitive) Filter the list of accounts to where the account_pubname is equal to a particular string., account_pubname.startsWith: str # (case-insensitive) Filter the list of accounts to where the account_pubname starts with a particular string., account_pubname.endsWith: str # (case-insensitive) Filter the list of accounts to where the account_pubname ends with a particular string., account_pubname.contains: str # (case-insensitive) Filter the list of accounts to where the account_pubname contains a particular string., name: str # (case-insensitive) Filter the list of accounts to where the name is equal to a particular string., name.startsWith: str # (case-insensitive) Filter the list of accounts to where the name starts with a particular string., name.endsWith: str # (case-insensitive) Filter the list of accounts to where the name ends with a particular string., name.contains: str # (case-insensitive) Filter the list of accounts to where the name contains a particular string., order_by: str # Field to order results by. Currently supported values: `account_name`. When not specified, results are ordered by internal account ID., direction: str(asc/desc) # Sort direction for the order_by field. Valid values: `asc`, `desc`. Defaults to `asc` when order_by is specified., include_tags: bool # Include Account tags from the resource tag mirror. Omit this parameter to preserve the existing Account response shape., include_total: bool=true # Whether to calculate and return the exact result_info.total_size for cursor pagination. Defaults to true. When false, total_size is omitted. page_size and include_total may change between pages; next_page_token remains the authoritative continuation signal. Legacy page/per_page requests always calculate total_count., page_token: str # An opaque token returned from the last list response that when provided will retrieve the next page.  Parameters used to filter the retrieved list must remain in subsequent requests with a page token., page_size: int # The amount of items to return. Defaults to 10.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{next_page_token: str, total_size: int}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /organizations/{organization_id}/billable/usage\n@desc Get Organization Usage (Version 2, Alpha, Restricted)\n@required {organization_id: str # Identifies the Cloudflare organization.}\n@optional {from: str(date) # Start date for the usage query (ISO 8601). Required if `to` is set. When omitted along with `to`, defaults to the start of the current month. Filters by charge period (when consumption happened), not billing period. The maximum date range is 31 days., to: str(date) # End date for the usage query (ISO 8601). Required if `from` is set. When omitted along with `from`, defaults to today. Filters by charge period (when consumption happened), not billing period. The maximum date range is 31 days.}\n@returns(200) {errors: [map]?, messages: [map]?, result: [map], success: bool} # Organization usage data was successfully retrieved.\n@errors {4XX: Indicates the request failed.}\n\n@endpoint GET /organizations/{organization_id}/logs/audit\n@desc Get organization audit logs (Version 2)\n@required {organization_id: str, since: str(date) # Limits the returned results to logs newer than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339., before: str(date) # Limits the returned results to logs older than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339.}\n@optional {action_result: [str], action_type: [str], actor_context: [str], actor_email: [str(email)], actor_id: [str], actor_ip_address: [str], actor_token_id: [str], actor_token_name: [str], actor_type: [str], id: [str], raw_cf_ray_id: [str], raw_method: [str], raw_status_code: [int], raw_uri: [str], resource_id: [str], resource_product: [str], resource_type: [str], resource_scope: [str], action_result.not: [str], action_type.not: [str], actor_context.not: [str], actor_email.not: [str(email)], actor_id.not: [str], actor_ip_address.not: [str], actor_token_id.not: [str], actor_token_name.not: [str], actor_type.not: [str], id.not: [str], raw_cf_ray_id.not: [str], raw_method.not: [str], raw_status_code.not: [int], raw_uri.not: [str], resource_id.not: [str], resource_product.not: [str], resource_type.not: [str], resource_scope.not: [str], direction: str(desc/asc)=desc, limit: num=100, cursor: str}\n@returns(200) Get organization audit logs successful response\n@errors {4XX: Get organization audit logs failed response}\n\n@endpoint GET /organizations/{organization_id}/logs/audit/{id}/history\n@desc Get resource change history from an organization audit log entry (Version 2)\n@required {organization_id: str, id: str(uuid), action_time: str(date-time) # RFC3339 timestamp of the source audit log entry's action time. Used to narrow the source-entry lookup window. Provide the `action.time` value from the audit log identified by `id`., since: str(date) # Limits the returned results to logs newer than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339., before: str(date) # Limits the returned results to logs older than the specified date. This can be a date string 2019-04-30 (interpreted in UTC) or an absolute timestamp that conforms to RFC3339.}\n@optional {direction: str(desc/asc)=desc, limit: num=100, cursor: str}\n@returns(200) {errors: [map], result: [map], result_info: map{count: int, cursor: str, history_status: str}, success: bool} # Get organization resource history successful response\n@errors {404: Audit log entry not found, 4XX: Get organization resource history failed response}\n\n@endpoint GET /organizations/{organization_id}/members\n@desc List organization members\n@required {organization_id: str}\n@optional {status: [str] # Filter the list of memberships by membership status., user.email: str # Filter the list of memberships for a specific email., user.email.contains: str # Filter the list of memberships for a specific email that contains a substring., user.email.startsWith: str # Filter the list of memberships for a specific email that starts with a substring., user.email.endsWith: str # Filter the list of memberships for a specific email that ends with a substring., page_token: str # An opaque token returned from the last list response that when provided will retrieve the next page.  Parameters used to filter the retrieved list must remain in subsequent requests with a page token., page_size: int # The amount of items to return. Defaults to 10.}\n@returns(200) {errors: [map], messages: [map], result: [map], result_info: map{next_page_token: str, total_size: int}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint POST /organizations/{organization_id}/members\n@desc Create organization member\n@required {organization_id: str, member: map{status: str, user!: map}}\n@returns(200) {errors: [map], messages: [map], result: map{create_time: str(date-time), id: str, meta: map, status: str, update_time: str(date-time), user: map{email: str, id: str, name: str, two_factor_authentication_enabled: bool}}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint DELETE /organizations/{organization_id}/members/{member_id}\n@desc Delete organization member\n@required {organization_id: str, member_id: str}\n@returns(204) There is no content to send for this request, but the headers may be useful.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /organizations/{organization_id}/members/{member_id}\n@desc Get organization member\n@required {organization_id: str, member_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{create_time: str(date-time), id: str, meta: map, status: str, update_time: str(date-time), user: map{email: str, id: str, name: str, two_factor_authentication_enabled: bool}}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint POST /organizations/{organization_id}/members:batchCreate\n@desc Batch create organization members\n@required {organization_id: str, members: [map{status: str, user!: map}]}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /organizations/{organization_id}/profile\n@desc Get organization profile\n@required {organization_id: str # The ID of the organization to retrieve a profile for.}\n@returns(200) {errors: [map], messages: [map], result: map{business_address: str, business_email: str, business_name: str, business_phone: str, external_metadata: str}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint PUT /organizations/{organization_id}/profile\n@desc Modify organization profile.\n@required {organization_id: str, business_address: str, business_email: str, business_name: str, business_phone: str, external_metadata: str}\n@returns(204) There is no content to send for this request, but the headers may be useful.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /organizations/{organization_id}/shares\n@desc List organization shares\n@required {organization_id: str}\n@optional {status: str # Filter shares by status., kind: str # Filter shares by kind., target_type: str # Filter shares by target_type., resource_types: [str] # Filter share resources by resource_types., order: str(name/created)=created # Order shares by values in the given field., direction: str(asc/desc)=asc # Direction to sort objects., page: int=1 # Page number. Defaults to `1` when `per_page` is supplied without `page`. May be omitted entirely along with `per_page` to receive a non-paginated response., per_page: int=20 # Number of objects to return per page. Defaults to `20` when `page` is supplied without `per_page`. May be omitted entirely along with `page` to receive a non-paginated response.}\n@returns(200) List organization shares response.\n@errors {4XX: List organization shares response failure., 5XX: List organization shares response failure.}\n\n@endgroup\n\n@group pages\n@endpoint POST /pages/assets/check-missing\n@desc Check missing assets\n@required {hashes: [str] # List of file content hashes to check for existence in the asset store.}\n@returns(200) Check missing response.\n@errors {4XX: Check missing failure.}\n@example_request {\"hashes\":[\"a948904f2f0f479b8f936b8a0c5d9882\",\"b026324c6904b2a9cb4b88d6d61c81d1\"]}\n\n@endpoint POST /pages/assets/upload\n@desc Upload asset\n@returns(200) {errors: [map], messages: [map], success: bool} # Upload asset response.\n@errors {4XX: Upload asset failure.}\n@example_request [{\"base64\":true,\"key\":\"b026324c6904b2a9cb4b88d6d61c81d1\",\"metadata\":{\"contentType\":\"text/plain\"},\"value\":\"SGVsbG8sIFdvcmxkIQ==\"}]\n\n@endpoint POST /pages/assets/upsert-hashes\n@desc Upsert asset hashes\n@required {hashes: [str] # List of file content hashes to register in the asset store.}\n@returns(200) {errors: [map], messages: [map], success: bool} # Upsert hashes response.\n@errors {4XX: Upsert hashes failure.}\n@example_request {\"hashes\":[\"a948904f2f0f479b8f936b8a0c5d9882\",\"b026324c6904b2a9cb4b88d6d61c81d1\"]}\n\n@endgroup\n\n@group radar\n@endpoint GET /radar/agent_readiness/summary/{dimension}\n@desc Get agent readiness summary\n@required {dimension: str # Specifies the agent readiness data dimension by which to group the results.}\n@optional {date: str(date) # Filters results by the specified date., domainCategory: [str] # Filters results by domain category., name: [str] # Array of names used to label the series in the response., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{date: str(date), domainCategories: [map], lastUpdated: str(date-time), normalization: str, successfulDomains: int, totalDomains: int, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/bots/summary/user_agent\n@desc Get AI user agents summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/bots/summary/{dimension}\n@desc Get AI bots HTTP requests distribution by dimension\n@required {dimension: str(USER_AGENT/CRAWL_PURPOSE/INDUSTRY/VERTICAL/CONTENT_TYPE/RESPONSE_STATUS/RESPONSE_STATUS_CATEGORY) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., crawlPurpose: [str] # Filters results by bot crawl purpose., userAgent: [str] # Filters results by user agent., vertical: [str] # Filters results by vertical., industry: [str] # Filters results by industry., contentType: [str] # Filters results by content type category. When set, results can only be further filtered by location, continent, or Autonomous System., responseStatus: [str] # Filters results by HTTP response status code (e.g. 200, 403, 404). Only [IANA-registered codes](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) are accepted., responseStatusCategory: [str] # Filters results by HTTP response status code category., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/bots/timeseries\n@desc Get AI bots HTTP requests time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., crawlPurpose: [str] # Filters results by bot crawl purpose., userAgent: [str] # Filters results by user agent., industry: [str] # Filters results by industry., vertical: [str] # Filters results by vertical., contentType: [str] # Filters results by content type category. When set, results can only be further filtered by location, continent, or Autonomous System., responseStatus: [str] # Filters results by HTTP response status code (e.g. 200, 403, 404). Only [IANA-registered codes](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) are accepted., responseStatusCategory: [str] # Filters results by HTTP response status code category., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/bots/timeseries_groups/user_agent\n@desc Get AI user agents time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/bots/timeseries_groups/{dimension}\n@desc Get time series distribution of AI bots HTTP requests by dimension.\n@required {dimension: str(USER_AGENT/CRAWL_PURPOSE/INDUSTRY/VERTICAL/CONTENT_TYPE/RESPONSE_STATUS/RESPONSE_STATUS_CATEGORY) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., crawlPurpose: [str] # Filters results by bot crawl purpose., userAgent: [str] # Filters results by user agent., industry: [str] # Filters results by industry., vertical: [str] # Filters results by vertical., contentType: [str] # Filters results by content type category. When set, results can only be further filtered by location, continent, or Autonomous System., responseStatus: [str] # Filters results by HTTP response status code (e.g. 200, 403, 404). Only [IANA-registered codes](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) are accepted., responseStatusCategory: [str] # Filters results by HTTP response status code category., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., normalization: str(PERCENTAGE/MIN0_MAX/PERCENTAGE_CHANGE)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/inference/summary/model\n@desc Get Workers AI models summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/inference/summary/task\n@desc Get Workers AI tasks summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/inference/summary/{dimension}\n@desc Get Workers AI inference distribution by dimension\n@required {dimension: str(MODEL/TASK) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/inference/timeseries_groups/model\n@desc Get Workers AI models time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/inference/timeseries_groups/task\n@desc Get Workers AI tasks time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/inference/timeseries_groups/{dimension}\n@desc Get time series distribution of Workers AI inference by dimension.\n@required {dimension: str(MODEL/TASK) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/markdown_for_agents/summary\n@desc Get AI markdown for agents reduction ratio summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{value: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ai/markdown_for_agents/timeseries\n@desc Get AI markdown for agents reduction ratio time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/annotations\n@desc Get latest annotations\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., dateRange: str # Filters results by a relative date range ending at the current time. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`), e.g. `7d`. Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `3dcontrol` covers days -10 to -7, `7dcontrol` covers days -14 to -7, `28dcontrol` covers days -56 to -28, and `10dcontrol` covers days -24 to -14). Mutually exclusive with `dateStart`/`dateEnd`., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., dataSource: str(ALL/AI_BOTS/AI_GATEWAY/BGP/BOTS/CONNECTION_ANOMALY/CT/DNS/DNS_MAGNITUDE/DNS_AS112/DOS/EMAIL_ROUTING/EMAIL_SECURITY/FW/FW_PG/HTTP/HTTP_CONTROL/HTTP_CRAWLER_REFERER/HTTP_ORIGINS/IQI/LEAKED_CREDENTIALS/NET/ROBOTS_TXT/SPEED/WORKERS_AI) # Filters results by data source., eventType: str(EVENT/GENERAL/OUTAGE/PARTIAL_PROJECTION/PIPELINE/TRAFFIC_ANOMALY) # Filters results by event type. EVENT is a legacy alias for GENERAL., outageType: str(NATIONWIDE/REGIONAL/NETWORK/PLATFORM) # Filters results by outage type., outageCause: str(BLOCKING/CABLE_CUT/CYBERATTACK/DNS/FIRE/GOVERNMENT_DIRECTED/MAINTENANCE/MECHANICAL/MILITARY_ACTION/MISCONFIGURATION/NATURAL_DISASTER/NETWORK_PROBLEM/POWER_OUTAGE/SOFTWARE/TECHNICAL_PROBLEM/UNKNOWN/WEATHER) # Filters results by outage cause., tags: [str] # Filters results by annotation tag. Matches annotations carrying at least one of the given tags., query: str # Filters results by a free-text match on the annotation description, id, or linked entities (location, ASN, origin)., asn: int # Filters results by Autonomous System. Specify a single Autonomous System Number (ASN) as integer., location: str # Filters results by location. Specify an alpha-2 location code., geoId: str # Filters results by geolocation. Refer to [GeoNames](https://download.geonames.org/export/dump/readme.txt)., origin: str # Filters results by origin., tld: str # Filters results by top-level domain., ca: str # Filters results by certificate authority., log: str # Filters results by certificate log., bot: str # Filters results by bot., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{annotations: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/annotations/outages\n@desc Get latest Internet outages and anomalies\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., dateRange: str # Filters results by a relative date range ending at the current time. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`), e.g. `7d`. Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `3dcontrol` covers days -10 to -7, `7dcontrol` covers days -14 to -7, `28dcontrol` covers days -56 to -28, and `10dcontrol` covers days -24 to -14). Mutually exclusive with `dateStart`/`dateEnd`., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., dataSource: str(ALL/AI_BOTS/AI_GATEWAY/BGP/BOTS/CONNECTION_ANOMALY/CT/DNS/DNS_MAGNITUDE/DNS_AS112/DOS/EMAIL_ROUTING/EMAIL_SECURITY/FW/FW_PG/HTTP/HTTP_CONTROL/HTTP_CRAWLER_REFERER/HTTP_ORIGINS/IQI/LEAKED_CREDENTIALS/NET/ROBOTS_TXT/SPEED/WORKERS_AI) # Filters results by data source., outageType: str(NATIONWIDE/REGIONAL/NETWORK/PLATFORM) # Filters results by outage type., outageCause: str(BLOCKING/CABLE_CUT/CYBERATTACK/DNS/FIRE/GOVERNMENT_DIRECTED/MAINTENANCE/MECHANICAL/MILITARY_ACTION/MISCONFIGURATION/NATURAL_DISASTER/NETWORK_PROBLEM/POWER_OUTAGE/SOFTWARE/TECHNICAL_PROBLEM/UNKNOWN/WEATHER) # Filters results by outage cause., tags: [str] # Filters results by annotation tag. Matches annotations carrying at least one of the given tags., query: str # Filters results by a free-text match on the annotation description, id, or linked entities (location, ASN, origin)., asn: int # Filters results by Autonomous System. Specify a single Autonomous System Number (ASN) as integer., location: str # Filters results by location. Specify an alpha-2 location code., geoId: str # Filters results by geolocation. Refer to [GeoNames](https://download.geonames.org/export/dump/readme.txt)., origin: str # Filters results by origin., tld: str # Filters results by top-level domain., ca: str # Filters results by certificate authority., log: str # Filters results by certificate log., bot: str # Filters results by bot., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{annotations: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/annotations/outages/locations\n@desc Get the number of outages by location\n@optional {limit: int=5 # Limits the number of objects returned in the response., dateRange: str # Filters results by a relative date range ending at the current time. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`), e.g. `7d`. Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `3dcontrol` covers days -10 to -7, `7dcontrol` covers days -14 to -7, `28dcontrol` covers days -56 to -28, and `10dcontrol` covers days -24 to -14). Mutually exclusive with `dateStart`/`dateEnd`., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{annotations: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/annotations/{id}\n@desc Get annotation by ID\n@required {id: str # Annotation ID.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{annotation: map{asns: [int], asnsDetails: [map], dataSource: str, description: str?, endDate: str(date-time)?, entities: [map], eventType: str, geoIds: [str], id: str, linkedUrl: str?, locations: [str], locationsDetails: [map], origins: [str], originsDetails: [map], outage: map?{outageCause: str, outageType: str}, scope: str?, startDate: str(date-time), tags: [str]}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/as112/summary/dnssec\n@desc Get AS112 DNS queries by DNSSEC summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NOT_SUPPORTED: str, SUPPORTED: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/summary/edns\n@desc Get AS112 DNS queries by EDNS summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NOT_SUPPORTED: str, SUPPORTED: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/summary/ip_version\n@desc Get AS112 DNS queries by IP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{IPv4: str, IPv6: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/summary/protocol\n@desc Get AS112 DNS queries by DNS protocol summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{HTTPS: str, TCP: str, TLS: str, UDP: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/summary/query_type\n@desc Get AS112 DNS queries by type summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/summary/response_codes\n@desc Get AS112 DNS queries by response code summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/summary/{dimension}\n@desc Get AS112 summary by dimension\n@required {dimension: str(DNSSEC/EDNS/IP_VERSION/PROTOCOL/QUERY_TYPE/RESPONSE_CODE) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries\n@desc Get AS112 DNS queries time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries_groups/dnssec\n@desc Get AS112 DNS queries by DNSSEC support time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NOT_SUPPORTED: [str], SUPPORTED: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries_groups/edns\n@desc Get AS112 DNS queries by EDNS support summary\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NOT_SUPPORTED: [str], SUPPORTED: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries_groups/ip_version\n@desc Get AS112 DNS queries by IP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{IPv4: [str], IPv6: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries_groups/protocol\n@desc Get AS112 DNS queries by DNS protocol time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{HTTPS: [str], TCP: [str], TLS: [str], UDP: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries_groups/query_type\n@desc Get AS112 DNS queries by type time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries_groups/response_codes\n@desc Get AS112 DNS queries by response code time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/timeseries_groups/{dimension}\n@desc Get AS112 time series grouped by dimension\n@required {dimension: str(DNSSEC/EDNS/IP_VERSION/PROTOCOL/QUERY_TYPE/RESPONSE_CODE) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/as112/top/locations\n@desc Get top locations by AS112 DNS queries\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/as112/top/locations/dnssec/{dnssec}\n@desc Get top locations by AS112 DNS queries with DNSSEC support\n@required {dnssec: str(SUPPORTED/NOT_SUPPORTED) # DNSSEC (DNS Security Extensions) status.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/as112/top/locations/edns/{edns}\n@desc Get top locations by AS112 DNS queries with EDNS support\n@required {edns: str(SUPPORTED/NOT_SUPPORTED) # EDNS (Extension Mechanisms for DNS) status.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/as112/top/locations/ip_version/{ip_version}\n@desc Get top locations by AS112 DNS queries for an IP version\n@required {ip_version: str(IPv4/IPv6) # IP version.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer3/summary/bitrate\n@desc Get layer 3 attacks by bitrate summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{OVER_100_GBPS: str, UNDER_500_MBPS: str, _10_GBPS_TO_100_GBPS: str, _1_GBPS_TO_10_GBPS: str, _500_MBPS_TO_1_GBPS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/summary/duration\n@desc Get layer 3 attacks by duration summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{OVER_3_HOURS: str, UNDER_10_MINS: str, _10_MINS_TO_20_MINS: str, _1_HOUR_TO_3_HOURS: str, _20_MINS_TO_40_MINS: str, _40_MINS_TO_1_HOUR: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/summary/industry\n@desc Get layer 3 attacks by targeted industry summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/summary/ip_version\n@desc Get layer 3 attacks by IP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., protocol: [str] # Filters the results by layer 3/4 protocol., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{IPv4: str, IPv6: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/summary/protocol\n@desc Get layer 3 attacks by protocol summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{GRE: str, ICMP: str, TCP: str, UDP: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/summary/vector\n@desc Get layer 3 attacks by vector summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/summary/vertical\n@desc Get layer 3 attacks by targeted vertical summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/summary/{dimension}\n@desc Get layer 3 attacks summary by dimension\n@required {dimension: str(PROTOCOL/IP_VERSION/VECTOR/DURATION/BITRATE/VERTICAL/INDUSTRY) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries\n@desc Get layer 3 attacks by bytes time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE_CHANGE/MIN0_MAX) # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., metric: str(BYTES/BYTES_OLD)=bytes # Measurement units, eg. bytes., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/bitrate\n@desc Get layer 3 attacks by bitrate time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{OVER_100_GBPS: [str], UNDER_500_MBPS: [str], _10_GBPS_TO_100_GBPS: [str], _1_GBPS_TO_10_GBPS: [str], _500_MBPS_TO_1_GBPS: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/duration\n@desc Get layer 3 attacks by duration time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{OVER_3_HOURS: [str], UNDER_10_MINS: [str], _10_MINS_TO_20_MINS: [str], _1_HOUR_TO_3_HOURS: [str], _20_MINS_TO_40_MINS: [str], _40_MINS_TO_1_HOUR: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/industry\n@desc Get layer 3 attacks by target industries time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/ip_version\n@desc Get layer 3 attacks by IP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{IPv4: [str], IPv6: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/protocol\n@desc Get layer 3 attacks by protocol time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{GRE: [str], ICMP: [str], TCP: [str], UDP: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/vector\n@desc Get layer 3 attacks by vector time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/vertical\n@desc Get layer 3 attacks by vertical time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/timeseries_groups/{dimension}\n@desc Get layer 3 attacks time series grouped by dimension\n@required {dimension: str(PROTOCOL/IP_VERSION/VECTOR/DURATION/BITRATE/VERTICAL/INDUSTRY) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., direction: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `location` filter applies to the source or target location., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer3/top/attacks\n@desc Get top layer 3 attack pairs (origin and target locations)\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., limitDirection: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `limitPerLocation` applies to the source or target location., limitPerLocation: int=10 # Limits the number of attacks per origin/target (refer to `limitDirection` parameter) location., magnitude: str(MITIGATED_BYTES/MITIGATED_ATTACKS) # Orders results based on attack magnitude, defined by total mitigated bytes or total mitigated attacks., normalization: str(PERCENTAGE/MIN_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer3/top/industry\n@desc Get top industries targeted by layer 3 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer3/top/locations/origin\n@desc Get top origin locations of layer 3 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer3/top/locations/target\n@desc Get top target locations of layer 3 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer3/top/vertical\n@desc Get top verticals targeted by layer 3 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., protocol: [str] # Filters the results by layer 3/4 protocol., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer7/summary/http_method\n@desc Get layer 7 attacks by HTTP method summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/summary/http_version\n@desc Get layer 7 attacks by HTTP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{HTTP/1.x: str, HTTP/2: str, HTTP/3: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/summary/industry\n@desc Get layer 7 attacks by targeted industry summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/summary/ip_version\n@desc Get layer 7 attacks by IP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{IPv4: str, IPv6: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/summary/managed_rules\n@desc Get layer 7 attacks by managed rules summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/summary/mitigation_product\n@desc Get layer 7 attacks by mitigation product summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/summary/vertical\n@desc Get layer 7 attacks by targeted vertical summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/summary/{dimension}\n@desc Get layer 7 attacks summary by dimension\n@required {dimension: str(HTTP_METHOD/HTTP_VERSION/IP_VERSION/MANAGED_RULES/MITIGATION_PRODUCT/VERTICAL/INDUSTRY) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries\n@desc Get layer 7 attacks time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., normalization: str(PERCENTAGE_CHANGE/MIN0_MAX) # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)], values: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/http_method\n@desc Get layer 7 attacks by HTTP method time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/http_version\n@desc Get layer 7 attacks by HTTP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{HTTP/1.x: [str], HTTP/2: [str], HTTP/3: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/industry\n@desc Get layer 7 attacks by target industries time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/ip_version\n@desc Get layer 7 attacks by IP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{IPv4: [str], IPv6: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/managed_rules\n@desc Get layer 7 attacks by managed rules time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/mitigation_product\n@desc Get layer 7 attacks by mitigation product time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/vertical\n@desc Get layer 7 attacks by vertical time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/timeseries_groups/{dimension}\n@desc Get layer 7 attacks time series grouped by dimension\n@required {dimension: str(HTTP_METHOD/HTTP_VERSION/IP_VERSION/MANAGED_RULES/MITIGATION_PRODUCT/VERTICAL/INDUSTRY) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/attacks/layer7/top/ases/origin\n@desc Get top origin ASes of layer 7 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer7/top/attacks\n@desc Get top layer 7 attack pairs (origin and target locations)\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., limitDirection: str(ORIGIN/TARGET)=ORIGIN # Specifies whether the `limitPerLocation` applies to the source or target location., limitPerLocation: int=10 # Limits the number of attacks per origin/target (refer to `limitDirection` parameter) location., normalization: str(PERCENTAGE/MIN_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer7/top/industry\n@desc Get top industries targeted by layer 7 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer7/top/locations/origin\n@desc Get top origin locations of layer 7 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer7/top/locations/target\n@desc Get top target locations of layer 7 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/attacks/layer7/top/vertical\n@desc Get top verticals targeted by layer 7 attacks\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., httpVersion: [str] # Filters results by HTTP version., httpMethod: [str] # Filters results by HTTP method., mitigationProduct: [str] # Filters the results by layer 7 mitigation product., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/bgp/hijacks/events\n@desc Get BGP hijack events\n@optional {page: int=1 # Current page number, starting from 1., per_page: int=50 # Number of entries per page., eventId: int # The unique identifier of a event., hijackerAsn: int # The potential hijacker AS of a BGP hijack event., victimAsn: int # The potential victim AS of a BGP hijack event., involvedAsn: int # The potential hijacker or victim AS of a BGP hijack event., involvedCountry: str # The country code of the potential hijacker or victim AS of a BGP hijack event., prefix: any, minConfidence: int # Filters events by minimum confidence score (1-4 low, 5-7 mid, 8+ high)., maxConfidence: int # Filters events by maximum confidence score (1-4 low, 5-7 mid, 8+ high)., dateRange: str # Filters results by a relative date range ending at the current time. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`), e.g. `7d`. Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `3dcontrol` covers days -10 to -7, `7dcontrol` covers days -14 to -7, `28dcontrol` covers days -56 to -28, and `10dcontrol` covers days -24 to -14). Mutually exclusive with `dateStart`/`dateEnd`., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., sortBy: str(ID/TIME/CONFIDENCE) # Sorts results by the specified field., sortOrder: str(ASC/DESC) # Sort order., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asn_info: [map], events: [map], total_monitors: int}, result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/ips/timeseries\n@desc Get announced IP address space time series\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 location codes., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., includeDelay: bool # Includes data delay meta information., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], delay: map{asn_data: map, country_data: map, healthy: bool, nowTs: num}, lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{ipv4: [str], ipv6: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/ips/top/ases\n@desc Get top ASes by announced IP space\n@optional {date: str(date-time) # Filters results by the specified datetime (ISO 8601)., limit: int=5 # Limits the number of objects returned in the response., metric: str(v4_24s/v6_48s) # Ranking metric: IPv4 /24 count or IPv6 /48 count., country: str # Optional ISO 3166-1 alpha-2 country filter. Omit for global top-N., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{anchorTs: str(date-time), asns: [map], country: str?, metric: str}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/leaks/events\n@desc Get BGP route leak events\n@optional {page: int=1 # Current page number, starting from 1., per_page: int=50 # Number of entries per page., eventId: int # The unique identifier of a event., leakAsn: int # The leaking AS of a route leak event., involvedAsn: int # ASN that is causing or affected by a route leak event., involvedCountry: str # Country code of a involved ASN in a route leak event., dateRange: str # Filters results by a relative date range ending at the current time. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`), e.g. `7d`. Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `3dcontrol` covers days -10 to -7, `7dcontrol` covers days -14 to -7, `28dcontrol` covers days -56 to -28, and `10dcontrol` covers days -24 to -14). Mutually exclusive with `dateStart`/`dateEnd`., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., sortBy: str(ID/LEAKS/PEERS/PREFIXES/ORIGINS/TIME) # Sorts results by the specified field., sortOrder: str(ASC/DESC) # Sort order., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asn_info: [map], events: [map]}, result_info: map{count: int, page: int, per_page: int, total_count: int}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/routes/ases\n@desc List ASes from global routing tables\n@optional {location: str # Filters results by location. Specify an alpha-2 location code., limit: int=5 # Limits the number of objects returned in the response., sortBy: str(cone/pfxs/ipv4/ipv6/rpki_valid/rpki_invalid/rpki_unknown) # Sorts results by the specified field., sortOrder: str(ASC/DESC) # Sort order., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asns: [map], meta: map{dataTime: str, queryTime: str, totalPeers: int}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/routes/moas\n@desc Get Multi-Origin AS (MOAS) prefixes\n@optional {origin: int # Lookup MOASes originated by the given ASN., prefix: any, invalid_only: bool # Lookup only RPKI invalid MOASes., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{data_time: str, query_time: str, total_peers: int}, moas: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/routes/paths/{asn}\n@desc Get tier-1 path segments for an AS\n@required {asn: int # Single Autonomous System Number (ASN) as integer.}\n@optional {ipVersion: str(IPv4/IPv6)=IPv4 # Address family of the observed paths. Defaults to IPv4., collector: str # Scope to a single RouteViews collector (e.g. \"route-views3\"). Omit to merge across all active collectors (identical path segments are deduplicated, observation counts summed, and every contributing collector listed)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asnInfo: map?, collectors: [str], meta: map{dataTime: str(date-time)?, effectiveCollector: str?, queryTime: str(date-time)?, stale: bool}, paths: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/routes/pfx2as\n@desc Get prefix-to-ASN mapping\n@optional {prefix: any, origin: int # Lookup prefixes originated by the given ASN., rpkiStatus: str(VALID/INVALID/UNKNOWN) # Return only results with matching rpki status: valid, invalid or unknown., longestPrefixMatch: bool # Return only results with the longest prefix match for the given prefix. For example, specify a /32 prefix to lookup the origin ASN for an IPv4 address., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{data_time: str, query_time: str, total_peers: int}, prefix_origins: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/routes/realtime\n@desc Get real-time BGP routes for a prefix\n@optional {prefix: any, format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{asn_info: [map], collectors: [map], data_time: str, prefix_origins: [map], query_time: str}, routes: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/routes/stats\n@desc Get BGP routing table stats\n@optional {asn: int # Filters results by Autonomous System. Specify a single Autonomous System Number (ASN) as integer., location: str # Filters results by location. Specify an alpha-2 location code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{data_time: str, query_time: str, total_peers: int}, stats: map{distinct_origins: int, distinct_origins_ipv4: int, distinct_origins_ipv6: int, distinct_prefixes: int, distinct_prefixes_ipv4: int, distinct_prefixes_ipv6: int, routes_invalid: int, routes_invalid_ipv4: int, routes_invalid_ipv6: int, routes_total: int, routes_total_ipv4: int, routes_total_ipv6: int, routes_unknown: int, routes_unknown_ipv4: int, routes_unknown_ipv6: int, routes_valid: int, routes_valid_ipv4: int, routes_valid_ipv6: int}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/routes/upstreams/{asn}/timeseries\n@desc Get upstream composition time series for an AS\n@required {asn: int # Single Autonomous System Number (ASN) as integer.}\n@optional {ipVersion: str(IPv4/IPv6)=IPv4 # Address family of the observed paths. Defaults to IPv4., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., limit: int # Number of upstream ASNs to return as separate series, ranked by the first bucket. Remaining upstreams are grouped into an \"OTHER\" series. Defaults to 5., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{dataTime: str(date-time)?, effectiveCollector: str?, queryTime: str(date-time)?, stale: bool}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/rpki/aspa/changes\n@desc Get ASPA changes over time\n@optional {dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., asn: int # Filter changes involving this ASN (as customer or provider)., includeAsnInfo: bool # Include ASN metadata (name, country) in response., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asnInfo: map{13335: map{asn: int, country: str, name: str}}, changes: [map], meta: map{dataTime: str(date-time), queryTime: str(date-time)}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/rpki/aspa/snapshot\n@desc Get ASPA objects snapshot\n@optional {customerAsn: int # Filter by customer ASN (the ASN publishing the ASPA object)., providerAsn: int # Filter by provider ASN (an authorized upstream provider in ASPA objects)., date: str(date-time) # Filters results by the specified datetime (ISO 8601)., includeAsnInfo: bool # Include ASN metadata (name, country) in response., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asnInfo: map{13335: map{asn: int, country: str, name: str}}, aspaObjects: [map], meta: map{dataTime: str(date-time), queryTime: str(date-time), totalCount: int}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/rpki/aspa/timeseries\n@desc Get ASPA count time series\n@optional {dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., name: [str] # Array of names used to label the series in the response., rir: [str] # Filter by Regional Internet Registry (RIR). Multiple RIRs generate multiple series., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 location codes., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{dataTime: str(date-time), queryTime: str(date-time)}, serie_0: map{timestamps: [str(date-time)], values: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/rpki/roas/timeseries\n@desc Get RPKI ROA deployment time series\n@optional {dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., metric: str(validPfxsRatio/validPfxsV4Ratio/validPfxsV6Ratio/validIpsRatio/validIpsV4Ratio/validIpsV6Ratio)=validPfxsRatio # Which RPKI ROA validation metric to return. validPfxsRatio = ratio of RPKI-valid prefixes (IPv4+IPv6 combined). validPfxsV4Ratio / validPfxsV6Ratio = same, split by IP version. validIpsRatio = ratio of RPKI-valid address space (IPv4 /24s + IPv6 /48s). validIpsV4Ratio / validIpsV6Ratio = same, split by IP version., asn: [str] # Filters results by Autonomous System Number. Specify one or more ASNs. Multiple values generate one series per ASN., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 location codes., name: [str] # Array of names used to label the series in the response., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{dataTime: str(date-time), queryTime: str(date-time)}, serie_0: map{timestamps: [str(date-time)], values: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/timeseries\n@desc Get BGP time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., prefix: [any] # Filters results by BGP network prefix., updateType: [str] # Filters results by BGP update type., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time)}, serie_0: map{timestamps: [str(date-time)], values: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/top/ases\n@desc Get top ASes by BGP updates\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., prefix: [any] # Filters results by BGP network prefix., updateType: [str] # Filters results by BGP update type., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{dateRange: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bgp/top/ases/prefixes\n@desc Get top ASes by prefix count\n@optional {country: str # Alpha-2 country code., limit: int # Maximum number of ASes to return., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asns: [map], meta: map{data_time: str, query_time: str, total_peers: int}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/bgp/top/prefixes\n@desc Get top prefixes by BGP updates\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., updateType: [str] # Filters results by BGP update type., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{dateRange: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bots\n@desc List bots\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., botCategory: str(SEARCH_ENGINE_CRAWLER/SEARCH_ENGINE_OPTIMIZATION/MONITORING_AND_ANALYTICS/ADVERTISING_AND_MARKETING/SOCIAL_MEDIA_MARKETING/PAGE_PREVIEW/ACADEMIC_RESEARCH/SECURITY/ACCESSIBILITY/WEBHOOKS/FEED_FETCHER/AI_CRAWLER/AGGREGATOR/AI_ASSISTANT/AI_SEARCH/ARCHIVER) # Filters results by bot category., botOperator: str # Filters results by bot operator., kind: str(AGENT/BOT) # Filters results by bot kind. Deprecated: the Verified Bot / Signed Agent distinction is being removed., botVerificationStatus: str # Filters results by bot verification status., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{bots: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bots/crawlers/summary/{dimension}\n@desc Get crawler HTTP request distribution by dimension\n@required {dimension: str(CLIENT_TYPE/USER_AGENT/REFERER/CRAWL_REFER_RATIO/VERTICAL/INDUSTRY/RESPONSE_STATUS/RESPONSE_STATUS_CATEGORY) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., botOperator: [str] # Filters results by bot operator., vertical: [str] # Filters results by vertical., industry: [str] # Filters results by industry., clientType: [str] # Filters results by agent type., responseStatus: [str] # Filters results by HTTP response status code (e.g. 200, 403, 404). Only [IANA-registered codes](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) are accepted., responseStatusCategory: [str] # Filters results by HTTP response status code category., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bots/crawlers/timeseries_groups/{dimension}\n@desc Get time series of crawler HTTP request distribution by dimension\n@required {dimension: str(CLIENT_TYPE/USER_AGENT/REFERER/CRAWL_REFER_RATIO/VERTICAL/INDUSTRY/RESPONSE_STATUS/RESPONSE_STATUS_CATEGORY) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., normalization: str(PERCENTAGE/MIN0_MAX/PERCENTAGE_CHANGE)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., botOperator: [str] # Filters results by bot operator., vertical: [str] # Filters results by vertical., industry: [str] # Filters results by industry., clientType: [str] # Filters results by agent type., responseStatus: [str] # Filters results by HTTP response status code (e.g. 200, 403, 404). Only [IANA-registered codes](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) are accepted., responseStatusCategory: [str] # Filters results by HTTP response status code category., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bots/summary/{dimension}\n@desc Get bots HTTP requests distribution by dimension\n@required {dimension: str(BOT/BOT_KIND/BOT_OPERATOR/BOT_CATEGORY) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., bot: [str] # Filters results by bot name., botOperator: [str] # Filters results by bot operator., botCategory: [str] # Filters results by bot category., botKind: [str] # Filters results by bot kind. Deprecated: the Verified Bot / Signed Agent distinction is being removed., botVerificationStatus: [str] # Filters results by bot verification status (Verified vs. Unverified)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bots/timeseries\n@desc Get bots HTTP requests time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., bot: [str] # Filters results by bot name., botOperator: [str] # Filters results by bot operator., botCategory: [str] # Filters results by bot category., botKind: [str] # Filters results by bot kind. Deprecated: the Verified Bot / Signed Agent distinction is being removed., botVerificationStatus: [str] # Filters results by bot verification status (Verified vs. Unverified)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bots/timeseries_groups/{dimension}\n@desc Get time series distribution of bots HTTP requests by dimension.\n@required {dimension: str(BOT/BOT_KIND/BOT_OPERATOR/BOT_CATEGORY) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., bot: [str] # Filters results by bot name., botOperator: [str] # Filters results by bot operator., botCategory: [str] # Filters results by bot category., botKind: [str] # Filters results by bot kind. Deprecated: the Verified Bot / Signed Agent distinction is being removed., botVerificationStatus: [str] # Filters results by bot verification status (Verified vs. Unverified)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/bots/{bot_slug}\n@desc Get bot details\n@required {bot_slug: str # Bot slug.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{bot: map{category: str, description: str, kind: str, name: str, operator: str, operatorUrl: str, signatureAgentUrl: str?, slug: str, userAgentPatterns: [str], userAgents: [str]}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/ct/authorities\n@desc List certificate authorities\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{certificateAuthorities: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ct/authorities/{ca_slug}\n@desc Get certificate authority details\n@required {ca_slug: str # Certificate authority SHA256 fingerprint.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{certificateAuthority: map{appleStatus: str, authorityKeyIdentifier: str, certificateRecordType: str, chromeStatus: str, country: str, countryName: str, microsoftStatus: str, mozillaStatus: str, name: str, owner: str, parentName: str, parentSha256Fingerprint: str, related: [map], revocationStatus: str, sha256Fingerprint: str, subjectKeyIdentifier: str, validFrom: str(date), validTo: str(date)}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/ct/logs\n@desc List certificate logs\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{certificateLogs: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ct/logs/{log_slug}\n@desc Get certificate log details\n@required {log_slug: str # Certificate log slug.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{certificateLog: map{api: str, avgThroughput: num, description: str, endExclusive: str(date-time), lastUpdate: str(date-time), operator: str, performance: map?{endpoints: [map], responseTime: num, uptime: num}, related: [map], slug: str, startInclusive: str(date-time), state: str, stateTimestamp: str(date-time), submittableCertCount: str?, submittedCertCount: str?, url: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/ct/summary/{dimension}\n@desc Get certificate distribution by dimension\n@required {dimension: str(CA/CA_OWNER/DURATION/ENTRY_TYPE/EXPIRATION_STATUS/HAS_IPS/HAS_WILDCARDS/LOG/LOG_API/LOG_OPERATOR/PUBLIC_KEY_ALGORITHM/SIGNATURE_ALGORITHM/TLD/VALIDATION_LEVEL) # Specifies the certificate attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., ca: [str] # Filters results by certificate authority., caOwner: [str] # Filters results by certificate authority owner., duration: [str] # Filters results by certificate duration., entryType: [str] # Filters results by entry type (certificate vs. pre-certificate). Incompatible with the `tld` filter/dimension., expirationStatus: [str] # Filters results by expiration status (expired vs. valid)., hasIps: [bool] # Filters results based on whether the certificates are bound to specific IP addresses., hasWildcards: [bool] # Filters results based on whether the certificates contain wildcard domains., log: [str] # Filters results by certificate log. Incompatible with the `tld` filter/dimension., logApi: [str] # Filters results by certificate log API (RFC6962 vs. static). Incompatible with the `tld` filter/dimension., logOperator: [str] # Filters results by certificate log operator. Incompatible with the `tld` filter/dimension., publicKeyAlgorithm: [str] # Filters results by public key algorithm., signatureAlgorithm: [str] # Filters results by signature algorithm., tld: [str] # Filters results by top-level domain. Incompatible with the `log`, `logApi`, `logOperator`, and `entryType` filters/dimensions., validationLevel: [str] # Filters results by validation level., uniqueEntries: [str] # Specifies whether to filter out duplicate certificates and pre-certificates. Set to true for unique entries only., normalization: str(RAW_VALUES/PERCENTAGE)=RAW_VALUES # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: any}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ct/timeseries\n@desc Get certificates time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., ca: [str] # Filters results by certificate authority., caOwner: [str] # Filters results by certificate authority owner., duration: [str] # Filters results by certificate duration., entryType: [str] # Filters results by entry type (certificate vs. pre-certificate). Incompatible with the `tld` filter/dimension., expirationStatus: [str] # Filters results by expiration status (expired vs. valid)., hasIps: [bool] # Filters results based on whether the certificates are bound to specific IP addresses., hasWildcards: [bool] # Filters results based on whether the certificates contain wildcard domains., log: [str] # Filters results by certificate log. Incompatible with the `tld` filter/dimension., logApi: [str] # Filters results by certificate log API (RFC6962 vs. static). Incompatible with the `tld` filter/dimension., logOperator: [str] # Filters results by certificate log operator. Incompatible with the `tld` filter/dimension., publicKeyAlgorithm: [str] # Filters results by public key algorithm., signatureAlgorithm: [str] # Filters results by signature algorithm., tld: [str] # Filters results by top-level domain. Incompatible with the `log`, `logApi`, `logOperator`, and `entryType` filters/dimensions., validationLevel: [str] # Filters results by validation level., uniqueEntries: [str] # Specifies whether to filter out duplicate certificates and pre-certificates. Set to true for unique entries only., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ct/timeseries_groups/{dimension}\n@desc Get time series of certificate distribution by dimension\n@required {dimension: str(CA/CA_OWNER/DURATION/ENTRY_TYPE/EXPIRATION_STATUS/HAS_IPS/HAS_WILDCARDS/LOG/LOG_API/LOG_OPERATOR/PUBLIC_KEY_ALGORITHM/SIGNATURE_ALGORITHM/TLD/VALIDATION_LEVEL) # Specifies the certificate attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., ca: [str] # Filters results by certificate authority., caOwner: [str] # Filters results by certificate authority owner., duration: [str] # Filters results by certificate duration., entryType: [str] # Filters results by entry type (certificate vs. pre-certificate). Incompatible with the `tld` filter/dimension., expirationStatus: [str] # Filters results by expiration status (expired vs. valid)., hasIps: [bool] # Filters results based on whether the certificates are bound to specific IP addresses., hasWildcards: [bool] # Filters results based on whether the certificates contain wildcard domains., log: [str] # Filters results by certificate log. Incompatible with the `tld` filter/dimension., logApi: [str] # Filters results by certificate log API (RFC6962 vs. static). Incompatible with the `tld` filter/dimension., logOperator: [str] # Filters results by certificate log operator. Incompatible with the `tld` filter/dimension., publicKeyAlgorithm: [str] # Filters results by public key algorithm., signatureAlgorithm: [str] # Filters results by signature algorithm., validationLevel: [str] # Filters results by validation level., tld: [str] # Filters results by top-level domain. Incompatible with the `log`, `logApi`, `logOperator`, and `entryType` filters/dimensions., normalization: str(RAW_VALUES/PERCENTAGE)=RAW_VALUES # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., uniqueEntries: [str] # Specifies whether to filter out duplicate certificates and pre-certificates. Set to true for unique entries only., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: any}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/datasets\n@desc List datasets\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., datasetType: str(RANKING_BUCKET/REPORT)=RANKING_BUCKET # Filters results by dataset type., date: str(date) # Filters results by the specified date., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{datasets: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint POST /radar/datasets/download\n@desc Get dataset download URL\n@required {datasetId: int}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{dataset: map{url: str}}} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/datasets/{alias}\n@desc Get dataset CSV stream\n@required {alias: str # Dataset alias or ID.}\n@returns(200) Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/cache_hit\n@desc Get DNS queries by cache status summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NEGATIVE: str, POSITIVE: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/dnssec\n@desc Get DNS queries by DNSSEC support summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{INSECURE: str, INVALID: str, OTHER: str, SECURE: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/dnssec_aware\n@desc Get DNS queries by DNSSEC awareness summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NOT_SUPPORTED: str, SUPPORTED: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/dnssec_e2e\n@desc Get DNS queries by DNSSEC end-to-end summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NEGATIVE: str, POSITIVE: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/ip_version\n@desc Get DNS queries by IP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{IPv4: str, IPv6: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/matching_answer\n@desc Get DNS queries by matching answer summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NEGATIVE: str, POSITIVE: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/protocol\n@desc Get DNS queries by protocol summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{HTTPS: str, TCP: str, TLS: str, UDP: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/query_type\n@desc Get DNS queries by type summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/response_code\n@desc Get DNS queries by response code summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/response_ttl\n@desc Get DNS queries by response TTL summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{gt_15m_lte_1h: str, gt_1d_lte_1w: str, gt_1h_lte_1d: str, gt_1m_lte_5m: str, gt_1w: str, gt_5m_lte_15m: str, lte_1m: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/summary/{dimension}\n@desc Get DNS summary by dimension\n@required {dimension: str(AS/CACHE_HIT/DNSSEC/DNSSEC_AWARE/DNSSEC_E2E/IP_VERSION/LOCATION/MATCHING_ANSWER/PROTOCOL/QUERY_TYPE/RESPONSE_CODE/RESPONSE_TTL/TLD/TLD_DNS_MAGNITUDE) # Specifies the attribute by which to group the results. Grouping by `TLD_DNS_MAGNITUDE` does not support sub-daily aggregation intervals; `15m` and `1h` are raised to `1d`.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., cacheHit: [bool] # Filters results based on cache status., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., protocol: [str] # Filters results by DNS transport protocol., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., responseTtl: [str] # Filters results by DNS response TTL., dnssec: [str] # Filters results based on DNSSEC (DNS Security Extensions) support., dnssecAware: [str] # Filters results based on DNSSEC (DNS Security Extensions) client awareness., dnssecE2e: [bool] # Filters results based on DNSSEC-validated answers by end-to-end security status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., matchingAnswer: [bool] # Filters results based on whether the queries have a matching answer., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries\n@desc Get DNS queries time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., cacheHit: [bool] # Filters results based on cache status., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., protocol: [str] # Filters results by DNS transport protocol., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., responseTtl: [str] # Filters results by DNS response TTL., dnssec: [str] # Filters results based on DNSSEC (DNS Security Extensions) support., dnssecAware: [str] # Filters results based on DNSSEC (DNS Security Extensions) client awareness., dnssecE2e: [bool] # Filters results based on DNSSEC-validated answers by end-to-end security status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., matchingAnswer: [bool] # Filters results based on whether the queries have a matching answer., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/cache_hit\n@desc Get DNS queries by cache status time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NEGATIVE: [str], POSITIVE: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/dnssec\n@desc Get DNS queries by DNSSEC support time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{INSECURE: [str], INVALID: [str], OTHER: [str], SECURE: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/dnssec_aware\n@desc Get DNS queries by DNSSEC awareness time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NOT_SUPPORTED: [str], SUPPORTED: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/dnssec_e2e\n@desc Get DNS queries by DNSSEC end-to-end time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NEGATIVE: [str], POSITIVE: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/ip_version\n@desc Get DNS queries by IP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{IPv4: [str], IPv6: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/matching_answer\n@desc Get DNS queries by matching answer time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NEGATIVE: [str], POSITIVE: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/protocol\n@desc Get DNS queries by protocol time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{HTTPS: [str], TCP: [str], TLS: [str], UDP: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/query_type\n@desc Get DNS queries by type time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/response_code\n@desc Get DNS queries by response code time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/response_ttl\n@desc Get DNS queries by response TTL time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., queryType: [str] # Filters results by DNS query type., protocol: [str] # Filters results by DNS transport protocol., responseCode: [str] # Filters results by DNS response code., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{gt_15m_lte_1h: [str], gt_1d_lte_1w: [str], gt_1h_lte_1d: [str], gt_1m_lte_5m: [str], gt_1w: [str], gt_5m_lte_15m: [str], lte_1m: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/timeseries_groups/{dimension}\n@desc Get DNS time series grouped by dimension\n@required {dimension: str(AS/CACHE_HIT/DNSSEC/DNSSEC_AWARE/DNSSEC_E2E/IP_VERSION/LOCATION/MATCHING_ANSWER/PROTOCOL/QUERY_TYPE/RESPONSE_CODE/RESPONSE_TTL/TLD/TLD_DNS_MAGNITUDE) # Specifies the attribute by which to group the results. Grouping by `TLD_DNS_MAGNITUDE` does not support sub-daily aggregation intervals; `15m` and `1h` are raised to `1d`.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., cacheHit: [bool] # Filters results based on cache status., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., protocol: [str] # Filters results by DNS transport protocol., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., responseTtl: [str] # Filters results by DNS response TTL., dnssec: [str] # Filters results based on DNSSEC (DNS Security Extensions) support., dnssecAware: [str] # Filters results based on DNSSEC (DNS Security Extensions) client awareness., dnssecE2e: [bool] # Filters results based on DNSSEC-validated answers by end-to-end security status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., matchingAnswer: [bool] # Filters results based on whether the queries have a matching answer., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., normalization: str(PERCENTAGE/MIN0_MAX/RANK)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `RANK` is only meaningful with the `TLD_DNS_MAGNITUDE` dimension, where it ranks TLDs by DNS query magnitude at each timestamp; for other dimensions it has no effect., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/dns/top/ases\n@desc Get top ASes by DNS queries\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., domain: [str] # Filters results by domain name. When set, no other DNS filter may be used — only date filtering (`dateRange`, or `dateStart`/`dateEnd`) is allowed — and the date range cannot exceed 31 days., cacheHit: [bool] # Filters results based on cache status., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., protocol: [str] # Filters results by DNS transport protocol., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., responseTtl: [str] # Filters results by DNS response TTL., dnssec: [str] # Filters results based on DNSSEC (DNS Security Extensions) support., dnssecAware: [str] # Filters results based on DNSSEC (DNS Security Extensions) client awareness., dnssecE2e: [bool] # Filters results based on DNSSEC-validated answers by end-to-end security status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., matchingAnswer: [bool] # Filters results based on whether the queries have a matching answer., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/dns/top/locations\n@desc Get top locations by DNS queries\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., domain: [str] # Filters results by domain name. When set, no other DNS filter may be used — only date filtering (`dateRange`, or `dateStart`/`dateEnd`) is allowed — and the date range cannot exceed 31 days., cacheHit: [bool] # Filters results based on cache status., nodata: [bool]=true # Specifies whether the response includes empty DNS responses (NODATA)., protocol: [str] # Filters results by DNS transport protocol., queryType: [str] # Filters results by DNS query type., responseCode: [str] # Filters results by DNS response code., responseTtl: [str] # Filters results by DNS response TTL., dnssec: [str] # Filters results based on DNSSEC (DNS Security Extensions) support., dnssecAware: [str] # Filters results based on DNSSEC (DNS Security Extensions) client awareness., dnssecE2e: [bool] # Filters results based on DNSSEC-validated answers by end-to-end security status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., matchingAnswer: [bool] # Filters results based on whether the queries have a matching answer., tld: [str] # Filters results by top-level domain. Incompatible with the `ipVersion`, `protocol`, `dnssecE2e`, `dnssecAware`, `responseTtl`, and `cacheHit` filters/dimensions; this restriction does not apply to country-code TLDs (2-letter, e.g. `uk`)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/email/routing/summary/arc\n@desc Get email ARC validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/summary/dkim\n@desc Get email DKIM validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/summary/dmarc\n@desc Get email DMARC validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/summary/encrypted\n@desc Get email encryption status summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{ENCRYPTED: str, NOT_ENCRYPTED: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/summary/ip_version\n@desc Get email IP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{IPv4: str, IPv6: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/summary/spf\n@desc Get email SPF validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/summary/{dimension}\n@desc Get email routing summary by dimension\n@required {dimension: str(IP_VERSION/ENCRYPTED/ARC/DKIM/DMARC/SPF) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/timeseries_groups/arc\n@desc Get email ARC validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/timeseries_groups/dkim\n@desc Get email DKIM validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/timeseries_groups/dmarc\n@desc Get email DMARC validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/timeseries_groups/encrypted\n@desc Get email encryption status time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{ENCRYPTED: [str], NOT_ENCRYPTED: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/timeseries_groups/ip_version\n@desc Get email IP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{IPv4: [str], IPv6: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/timeseries_groups/spf\n@desc Get email SPF validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/routing/timeseries_groups/{dimension}\n@desc Get email routing time series grouped by dimension\n@required {dimension: str(IP_VERSION/ENCRYPTED/ARC/DKIM/DMARC/SPF) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., encrypted: [str] # Filters results by encryption status (encrypted vs. not-encrypted)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/arc\n@desc Get email ARC validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/dkim\n@desc Get email DKIM validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/dmarc\n@desc Get email DMARC validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/malicious\n@desc Get email malicious classification summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{MALICIOUS: str, NOT_MALICIOUS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/spam\n@desc Get email spam classification summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NOT_SPAM: str, SPAM: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/spf\n@desc Get email SPF validation summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{FAIL: str, NONE: str, PASS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/spoof\n@desc Get email spoof classification summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NOT_SPOOF: str, SPOOF: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/threat_category\n@desc Get email threat category summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{BrandImpersonation: str, CredentialHarvester: str, IdentityDeception: str, Link: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/tls_version\n@desc Get email TLS version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{TLS 1.0: str, TLS 1.1: str, TLS 1.2: str, TLS 1.3: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/summary/{dimension}\n@desc Get email security summary by dimension\n@required {dimension: str(SPAM/MALICIOUS/SPOOF/THREAT_CATEGORY/ARC/DKIM/DMARC/SPF/TLS_VERSION) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/arc\n@desc Get email ARC validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/dkim\n@desc Get email DKIM validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/dmarc\n@desc Get email DMARC validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/malicious\n@desc Get email malicious classification time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{MALICIOUS: [str], NOT_MALICIOUS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/spam\n@desc Get email spam classification time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NOT_SPAM: [str], SPAM: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/spf\n@desc Get email SPF validation time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{FAIL: [str], NONE: [str], PASS: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/spoof\n@desc Get email spoof classification time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NOT_SPOOF: [str], SPOOF: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/threat_category\n@desc Get email threat category time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{BrandImpersonation: [str], CredentialHarvester: [str], IdentityDeception: [str], Link: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/tls_version\n@desc Get email TLS version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{TLS 1.0: [str], TLS 1.1: [str], TLS 1.2: [str], TLS 1.3: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/timeseries_groups/{dimension}\n@desc Get email security time series grouped by dimension\n@required {dimension: str(SPAM/MALICIOUS/SPOOF/THREAT_CATEGORY/ARC/DKIM/DMARC/SPF/TLS_VERSION) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/email/security/top/tlds\n@desc Get top TLDs by email message volume\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., tldCategory: str(CLASSIC/COUNTRY) # Filters results by TLD category., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/email/security/top/tlds/malicious/{malicious}\n@desc Get top TLDs by email malicious classification\n@required {malicious: str(MALICIOUS/NOT_MALICIOUS) # Malicious classification.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., tldCategory: str(CLASSIC/COUNTRY) # Filters results by TLD category., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/email/security/top/tlds/spam/{spam}\n@desc Get top TLDs by email spam classification\n@required {spam: str(SPAM/NOT_SPAM) # Spam classification.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., tldCategory: str(CLASSIC/COUNTRY) # Filters results by TLD category., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/email/security/top/tlds/spoof/{spoof}\n@desc Get top TLDs by email spoof classification\n@required {spoof: str(SPOOF/NOT_SPOOF) # Spoof classification.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., arc: [str] # Filters results by ARC (Authenticated Received Chain) validation., dkim: [str] # Filters results by DKIM (DomainKeys Identified Mail) validation status., dmarc: [str] # Filters results by DMARC (Domain-based Message Authentication, Reporting and Conformance) validation status., spf: [str] # Filters results by SPF (Sender Policy Framework) validation status., tlsVersion: [str] # Filters results by TLS version., tldCategory: str(CLASSIC/COUNTRY) # Filters results by TLD category., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/entities/asns\n@desc List autonomous systems\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., asn: str # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list., location: str # Filters results by location. Specify an alpha-2 location code., orderBy: str(ASN/POPULATION)=ASN # Specifies the metric to order the ASNs by., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asns: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/entities/asns/botnet_threat_feed\n@desc Get AS rankings by botnet threat feed activity\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., metric: str(OFFENSE_COUNT/NUMBER_OF_OFFENDING_IPS)=NUMBER_OF_OFFENDING_IPS # Metric to rank ASNs by., date: str(date) # The date to retrieve (YYYY-MM-DD format). If not specified, returns the most recent available data. Note: This is the date the report was generated. The report is generated from information collected from the previous day (e.g., the 2026-02-23 entry contains data from 2026-02-22)., compareDateRange: str # Relative date range for rank change comparison (e.g., \"1d\", \"7d\", \"30d\")., location: str # Filters results by location. Specify an alpha-2 location code., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., sortOrder: str(ASC/DESC) # Sort order., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{ases: [map], meta: map{compareDate: str, date: str, total: int}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/entities/asns/ip\n@desc Get AS details by IP address\n@required {ip: any # IP address.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asn: map{aka: str, asn: int, country: str, countryName: str, estimatedUsers: map{estimatedUsers: int, locations: [map]}, name: str, orgName: str, related: [map], source: str, website: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/entities/asns/{asn}\n@desc Get AS details by ASN\n@required {asn: int # Single Autonomous System Number (ASN) as integer.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{asn: map{aka: str, asn: int, confidenceLevel: int, country: str, countryName: str, estimatedUsers: map{estimatedUsers: int, locations: [map]}, name: str, orgName: str, related: [map], source: str, website: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/entities/asns/{asn}/as_set\n@desc Get IRR AS-SETs that an AS is a member of\n@required {asn: int # Retrieves all AS-SETs that the given AS is a member of.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{as_sets: [map], paths: [[str]]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/entities/asns/{asn}/rel\n@desc Get AS-level relationships by ASN\n@required {asn: int # Retrieves all ASNs with provider-customer or peering relationships with the given ASN.}\n@optional {asn2: int # Retrieves the AS relationship of ASN2 with respect to the given ASN., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{data_time: str, query_time: str, total_peers: int}, rels: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/entities/ip\n@desc Get IP address details\n@required {ip: any # IP address.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{ip: map{asn: str, asnLocation: str, asnName: str, asnOrgName: str, ip: str, ipVersion: str, location: str, locationName: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/entities/locations\n@desc List locations\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., location: str # Filters results by location. Specify a comma-separated list of alpha-2 location codes., region: str # Filters results by region., subregion: str # Filters results by subregion., continent: str(AF/AS/EU/NA/OC/SA) # Filters results by continent code., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{locations: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/entities/locations/{location}\n@desc Get location details\n@required {location: str # Location alpha-2 code.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{location: map{alpha2: str, confidenceLevel: int, continent: str, latitude: str, longitude: str, name: str, region: str, subregion: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/geolocations\n@desc List Geolocations\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., geoId: str # Filters results by geolocation. Specify a comma-separated list of GeoNames IDs., location: str # Filters results by location. Specify a comma-separated list of alpha-2 location codes., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{geolocations: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/geolocations/{geo_id}\n@desc Get Geolocation details\n@required {geo_id: str # Geolocation ID. Refer to [GeoNames](https://download.geonames.org/export/dump/readme.txt)}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{geolocation: map{code: str, geoId: str, latitude: str, locale: str, longitude: str, name: str, parent: map{code: str, geoId: str, latitude: str, locale: str, longitude: str, name: str, parent: map, type: str}, type: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/summary/bot_class\n@desc Get HTTP requests by bot class summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{bot: str, human: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/device_type\n@desc Get HTTP requests by device type summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{desktop: str, mobile: str, other: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/http_protocol\n@desc Get HTTP requests by HTTP/HTTPS summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{http: str, https: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/http_version\n@desc Get HTTP requests by HTTP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{HTTP/1.x: str, HTTP/2: str, HTTP/3: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/ip_version\n@desc Get HTTP requests by IP version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{IPv4: str, IPv6: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/os\n@desc Get HTTP requests by OS summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{ANDROID: str, IOS: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/post_quantum\n@desc Get HTTP requests by post-quantum support summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{NOT_SUPPORTED: str, SUPPORTED: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/tls_version\n@desc Get HTTP requests by TLS version summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{TLS 1.0: str, TLS 1.1: str, TLS 1.2: str, TLS 1.3: str, TLS QUIC: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/summary/{dimension}\n@desc Get HTTP requests summary by dimension\n@required {dimension: str(ADM1/API_TRAFFIC/AS/BOT_CLASS/BROWSER/BROWSER_FAMILY/CONTENT_TYPE/DEVICE_TYPE/HTTP_PROTOCOL/HTTP_VERSION/IP_VERSION/LOCATION/OS/POST_QUANTUM/TLS_VERSION) # Specifies the HTTP attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., apiTraffic: [str] # Filters results by API traffic classification. API traffic is identified by JSON or XML response content types on dynamic (non-cacheable) HTTP requests. Incompatible with the `browserFamily`, `deviceType`, `httpProtocol`, `httpVersion`, `ipVersion`, `os`, and `tlsVersion` filters/dimensions. When set, results can only be further filtered by location, continent, or Autonomous System., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., contentType: [str] # Filters results by content type category. When set, results can only be further filtered by location, continent, or Autonomous System., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries\n@desc Get HTTP requests time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., normalization: str(PERCENTAGE_CHANGE/MIN0_MAX) # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., apiTraffic: [str] # Filters results by API traffic classification. API traffic is identified by JSON or XML response content types on dynamic (non-cacheable) HTTP requests. Incompatible with the `browserFamily`, `deviceType`, `httpProtocol`, `httpVersion`, `ipVersion`, `os`, and `tlsVersion` filters/dimensions. When set, results can only be further filtered by location, continent, or Autonomous System., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., contentType: [str] # Filters results by content type category. When set, results can only be further filtered by location, continent, or Autonomous System., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/bot_class\n@desc Get HTTP requests by bot class time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{bot: [str], human: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/browser\n@desc Get HTTP requests by user agent time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/browser_family\n@desc Get HTTP requests by user agent family time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/device_type\n@desc Get HTTP requests by device type time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{desktop: [str], mobile: [str], other: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/http_protocol\n@desc Get HTTP requests by HTTP/HTTPS time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{http: [str], https: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/http_version\n@desc Get HTTP requests by HTTP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{HTTP/1.x: [str], HTTP/2: [str], HTTP/3: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/ip_version\n@desc Get HTTP requests by IP version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{IPv4: [str], IPv6: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/os\n@desc Get HTTP requests by OS time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/post_quantum\n@desc Get HTTP requests by post-quantum support time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{NOT_SUPPORTED: [str], SUPPORTED: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/tls_version\n@desc Get HTTP requests by TLS version time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{TLS 1.0: [str], TLS 1.1: [str], TLS 1.2: [str], TLS 1.3: [str], TLS QUIC: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/timeseries_groups/{dimension}\n@desc Get HTTP requests time series grouped by dimension\n@required {dimension: str(ADM1/API_TRAFFIC/AS/BOT_CLASS/BROWSER/BROWSER_FAMILY/CONTENT_TYPE/DEVICE_TYPE/HTTP_PROTOCOL/HTTP_VERSION/IP_VERSION/LOCATION/OS/POST_QUANTUM/TLS_VERSION) # Specifies the HTTP attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., apiTraffic: [str] # Filters results by API traffic classification. API traffic is identified by JSON or XML response content types on dynamic (non-cacheable) HTTP requests. Incompatible with the `browserFamily`, `deviceType`, `httpProtocol`, `httpVersion`, `ipVersion`, `os`, and `tlsVersion` filters/dimensions. When set, results can only be further filtered by location, continent, or Autonomous System., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., contentType: [str] # Filters results by content type category. When set, results can only be further filtered by location, continent, or Autonomous System., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/http/top/ases\n@desc Get top ASes by HTTP requests\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/bot_class/{bot_class}\n@desc Get top ASes by HTTP requests for a bot class\n@required {bot_class: str(LIKELY_AUTOMATED/LIKELY_HUMAN) # Bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/browser_family/{browser_family}\n@desc Get top ASes by HTTP requests for a browser family\n@required {browser_family: str(CHROME/EDGE/FIREFOX/SAFARI) # Browser family.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/device_type/{device_type}\n@desc Get top ASes by HTTP requests for a device type\n@required {device_type: str(DESKTOP/MOBILE/OTHER) # Device type.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/http_protocol/{http_protocol}\n@desc Get top ASes by HTTP requests for an HTTP protocol\n@required {http_protocol: str(HTTP/HTTPS) # HTTP protocol (HTTP vs. HTTPS).}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/http_version/{http_version}\n@desc Get top ASes by HTTP requests for an HTTP version\n@required {http_version: str(HTTPv1/HTTPv2/HTTPv3) # HTTP version.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/ip_version/{ip_version}\n@desc Get top ASes by HTTP requests for an IP version\n@required {ip_version: str(IPv4/IPv6) # IP version.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/os/{os}\n@desc Get top ASes by HTTP requests for an OS\n@required {os: str(WINDOWS/MACOSX/IOS/ANDROID/CHROMEOS/LINUX/SMART_TV) # Operating system.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/ases/tls_version/{tls_version}\n@desc Get top ASes by HTTP requests for a TLS version\n@required {tls_version: str(TLSv1_0/TLSv1_1/TLSv1_2/TLSv1_3/TLSvQUIC) # TLS version.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/browser\n@desc Get top user agents by HTTP requests\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/browser_family\n@desc Get top user agent families by HTTP requests\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations\n@desc Get top locations by HTTP requests\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/bot_class/{bot_class}\n@desc Get top locations by HTTP requests for a bot class\n@required {bot_class: str(LIKELY_AUTOMATED/LIKELY_HUMAN) # Bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/browser_family/{browser_family}\n@desc Get top locations by HTTP requests for a browser family\n@required {browser_family: str(CHROME/EDGE/FIREFOX/SAFARI) # Browser family.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/device_type/{device_type}\n@desc Get top locations by HTTP requests for a device type\n@required {device_type: str(DESKTOP/MOBILE/OTHER) # Device type.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/http_protocol/{http_protocol}\n@desc Get top locations by HTTP requests for an HTTP protocol\n@required {http_protocol: str(HTTP/HTTPS) # HTTP protocol (HTTP vs. HTTPS).}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/http_version/{http_version}\n@desc Get top locations by HTTP requests for an HTTP version\n@required {http_version: str(HTTPv1/HTTPv2/HTTPv3) # HTTP version.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/ip_version/{ip_version}\n@desc Get top locations by HTTP requests for an IP version\n@required {ip_version: str(IPv4/IPv6) # IP version.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., os: [str] # Filters results by operating system., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/os/{os}\n@desc Get top locations by HTTP requests for an OS\n@required {os: str(WINDOWS/MACOSX/IOS/ANDROID/CHROMEOS/LINUX/SMART_TV) # Operating system.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., tlsVersion: [str] # Filters results by TLS version., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/http/top/locations/tls_version/{tls_version}\n@desc Get top locations by HTTP requests for a TLS version\n@required {tls_version: str(TLSv1_0/TLSv1_1/TLSv1_2/TLSv1_3/TLSvQUIC) # TLS version.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., deviceType: [str] # Filters results by device type., httpProtocol: [str] # Filters results by HTTP protocol (HTTP vs. HTTPS)., httpVersion: [str] # Filters results by HTTP version., ipVersion: [str] # Filters results by IP version (Ipv4 vs. IPv6)., os: [str] # Filters results by operating system., browserFamily: [str] # Filters results by browser family., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/leaked_credential_checks/summary/bot_class\n@desc Get HTTP authentication requests by bot class summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., compromised: [str] # Filters results by compromised credential status (clean vs. compromised)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{bot: str, human: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/leaked_credential_checks/summary/compromised\n@desc Get HTTP authentication requests by compromised credential status summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{CLEAN: str, COMPROMISED: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/leaked_credential_checks/summary/{dimension}\n@desc Get HTTP authentication requests distribution by dimension\n@required {dimension: str(COMPROMISED/BOT_CLASS) # Specifies the attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., compromised: [str] # Filters results by compromised credential status (clean vs. compromised)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/leaked_credential_checks/timeseries_groups/bot_class\n@desc Get HTTP authentication requests by bot class time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., compromised: [str] # Filters results by compromised credential status (clean vs. compromised)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{bot: [str], human: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/leaked_credential_checks/timeseries_groups/compromised\n@desc Get HTTP authentication requests by compromised credential status time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{CLEAN: [str], COMPROMISED: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/leaked_credential_checks/timeseries_groups/{dimension}\n@desc Get time series distribution of HTTP authentication requests by dimension.\n@required {dimension: str(COMPROMISED/BOT_CLASS) # Specifies the attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., botClass: [str] # Filters results by bot class. Refer to [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/)., compromised: [str] # Filters results by compromised credential status (clean vs. compromised)., checkResult: [str] # Filters results by leaked credential check result., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., normalization: str(PERCENTAGE_CHANGE/MIN0_MAX) # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/netflows/summary\n@desc Get network traffic summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{HTTP: str, OTHER: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/netflows/summary/{dimension}\n@desc Get network traffic distribution by dimension\n@required {dimension: str(ADM1/AS/LOCATION/PRODUCT) # Specifies the NetFlows attribute by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., product: [str] # Filters the results by network traffic product types., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/netflows/timeseries\n@desc Get network traffic time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., product: [str] # Filters the results by network traffic product types., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., normalization: str(PERCENTAGE_CHANGE/MIN0_MAX) # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)], values: [str]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/netflows/timeseries_groups/{dimension}\n@desc Get time series distribution of network traffic by dimension\n@required {dimension: str(ADM1/AS/LOCATION/PRODUCT) # Specifies the NetFlows attribute by which to group the results.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., normalization: str(PERCENTAGE/MIN0_MAX/PERCENTAGE_CHANGE)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/). `PERCENTAGE_CHANGE` requires exactly one comparison series (e.g. a `control` date range)., product: [str] # Filters the results by network traffic product types., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/netflows/top/ases\n@desc Get top ASes by network traffic\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/netflows/top/locations\n@desc Get top locations by network traffic\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., geoId: [str] # Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs. Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689` excludes results from the 2267056 (Lisbon), but includes results from 5128638 (New York)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/origins\n@desc List Origins\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{origins: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/origins/summary/{dimension}\n@desc Get origin metrics distribution by dimension\n@required {dimension: str(ORIGIN/REGION/SUCCESS_RATE/PERCENTILE) # Specifies the origin attribute by which to group the results. `ORIGIN` groups across all providers and does not accept an `origin` or `region`. `REGION` requires an `origin`. `SUCCESS_RATE` and `PERCENTILE` require both an `origin` and a `region` and constrain the `metric` (`SUCCESS_RATE` supports only `REQUESTS`; `PERCENTILE` supports any metric except `REQUESTS`). `limitPerGroup` is only supported on the `REGION` dimension., metric: str(CONNECTION_FAILURES/REQUESTS/RESPONSE_HEADER_RECEIVE_DURATION/TCP_HANDSHAKE_DURATION/TCP_RTT/TLS_HANDSHAKE_DURATION) # Specifies the metric to retrieve. Allowed metrics depend on the selected dimension (see the `dimension` path parameter).}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., origin: [str] # Filters results by origin. Required for every dimension except `ORIGIN`; must not be set on the `ORIGIN` dimension, which groups across all providers., region: [str] # Filters results by origin region. Requires `origin` to be set and is validated against it., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/origins/timeseries\n@desc Get origin metrics time series\n@required {origin: [str] # Filters results by origin., metric: str(CONNECTION_FAILURES/REQUESTS/RESPONSE_HEADER_RECEIVE_DURATION/TCP_HANDSHAKE_DURATION/TCP_RTT/TLS_HANDSHAKE_DURATION) # Specifies the metric to retrieve. Without a `region`, only `REQUESTS` or `CONNECTION_FAILURES` are available; specify a `region` to use the latency metrics.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., region: [str] # Filters results by origin region. Requires `origin` to be set and is validated against it., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/origins/timeseries_groups/{dimension}\n@desc Get origin metrics time series grouped by dimension\n@required {dimension: str(ORIGIN/REGION/SUCCESS_RATE/PERCENTILE) # Specifies the origin attribute by which to group the results. `ORIGIN` groups across all providers and does not accept an `origin` or `region`. `REGION` requires an `origin`. `SUCCESS_RATE` and `PERCENTILE` require both an `origin` and a `region` and constrain the `metric` (`SUCCESS_RATE` supports only `REQUESTS`; `PERCENTILE` supports any metric except `REQUESTS`). `limitPerGroup` is only supported on the `REGION` dimension., metric: str(CONNECTION_FAILURES/REQUESTS/RESPONSE_HEADER_RECEIVE_DURATION/TCP_HANDSHAKE_DURATION/TCP_RTT/TLS_HANDSHAKE_DURATION) # Specifies the metric to retrieve. Allowed metrics depend on the selected dimension (see the `dimension` path parameter).}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., origin: [str] # Filters results by origin. Required for every dimension except `ORIGIN`; must not be set on the `ORIGIN` dimension, which groups across all providers., region: [str] # Filters results by origin region. Requires `origin` to be set and is validated against it., normalization: str(PERCENTAGE/MIN0_MAX)=PERCENTAGE # Normalization method applied to the results. Refer to [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/origins/{slug}\n@desc Get Origin details\n@required {slug: str(AMAZON/GOOGLE/MICROSOFT/ORACLE) # Origin slug.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{origin: map{regions: [map], slug: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/post_quantum/origin/summary/{dimension}\n@desc Get Origin Post-Quantum Data Summary\n@required {dimension: str # Specifies the origin post-quantum data dimension by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/post_quantum/origin/timeseries_groups/{dimension}\n@desc Get Origin Post-Quantum Data Over Time\n@required {dimension: str # Specifies the origin post-quantum data dimension by which to group the results.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/post_quantum/tls/support\n@desc Check Post-Quantum TLS support\n@required {host: str # Hostname or IP address to test for Post-Quantum TLS support, optionally with port (defaults to 443).}\n@returns(200) {result: map{bugs: map{hrrFailure: bool, splitClientHello: bool, unknownKeyshare: bool}, host: str, kex: num, kexName: str, pq: bool}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/quality/iqi/summary\n@desc Get Internet Quality Index (IQI) summary\n@required {metric: str(BANDWIDTH/DNS/LATENCY) # Defines which metric to return (bandwidth, latency, or DNS response time).}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{p25: str, p50: str, p75: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/quality/iqi/timeseries_groups\n@desc Get Internet Quality Index (IQI) time series\n@required {metric: str(BANDWIDTH/DNS/LATENCY) # Defines which metric to return (bandwidth, latency, or DNS response time).}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., interpolation: bool # Enables interpolation for all series (using the average)., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/quality/speed/histogram\n@desc Get speed tests histogram\n@optional {name: [str] # Array of names used to label the series in the response., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., bucketSize: int # Specifies the width for every bucket in the histogram., metricGroup: str(BANDWIDTH/LATENCY/JITTER)=bandwidth # Metrics to be returned., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{histogram_0: map{bandwidthDownload: [str], bandwidthUpload: [str], bucketMin: [str]}, meta: map{bucketSize: int, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, totalTests: [int], units: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/quality/speed/summary\n@desc Get speed tests summary\n@optional {name: [str] # Array of names used to label the series in the response., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{bandwidthDownload: str, bandwidthUpload: str, jitterIdle: str, jitterLoaded: str, latencyIdle: str, latencyLoaded: str, packetLoss: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/quality/speed/top/ases\n@desc Get top ASes by speed test results\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., orderBy: str(BANDWIDTH_DOWNLOAD/BANDWIDTH_UPLOAD/LATENCY_IDLE/LATENCY_LOADED/JITTER_IDLE/JITTER_LOADED)=BANDWIDTH_DOWNLOAD # Specifies the metric to order the results by., reverse: bool # Reverses the order of results., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/quality/speed/top/locations\n@desc Get top locations by speed test results\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., orderBy: str(BANDWIDTH_DOWNLOAD/BANDWIDTH_UPLOAD/LATENCY_IDLE/LATENCY_LOADED/JITTER_IDLE/JITTER_LOADED)=BANDWIDTH_DOWNLOAD # Specifies the metric to order the results by., reverse: bool # Reverses the order of results., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/ranking/domain/{domain}\n@desc Get domain rank details\n@required {domain: str # Domain name.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., rankingType: str(POPULAR/TRENDING_RISE/TRENDING_STEADY)=POPULAR # The ranking type., name: [str] # Array of names used to label the series in the response., includeTopLocations: bool # Includes top locations in the response., date: [str(date)] # Filters results by the specified array of dates., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{details_0: map{bucket: str, categories: [map], rank: int, top_locations: [map]}, meta: map{dateRange: [map]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ranking/internet_services/categories\n@desc List Internet services categories\n@optional {limit: int # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., date: [str(date)] # Filters results by the specified array of dates., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{categories_0: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ranking/internet_services/timeseries_groups\n@desc Get Internet services rank time series\n@optional {serviceCategory: [str] # Filters results by Internet service category., limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ranking/internet_services/top\n@desc Get top Internet services\n@optional {serviceCategory: [str] # Filters results by Internet service category., limit: int # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., date: [str(date)] # Filters results by the specified array of dates., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, top_0: map{date: str(date), serviceCategory: str}, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ranking/timeseries_groups\n@desc Get domains rank time series\n@optional {limit: int=5 # Limits the number of objects returned in the response., rankingType: str(POPULAR/TRENDING_RISE/TRENDING_STEADY)=POPULAR # The ranking type., name: [str] # Array of names used to label the series in the response., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 location codes., domains: [str] # Filters results by domain name. Specify a comma-separated list of domain names., domainCategory: [str] # Filters results by domain category., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/ranking/top\n@desc Get top or trending domains\n@optional {limit: int # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 location codes., domainCategory: [str] # Filters results by domain category., date: [str(date)] # Filters results by the specified array of dates., rankingType: str(POPULAR/TRENDING_RISE/TRENDING_STEADY)=POPULAR # The ranking type., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, top_0: map{date: str(date)}, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/robots_txt/top/domain_categories\n@desc Get top domain categories by robots.txt files parsed\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., userAgentCategory: str=AI # Filters results by user agent category., date: [str(date)] # Filters results by the specified array of dates., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/robots_txt/top/user_agents/directive\n@desc Get top user agents on robots.txt files\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., userAgentCategory: str=AI # Filters results by user agent category., date: [str(date)] # Filters results by the specified array of dates., domainCategory: [str] # Filters results by domain category., directive: str(ALLOW/DISALLOW) # Filters results by robots.txt directive., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/search/global\n@desc Search for locations, ASes, reports, and more\n@required {query: str # String used to perform the search operation.}\n@optional {limit: int=5 # Limits the number of objects returned in the response., limitPerGroup: num # Limits the number of objects per search category., include: [str] # Search types included in results., exclude: [str] # Search types excluded from results., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{search: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/tcp_resets_timeouts/summary\n@desc Get TCP resets and timeouts summary\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map{later_in_flow: str, no_match: str, post_ack: str, post_psh: str, post_syn: str}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/tcp_resets_timeouts/timeseries_groups\n@desc Get TCP resets and timeouts time series\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{later_in_flow: [str], no_match: [str], post_ack: [str], post_psh: [str], post_syn: [str], timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/tlds\n@desc List TLDs\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., tldManager: str # Filters results by TLD manager., tldType: str(GENERIC/COUNTRY_CODE/GENERIC_RESTRICTED/INFRASTRUCTURE/SPONSORED) # Filters results by TLD type., tld: str # Filters results by top-level domain. Specify a comma-separated list of TLDs., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{tlds: [map]}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/tlds/performance/summary/{dimension}\n@desc Get TLD Performance Summary\n@required {dimension: str(LATENCY/NAMESERVER_LATENCY/LOCATION_LATENCY) # Dimension to summarize TLD nameserver latency by.}\n@optional {name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain., nameserver: str # Filters results by nameserver hostname., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, summary_0: map}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/tlds/performance/timeseries_groups/{dimension}\n@desc Get TLD Performance Over Time\n@required {dimension: str(LATENCY/NAMESERVER_LATENCY/LOCATION_LATENCY) # Dimension for the TLD nameserver latency timeseries.}\n@optional {aggInterval: str(15m/1h/1d/1w) # Aggregation interval of the results (e.g., in 15 minutes or 1 hour intervals). Refer to [Aggregation intervals](https://developers.cloudflare.com/radar/concepts/aggregation-intervals/). When omitted, the interval is auto-selected from the requested date range; finer intervals are only available for shorter ranges. If the requested interval is too granular for the date range, the request is rejected., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., tld: [str] # Filters results by top-level domain., nameserver: str # Filters results by nameserver hostname., limitPerGroup: int # Limits the number of objects per group to the top items within the specified time range. When item count exceeds the limit, extra items appear grouped under an \"other\" category. Only supported on high-cardinality dimensions; otherwise the request is rejected. Minimum value is 2., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{aggInterval: str, confidenceInfo: map{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, serie_0: map{timestamps: [str(date-time)]}}, success: bool} # Successful response.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/tlds/{tld}\n@desc Get TLD details\n@required {tld: str # Top-level domain.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{tld: map{manager: str, tld: str, type: str}}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/traffic_anomalies\n@desc Get latest Internet traffic anomalies\n@optional {limit: int=5 # Limits the number of objects returned in the response., offset: int # Skips the specified number of objects before fetching the results., dateRange: str # Filters results by a relative date range ending at the current time. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`), e.g. `7d`. Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `3dcontrol` covers days -10 to -7, `7dcontrol` covers days -14 to -7, `28dcontrol` covers days -56 to -28, and `10dcontrol` covers days -24 to -14). Mutually exclusive with `dateStart`/`dateEnd`., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., status: str(VERIFIED/UNVERIFIED), type: [str] # Filters results by entity type (LOCATION, AS, or ORIGIN)., dataSource: str(ALL/AI_BOTS/AI_GATEWAY/BGP/BOTS/CONNECTION_ANOMALY/CT/DNS/DNS_MAGNITUDE/DNS_AS112/DOS/EMAIL_ROUTING/EMAIL_SECURITY/FW/FW_PG/HTTP/HTTP_CONTROL/HTTP_CRAWLER_REFERER/HTTP_ORIGINS/IQI/LEAKED_CREDENTIALS/NET/ROBOTS_TXT/SPEED/WORKERS_AI) # Filters results by data source., asn: int # Filters results by Autonomous System. Specify a single Autonomous System Number (ASN) as integer., location: str # Filters results by location. Specify an alpha-2 location code., origin: str # Filters results by origin., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{trafficAnomalies: [map]}, success: bool} # List of Internet traffic anomalies.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/traffic_anomalies/locations\n@desc Get top locations by total traffic anomalies\n@optional {limit: int=5 # Limits the number of objects returned in the response., dateRange: str # Filters results by a relative date range ending at the current time. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`), e.g. `7d`. Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `3dcontrol` covers days -10 to -7, `7dcontrol` covers days -14 to -7, `28dcontrol` covers days -56 to -28, and `10dcontrol` covers days -24 to -14). Mutually exclusive with `dateStart`/`dateEnd`., dateStart: str(date-time) # Start of the date range (inclusive). Alternative to `dateRange`; provide together with `dateEnd`., dateEnd: str(date-time) # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`., status: str(VERIFIED/UNVERIFIED), format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{trafficAnomalies: [map]}, success: bool} # List of locations with number of traffic anomalies.\n@errors {400: Bad request.}\n\n@endpoint GET /radar/traffic_anomalies/{uuid}\n@desc Get traffic anomaly by UUID\n@required {uuid: str # Traffic anomaly UUID.}\n@optional {format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{trafficAnomaly: map{asnDetails: map?{asn: str, location: map?, name: str?}, endDate: str(date-time)?, locationDetails: map?{code: str, name: str}, originDetails: map?{name: str?, origin: str}, startDate: str(date-time), status: str, type: str, uuid: str, visibleInDataSources: [str]?}}, success: bool} # Internet traffic anomaly.\n@errors {404: Not found.}\n\n@endpoint GET /radar/verified_bots/top/bots\n@desc Get top verified bots by HTTP requests\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endpoint GET /radar/verified_bots/top/categories\n@desc Get top verified bot categories by HTTP requests\n@optional {limit: int=5 # Limits the number of objects returned in the response., name: [str] # Array of names used to label the series in the response., dateRange: [str] # Filters results by relative date range ending at the current time, with each value producing a separate series. Use `d` for days (up to `364d`) or `w` for weeks (up to `52w`). Append `control` to request the equivalent previous period for comparison: the comparison window is shifted back by the current window's length rounded up to a whole number of weeks, so it keeps the same weekday alignment and does not overlap the current window (e.g. `7dcontrol` covers days -14 to -7, `10dcontrol` covers days -24 to -14). For example, pass `7d` and `7dcontrol` to compare this week with the previous week. All series must resolve to the same duration as the main series; relative ranges (including `control`) satisfy this automatically. Use this parameter or set specific start and end dates (`dateStart` and `dateEnd` parameters)., dateStart: [str(date-time)] # Start of the date range. Alternative to `dateRange`; provide together with `dateEnd`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., dateEnd: [str(date-time)] # End of the date range (inclusive). Alternative to `dateRange`; provide together with `dateStart`. When requesting comparison series, every series must resolve to the same duration as the main series. Each `dateStart`/`dateEnd` is floored to the nearest 15 minutes before evaluation, so windows whose durations match only before alignment may be rejected., asn: [str] # Filters results by Autonomous System. Specify one or more Autonomous System Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from results. For example, `-174, 3356` excludes results from AS174, but includes results from AS3356., location: [str] # Filters results by location. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude locations from results. For example, `-US,PT` excludes results from the US, but includes results from PT., continent: [str] # Filters results by continent. Specify a comma-separated list of alpha-2 codes. Prefix with `-` to exclude continents from results. For example, `-EU,NA` excludes results from EU, but includes results from NA., format: str(JSON/CSV) # Format in which results will be returned.}\n@returns(200) {result: map{meta: map{confidenceInfo: map?{annotations: [map], level: int}, dateRange: [map], lastUpdated: str(date-time), normalization: str, units: [map]}, top_0: [map]}, success: bool} # Successful response.\n@errors {404: Not found.}\n\n@endgroup\n\n@group ready\n@endpoint GET /ready\n@desc Run readiness checks\n\n@endgroup\n\n@group signed-url\n@endpoint GET /signed-url\n@desc Internal route for testing signed URLs\n\n@endgroup\n\n@group tenants\n@endpoint GET /tenants/{tenant_id}\n@desc Get tenant\n@required {tenant_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{cdate: str(date-time), customer_id: str, edate: str(date-time), tenant_contacts: map{email: str, website: str}, tenant_labels: [str], tenant_metadata: map{dns: map{ns_pool: map}}, tenant_name: str, tenant_network: map, tenant_status: str, tenant_tag: str, tenant_type: str, tenant_units: [map]}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /tenants/{tenant_id}/account_types\n@desc Get tenant account types\n@required {tenant_id: str}\n@returns(200) {errors: [map], messages: [map], result: [str], success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /tenants/{tenant_id}/accounts\n@desc List tenant accounts\n@required {tenant_id: str}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /tenants/{tenant_id}/entitlements\n@desc List tenant entitlements\n@required {tenant_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{allow_add_subdomain: map{type: str, value: bool}, allow_auto_accept_invites: map{type: str, value: bool}, cname_setup_allowed: map{type: str, value: bool}, custom_entitlements: [map]?, mhs_certificate_count: map{type: str, value: int}, partial_setup_allowed: map{type: str, value: bool}}, success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /tenants/{tenant_id}/memberships\n@desc List tenant memberships\n@required {tenant_id: str}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /tenants/{tenant_tag}/custom_ns\n@desc List Tenant Custom Nameservers\n@required {tenant_tag: str}\n@returns(200) List Tenant Custom Nameservers response.\n@errors {4XX: List Tenant Custom Nameservers response failure.}\n\n@endpoint POST /tenants/{tenant_tag}/custom_ns\n@desc Add Tenant Custom Nameserver\n@required {tenant_tag: str, ns_name: str(hostname) # The FQDN of the name server.}\n@optional {ns_set: num=1 # The number of the set that this name server belongs to.}\n@returns(200) Add Tenant Custom Nameserver response.\n@errors {4XX: Add Tenant Custom Nameserver response failure.}\n\n@endpoint DELETE /tenants/{tenant_tag}/custom_ns/{custom_ns_id}\n@desc Delete Tenant Custom Nameserver\n@required {custom_ns_id: str(hostname), tenant_tag: str}\n@returns(200) Delete Tenant Custom Nameserver response.\n@errors {4XX: Delete Tenant Custom Nameserver response failure.}\n\n@endgroup\n\n@group user\n@endpoint GET /user\n@desc User Details\n@returns(200) User Details response\n@errors {4XX: User Details response failure}\n\n@endpoint PATCH /user\n@desc Edit User\n@optional {country: str # The country in which the user lives., first_name: str # User's first name, last_name: str # User's last name, telephone: str # User's telephone number, zipcode: str # The zipcode or postal code where the user lives.}\n@returns(200) Edit User response\n@errors {4XX: Edit User response failure}\n\n@endpoint GET /user/analytics/dashboard\n@desc Get user analytics dashboard\n@optional {since: any, until: any, continuous: bool=true}\n@returns(200) Get user analytics dashboard response\n@errors {4XX: Get user analytics dashboard response failure}\n\n@endpoint GET /user/audit_logs\n@desc Get user audit logs\n@optional {id: str, export: bool, action.type: str, actor.ip: str, actor.email: str(email), since: any, before: any, zone.name: str, direction: str(desc/asc)=desc, per_page: num=100, page: num=1, hide_user_logs: bool=false}\n@returns(200) Get user audit logs response\n@errors {4XX: Get user audit logs response failure}\n\n@endpoint GET /user/billing/history\n@desc Billing History Details\n@optional {page: num=1, per_page: num=20, order: str(type/occurred_at/action), occurred_at: str(date-time), type: str, action: str}\n@returns(200) Billing History Details response\n@errors {4XX: Billing History Details response failure}\n\n@endpoint GET /user/billing/profile\n@desc Billing Profile Details\n@returns(200) Billing Profile Details response\n@errors {4XX: Billing Profile Details response failure}\n\n@endpoint GET /user/communication_preferences\n@desc Get communication preferences\n@returns(200) {errors: [map], messages: [map], result: map{created_on: str(date-time), email: map{hard_bounce: bool, verified: bool}, language-locale: str, preferences: map, updated_on: str(date-time)}, success: bool} # Successfully retrieved communication preferences.\n@errors {400: The request contains invalid parameters., 401: The request lacks valid authentication credentials., 403: The authenticated user does not own the requested resource., 404: The requested user identity does not exist., 500: The server encountered an unexpected error.}\n\n@endpoint PUT /user/communication_preferences\n@desc Update communication preferences\n@optional {language-locale: str(en-US/es-ES/de-DE/fr-FR/it-IT/ja-JP/ko-KR/pt-BR/zh-CN/zh-TW) # The user's preferred language locale for communications. If omitted, the language locale does not change., preferences: map # Preference keys mapped to subscription states to update. Only the preferences in this map change; others remain unchanged.}\n@returns(200) {errors: [map], messages: [map], result: map{created_on: str(date-time), email: map{hard_bounce: bool, verified: bool}, language-locale: str, preferences: map, updated_on: str(date-time)}, success: bool} # Successfully updated communication preferences.\n@errors {400: The request contains invalid parameters or body., 401: The request lacks valid authentication credentials., 403: The authenticated user does not own the requested resource., 404: The requested user identity does not exist., 500: The server encountered an unexpected error.}\n@example_request {\"language-locale\":\"es-ES\",\"preferences\":{\"marketing\":{\"subscribed\":true},\"product_news\":{\"subscribed\":true}}}\n\n@endpoint GET /user/firewall/access_rules/rules\n@desc List IP Access rules\n@optional {mode: str, configuration.target: str(ip/ip_range/asn/country), configuration.value: str, notes: str, match: str(any/all)=all, page: num, per_page: num, order: str(configuration.target/configuration.value/mode), direction: str(asc/desc)}\n@returns(200) List IP Access rules response.\n@errors {4XX: List IP Access rules response failure.}\n\n@endpoint POST /user/firewall/access_rules/rules\n@desc Create an IP Access rule\n@required {configuration: map # The rule configuration., mode: str(block/challenge/whitelist/js_challenge/managed_challenge) # The action to apply to a matched request.}\n@optional {notes: any=}\n@returns(200) Create an IP Access rule response.\n@errors {4XX: Create an IP Access rule response failure.}\n\n@endpoint DELETE /user/firewall/access_rules/rules/{rule_id}\n@desc Delete an IP Access rule\n@required {rule_id: str}\n@returns(200) Delete an IP Access rule response.\n@errors {4XX: Delete an IP Access rule response failure.}\n\n@endpoint GET /user/firewall/access_rules/rules/{rule_id}\n@desc Get an IP Access rule\n@required {rule_id: str}\n@returns(200) Get an IP Access rule response.\n@errors {4XX: Get an IP Access rule response failure.}\n\n@endpoint PATCH /user/firewall/access_rules/rules/{rule_id}\n@desc Update an IP Access rule\n@required {rule_id: str}\n@optional {mode: str(block/challenge/whitelist/js_challenge/managed_challenge) # The action to apply to a matched request., notes: str # An informative summary of the rule, typically used as a reminder or explanation.}\n@returns(200) Update an IP Access rule response.\n@errors {4XX: Update an IP Access rule response failure.}\n\n@endpoint GET /user/invites\n@desc List Invitations\n@returns(200) List Invitations response\n@errors {4XX: List Invitations response failure}\n\n@endpoint GET /user/invites/{invite_id}\n@desc Invitation Details\n@required {invite_id: str}\n@returns(200) Invitation Details response\n@errors {4XX: Invitation Details response failure}\n\n@endpoint PATCH /user/invites/{invite_id}\n@desc Respond to Invitation\n@required {invite_id: str, status: any(accepted/rejected) # Status of your response to the invitation (rejected or accepted).}\n@returns(200) Respond to Invitation response\n@errors {4XX: Respond to Invitation response failure}\n\n@endpoint GET /user/load_balancers/monitors\n@desc List Monitors\n@returns(200) Successful list monitors response.\n@errors {4XX: Failed list monitors response.}\n\n@endpoint POST /user/load_balancers/monitors\n@desc Create Monitor\n@returns(200) Create Monitor response.\n@errors {4XX: Create Monitor response failure.}\n\n@endpoint DELETE /user/load_balancers/monitors/{monitor_id}\n@desc Delete Monitor\n@required {monitor_id: str}\n@returns(200) Delete Monitor response.\n@errors {4XX: Delete Monitor response failure.}\n\n@endpoint GET /user/load_balancers/monitors/{monitor_id}\n@desc Monitor Details\n@required {monitor_id: str}\n@returns(200) Monitor Details response.\n@errors {4XX: Monitor Details response failure.}\n\n@endpoint PATCH /user/load_balancers/monitors/{monitor_id}\n@desc Patch Monitor\n@required {monitor_id: str}\n@returns(200) Patch Monitor response.\n@errors {4XX: Patch Monitor response failure.}\n\n@endpoint PUT /user/load_balancers/monitors/{monitor_id}\n@desc Update Monitor\n@required {monitor_id: str}\n@returns(200) Update Monitor response.\n@errors {4XX: Update Monitor response failure.}\n\n@endpoint POST /user/load_balancers/monitors/{monitor_id}/preview\n@desc Preview Monitor\n@required {monitor_id: str}\n@returns(200) Preview Monitor response.\n@errors {4XX: Preview Monitor response failure.}\n\n@endpoint GET /user/load_balancers/monitors/{monitor_id}/references\n@desc List Monitor References\n@required {monitor_id: str}\n@returns(200) List Monitor References response.\n@errors {4XX: List Monitor References response failure.}\n\n@endpoint GET /user/load_balancers/pools\n@desc List Pools\n@optional {monitor: str}\n@returns(200) List Pools response.\n@errors {4XX: List Pools response failure.}\n\n@endpoint PATCH /user/load_balancers/pools\n@desc Patch Pools\n@optional {notification_email: str # The email address to send health status notifications to. This field is now deprecated in favor of Cloudflare Notifications for Load Balancing, so only resetting this field with an empty string `\"\"` is accepted.}\n@returns(200) Patch Pools response.\n@errors {4XX: Patch Pools response failure.}\n\n@endpoint POST /user/load_balancers/pools\n@desc Create Pool\n@required {name: str # A short name (tag) for the pool. Only alphanumeric characters, hyphens, and underscores are allowed., origins: [map{address: str, disabled_at: str(date-time), enabled: bool, flatten_cname: bool, header: map, name: str, port: int, virtual_network_id: str, weight: num}] # The list of origins within this pool. Traffic directed at this pool is balanced across all currently healthy origins, provided the pool itself is healthy.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means every Cloudflare data center., description: str= # A human-readable description of the pool., enabled: bool=true # Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any)., health_sources: [str] # A list of health sources, ordered from highest to lowest priority, used to evaluate individual origin health and overall pool health. The load balancer uses the first source that has data and falls back to the next. Currently accepted values are null or the exact array [\"regional\", \"global\"]; any other combination is rejected. Null (the default) behaves like [\"local\", \"global\"]. [\"regional\", \"global\"] makes each region steer on its own health, falling back to the global decision when a region has no fresh data. Setting regional requires at least one region in check_regions., latitude: num # The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set., load_shedding: map{default_percent: num, default_policy: str, session_percent: num, session_policy: str} # Configures load shedding policies and percentages for the pool., longitude: num # The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set., minimum_origins: int=1 # The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool., monitor: str # The ID of the Monitor to use for checking the health of origins within this pool., monitor_group: str # The ID of the Monitor Group to use for checking the health of origins within this pool., networks: [str] # List of networks where Load Balancer or Pool is enabled., notification_email: str= # This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list., notification_filter: map{origin: map, pool: map} # Filter pool and origin health notifications by resource type or health status. Use null to reset., origin_steering: map{policy: str} # Configures origin steering for the pool. Controls how origins are selected for new sessions and traffic without session affinity.}\n@returns(200) Create Pool response.\n@errors {4XX: Create Pool response failure.}\n\n@endpoint DELETE /user/load_balancers/pools/{pool_id}\n@desc Delete Pool\n@required {pool_id: str}\n@returns(200) Delete Pool response.\n@errors {4XX: Delete Pool response failure.}\n\n@endpoint GET /user/load_balancers/pools/{pool_id}\n@desc Pool Details\n@required {pool_id: str}\n@returns(200) Pool Details response.\n@errors {4XX: Pool Details response failure.}\n\n@endpoint PATCH /user/load_balancers/pools/{pool_id}\n@desc Patch Pool\n@required {pool_id: str}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means every Cloudflare data center., description: str= # A human-readable description of the pool., disabled_at: str(date-time) # This field shows up only if the pool is disabled. This field is set with the time the pool was disabled at., enabled: bool=true # Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any)., health_sources: [str] # A list of health sources, ordered from highest to lowest priority, used to evaluate individual origin health and overall pool health. The load balancer uses the first source that has data and falls back to the next. Currently accepted values are null or the exact array [\"regional\", \"global\"]; any other combination is rejected. Null (the default) behaves like [\"local\", \"global\"]. [\"regional\", \"global\"] makes each region steer on its own health, falling back to the global decision when a region has no fresh data. Setting regional requires at least one region in check_regions., latitude: num # The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set., load_shedding: map{default_percent: num, default_policy: str, session_percent: num, session_policy: str} # Configures load shedding policies and percentages for the pool., longitude: num # The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set., minimum_origins: int=1 # The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool., monitor: str # The ID of the Monitor to use for checking the health of origins within this pool., monitor_group: str # The ID of the Monitor Group to use for checking the health of origins within this pool., name: str # A short name (tag) for the pool. Only alphanumeric characters, hyphens, and underscores are allowed., notification_email: str= # This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list., notification_filter: map{origin: map, pool: map} # Filter pool and origin health notifications by resource type or health status. Use null to reset., origin_steering: map{policy: str} # Configures origin steering for the pool. Controls how origins are selected for new sessions and traffic without session affinity., origins: [map{address: str, disabled_at: str(date-time), enabled: bool, flatten_cname: bool, header: map, name: str, port: int, virtual_network_id: str, weight: num}] # The list of origins within this pool. Traffic directed at this pool is balanced across all currently healthy origins, provided the pool itself is healthy.}\n@returns(200) Patch Pool response.\n@errors {4XX: Patch Pool response failure.}\n\n@endpoint PUT /user/load_balancers/pools/{pool_id}\n@desc Update Pool\n@required {pool_id: str, name: str # A short name (tag) for the pool. Only alphanumeric characters, hyphens, and underscores are allowed., origins: [map{address: str, disabled_at: str(date-time), enabled: bool, flatten_cname: bool, header: map, name: str, port: int, virtual_network_id: str, weight: num}] # The list of origins within this pool. Traffic directed at this pool is balanced across all currently healthy origins, provided the pool itself is healthy.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means every Cloudflare data center., description: str= # A human-readable description of the pool., disabled_at: str(date-time) # This field shows up only if the pool is disabled. This field is set with the time the pool was disabled at., enabled: bool=true # Whether to enable (the default) or disable this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any)., health_sources: [str] # A list of health sources, ordered from highest to lowest priority, used to evaluate individual origin health and overall pool health. The load balancer uses the first source that has data and falls back to the next. Currently accepted values are null or the exact array [\"regional\", \"global\"]; any other combination is rejected. Null (the default) behaves like [\"local\", \"global\"]. [\"regional\", \"global\"] makes each region steer on its own health, falling back to the global decision when a region has no fresh data. Setting regional requires at least one region in check_regions., latitude: num # The latitude of the data center containing the origins used in this pool in decimal degrees. If this is set, longitude must also be set., load_shedding: map{default_percent: num, default_policy: str, session_percent: num, session_policy: str} # Configures load shedding policies and percentages for the pool., longitude: num # The longitude of the data center containing the origins used in this pool in decimal degrees. If this is set, latitude must also be set., minimum_origins: int=1 # The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and will failover to the next available pool., monitor: str # The ID of the Monitor to use for checking the health of origins within this pool., monitor_group: str # The ID of the Monitor Group to use for checking the health of origins within this pool., networks: [str] # List of networks where Load Balancer or Pool is enabled., notification_email: str= # This field is now deprecated. It has been moved to Cloudflare's Centralized Notification service https://developers.cloudflare.com/fundamentals/notifications/. The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list., notification_filter: map{origin: map, pool: map} # Filter pool and origin health notifications by resource type or health status. Use null to reset., origin_steering: map{policy: str} # Configures origin steering for the pool. Controls how origins are selected for new sessions and traffic without session affinity.}\n@returns(200) Update Pool response.\n@errors {4XX: Update Pool response failure.}\n\n@endpoint GET /user/load_balancers/pools/{pool_id}/health\n@desc Pool Health Details\n@required {pool_id: str}\n@returns(200) Pool Health Details response.\n@errors {4XX: Pool Health Details response failure.}\n\n@endpoint POST /user/load_balancers/pools/{pool_id}/preview\n@desc Preview Pool\n@required {pool_id: str}\n@returns(200) Preview Pool response.\n@errors {4XX: Preview Pool response failure.}\n\n@endpoint GET /user/load_balancers/pools/{pool_id}/references\n@desc List Pool References\n@required {pool_id: str}\n@returns(200) List Pool References response.\n@errors {4XX: List Pool References response failure.}\n\n@endpoint GET /user/load_balancers/preview/{preview_id}\n@desc Preview Result\n@required {preview_id: any}\n@returns(200) Preview Result response.\n@errors {4XX: Preview Result response failure.}\n\n@endpoint GET /user/load_balancers/regions\n@desc List Regions\n@optional {subdivision_code: str, country_code: str}\n@returns(200) List Regions response.\n@errors {4XX: List Regions response failure.}\n\n@endpoint GET /user/load_balancing_analytics/events\n@desc List Healthcheck Events\n@optional {until: str(date-time), pool_name: str, origin_healthy: bool, pool_id: str, since: str(date-time), origin_name: str, pool_healthy: bool=true}\n@returns(200) List Healthcheck Events response.\n@errors {4XX: List Healthcheck Events response failure.}\n\n@endpoint GET /user/memberships/{membership_id}\n@desc Get User Membership\n@required {membership_id: str}\n@returns(200) Get User Membership response\n@errors {4XX: Get User Membership response failure}\n\n@endpoint GET /user/organizations\n@desc List Organizations\n@optional {name: str, page: num=1, per_page: num=20, order: str(id/name/status), direction: str(asc/desc), match: str(any/all)=all, status: str(member/invited)}\n@returns(200) List Organizations response\n@errors {4XX: List Organizations response failure}\n\n@endpoint DELETE /user/organizations/{organization_id}\n@desc Leave Organization\n@required {organization_id: str}\n@returns(200) {id: str} # Leave Organization response\n@errors {4XX: Leave Organization response failure}\n\n@endpoint GET /user/organizations/{organization_id}\n@desc Organization Details\n@required {organization_id: str}\n@returns(200) Organization Details response\n@errors {4XX: Organization Details response failure}\n\n@endpoint GET /user/spectrum_analytics/zones/report\n@desc Get zones bandwidth report\n@optional {since: any, until: any, cdn_traffic: bool=true}\n@returns(200) Get zones bandwidth report response.\n@errors {4XX: Get zones bandwidth report response failure.}\n\n@endpoint GET /user/subscriptions\n@desc Get User Subscriptions\n@returns(200) Get User Subscriptions response\n@errors {4XX: Get User Subscriptions response failure}\n\n@endpoint POST /user/subscriptions\n@desc Create User Subscription\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Create User Subscription response\n@errors {4XX: Create User Subscription response failure}\n\n@endpoint DELETE /user/subscriptions/{identifier}\n@desc Delete User Subscription\n@required {identifier: str}\n@returns(200) {subscription_id: str} # Delete User Subscription response\n@errors {4XX: Delete User Subscription response failure}\n\n@endpoint PUT /user/subscriptions/{identifier}\n@desc Update User Subscription\n@required {identifier: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Update User Subscription response\n@errors {4XX: Update User Subscription response failure}\n\n@endpoint GET /user/tenants\n@desc List user tenants\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # The request has succeeded.\n@errors {4XX: An unexpected error response.}\n\n@endpoint GET /user/tokens\n@desc List Tokens\n@optional {page: num=1, per_page: num=20, direction: str(asc/desc), include_expired: bool=false # When true, includes recently-expired tokens in the response.}\n@returns(200) List Tokens response\n@errors {4XX: List Tokens response failure}\n\n@endpoint POST /user/tokens\n@desc Create Token\n@required {name: str # Token name., policies: [map{effect!: str, id!: str, permission_groups!: [map], resources!: any}] # List of access policies assigned to the token.}\n@optional {condition: map{request_ip: map}, expires_on: str(date-time) # The expiration time on or after which the JWT MUST NOT be accepted for processing., not_before: str(date-time) # The time before which the token MUST NOT be accepted for processing.}\n@returns(200) Create Token response\n@errors {4XX: Create Token response failure}\n\n@endpoint GET /user/tokens/permission_groups\n@desc List Token Permission Groups\n@optional {name: str # Filter by the name of the permission group. The value must be URL-encoded., scope: str # Filter by the scope of the permission group. The value must be URL-encoded.}\n@returns(200) List Token Permission Groups response\n@errors {4XX: List Token Permission Groups response failure}\n\n@endpoint GET /user/tokens/verify\n@desc Verify Token\n@returns(200) Verify Token response\n@errors {4XX: Verify Token response failure}\n\n@endpoint DELETE /user/tokens/{token_id}\n@desc Delete Token\n@required {token_id: str}\n@returns(200) Delete Token response\n@errors {4XX: Delete Token response failure}\n\n@endpoint GET /user/tokens/{token_id}\n@desc Token Details\n@required {token_id: str}\n@returns(200) Token Details response\n@errors {4XX: Token Details response failure}\n\n@endpoint PUT /user/tokens/{token_id}\n@desc Update Token\n@required {token_id: str}\n@returns(200) Update Token response\n@errors {4XX: Update Token response failure}\n\n@endpoint PUT /user/tokens/{token_id}/value\n@desc Roll Token\n@required {token_id: str}\n@returns(200) Roll Token response\n@errors {4XX: Roll Token response failure}\n\n@endgroup\n\n@group workers\n@endpoint POST /workers/builds/deploy_hooks/{deploy_hook_uuid}\n@desc Trigger deploy hook\n@required {deploy_hook_uuid: str(uuid) # Deploy hook UUID}\n@returns(200) Build triggered successfully\n@errors {404: Resource not found, 429: Rate limit exceeded}\n\n@endgroup\n\n@group zones\n@endpoint GET /zones\n@desc List Zones\n@optional {name: str, status: str(initializing/pending/active/moved), type: [str], account.id: str, account.name: str, page: num=1, per_page: num=20, order: str(name/status/account.id/account.name/plan.id), direction: str(asc/desc), match: str(any/all)=all}\n@returns(200) List Zones response.\n@errors {4XX: List Zones response failure.}\n\n@endpoint POST /zones\n@desc Create Zone\n@required {account: map{id: str}, name: str # The domain name. Per [RFC 1035](https://datatracker.ietf.org/doc/html/rfc1035#section-2.3.4) the overall zone name can be up to 253 characters, with each segment (\"label\") not exceeding 63 characters.}\n@optional {type: str(full/partial/secondary/internal)=full # A full zone implies that DNS is hosted with Cloudflare. A partial zone is typically a partner-hosted zone or a CNAME setup.}\n@returns(200) Create Zone response.\n@errors {4XX: Create Zone response failure.}\n\n@endpoint GET /zones/{zone_identifier}/analytics/colos\n@desc Get analytics by Co-locations\n@required {zone_identifier: str}\n@optional {until: any, since: any=-10080, continuous: bool=true}\n@returns(200) Get analytics by Co-locations response\n@errors {4XX: Get analytics by Co-locations response failure}\n\n@endpoint GET /zones/{zone_identifier}/analytics/dashboard\n@desc Get dashboard\n@required {zone_identifier: str}\n@optional {until: any, since: any=-10080, continuous: bool=true}\n@returns(200) Get dashboard response\n@errors {4XX: Get dashboard response failure}\n\n@endpoint GET /zones/{zone_identifier}/custom_pages\n@desc List custom pages\n@required {zone_identifier: str}\n@returns(200) List custom pages response\n@errors {4XX: List custom pages response failure}\n\n@endpoint GET /zones/{zone_identifier}/custom_pages/assets\n@desc List custom assets\n@required {zone_identifier: str}\n@optional {page: int=1, per_page: int=20}\n@returns(200) List custom assets response\n@errors {4XX: List custom assets response failure}\n\n@endpoint POST /zones/{zone_identifier}/custom_pages/assets\n@desc Create a custom asset\n@required {zone_identifier: str, description: str # A short description of the custom asset., name: str # The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_)., url: str(uri) # The URL where the asset content is fetched from.}\n@returns(200) Create custom asset response\n@errors {4XX: Create custom asset response failure}\n\n@endpoint DELETE /zones/{zone_identifier}/custom_pages/assets/{asset_name}\n@desc Delete a custom asset\n@required {asset_name: str, zone_identifier: str}\n@returns(204) Delete a custom asset response\n@errors {4XX: Delete a custom asset response failure}\n\n@endpoint GET /zones/{zone_identifier}/custom_pages/assets/{asset_name}\n@desc Get a custom asset\n@required {asset_name: str, zone_identifier: str}\n@returns(200) Get a custom asset response\n@errors {4XX: Get a custom asset response failure}\n\n@endpoint PUT /zones/{zone_identifier}/custom_pages/assets/{asset_name}\n@desc Update a custom asset\n@required {asset_name: str, zone_identifier: str, description: str # A short description of the custom asset., url: str(uri) # The URL where the asset content is fetched from.}\n@returns(200) Update a custom asset response\n@errors {4XX: Update a custom asset response failure}\n\n@endpoint POST /zones/{zone_identifier}/custom_pages/preview_tokens\n@desc Create a preview token\n@required {zone_identifier: str, act: str # The preview action type. Required for request parsing but not used in token generation. Typically set to \"preview\"., target: str # The target custom page type to preview (e.g. \"block:waf\"). Encoded as the \"endpoint\" claim in the resulting JWT., url: str(uri) # The URL of the custom page content to preview. Encoded as the \"zone\" claim in the resulting JWT.}\n@returns(200) Create preview token response\n@errors {4XX: Create preview token response failure}\n\n@endpoint GET /zones/{zone_identifier}/custom_pages/{identifier}\n@desc Get a custom page\n@required {identifier: str, zone_identifier: str}\n@returns(200) {created_on: str(date-time), description: str, id: str, modified_on: str(date-time), preview_target: str, required_tokens: [str], state: str, url: str(uri)} # Get a custom page response\n@errors {4XX: Get a custom page response failure}\n\n@endpoint PUT /zones/{zone_identifier}/custom_pages/{identifier}\n@desc Update a custom page\n@required {identifier: str, zone_identifier: str, state: str(default/customized) # The custom page state., url: str(uri)= # The URL associated with the custom page.}\n@returns(200) Update a custom page response\n@errors {4XX: Update a custom page response failure}\n\n@endpoint DELETE /zones/{zone_id}\n@desc Delete Zone\n@required {zone_id: str}\n@returns(200) Delete Zone response.\n@errors {4XX: Delete Zone response failure.}\n\n@endpoint GET /zones/{zone_id}\n@desc Zone Details\n@required {zone_id: str}\n@returns(200) Zone Details response.\n@errors {4XX: Zone Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}\n@desc Edit Zone\n@required {zone_id: str}\n@optional {paused: bool=false # Indicates whether the zone is only using Cloudflare DNS services. A true value means the zone will not receive security or performance benefits., plan: map{id: str} # (Deprecated) Please use the `/zones/{zone_id}/subscription` API to update a zone's plan. Changing this value will create/cancel associated subscriptions. To view available plans for this zone, see Zone Plans., type: str(full/partial/secondary/internal) # A full zone implies that DNS is hosted with Cloudflare. A partial zone is typically a partner-hosted zone or a CNAME setup. This parameter is only available to Enterprise customers or if it has been explicitly enabled on a zone., vanity_name_servers: [str(hostname)]= # An array of domains used for custom name servers. This is only available for Business and Enterprise plans.}\n@returns(200) Edit Zone response.\n@errors {4XX: Edit Zone response failure.}\n\n@endpoint GET /zones/{zone_id}/access/apps\n@desc List Access Applications\n@required {zone_id: str}\n@returns(200) List Access Applications response\n@errors {4XX: List Access Applications response failure}\n\n@endpoint POST /zones/{zone_id}/access/apps\n@desc Add an Access application\n@required {zone_id: str}\n@returns(201) Add an Access application response\n@errors {4XX: Add an Access application response failure}\n\n@endpoint GET /zones/{zone_id}/access/apps/ca\n@desc List short-lived certificate CAs\n@required {zone_id: str}\n@returns(200) List short-lived certificate CAs response\n@errors {4XX: List short-lived certificate CAs response failure}\n\n@endpoint DELETE /zones/{zone_id}/access/apps/{app_id}\n@desc Delete an Access application\n@required {app_id: any, zone_id: str}\n@returns(202) Delete an Access application response\n@errors {4XX: Delete an Access application response failure}\n\n@endpoint GET /zones/{zone_id}/access/apps/{app_id}\n@desc Get an Access application\n@required {app_id: any, zone_id: str}\n@returns(200) Get an Access application response\n@errors {4XX: Get an Access application response failure}\n\n@endpoint PUT /zones/{zone_id}/access/apps/{app_id}\n@desc Update an Access application\n@required {app_id: any, zone_id: str}\n@returns(200) Update an Access application response\n@errors {4XX: Update an Access application response failure}\n\n@endpoint DELETE /zones/{zone_id}/access/apps/{app_id}/ca\n@desc Delete a short-lived certificate CA\n@required {app_id: str, zone_id: str}\n@returns(202) Delete a short-lived certificate CA response\n@errors {4XX: Delete a short-lived certificate CA response failure}\n\n@endpoint GET /zones/{zone_id}/access/apps/{app_id}/ca\n@desc Get a short-lived certificate CA\n@required {app_id: str, zone_id: str}\n@returns(200) Get a short-lived certificate CA response\n@errors {4XX: Get a short-lived certificate CA response failure}\n\n@endpoint POST /zones/{zone_id}/access/apps/{app_id}/ca\n@desc Create a short-lived certificate CA\n@required {app_id: str, zone_id: str}\n@returns(200) Create a short-lived certificate CA response\n@errors {4XX: Create a short-lived certificate CA response failure}\n\n@endpoint GET /zones/{zone_id}/access/apps/{app_id}/policies\n@desc List Access policies\n@required {app_id: str, zone_id: str}\n@returns(200) List Access policies response\n@errors {4XX: List Access policies response failure}\n\n@endpoint POST /zones/{zone_id}/access/apps/{app_id}/policies\n@desc Create an Access policy\n@required {app_id: str, zone_id: str, decision: str(allow/deny/non_identity/bypass) # The action Access will take if a user matches this policy., include: [map] # Rules evaluated with an OR logical operator. A user needs to meet only one of the Include rules., name: str # The name of the Access policy.}\n@optional {approval_groups: [map{approvals_needed!: num, email_addresses: [str], email_list_uuid: str}] # Administrators who can approve a temporary authentication request., approval_required: bool=false # Requires the user to request access from an administrator at the start of each session., exclude: [map] # Rules evaluated with a NOT logical operator. To match the policy, a user cannot meet any of the Exclude rules., isolation_required: bool=false # Require this application to be served in an isolated browser for users matching this policy., precedence: int # The order of execution for this policy. Must be unique for each policy., purpose_justification_prompt: str # A custom message that will appear on the purpose justification screen., purpose_justification_required: bool=false # Require users to enter a justification when they log in to the application., require: [map] # Rules evaluated with an AND logical operator. To match the policy, a user must meet all of the Require rules.}\n@returns(201) Create an Access policy response\n@errors {4XX: Create an Access policy response failure}\n\n@endpoint DELETE /zones/{zone_id}/access/apps/{app_id}/policies/{policy_id}\n@desc Delete an Access policy\n@required {policy_id: str, app_id: str, zone_id: str}\n@returns(202) Delete an Access policy response\n@errors {4XX: Delete an Access policy response failure}\n\n@endpoint GET /zones/{zone_id}/access/apps/{app_id}/policies/{policy_id}\n@desc Get an Access policy\n@required {policy_id: str, app_id: str, zone_id: str}\n@returns(200) Get an Access policy response\n@errors {4XX: Get an Access policy response failure}\n\n@endpoint PUT /zones/{zone_id}/access/apps/{app_id}/policies/{policy_id}\n@desc Update an Access policy\n@required {policy_id: str, app_id: str, zone_id: str, decision: str(allow/deny/non_identity/bypass) # The action Access will take if a user matches this policy., include: [map] # Rules evaluated with an OR logical operator. A user needs to meet only one of the Include rules., name: str # The name of the Access policy.}\n@optional {approval_groups: [map{approvals_needed!: num, email_addresses: [str], email_list_uuid: str}] # Administrators who can approve a temporary authentication request., approval_required: bool=false # Requires the user to request access from an administrator at the start of each session., exclude: [map] # Rules evaluated with a NOT logical operator. To match the policy, a user cannot meet any of the Exclude rules., isolation_required: bool=false # Require this application to be served in an isolated browser for users matching this policy., precedence: int # The order of execution for this policy. Must be unique for each policy., purpose_justification_prompt: str # A custom message that will appear on the purpose justification screen., purpose_justification_required: bool=false # Require users to enter a justification when they log in to the application., require: [map] # Rules evaluated with an AND logical operator. To match the policy, a user must meet all of the Require rules.}\n@returns(200) Update an Access policy response\n@errors {4XX: Update an Access policy response failure}\n\n@endpoint POST /zones/{zone_id}/access/apps/{app_id}/revoke_tokens\n@desc Revoke application tokens\n@required {app_id: any, zone_id: str}\n@returns(202) Revoke application tokens response\n@errors {4XX: Revoke application tokens response failure}\n\n@endpoint PATCH /zones/{zone_id}/access/apps/{app_id}/settings\n@desc Update application settings\n@required {app_id: any, zone_id: str}\n@optional {allow_iframe: bool # Enables loading application content in an iFrame., skip_interstitial: bool # Enables automatic authentication through cloudflared.}\n@returns(202) Update application settings response\n@errors {4XX: Update application settings response failure}\n\n@endpoint PUT /zones/{zone_id}/access/apps/{app_id}/settings\n@desc Update application settings\n@required {app_id: any, zone_id: str}\n@optional {allow_iframe: bool # Enables loading application content in an iFrame., skip_interstitial: bool # Enables automatic authentication through cloudflared.}\n@returns(202) Update application settings response\n@errors {4XX: Update application settings response failure}\n\n@endpoint GET /zones/{zone_id}/access/apps/{app_id}/user_policy_checks\n@desc Test Access policies\n@required {app_id: any, zone_id: str}\n@returns(200) Test Access policies response\n@errors {4XX: Test Access policies response failure}\n\n@endpoint GET /zones/{zone_id}/access/certificates\n@desc List mTLS certificates\n@required {zone_id: str}\n@returns(200) List mTLS certificates response\n@errors {4XX: List mTLS certificates response failure}\n\n@endpoint POST /zones/{zone_id}/access/certificates\n@desc Add an mTLS certificate\n@required {zone_id: str, certificate: str # The certificate content., name: str # The name of the certificate.}\n@optional {associated_hostnames: [str] # The hostnames of the applications that will use this certificate.}\n@returns(201) Add an mTLS certificate response\n@errors {4XX: Add an mTLS certificate response failure}\n\n@endpoint GET /zones/{zone_id}/access/certificates/settings\n@desc List all mTLS hostname settings\n@required {zone_id: str}\n@returns(200) List mTLS hostname settings response\n@errors {4XX: List mTLS hostname settings response failure}\n\n@endpoint PUT /zones/{zone_id}/access/certificates/settings\n@desc Update an mTLS certificate's hostname settings\n@required {zone_id: str, settings: [map{china_network!: bool, client_certificate_forwarding!: bool, hostname!: str}]}\n@returns(202) Update an mTLS certificates hostname settings response\n@errors {4XX: Update an mTLS certificates hostname settings failure}\n\n@endpoint DELETE /zones/{zone_id}/access/certificates/{certificate_id}\n@desc Delete an mTLS certificate\n@required {certificate_id: str, zone_id: str}\n@returns(200) Delete an mTLS certificate response\n@errors {4XX: Delete an mTLS certificate response failure}\n\n@endpoint GET /zones/{zone_id}/access/certificates/{certificate_id}\n@desc Get an mTLS certificate\n@required {certificate_id: str, zone_id: str}\n@returns(200) Get an mTLS certificate response\n@errors {4XX: Get an mTLS certificate response failure}\n\n@endpoint PUT /zones/{zone_id}/access/certificates/{certificate_id}\n@desc Update an mTLS certificate\n@required {certificate_id: str, zone_id: str, associated_hostnames: [str] # The hostnames of the applications that will use this certificate.}\n@optional {name: str # The name of the certificate.}\n@returns(200) Update an mTLS certificate response\n@errors {4XX: Update an mTLS certificate response failure}\n\n@endpoint GET /zones/{zone_id}/access/groups\n@desc List Access groups\n@required {zone_id: str}\n@returns(200) List Access groups response\n@errors {4XX: List Access groups response failure}\n\n@endpoint POST /zones/{zone_id}/access/groups\n@desc Create an Access group\n@required {zone_id: str, include: [map] # Rules evaluated with an OR logical operator. A user needs to meet only one of the Include rules., name: str # The name of the Access group.}\n@optional {exclude: [map] # Rules evaluated with a NOT logical operator. To match a policy, a user cannot meet any of the Exclude rules., require: [map] # Rules evaluated with an AND logical operator. To match a policy, a user must meet all of the Require rules.}\n@returns(201) Create an Access group response\n@errors {4XX: Create an Access group response failure}\n\n@endpoint DELETE /zones/{zone_id}/access/groups/{group_id}\n@desc Delete an Access group\n@required {group_id: str, zone_id: str}\n@returns(202) Delete an Access group response\n@errors {4XX: Delete an Access group response failure}\n\n@endpoint GET /zones/{zone_id}/access/groups/{group_id}\n@desc Get an Access group\n@required {group_id: str, zone_id: str}\n@returns(200) Get an Access group response\n@errors {4XX: Get an Access group response failure}\n\n@endpoint PUT /zones/{zone_id}/access/groups/{group_id}\n@desc Update an Access group\n@required {group_id: str, zone_id: str, include: [map] # Rules evaluated with an OR logical operator. A user needs to meet only one of the Include rules., name: str # The name of the Access group.}\n@optional {exclude: [map] # Rules evaluated with a NOT logical operator. To match a policy, a user cannot meet any of the Exclude rules., require: [map] # Rules evaluated with an AND logical operator. To match a policy, a user must meet all of the Require rules.}\n@returns(200) Update an Access group response\n@errors {4XX: Update an Access group response failure}\n\n@endpoint GET /zones/{zone_id}/access/identity_providers\n@desc List Access identity providers\n@required {zone_id: str}\n@returns(200) List Access identity providers response\n@errors {4XX: List Access identity providers response failure}\n\n@endpoint POST /zones/{zone_id}/access/identity_providers\n@desc Add an Access identity provider\n@required {zone_id: str}\n@returns(201) Add an Access identity provider response\n@errors {4XX: Add an Access identity provider response failure}\n\n@endpoint DELETE /zones/{zone_id}/access/identity_providers/{identity_provider_id}\n@desc Delete an Access identity provider\n@required {identity_provider_id: str, zone_id: str}\n@returns(202) Delete an Access identity provider response\n@errors {4XX: Delete an Access identity provider response failure}\n\n@endpoint GET /zones/{zone_id}/access/identity_providers/{identity_provider_id}\n@desc Get an Access identity provider\n@required {identity_provider_id: str, zone_id: str}\n@returns(200) Get an Access identity provider response\n@errors {4XX: Get an Access identity provider response failure}\n\n@endpoint PUT /zones/{zone_id}/access/identity_providers/{identity_provider_id}\n@desc Update an Access identity provider\n@required {identity_provider_id: str, zone_id: str}\n@returns(200) Update an Access identity provider response\n@errors {4XX: Update an Access identity provider response failure}\n\n@endpoint GET /zones/{zone_id}/access/organizations\n@desc Get your Zero Trust organization\n@required {zone_id: str}\n@returns(200) Get your Zero Trust organization response\n@errors {4XX: Get your Zero Trust organization response failure}\n\n@endpoint POST /zones/{zone_id}/access/organizations\n@desc Create your Zero Trust organization\n@required {zone_id: str, auth_domain: str # The unique subdomain assigned to your Zero Trust organization., name: str # The name of your Zero Trust organization.}\n@optional {is_ui_read_only: bool # Lock all settings as Read-Only in the Dashboard, regardless of user permission. Updates may only be made via the API or Terraform for this account when enabled., login_design: map{background_color: str, footer_text: str, header_text: str, logo_path: str, text_color: str}, ui_read_only_toggle_reason: str # A description of the reason why the UI read only field is being toggled., user_seat_expiration_inactive_time: str # The amount of time a user seat is inactive before it expires. When the user seat exceeds the set time of inactivity, the user is removed as an active seat and no longer counts against your Teams seat count. Must be in the format `300ms` or `2h45m`. Valid time units are: `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`.}\n@returns(201) Create your Zero Trust organization response\n@errors {4XX: Create your Zero Trust organization response failure}\n\n@endpoint PUT /zones/{zone_id}/access/organizations\n@desc Update your Zero Trust organization\n@required {zone_id: str}\n@optional {auth_domain: str # The unique subdomain assigned to your Zero Trust organization., is_ui_read_only: bool # Lock all settings as Read-Only in the Dashboard, regardless of user permission. Updates may only be made via the API or Terraform for this account when enabled., login_design: map{background_color: str, footer_text: str, header_text: str, logo_path: str, text_color: str}, name: str # The name of your Zero Trust organization., ui_read_only_toggle_reason: str # A description of the reason why the UI read only field is being toggled., user_seat_expiration_inactive_time: str # The amount of time a user seat is inactive before it expires. When the user seat exceeds the set time of inactivity, the user is removed as an active seat and no longer counts against your Teams seat count. Must be in the format `300ms` or `2h45m`. Valid time units are: `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`.}\n@returns(200) Update your Zero Trust organization response\n@errors {4XX: Update your Zero Trust organization response failure}\n\n@endpoint POST /zones/{zone_id}/access/organizations/revoke_user\n@desc Revoke all Access tokens for a user\n@required {zone_id: str, email: str # The email of the user to revoke.}\n@returns(200) Revoke all Access tokens for a user response\n@errors {4XX: Revoke all Access tokens for a user response failure}\n\n@endpoint GET /zones/{zone_id}/access/service_tokens\n@desc List service tokens\n@required {zone_id: str}\n@returns(200) List service tokens response\n@errors {4XX: List service tokens response failure}\n\n@endpoint POST /zones/{zone_id}/access/service_tokens\n@desc Create a service token\n@required {zone_id: str, name: str # The name of the service token.}\n@optional {client_secret_version: num=1 # A version number identifying the current `client_secret` associated with the service token. Incrementing it triggers a rotation; the previous secret will still be accepted until the time indicated by `previous_client_secret_expires_at`., duration: str=8760h # The duration for how long the service token will be valid. Must be in the format `300ms` or `2h45m`, or the special value `forever` for non-expiring tokens. Valid time units are: ns, us (or µs), ms, s, m, h. The default is 1 year in hours (8760h)., enabled: bool # Whether the service token is enabled. A disabled service token cannot be used to authenticate; both its current and previous `client_secret` stop being accepted, but the token itself is preserved and can be re-enabled at any time. Defaults to enabled when omitted on create., previous_client_secret_expires_at: str(date-time) # The expiration of the previous `client_secret`. This can be modified at any point after a rotation. For example, you may extend it further into the future if you need more time to update services with the new secret; or move it into the past to immediately invalidate the previous token in case of compromise.}\n@returns(201) Create a service token response\n@errors {4XX: Create a service token response failure}\n\n@endpoint DELETE /zones/{zone_id}/access/service_tokens/{service_token_id}\n@desc Delete a service token\n@required {service_token_id: str, zone_id: str}\n@returns(200) Delete a service token response\n@errors {4XX: Delete a service token response failure}\n\n@endpoint GET /zones/{zone_id}/access/service_tokens/{service_token_id}\n@desc Get a service token\n@required {service_token_id: str, zone_id: str}\n@returns(200) Get a service token response\n@errors {4XX: Get a service token response failure}\n\n@endpoint PUT /zones/{zone_id}/access/service_tokens/{service_token_id}\n@desc Update a service token\n@required {service_token_id: str, zone_id: str}\n@optional {client_secret_version: num=1 # A version number identifying the current `client_secret` associated with the service token. Incrementing it triggers a rotation; the previous secret will still be accepted until the time indicated by `previous_client_secret_expires_at`., duration: str=8760h # The duration for how long the service token will be valid. Must be in the format `300ms` or `2h45m`, or the special value `forever` for non-expiring tokens. Valid time units are: ns, us (or µs), ms, s, m, h. The default is 1 year in hours (8760h)., enabled: bool # Whether the service token is enabled. A disabled service token cannot be used to authenticate; both its current and previous `client_secret` stop being accepted, but the token itself is preserved and can be re-enabled at any time. Defaults to enabled when omitted on create., name: str # The name of the service token., previous_client_secret_expires_at: str(date-time) # The expiration of the previous `client_secret`. This can be modified at any point after a rotation. For example, you may extend it further into the future if you need more time to update services with the new secret; or move it into the past to immediately invalidate the previous token in case of compromise.}\n@returns(200) Update a service token response\n@errors {4XX: Update a service token response failure}\n\n@endpoint GET /zones/{zone_id}/acm/custom_trust_store\n@desc List Custom Origin Trust Store Details\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=20, limit: int, offset: int}\n@returns(200) Custom Origin Trust Store Details response.\n@errors {4XX: Custom Origin Trust Store response failure.}\n\n@endpoint POST /zones/{zone_id}/acm/custom_trust_store\n@desc Upload Custom Origin Trust Store\n@required {zone_id: str, certificate: str # The root CA certificate in PEM format. Only root CA certificates are accepted; intermediate and leaf certificates are not supported.}\n@returns(200) Upload Custom Origin Trust Store response.\n@errors {4XX: Upload Custom Origin Trust Store response failure.}\n\n@endpoint DELETE /zones/{zone_id}/acm/custom_trust_store/{custom_origin_trust_store_id}\n@desc Delete Custom Origin Trust Store\n@required {custom_origin_trust_store_id: str, zone_id: str}\n@returns(200) Delete Custom Origin Trust Store response.\n@errors {4XX: Delete Custom Origin Trust Store response failure.}\n\n@endpoint GET /zones/{zone_id}/acm/custom_trust_store/{custom_origin_trust_store_id}\n@desc Custom Origin Trust Store Details\n@required {custom_origin_trust_store_id: str, zone_id: str}\n@returns(200) Custom Origin Trust Store Details response.\n@errors {4XX: Custom Origin Trust Store Details response failure.}\n\n@endpoint GET /zones/{zone_id}/acm/total_tls\n@desc Total TLS Settings Details\n@required {zone_id: str}\n@returns(200) Total TLS Settings Details response.\n@errors {4XX: Total TLS Settings Details response failure.}\n\n@endpoint POST /zones/{zone_id}/acm/total_tls\n@desc Enable or Disable Total TLS\n@required {zone_id: str, enabled: bool # If enabled, Total TLS will order a hostname specific TLS certificate for any proxied A, AAAA, or CNAME record in your zone.}\n@optional {certificate_authority: str(google/lets_encrypt/ssl_com) # The Certificate Authority that Total TLS certificates will be issued through.}\n@returns(200) Enable or Disable Total TLS response.\n@errors {4XX: Enable or Disable Total TLS response failure.}\n\n@endpoint PUT /zones/{zone_id}/activation_check\n@desc Rerun the Activation Check\n@required {zone_id: str # Zone ID}\n@returns(200) Successful Response\n@errors {4XX: Client Error}\n\n@endpoint GET /zones/{zone_id}/addressing/regional_hostnames\n@desc List Regional Hostnames\n@required {zone_id: str}\n@returns(200) List hostnames response\n@errors {4XX: Failure to list hostnames}\n\n@endpoint POST /zones/{zone_id}/addressing/regional_hostnames\n@desc Create Regional Hostname\n@required {zone_id: str, hostname: str # DNS hostname to be regionalized, must be a subdomain of the zone. Wildcards are supported for one level, e.g `*.example.com`, region_key: str # Identifying key for the region}\n@optional {routing: str=dns # Configure which routing method to use for the regional hostname}\n@returns(200) Create hostname response\n@errors {4XX: Failure to create hostname}\n\n@endpoint DELETE /zones/{zone_id}/addressing/regional_hostnames/{hostname}\n@desc Delete Regional Hostname\n@required {zone_id: str, hostname: str}\n@returns(200) Delete hostname response\n@errors {4XX: Failure to delete hostname}\n\n@endpoint GET /zones/{zone_id}/addressing/regional_hostnames/{hostname}\n@desc Fetch Regional Hostname\n@required {zone_id: str, hostname: str}\n@returns(200) Fetch hostname response\n@errors {4XX: Failure to fetch hostname}\n\n@endpoint PATCH /zones/{zone_id}/addressing/regional_hostnames/{hostname}\n@desc Update Regional Hostname\n@required {zone_id: str, hostname: str, region_key: str # Identifying key for the region}\n@returns(200) Update hostname response\n@errors {4XX: Failure to update hostname}\n\n@endpoint GET /zones/{zone_id}/ai-audit/robots\n@desc Get robots.txt rules\n@required {zone_id: str # Identifier of the zone.}\n@optional {subdomain: str # Optional subdomain to fetch robots.txt for. If omitted, fetches robots.txt for the zone apex domain.}\n@returns(200) Successful response with parsed robots.txt rules.\n@errors {400: Bad request (invalid subdomain or missing parameters)., 401: Unauthorized (missing or invalid authentication)., 403: Forbidden (insufficient permissions or entitlement)., 404: Domain not found or robots.txt not found., 500: Internal server error., 503: Upstream authentication service unavailable.}\n\n@endpoint POST /zones/{zone_id}/ai-audit/robots/bulk\n@desc Bulk get robots.txt rules\n@required {zone_id: str # Identifier of the zone.}\n@returns(200) Successful response with parsed robots.txt rules keyed by hostname.\n@errors {400: Bad request (invalid domains, exceeds 25-domain limit, or domain not in zone)., 401: Unauthorized (missing or invalid authentication)., 403: Forbidden (insufficient permissions or entitlement)., 404: Domain not found., 408: Request timeout (bulk fetch exceeded global timeout)., 500: Internal server error., 503: Upstream authentication service unavailable.}\n\n@endpoint GET /zones/{zone_id}/ai-security/custom-topics\n@desc Get the AI Security for Apps custom topics of a zone.\n@required {zone_id: str}\n@returns(200) Get AI Security for Apps custom topics response.\n@errors {4XX: Get AI Security for Apps custom topics failure response.}\n\n@endpoint PUT /zones/{zone_id}/ai-security/custom-topics\n@desc Update the AI Security for Apps custom topics of a zone.\n@required {zone_id: str}\n@optional {topics: [map{label!: str, topic!: str}] # Custom topic categories for AI Security for Apps content detection.}\n@returns(200) Update AI Security for Apps custom topics response.\n@errors {4XX: Update AI Security for Apps custom topics failure response.}\n\n@endpoint GET /zones/{zone_id}/ai-security/settings\n@desc Get the AI Security for Apps status for a zone.\n@required {zone_id: str}\n@returns(200) Get AI Security for Apps status response.\n@errors {4XX: Get AI Security for Apps status failure response.}\n\n@endpoint PUT /zones/{zone_id}/ai-security/settings\n@desc Update the AI Security for Apps status for a zone.\n@required {zone_id: str}\n@optional {enabled: bool # Whether AI Security for Apps is enabled on the zone.}\n@returns(200) Update AI Security for Apps status response.\n@errors {4XX: Update AI Security for Apps status failure response.}\n\n@endpoint GET /zones/{zone_id}/analytics/latency\n@desc Argo Analytics for a zone\n@required {zone_id: str}\n@optional {bins: str}\n@returns(200) Argo Analytics for a zone response\n@errors {4XX: Argo Analytics for a zone response failure}\n\n@endpoint GET /zones/{zone_id}/analytics/latency/colos\n@desc Argo Analytics for a zone at different PoPs\n@required {zone_id: str}\n@returns(200) Argo Analytics for a zone at different PoPs response\n@errors {4XX: Argo Analytics for a zone at different PoPs response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/configuration\n@desc Get session identifier settings\n@returns(200) Retrieve information about specific configuration properties response\n@errors {4XX: Retrieve information about specific configuration properties response failure}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/configuration\n@desc Update session identifier settings\n@required {auth_id_characteristics: [any]}\n@returns(200) Set configuration properties response\n@errors {4XX: Retrieve information about specific configuration properties response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/discovery\n@desc Export discovered API operations as OpenAPI schemas\n@returns(200) Retrieve discovered operations on a zone, rendered as OpenAPI schemas response\n@errors {4XX: Retrieve discovered operations on a zone, rendered as OpenAPI schemas response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/discovery/operations\n@desc List discovered web and API operations\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page., host: [str], method: [str], endpoint: str, direction: str(asc/desc), order: str(host/method/endpoint/traffic_stats.requests/traffic_stats.last_updated), diff: bool, origin: str # Filter results to only include discovery results sourced from a particular discovery engine   * `ML` - Discovered operations that were sourced using ML API Discovery   * `SessionIdentifier` - Discovered operations that were sourced using Session Identifier API Discovery, state: str # Filter results to only include discovery results in a particular state. States are as follows   * `review` - Discovered operations that are not saved into API Shield Endpoint Management   * `saved` - Discovered operations that are already saved into API Shield Endpoint Management   * `ignored` - Discovered operations that have been marked as ignored}\n@returns(200) Retrieve discovered operations on a zone response\n@errors {4XX: Retrieve discovered operations on a zone response failure}\n\n@endpoint PATCH /zones/{zone_id}/api_gateway/discovery/operations\n@desc Edit discovered web and API operations\n@returns(200) Patch discovered operations response\n@errors {4XX: Patch discovered operations response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/discovery/operations/{discovery_id}\n@desc Get a discovered web or API operation\n@returns(200) Retrieve discovered operation response\n@errors {4XX: Retrieve discovered operation response failure}\n\n@endpoint PATCH /zones/{zone_id}/api_gateway/discovery/operations/{discovery_id}\n@desc Edit a discovered web or API operation\n@optional {state: any}\n@returns(200) Patch discovered operation response\n@errors {4XX: Patch discovered operation response failure}\n\n@endpoint POST /zones/{zone_id}/api_gateway/expression-template/fallthrough\n@desc Generate a fallthrough WAF expression template\n@required {hosts: [str] # List of hosts to be targeted in the expression}\n@returns(200) Generate fallthrough WAF expression template response\n@errors {4XX: Generate fallthrough WAF expression template failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/labels\n@desc List operation labels\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page., order: str(name/description/created_at/last_updated/mapped_resources.operations), direction: str(asc/desc), source: str # Filter for labels with source, filter: str # Filter for labels where the name or description matches using substring match, with_mapped_resource_counts: bool=false # Include `mapped_resources` for each label}\n@returns(200) Retrieve all labels response\n@errors {4XX: Retrieve all labels response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/labels/managed/{name}\n@desc Get a managed operation label\n@optional {with_mapped_resource_counts: bool=false # Include `mapped_resources` for each label}\n@returns(200) Retrieve managed label response\n@errors {4XX: Retrieve managed label response failure}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/labels/managed/{name}/resources/operation\n@desc Replace operations attached to a managed label\n@required {selector: map{include!: map} # Operation IDs selector}\n@returns(200) Replace all operations(s) attached to a managed label response\n@errors {4XX: Replace all operations(s) attached to a managed label failure}\n\n@endpoint DELETE /zones/{zone_id}/api_gateway/labels/user\n@desc Delete user-defined operation labels\n@returns(200) Delete user labels response\n@errors {4XX: Delete user labels response failure}\n\n@endpoint POST /zones/{zone_id}/api_gateway/labels/user\n@desc Create user-defined operation labels\n@returns(200) Create user labels response\n@errors {4XX: Create user labels response failure}\n\n@endpoint DELETE /zones/{zone_id}/api_gateway/labels/user/{name}\n@desc Delete a user-defined operation label\n@returns(200) Delete user label response\n@errors {4XX: Delete label response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/labels/user/{name}\n@desc Get a user-defined operation label\n@optional {with_mapped_resource_counts: bool=false # Include `mapped_resources` for each label}\n@returns(200) Retrieve user label response\n@errors {4XX: Retrieve user label response failure}\n\n@endpoint PATCH /zones/{zone_id}/api_gateway/labels/user/{name}\n@desc Edit a user-defined operation label\n@optional {description: str # The description of the label, metadata: map # Metadata for the label}\n@returns(200) Patch label response\n@errors {4XX: Patch label response failure}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/labels/user/{name}\n@desc Update a user-defined operation label\n@optional {description: str # The description of the label, metadata: map # Metadata for the label}\n@returns(200) Update label response\n@errors {4XX: Update label response failure}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/labels/user/{name}/resources/operation\n@desc Replace operations attached to a user-defined label\n@required {selector: map{include!: map} # Operation IDs selector}\n@returns(200) Replace all operations(s) attached to a user label response\n@errors {4XX: Replace all operations(s) attached to a user label failure}\n\n@endpoint DELETE /zones/{zone_id}/api_gateway/operations\n@desc Delete web or API operations\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete multiple operations response\n@errors {4XX: Delete multiple operations response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/operations\n@desc List web and API operations\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page., order: str(method/host/endpoint/thresholds.$key), direction: str(asc/desc), host: [str], method: [str], endpoint: str, feature: [str] # Add feature(s) to the results. The feature name that is given here corresponds to the resulting feature object. Have a look at the top-level object description for more details on the specific meaning.}\n@returns(200) Retrieve information about all operations on a zone response\n@errors {4XX: Retrieve information about all operations on a zone response failure}\n\n@endpoint POST /zones/{zone_id}/api_gateway/operations\n@desc Create web or API operations\n@returns(200) Add operations to a zone response\n@errors {4XX: Add operations to a zone response failure}\n\n@endpoint POST /zones/{zone_id}/api_gateway/operations/item\n@desc Create a web or API operation\n@required {endpoint: str(uri-template) # The endpoint which can contain path parameter templates in curly braces, each will be replaced from left to right with {varN}, starting with {var1}, during insertion. This will further be Cloudflare-normalized upon insertion. See: https://developers.cloudflare.com/rules/normalization/how-it-works/., host: str(hostname) # RFC3986-compliant host., method: str(GET/POST/HEAD/OPTIONS/PUT/DELETE/CONNECT/PATCH/TRACE) # The HTTP method used to access the endpoint.}\n@returns(200) Add one operation to a zone response\n@errors {4XX: Add one operation to a zone response failure}\n\n@endpoint DELETE /zones/{zone_id}/api_gateway/operations/labels\n@desc Remove labels from web or API operations\n@required {selector: map{include!: map} # Operation IDs selector}\n@optional {managed: map{labels: [str]}, user: map{labels: [str]}}\n@returns(200) Bulk remove label(s) on operation(s) in endpoint management response\n@errors {4XX: Bulk remove label(s) on operation(s) in endpoint management response failure}\n\n@endpoint POST /zones/{zone_id}/api_gateway/operations/labels\n@desc Attach labels to web or API operations\n@required {selector: map{include!: map} # Operation IDs selector}\n@optional {managed: map{labels: [str]}, user: map{labels: [str]}}\n@returns(200) Bulk attach label(s) on operation(s) in endpoint management response\n@errors {4XX: Bulk attach label(s) on operation(s) in endpoint management response failure}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/operations/labels\n@desc Replace labels on web or API operations\n@required {managed: map{labels!: [str]} # Managed labels to replace for all affected operations, selector: map{include!: map} # Operation IDs selector, user: map{labels!: [str]} # User labels to replace for all affected operations}\n@returns(200) Bulk replace label(s) on operation(s) in endpoint management response\n@errors {4XX: Bulk replace label(s) on operation(s) in endpoint management response failure}\n\n@endpoint PATCH /zones/{zone_id}/api_gateway/operations/schema_validation\n@desc Update multiple operation-level schema validation settings\n@returns(200) Update multiple operation-level schema validation settings response\n@errors {4XX: Update multiple operation-level schema validation settings response failure}\n\n@endpoint DELETE /zones/{zone_id}/api_gateway/operations/{operation_id}\n@desc Delete a web or API operation\n@returns(200) {errors: [map], messages: [map], success: bool} # Delete an operation response\n@errors {4XX: Delete an operation response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/operations/{operation_id}\n@desc Get a web or API operation\n@optional {feature: [str] # Add feature(s) to the results. The feature name that is given here corresponds to the resulting feature object. Have a look at the top-level object description for more details on the specific meaning., with_schemas: bool=false # When true, includes OpenAPI schemas (both uploaded and learned) for the operation in the response. Due to the conversion overhead, this parameter is only supported on single-operation retrieval.}\n@returns(200) Retrieve information about an operation response\n@errors {4XX: Retrieve information about an operation response failure}\n\n@endpoint DELETE /zones/{zone_id}/api_gateway/operations/{operation_id}/labels\n@desc Remove labels from a web or API operation\n@optional {managed: [str] # List of managed label names., user: [str] # List of user label names.}\n@returns(200) Remove label(s) on an operation in endpoint management response\n@errors {4XX: Remove label(s) on an operation in endpoint management response failure}\n\n@endpoint POST /zones/{zone_id}/api_gateway/operations/{operation_id}/labels\n@desc Attach labels to a web or API operation\n@optional {managed: [str] # List of managed label names., user: [str] # List of user label names.}\n@returns(200) Attach label(s) on an operation in endpoint management response\n@errors {4XX: Attach label(s) on an operation in endpoint management response failure}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/operations/{operation_id}/labels\n@desc Replace labels on a web or API operation\n@optional {managed: [str] # List of managed label names. Omitting this property or passing an empty array will result in all managed labels being removed from the operation, user: [str] # List of user label names. Omitting this property or passing an empty array will result in all user labels being removed from the operation}\n@returns(200) Replace label(s) on an operation in endpoint management response\n@errors {4XX: Replace label(s) on an operation in endpoint management response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/operations/{operation_id}/schema_validation\n@desc Retrieve operation-level schema validation settings\n@returns(200) {mitigation_action: str?, operation_id: any} # Operation-level schema validation settings response\n@errors {4XX: Operation-level schema validation settings response}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/operations/{operation_id}/schema_validation\n@desc Update operation-level schema validation settings\n@optional {mitigation_action: str(log/block/none) # When set, this applies a mitigation action to this operation    - `log` log request when request does not conform to schema for this operation   - `block` deny access to the site when request does not conform to schema for this operation   - `none` will skip mitigation for this operation   - `null` indicates that no operation level mitigation is in place, see Zone Level Schema Validation Settings for mitigation action that will be applied}\n@returns(200) {mitigation_action: str?, operation_id: any} # Update operation-level schema validation settings response\n@errors {4XX: Update operation-level schema validation settings response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/schemas\n@desc Export web and API operations as OpenAPI schemas\n@optional {host: [str], feature: [str] # Add feature(s) to the results. The feature name that is given here corresponds to the resulting feature object. Have a look at the top-level object description for more details on the specific meaning., include_schema_kind: [str] # Schema kinds to include in exported OpenAPI schemas.}\n@returns(200) Retrieve operations and features as OpenAPI schemas response\n@errors {4XX: Retrieve operations and features as OpenAPI schemas response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/settings/schema_validation\n@desc Retrieve zone level schema validation settings\n@returns(200) {validation_default_mitigation_action: str, validation_override_mitigation_action: str?} # Zone level schema validation settings response\n@errors {4XX: Zone level schema validation settings response failure}\n\n@endpoint PATCH /zones/{zone_id}/api_gateway/settings/schema_validation\n@desc Update zone level schema validation settings\n@optional {validation_default_mitigation_action: str(none/log/block) # The default mitigation action used when there is no mitigation action defined on the operation Mitigation actions are as follows:    * `log` - log request when request does not conform to schema   * `block` - deny access to the site when request does not conform to schema  A special value of of `none` will skip running schema validation entirely for the request when there is no mitigation action defined on the operation  `null` will have no effect., validation_override_mitigation_action: str(none/disable_override) # When set, this overrides both zone level and operation level mitigation actions.    - `none` will skip running schema validation entirely for the request  To clear any override, use the special value `disable_override`  `null` will have no effect.}\n@returns(200) {validation_default_mitigation_action: str, validation_override_mitigation_action: str?} # Update zone level schema validation settings response\n@errors {4XX: Update zone level schema validation settings response failure}\n\n@endpoint PUT /zones/{zone_id}/api_gateway/settings/schema_validation\n@desc Update zone level schema validation settings\n@required {validation_default_mitigation_action: str(none/log/block) # The default mitigation action used when there is no mitigation action defined on the operation  Mitigation actions are as follows:    * `log` - log request when request does not conform to schema   * `block` - deny access to the site when request does not conform to schema  A special value of of `none` will skip running schema validation entirely for the request when there is no mitigation action defined on the operation}\n@optional {validation_override_mitigation_action: str(none/disable_override) # When set, this overrides both zone level and operation level mitigation actions.    - `none` will skip running schema validation entirely for the request   - `null` indicates that no override is in place  To clear any override, use the special value `disable_override` or `null`}\n@returns(200) {validation_default_mitigation_action: str, validation_override_mitigation_action: str?} # Update zone level schema validation settings response\n@errors {4XX: Update zone level schema validation settings response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/user_schemas\n@desc Retrieve information about all schemas on a zone\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page., omit_source: bool=false # Omit the source-files of schemas and only retrieve their meta-data., validation_enabled: bool}\n@returns(200) Retrieve information about all schemas on a zone response\n@errors {4XX: Retrieve information about all schemas on a zone response failure}\n\n@endpoint POST /zones/{zone_id}/api_gateway/user_schemas\n@desc Upload a legacy schema\n@returns(200) Upload a schema response\n@errors {4XX: Upload a schema response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/user_schemas/hosts\n@desc Retrieve schema hosts in a zone\n@returns(200) Retrieve schema hosts in a zone response\n@errors {4XX: Retrieve schema hosts in a zone response failure}\n\n@endpoint DELETE /zones/{zone_id}/api_gateway/user_schemas/{schema_id}\n@desc Delete a schema\n@returns(200) Delete a schema response\n@errors {4XX: Delete a schema response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/user_schemas/{schema_id}\n@desc Retrieve information about a specific schema on a zone\n@optional {omit_source: bool=false # Omit the source-files of schemas and only retrieve their meta-data.}\n@returns(200) Retrieve information about a specific schema on a zone response\n@errors {4XX: Retrieve information about a specific schema zone response failure}\n\n@endpoint PATCH /zones/{zone_id}/api_gateway/user_schemas/{schema_id}\n@desc Enable validation for a schema\n@optional {validation_enabled: any}\n@returns(200) Enable validation for a schema response\n@errors {4XX: Enable validation for a schema response failure}\n\n@endpoint GET /zones/{zone_id}/api_gateway/user_schemas/{schema_id}/operations\n@desc Retrieve all operations from a schema\n@optional {feature: [str] # Add feature(s) to the results. The feature name that is given here corresponds to the resulting feature object. Have a look at the top-level object description for more details on the specific meaning., host: [str], method: [str], endpoint: str, page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page., operation_status: str(new/existing) # Filter results by whether operations exist in API Shield Endpoint Management or not. `new` will just return operations from the schema that do not exist in API Shield Endpoint Management. `existing` will just return operations from the schema that already exist in API Shield Endpoint Management.}\n@returns(200) Retrieve all operations from a schema response\n@errors {4XX: Retrieve all operations from a schema response failure}\n\n@endpoint GET /zones/{zone_id}/argo/smart_routing\n@desc Get Argo Smart Routing setting\n@required {zone_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{editable: bool, id: str, modified_on: str(date-time), value: str}, success: bool} # Get Argo Smart Routing enablement setting response.\n@errors {4XX: Get Argo Smart Routing enablement setting failure.}\n\n@endpoint PATCH /zones/{zone_id}/argo/smart_routing\n@desc Patch Argo Smart Routing setting\n@required {zone_id: str, value: str(on/off) # Specifies the enablement value of Argo Smart Routing.}\n@returns(200) {errors: [map], messages: [map], result: map{editable: bool, id: str, modified_on: str(date-time), value: str}, success: bool} # Patch Argo Smart Routing enablement setting response.\n@errors {4XX: Patch Argo Smart Routing enablement setting failure.}\n\n@endpoint GET /zones/{zone_id}/argo/tiered_caching\n@desc Get Tiered Caching setting\n@required {zone_id: str}\n@returns(200) Get Tiered Caching setting response.\n@errors {4XX: Get Tiered Caching setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/argo/tiered_caching\n@desc Patch Tiered Caching setting\n@required {zone_id: str, value: str(on/off) # Enables Tiered Caching.}\n@returns(200) Patch Tiered Caching setting response.\n@errors {4XX: Patch Tiered Caching setting response failure.}\n\n@endpoint GET /zones/{zone_id}/available_plans\n@desc List Available Plans\n@required {zone_id: str}\n@returns(200) List Available Plans response\n@errors {4XX: List Available Plans response failure}\n\n@endpoint GET /zones/{zone_id}/available_plans/{plan_identifier}\n@desc Available Plan Details\n@required {plan_identifier: str, zone_id: str}\n@returns(200) Available Plan Details response\n@errors {4XX: Available Plan Details response failure}\n\n@endpoint GET /zones/{zone_id}/available_rate_plans\n@desc List Available Rate Plans\n@required {zone_id: str}\n@returns(200) List Available Rate Plans response\n@errors {4XX: List Available Rate Plans response failure}\n\n@endpoint GET /zones/{zone_id}/bot_management\n@desc Get Zone Bot Management Config\n@required {zone_id: str}\n@returns(200) Bot Management config response\n@errors {4XX: Bot Management config response failure}\n\n@endpoint PUT /zones/{zone_id}/bot_management\n@desc Update Zone Bot Management Config\n@required {zone_id: str}\n@returns(200) Update Bot Management response\n@errors {4XX: Update Bot Management response failure}\n\n@endpoint GET /zones/{zone_id}/bot_management/feedback\n@desc List zone feedback reports\n@required {zone_id: str}\n@returns(200) List of feedback reports\n@errors {4XX: Feedback list failure}\n\n@endpoint POST /zones/{zone_id}/bot_management/feedback\n@desc Submit a feedback report\n@required {zone_id: str, description: str, expression: str # Wirefilter expression describing the traffic being reported., first_request_seen_at: str(date-time), last_request_seen_at: str(date-time), requests: int(int64), requests_by_attribute: map # Top attributes contributing to the feedback sample. Keys include topASNs, topCountries, topHosts, topIPs, topJA3Hashes, topJA4s, topPaths, topUserAgents., requests_by_score: map # Map of bot scores (1-99) to request counts. Sum must equal `requests`., requests_by_score_src: map # Map of score source to request counts. Sum must equal `requests`., type: str(false_positive/false_negative) # Type of feedback report.}\n@optional {created_at: str(date-time), subtype: str}\n@returns(201) Feedback report created\n@errors {4XX: Feedback creation failure}\n@example_request {\"description\":\"Automated scraping missed by detections\",\"expression\":\"http.host eq 'www.example.com' and http.request.uri.path starts_with '/products' and cf.bot_management.score gt 25\",\"first_request_seen_at\":\"2025-09-29T00:00:00Z\",\"last_request_seen_at\":\"2025-09-29T06:00:00Z\",\"requests\":2000,\"requests_by_attribute\":{\"topIPs\":[{\"metric\":\"203.0.113.55\",\"requests\":400}],\"topJA3Hashes\":[{\"metric\":\"ab12cd34ef56...\",\"requests\":900}]},\"requests_by_score\":{\"30\":800,\"40\":700,\"50\":500},\"requests_by_score_src\":{\"heuristics\":200,\"ml\":1800},\"subtype\":\"Scraping\",\"type\":\"false_negative\"}\n\n@endpoint GET /zones/{zone_id}/cache/cache_reserve\n@desc Get Cache Reserve setting\n@required {zone_id: str}\n@returns(200) Get Cache Reserve setting response.\n@errors {4XX: Get Cache Reserve setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/cache/cache_reserve\n@desc Change Cache Reserve setting\n@required {zone_id: str, value: str(on/off)=off # Value of the Cache Reserve zone setting.}\n@returns(200) Change Cache Reserve setting response.\n@errors {4XX: Change Cache Reserve setting response failure.}\n\n@endpoint GET /zones/{zone_id}/cache/cache_reserve_clear\n@desc Get Cache Reserve Clear\n@required {zone_id: str}\n@returns(200) Get Cache Reserve Clear response.\n@errors {4XX: Get Cache Reserve Clear failure response.}\n\n@endpoint POST /zones/{zone_id}/cache/cache_reserve_clear\n@desc Start Cache Reserve Clear\n@required {zone_id: str}\n@returns(200) Start Cache Reserve Clear response.\n@errors {4XX: Start Cache Reserve Clear failure response.}\n\n@endpoint GET /zones/{zone_id}/cache/origin_cloud_regions\n@desc List origin cloud region mappings\n@required {zone_id: str}\n@returns(200) List origin cloud region mappings response.\n@errors {4XX: List origin cloud region mappings failure.}\n\n@endpoint PATCH /zones/{zone_id}/cache/origin_cloud_regions\n@desc Create or update an origin cloud region mapping\n@required {zone_id: str, ip: str # Origin IP address (IPv4 or IPv6). Normalized to canonical form before storage (RFC 5952 for IPv6)., region: str # Cloud vendor region identifier. Must be a valid region for the specified vendor as returned by the supported_regions endpoint., vendor: str(aws/azure/gcp/oci) # Cloud vendor hosting the origin. Must be one of the supported vendors.}\n@returns(200) Create or update origin cloud region mapping response.\n@errors {4XX: Create or update origin cloud region mapping failure.}\n@example_request {\"ip\":\"2001:db8::1\",\"region\":\"us-central1\",\"vendor\":\"gcp\"}\n\n@endpoint POST /zones/{zone_id}/cache/origin_cloud_regions\n@desc Create an origin cloud region mapping\n@required {zone_id: str, ip: str # Origin IP address (IPv4 or IPv6). Normalized to canonical form before storage (RFC 5952 for IPv6)., region: str # Cloud vendor region identifier. Must be a valid region for the specified vendor as returned by the supported_regions endpoint., vendor: str(aws/azure/gcp/oci) # Cloud vendor hosting the origin. Must be one of the supported vendors.}\n@returns(200) Create origin cloud region mapping response.\n@errors {4XX: Create origin cloud region mapping failure.}\n@example_request {\"ip\":\"192.0.2.1\",\"region\":\"us-east-1\",\"vendor\":\"aws\"}\n\n@endpoint DELETE /zones/{zone_id}/cache/origin_cloud_regions/batch\n@desc Batch delete origin cloud region mappings\n@required {zone_id: str}\n@returns(200) Batch delete origin cloud region mappings successful.\n@errors {4XX: Batch delete origin cloud region mappings failure., 5XX: Batch delete origin cloud region mappings internal error.}\n@example_request [\"192.0.2.1\",\"2001:db8::1\"]\n\n@endpoint PATCH /zones/{zone_id}/cache/origin_cloud_regions/batch\n@desc Batch create or update origin cloud region mappings\n@required {zone_id: str}\n@returns(200) Batch create or update origin cloud region mappings successful.\n@errors {4XX: Batch create or update origin cloud region mappings failure., 5XX: Batch create or update origin cloud region mappings internal error.}\n@example_request [{\"ip\":\"192.0.2.1\",\"region\":\"us-east-1\",\"vendor\":\"aws\"},{\"ip\":\"2001:db8::1\",\"region\":\"us-central1\",\"vendor\":\"gcp\"}]\n\n@endpoint GET /zones/{zone_id}/cache/origin_cloud_regions/supported_regions\n@desc List supported cloud vendors and regions\n@required {zone_id: str}\n@returns(200) List supported cloud vendors and regions response.\n@errors {4XX: List supported cloud vendors and regions failure.}\n\n@endpoint DELETE /zones/{zone_id}/cache/origin_cloud_regions/{origin_ip}\n@desc Delete an origin cloud region mapping\n@required {zone_id: str, origin_ip: str # Origin IP address whose mapping should be deleted.}\n@returns(200) Delete origin cloud region mapping response.\n@errors {4XX: Delete origin cloud region mapping failure.}\n\n@endpoint GET /zones/{zone_id}/cache/origin_cloud_regions/{origin_ip}\n@desc Get an origin cloud region mapping\n@required {zone_id: str, origin_ip: str # Origin IP address to look up. IPv4 and IPv6 are supported.}\n@returns(200) Get origin cloud region mapping response.\n@errors {4XX: Get origin cloud region mapping failure.}\n\n@endpoint GET /zones/{zone_id}/cache/origin_post_quantum_encryption\n@desc Get Origin Post-Quantum Encryption setting\n@required {zone_id: str}\n@returns(200) Get Origin Post-Quantum Encryption setting response.\n@errors {4XX: Get Origin Post-Quantum Encryption setting response failure.}\n\n@endpoint PUT /zones/{zone_id}/cache/origin_post_quantum_encryption\n@desc Change Origin Post-Quantum Encryption setting\n@required {zone_id: str, value: str(preferred/supported/off)=supported # Value of the Origin Post Quantum Encryption Setting.}\n@returns(200) Change Origin Post-Quantum Encryption setting response.\n@errors {4XX: Change Origin Post-Quantum Encryption setting response failure.}\n\n@endpoint GET /zones/{zone_id}/cache/regional_tiered_cache\n@desc Get Regional Tiered Cache setting\n@required {zone_id: str}\n@returns(200) Get Regional Tiered Cache setting response.\n@errors {4XX: Get Regional Tiered Cache setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/cache/regional_tiered_cache\n@desc Change Regional Tiered Cache setting\n@required {zone_id: str, value: str(on/off)=off # Value of the Regional Tiered Cache zone setting.}\n@returns(200) Change Regional Tiered Cache setting response.\n@errors {4XX: Change Regional Tiered Cache setting response failure.}\n\n@endpoint DELETE /zones/{zone_id}/cache/tiered_cache_smart_topology_enable\n@desc Delete Smart Tiered Cache setting\n@required {zone_id: str}\n@returns(200) Delete Smart Tiered Cache setting response.\n@errors {4XX: Delete Smart Tiered Cache setting response failure.}\n\n@endpoint GET /zones/{zone_id}/cache/tiered_cache_smart_topology_enable\n@desc Get Smart Tiered Cache setting\n@required {zone_id: str}\n@returns(200) Get Smart Tiered Cache setting response.\n@errors {4XX: Get Smart Tiered Cache setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/cache/tiered_cache_smart_topology_enable\n@desc Patch Smart Tiered Cache setting\n@required {zone_id: str, value: str(on/off) # Enable or disable the Smart Tiered Cache.}\n@returns(200) Patch Smart Tiered Cache setting response.\n@errors {4XX: Patch Smart Tiered Cache setting response failure.}\n\n@endpoint POST /zones/{zone_id}/cache/tiered_cache_smart_topology_enable\n@desc Create Smart Tiered Cache setting\n@required {zone_id: str, value: str(on/off) # Enable or disable the Smart Tiered Cache.}\n@returns(200) Create Smart Tiered Cache setting response.\n@errors {4XX: Create Smart Tiered Cache setting response failure.}\n\n@endpoint DELETE /zones/{zone_id}/cache/variants\n@desc Delete variants setting\n@required {zone_id: str}\n@returns(200) Delete variants setting response.\n@errors {4XX: Delete variants setting response failure.}\n\n@endpoint GET /zones/{zone_id}/cache/variants\n@desc Get variants setting\n@required {zone_id: str}\n@returns(200) Get variants setting response.\n@errors {4XX: Get variants setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/cache/variants\n@desc Change variants setting\n@required {zone_id: str, value: map{avif: [str], bmp: [str], gif: [str], jp2: [str], jpeg: [str], jpg: [str], jpg2: [str], png: [str], tif: [str], tiff: [str], webp: [str]} # Value of the zone setting.}\n@returns(200) Change variants setting response.\n@errors {4XX: Change variants setting response failure.}\n\n@endpoint GET /zones/{zone_id}/certificate_authorities/hostname_associations\n@desc List Hostname Associations\n@required {zone_id: str}\n@optional {mtls_certificate_id: str}\n@returns(200) List Hostname Associations Response.\n@errors {4XX: List Hostname Associations Response Failure.}\n\n@endpoint PUT /zones/{zone_id}/certificate_authorities/hostname_associations\n@desc Replace Hostname Associations\n@required {zone_id: str}\n@optional {hostnames: [str], mtls_certificate_id: str # The UUID for a certificate that was uploaded to the mTLS Certificate Management endpoint. If no mtls_certificate_id is given, the hostnames will be associated to your active Cloudflare Managed CA.}\n@returns(200) Replace Hostname Associations Response.\n@errors {4XX: Replace Hostname Associations Response Failure.}\n\n@endpoint GET /zones/{zone_id}/client_certificates\n@desc List Client Certificates\n@required {zone_id: str}\n@optional {status: str(all/active/pending_reactivation/pending_revocation/revoked), page: num=1, per_page: num=20, limit: int, offset: int}\n@returns(200) List Client Certificates Response.\n@errors {4XX: List Client Certificates Response Failure.}\n\n@endpoint POST /zones/{zone_id}/client_certificates\n@desc Create Client Certificate\n@required {zone_id: str, csr: str # The Certificate Signing Request (CSR). Must be newline-encoded., validity_days: int # The number of days the Client Certificate will be valid after the issued_on date.}\n@returns(200) Create Client Certificate Response.\n@errors {4XX: Create Client Certificate Response Failure.}\n\n@endpoint DELETE /zones/{zone_id}/client_certificates/{client_certificate_id}\n@desc Revoke Client Certificate\n@required {zone_id: str, client_certificate_id: str}\n@returns(200) Revoke Client Certificate Response.\n@errors {4XX: Revoke Client Certificate Response Failure.}\n\n@endpoint GET /zones/{zone_id}/client_certificates/{client_certificate_id}\n@desc Client Certificate Details\n@required {zone_id: str, client_certificate_id: str}\n@returns(200) Client Certificate Details Response.\n@errors {4XX: Client Certificate Details Response Failure.}\n\n@endpoint PATCH /zones/{zone_id}/client_certificates/{client_certificate_id}\n@desc Reactivate Client Certificate\n@required {zone_id: str, client_certificate_id: str}\n@optional {reactivate: bool}\n@returns(200) Reactivate Client Certificate Response.\n@errors {4XX: Reactivate Client Certificate Response Failure.}\n\n@endpoint GET /zones/{zone_id}/cloud_connector/rules\n@desc Rules\n@required {zone_id: str}\n@returns(200) Cloud Connector rules response\n@errors {4XX: Cloud Connector response failure, 5XX: Cloud Connector response failure}\n\n@endpoint PUT /zones/{zone_id}/cloud_connector/rules\n@desc Put Rules\n@required {zone_id: str}\n@returns(200) Cloud Connector rules response\n@errors {4XX: Cloud Connector response failure, 5XX: Cloud Connector response failure}\n\n@endpoint POST /zones/{zone_id}/content-upload-scan/disable\n@desc Disable Content Scanning for a zone.\n@required {zone_id: str}\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Disable Content Scanning response.\n@errors {4XX: Disable Content Scanning failure response.}\n\n@endpoint POST /zones/{zone_id}/content-upload-scan/enable\n@desc Enable Content Scanning for a zone.\n@required {zone_id: str}\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Enable Content Scanning response.\n@errors {4XX: Enable Content Scanning failure response.}\n\n@endpoint GET /zones/{zone_id}/content-upload-scan/payloads\n@desc List the Content Scanning custom expressions of a zone.\n@required {zone_id: str}\n@returns(200) List existing Content Scanning custom expressions response.\n@errors {4XX: List existing Content Scanning custom expressions failure response.}\n\n@endpoint POST /zones/{zone_id}/content-upload-scan/payloads\n@desc Create Content Scanning custom expressions for a zone.\n@required {zone_id: str}\n@returns(200) Create Content Scanning custom expressions response.\n@errors {4XX: Create Content Scanning custom expressions failure response.}\n\n@endpoint DELETE /zones/{zone_id}/content-upload-scan/payloads/{expression_id}\n@desc Delete a Content Scanning custom expression from a zone.\n@required {zone_id: str, expression_id: any}\n@returns(200) Delete Content Scanning custom expression response.\n@errors {4XX: Delete Content Scanning custom expression failure response.}\n\n@endpoint PATCH /zones/{zone_id}/content-upload-scan/payloads/{expression_id}\n@desc Update a Content Scanning custom expression for a zone.\n@required {zone_id: str, expression_id: any, payload: str # Defines the custom content extraction expression used to reach content objects in the request.}\n@returns(200) Update Content Scanning custom expression response.\n@errors {4XX: Update Content Scanning custom expression failure response.}\n\n@endpoint GET /zones/{zone_id}/content-upload-scan/settings\n@desc Get the Content Scanning status for a zone.\n@required {zone_id: str}\n@returns(200) Get Content Scanning status response.\n@errors {4XX: Get Content Scanning status failure response.}\n\n@endpoint PUT /zones/{zone_id}/content-upload-scan/settings\n@desc Update the Content Scanning status for a zone.\n@required {zone_id: str, value: str(enabled/disabled) # The status value for Content Scanning.}\n@returns(200) Update Content Scanning settings response.\n@errors {4XX: Update Content Scanning settings failure response.}\n\n@endpoint GET /zones/{zone_id}/ct/alerting\n@desc Get CT Alerting Subscription\n@required {zone_id: str}\n@returns(200) Get CT Alerting Subscription response.\n@errors {4XX: Get CT Alerting Subscription response failure.}\n\n@endpoint PATCH /zones/{zone_id}/ct/alerting\n@desc Update CT Alerting Subscription\n@required {zone_id: str, enabled: bool # Whether CT alerting is enabled for the zone.}\n@optional {emails: [str(email)] # Email addresses that receive CT alert notifications for the zone. A maximum of 100 addresses may be configured. Each address must be a valid RFC 5322 email address and must not contain a comma.}\n@returns(200) Update CT Alerting Subscription response.\n@errors {4XX: Update CT Alerting Subscription response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_certificates\n@desc List SSL Configurations\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=20, match: str(any/all)=all, status: str(active/expired/deleted/pending/initializing)}\n@returns(200) List SSL Configurations response.\n@errors {4XX: List SSL Configurations response failure.}\n\n@endpoint POST /zones/{zone_id}/custom_certificates\n@desc Create SSL Configuration\n@required {zone_id: str, certificate: str # The zone's SSL certificate or certificate and the intermediate(s).}\n@optional {bundle_method: str(ubiquitous/optimal/force)=ubiquitous # A ubiquitous bundle has the highest probability of being verified everywhere, even by clients using outdated or unusual trust stores. An optimal bundle uses the shortest chain and newest intermediates. And the force bundle verifies the chain, but does not otherwise modify it., custom_csr_id: str # The identifier for the Custom CSR that was used., deploy: str(staging/production)=production # The environment to deploy the certificate to, defaults to production., geo_restrictions: map{label: str} # Specify the region where your private key can be held locally for optimal TLS performance. HTTPS connections to any excluded data center will still be fully encrypted, but will incur some latency while Keyless SSL is used to complete the handshake with the nearest allowed data center. Options allow distribution to only to U.S. data centers, only to E.U. data centers, or only to highest security data centers. Default distribution is to all Cloudflare datacenters, for optimal performance., policy: str # Specify the policy that determines the region where your private key will be held locally. HTTPS connections to any excluded data center will still be fully encrypted, but will incur some latency while Keyless SSL is used to complete the handshake with the nearest allowed data center. Any combination of countries, specified by their two letter country code (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) can be chosen, such as 'country: IN', as well as 'region: EU' which refers to the EU region. If there are too few data centers satisfying the policy, it will be rejected. Note: The API accepts this field as either \"policy\" or \"policy_restrictions\" in requests. Responses return this field as \"policy_restrictions\"., private_key: str # The zone's private key. Not required if custom_csr_id is provided, in which case the private key is retrieved from the CSR record held by Cloudflare., type: str(legacy_custom/sni_custom)=legacy_custom # The type 'legacy_custom' enables support for legacy clients which do not include SNI in the TLS handshake.}\n@returns(200) Create SSL Configuration response.\n@errors {4XX: Create SSL Configuration response failure.}\n\n@endpoint PUT /zones/{zone_id}/custom_certificates/prioritize\n@desc Re-prioritize SSL Certificates\n@required {zone_id: str, certificates: [map{id: str, priority: num}] # Array of ordered certificates.}\n@returns(200) Re-prioritize SSL Certificates response.\n@errors {4XX: Re-prioritize SSL Certificates response failure.}\n\n@endpoint DELETE /zones/{zone_id}/custom_certificates/{custom_certificate_id}\n@desc Delete SSL Configuration\n@required {custom_certificate_id: str, zone_id: str}\n@returns(200) Delete SSL Configuration response.\n@errors {4XX: Delete SSL Configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_certificates/{custom_certificate_id}\n@desc SSL Configuration Details\n@required {custom_certificate_id: str, zone_id: str}\n@returns(200) SSL Configuration Details response.\n@errors {4XX: SSL Configuration Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/custom_certificates/{custom_certificate_id}\n@desc Edit SSL Configuration\n@required {custom_certificate_id: str, zone_id: str}\n@optional {bundle_method: str(ubiquitous/optimal/force)=ubiquitous # A ubiquitous bundle has the highest probability of being verified everywhere, even by clients using outdated or unusual trust stores. An optimal bundle uses the shortest chain and newest intermediates. And the force bundle verifies the chain, but does not otherwise modify it., certificate: str # The zone's SSL certificate or certificate and the intermediate(s)., custom_csr_id: str # The identifier for the Custom CSR that was used., deploy: str(staging/production)=production # The environment to deploy the certificate to, defaults to production., geo_restrictions: map{label: str} # Specify the region where your private key can be held locally for optimal TLS performance. HTTPS connections to any excluded data center will still be fully encrypted, but will incur some latency while Keyless SSL is used to complete the handshake with the nearest allowed data center. Options allow distribution to only to U.S. data centers, only to E.U. data centers, or only to highest security data centers. Default distribution is to all Cloudflare datacenters, for optimal performance., policy: str # Specify the policy that determines the region where your private key will be held locally. HTTPS connections to any excluded data center will still be fully encrypted, but will incur some latency while Keyless SSL is used to complete the handshake with the nearest allowed data center. Any combination of countries, specified by their two letter country code (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) can be chosen, such as 'country: IN', as well as 'region: EU' which refers to the EU region. If there are too few data centers satisfying the policy, it will be rejected. Note: The API accepts this field as either \"policy\" or \"policy_restrictions\" in requests. Responses return this field as \"policy_restrictions\"., private_key: str # The zone's private key. Not required if custom_csr_id is provided, in which case the private key is retrieved from the CSR record held by Cloudflare.}\n@returns(200) Edit SSL Configuration response.\n@errors {4XX: Edit SSL Configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_csrs\n@desc List Custom CSRs\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=20}\n@returns(200) List Custom CSRs response.\n@errors {4XX: List Custom CSRs response failure.}\n\n@endpoint POST /zones/{zone_id}/custom_csrs\n@desc Create Custom CSR\n@required {zone_id: str, common_name: str # The common name (domain) for the CSR. Must be at most 64 characters., country: str # Two-letter ISO 3166-1 alpha-2 country code., locality: str # City or locality name., organization: str # Organization name., sans: [str] # Subject Alternative Names for the CSR. At least one SAN is required. The list should include the common name., state: str # State or province name.}\n@optional {key_type: str(rsa2048/p256v1)=rsa2048 # Key algorithm to use for the CSR. Defaults to rsa2048 if not specified., organizational_unit: str # Organizational unit name.}\n@returns(201) Create Custom CSR response.\n@errors {4XX: Create Custom CSR response failure.}\n\n@endpoint DELETE /zones/{zone_id}/custom_csrs/{custom_csr_id}\n@desc Delete Custom CSR\n@required {custom_csr_id: str, zone_id: str}\n@returns(200) Delete Custom CSR response.\n@errors {4XX: Delete Custom CSR response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_csrs/{custom_csr_id}\n@desc Custom CSR Details\n@required {custom_csr_id: str, zone_id: str}\n@returns(200) Custom CSR Details response.\n@errors {4XX: Custom CSR Details response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_hostnames\n@desc List Custom Hostnames\n@required {zone_id: str}\n@optional {hostname: str, hostname.exact: str, hostname.startsWith: str, hostname.contain: str, id: str, page: num=1, per_page: num=20, order: str(ssl/ssl_status)=ssl, direction: str(asc/desc), ssl_status: str(initializing/pending_validation/deleted/pending_issuance/pending_deployment/pending_deletion/pending_expiration/expired/active/initializing_timed_out/validation_timed_out/issuance_timed_out/deployment_timed_out/deletion_timed_out/pending_cleanup/staging_deployment/staging_active/deactivating/inactive/backup_issued/holding_deployment), hostname_status: str(active/pending/active_redeploying/moved/pending_deletion/deleted/pending_blocked/pending_migration/pending_provisioned/test_pending/test_active/test_active_apex/test_blocked/test_failed/provisioned/blocked), certificate_authority: str(google/lets_encrypt/ssl_com), wildcard: bool, custom_origin_server: str, ssl: int(0/1)=0}\n@returns(200) List Custom Hostnames response.\n@errors {4XX: List Custom Hostnames response failure.}\n\n@endpoint POST /zones/{zone_id}/custom_hostnames\n@desc Create Custom Hostname\n@required {zone_id: str, hostname: str # The custom hostname that will point to your hostname via CNAME.}\n@optional {custom_metadata: map # Unique key/value metadata for this hostname. These are per-hostname (customer) settings., custom_origin_server: str # a valid hostname that’s been added to your DNS zone as an A, AAAA, or CNAME record., custom_origin_sni: str # A hostname that will be sent to your custom origin server as SNI for TLS handshake. This can be a valid subdomain of the zone or custom origin server name or the string ':request_host_header:' which will cause the host header in the request to be used as SNI. Not configurable with default/fallback origin server., ssl: map # SSL properties used when creating the custom hostname.}\n@returns(200) Create Custom Hostname response.\n@errors {4XX: Create Custom Hostname response failure.}\n\n@endpoint DELETE /zones/{zone_id}/custom_hostnames/fallback_origin\n@desc Delete Fallback Origin for Custom Hostnames\n@required {zone_id: str}\n@returns(200) Delete Fallback Origin for Custom Hostnames response.\n@errors {4XX: Delete Fallback Origin for Custom Hostnames response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_hostnames/fallback_origin\n@desc Get Fallback Origin for Custom Hostnames\n@required {zone_id: str}\n@returns(200) Get Fallback Origin for Custom Hostnames response.\n@errors {4XX: Get Fallback Origin for Custom Hostnames response failure.}\n\n@endpoint PUT /zones/{zone_id}/custom_hostnames/fallback_origin\n@desc Update Fallback Origin for Custom Hostnames\n@required {zone_id: str, origin: str # Your origin hostname that requests to your custom hostnames will be sent to.}\n@returns(200) Update Fallback Origin for Custom Hostnames response.\n@errors {4XX: Update Fallback Origin for Custom Hostnames response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_hostnames/quota\n@desc Get Custom Hostname Quota\n@required {zone_id: str}\n@returns(200) Get Custom Hostname Quota response\n@errors {4XX: Get Custom Hostname Quota response failure}\n\n@endpoint DELETE /zones/{zone_id}/custom_hostnames/{custom_hostname_id}\n@desc Delete Custom Hostname (and any issued SSL certificates)\n@required {custom_hostname_id: str, zone_id: str}\n@returns(200) {id: str} # Delete Custom Hostname (and any issued SSL certificates) response.\n@errors {4XX: Delete Custom Hostname (and any issued SSL certificates) response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_hostnames/{custom_hostname_id}\n@desc Custom Hostname Details\n@required {custom_hostname_id: str, zone_id: str}\n@returns(200) Custom Hostname Details response.\n@errors {4XX: Custom Hostname Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/custom_hostnames/{custom_hostname_id}\n@desc Edit Custom Hostname\n@required {custom_hostname_id: str, zone_id: str}\n@optional {custom_metadata: map # Unique key/value metadata for this hostname. These are per-hostname (customer) settings., custom_origin_server: str # a valid hostname that’s been added to your DNS zone as an A, AAAA, or CNAME record., custom_origin_sni: str # A hostname that will be sent to your custom origin server as SNI for TLS handshake. This can be a valid subdomain of the zone or custom origin server name or the string ':request_host_header:' which will cause the host header in the request to be used as SNI. Not configurable with default/fallback origin server., ssl: map # SSL properties used when creating the custom hostname.}\n@returns(200) Edit Custom Hostname response.\n@errors {4XX: Edit Custom Hostname response failure.}\n\n@endpoint DELETE /zones/{zone_id}/custom_hostnames/{custom_hostname_id}/certificate_pack/{certificate_pack_id}/certificates/{certificate_id}\n@desc Delete Single Certificate And Key For Custom Hostname\n@required {custom_hostname_id: str, certificate_pack_id: str, certificate_id: str, zone_id: str}\n@returns(202) {id: str} # Delete Single Certificate and Key In a Custom Hostname response.\n@errors {4XX: Delete Single Certificate and Key In a Custom Hostname response failure.}\n\n@endpoint PUT /zones/{zone_id}/custom_hostnames/{custom_hostname_id}/certificate_pack/{certificate_pack_id}/certificates/{certificate_id}\n@desc Replace Custom Certificate and Custom Key In Custom Hostname\n@required {custom_hostname_id: str, certificate_pack_id: str, certificate_id: str, zone_id: str, custom_certificate: str # If a custom uploaded certificate is used., custom_key: str # The key for a custom uploaded certificate.}\n@returns(202) Edit Custom Certificate In a Custom Hostname response.\n@errors {4XX: Edit Custom Certificate In a Custom Hostname response failure.}\n\n@endpoint GET /zones/{zone_id}/custom_ns\n@desc Get Account Custom Nameserver Related Zone Metadata\n@required {zone_id: str}\n@returns(200) Get Account Custom Nameserver Related Zone Metadata response\n@errors {4XX: Get Account Custom Nameserver Related Zone Metadata response failure}\n\n@endpoint PUT /zones/{zone_id}/custom_ns\n@desc Set Account Custom Nameserver Related Zone Metadata\n@required {zone_id: str}\n@optional {enabled: bool # Whether zone uses account-level custom nameservers., ns_set: num=1 # The number of the name server set to assign to the zone.}\n@returns(200) Set Account Custom Nameserver Related Zone Metadata response\n@errors {4XX: Set Account Custom Nameserver Related Zone Metadata response failure}\n\n@endpoint GET /zones/{zone_id}/dcv_delegation/uuid\n@desc Retrieve the DCV Delegation unique identifier.\n@required {zone_id: str}\n@returns(200) Retrieve the DCV Delegation unique identifier response.\n@errors {4XX: Retrieve the DCV Delegation unique identifier response failure.}\n\n@endpoint GET /zones/{zone_id}/devices/policy/certificates\n@desc Get device certificate provisioning status\n@required {zone_id: str}\n@returns(200) Get WARP client provision certificates enabled status response.\n@errors {4XX: Get WARP client provision certificates enabled status failure.}\n\n@endpoint PATCH /zones/{zone_id}/devices/policy/certificates\n@desc Update device certificate provisioning status\n@required {zone_id: str, enabled: bool # The current status of the device policy certificate provisioning feature for WARP clients.}\n@returns(200) Update a zone to toggle permission for devices to provision certificates response.\n@errors {4XX: Patch a zone to toggle permission for devices to provision certificates failure.}\n\n@endpoint GET /zones/{zone_id}/dns_analytics/report\n@desc Table\n@required {zone_id: str}\n@optional {metrics: str, dimensions: str, since: str(date-time), until: str(date-time), limit: int, sort: str, filters: str}\n@returns(200) Table response\n@errors {4XX: Table response failure}\n\n@endpoint GET /zones/{zone_id}/dns_analytics/report/bytime\n@desc By Time\n@required {zone_id: str}\n@optional {metrics: str, dimensions: str, since: str(date-time), until: str(date-time), limit: int, sort: str, filters: str, time_delta: str}\n@returns(200) By Time response\n@errors {4XX: By Time response failure}\n\n@endpoint GET /zones/{zone_id}/dns_records\n@desc List DNS Records\n@required {zone_id: str}\n@optional {name: str, name.exact: str, name.contains: str, name.startswith: str, name.endswith: str, type: str, content: str, content.exact: str, content.contains: str, content.startswith: str, content.endswith: str, proxied: bool, match: str, comment: str, comment.present: str, comment.absent: str, comment.exact: str, comment.contains: str, comment.startswith: str, comment.endswith: str, tag: str, tag.present: str, tag.absent: str, tag.exact: str, tag.contains: str, tag.startswith: str, tag.endswith: str, search: str, tag_match: str, page: num, per_page: num, order: str, direction: str, include_shadow_metadata: bool=false, shadowed_by_name: str, shadowing_name: str}\n@returns(200) List DNS Records response\n@errors {4XX: List DNS Records response failure}\n\n@endpoint POST /zones/{zone_id}/dns_records\n@desc Create DNS Record\n@required {zone_id: str}\n@optional {include_shadow_metadata: bool=false}\n@returns(200) Create DNS Record response\n@errors {4XX: Create DNS Record response failure}\n\n@endpoint POST /zones/{zone_id}/dns_records/batch\n@desc Batch DNS Records\n@required {zone_id: str}\n@optional {include_shadow_metadata: bool=false, deletes: [map], patches: [map{id!: str}], posts: [map], puts: [map{id!: str}]}\n@returns(200) Batch DNS Records response\n@errors {4XX: Batch DNS Records response failure}\n\n@endpoint GET /zones/{zone_id}/dns_records/export\n@desc Export DNS Records\n@required {zone_id: str}\n@returns(200) Export DNS Records response\n@errors {4XX: Export DNS Records response failure}\n\n@endpoint POST /zones/{zone_id}/dns_records/import\n@desc Import DNS Records\n@required {zone_id: str}\n@returns(200) Import DNS Records response\n@errors {4XX: Import DNS Records response failure}\n\n@endpoint POST /zones/{zone_id}/dns_records/scan\n@desc Scan DNS Records\n@required {zone_id: str}\n@returns(200) Scan DNS Records response\n@errors {4XX: Scan DNS Records response failure}\n\n@endpoint GET /zones/{zone_id}/dns_records/scan/review\n@desc List Scanned DNS Records\n@required {zone_id: str}\n@returns(200) List of discovered DNS records\n@errors {4XX: Scan review failure}\n\n@endpoint POST /zones/{zone_id}/dns_records/scan/review\n@desc Review Scanned DNS Records\n@required {zone_id: str}\n@optional {accepts: [map], rejects: [map]}\n@returns(200) Records reviewed successfully\n@errors {4XX: Review failure}\n\n@endpoint POST /zones/{zone_id}/dns_records/scan/trigger\n@desc Trigger DNS Record Scan\n@required {zone_id: str}\n@returns(200) Trigger DNS Records Scan Response\n@errors {4XX: Trigger DNS Records Scan response failure}\n\n@endpoint GET /zones/{zone_id}/dns_records/usage\n@desc Get DNS Record Usage\n@required {zone_id: str}\n@returns(200) Get DNS Record Usage response.\n@errors {4XX: Get DNS Record Usage response failure.}\n\n@endpoint DELETE /zones/{zone_id}/dns_records/{dns_record_id}\n@desc Delete DNS Record\n@required {dns_record_id: str, zone_id: str}\n@returns(200) {result: map{id: str}} # Delete DNS Record response\n@errors {4XX: Delete DNS Record response failure}\n\n@endpoint GET /zones/{zone_id}/dns_records/{dns_record_id}\n@desc DNS Record Details\n@required {dns_record_id: str, zone_id: str}\n@optional {include_shadow_metadata: bool=false}\n@returns(200) DNS Record Details response\n@errors {4XX: DNS Record Details response failure}\n\n@endpoint PATCH /zones/{zone_id}/dns_records/{dns_record_id}\n@desc Update DNS Record\n@required {dns_record_id: str, zone_id: str}\n@optional {include_shadow_metadata: bool=false}\n@returns(200) Patch DNS Record response\n@errors {4XX: Patch DNS Record response failure}\n\n@endpoint PUT /zones/{zone_id}/dns_records/{dns_record_id}\n@desc Overwrite DNS Record\n@required {dns_record_id: str, zone_id: str}\n@optional {include_shadow_metadata: bool=false}\n@returns(200) Update DNS Record response\n@errors {4XX: Update DNS Record response failure}\n\n@endpoint GET /zones/{zone_id}/dns_settings\n@desc Show DNS Settings\n@required {zone_id: str}\n@returns(200) Show DNS Settings response\n@errors {4XX: Show DNS Settings response failure}\n\n@endpoint PATCH /zones/{zone_id}/dns_settings\n@desc Update DNS Settings\n@required {zone_id: str}\n@returns(200) Show DNS Settings response\n@errors {4XX: Show DNS Settings response failure}\n\n@endpoint DELETE /zones/{zone_id}/dnssec\n@desc Delete DNSSEC records\n@required {zone_id: str}\n@returns(200) Delete DNSSEC records response.\n@errors {4XX: Delete DNSSEC records response failure.}\n\n@endpoint GET /zones/{zone_id}/dnssec\n@desc DNSSEC Details\n@required {zone_id: str}\n@returns(200) DNSSEC Details response.\n@errors {4XX: DNSSEC Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/dnssec\n@desc Edit DNSSEC Status\n@required {zone_id: str}\n@optional {dnssec_multi_signer: bool # If true, multi-signer DNSSEC is enabled on the zone, allowing multiple providers to serve a DNSSEC-signed zone at the same time. This is required for DNSKEY records (except those automatically generated by Cloudflare) to be added to the zone.  See [Multi-signer DNSSEC](https://developers.cloudflare.com/dns/dnssec/multi-signer-dnssec/) for details., dnssec_presigned: bool # If true, allows Cloudflare to transfer in a DNSSEC-signed zone including signatures from an external provider, without requiring Cloudflare to sign any records on the fly.  Note that this feature has some limitations. See [Cloudflare as Secondary](https://developers.cloudflare.com/dns/zone-setups/zone-transfers/cloudflare-as-secondary/setup/#dnssec) for details., dnssec_use_nsec3: bool # If true, enables the use of NSEC3 together with DNSSEC on the zone. Combined with setting dnssec_presigned to true, this enables the use of NSEC3 records when transferring in from an external provider. If dnssec_presigned is instead set to false (default), NSEC3 records will be generated and signed at request time.  See [DNSSEC with NSEC3](https://developers.cloudflare.com/dns/dnssec/enable-nsec3/) for details., status: str(active/disabled) # Status of DNSSEC, based on user-desired state and presence of necessary records.}\n@returns(200) Edit DNSSEC Status response.\n@errors {4XX: Edit DNSSEC Status response failure.}\n\n@endpoint GET /zones/{zone_id}/dnssec/zsk\n@desc List DNSSEC ZSKs\n@required {zone_id: str}\n@returns(200) List DNSSEC ZSKs response.\n@errors {4XX: List DNSSEC ZSKs response failure.}\n\n@endpoint GET /zones/{zone_id}/email/auth/dmarc-reports\n@desc Get DMARC Report Status\n@required {zone_id: str # Zone identifier.}\n@returns(200) DMARC report status retrieved successfully\n@errors {4XX: Client Error}\n\n@endpoint PATCH /zones/{zone_id}/email/auth/dmarc-reports\n@desc Configure DMARC Reports\n@required {zone_id: str # Zone identifier.}\n@optional {enabled: bool # Enable or disable DMARC reports for this zone, skip_wizard: bool # Skip the DMARC setup wizard}\n@returns(200) DMARC report configuration updated successfully\n@errors {4XX: Client Error}\n\n@endpoint GET /zones/{zone_id}/email/auth/spf/inspect\n@desc Inspect SPF Record\n@required {zone_id: str # Zone identifier., id: str # DNS record ID (rec_tag) to inspect}\n@returns(200) SPF record inspected successfully\n@errors {4XX: Client Error}\n\n@endpoint GET /zones/{zone_id}/email/routing\n@desc Get Email Routing settings\n@required {zone_id: str}\n@returns(200) Get Email Routing settings response\n\n@endpoint PATCH /zones/{zone_id}/email/routing\n@desc Update Email Routing settings\n@required {zone_id: str}\n@optional {enabled: bool(true/false) # State of your zone Email Routing settings. No-op on this endpoint - use `POST`/`DELETE /zones/{zone_id}/email/routing/dns`., skip_wizard: bool(true/false) # Flag to check if the user skipped the configuration wizard., support_subaddress: bool(true/false) # Whether subaddressing (plus-addressing) is honored when matching incoming mail against routing rules.}\n@returns(200) Update Email Routing settings response\n\n@endpoint PUT /zones/{zone_id}/email/routing\n@desc Update Email Routing settings\n@required {zone_id: str}\n@optional {enabled: bool(true/false) # State of your zone Email Routing settings. No-op on this endpoint - use `POST`/`DELETE /zones/{zone_id}/email/routing/dns`., skip_wizard: bool(true/false) # Flag to check if the user skipped the configuration wizard., support_subaddress: bool(true/false) # Whether subaddressing (plus-addressing) is honored when matching incoming mail against routing rules.}\n@returns(200) Update Email Routing settings response\n\n@endpoint POST /zones/{zone_id}/email/routing/disable\n@desc Disable Email Routing\n@required {zone_id: str}\n@returns(200) Disable Email Routing response\n\n@endpoint DELETE /zones/{zone_id}/email/routing/dns\n@desc Disable Email Routing\n@required {zone_id: str}\n@optional {name: str # Domain of your zone.}\n@returns(200) Disable Email Routing response\n\n@endpoint GET /zones/{zone_id}/email/routing/dns\n@desc Email Routing - DNS settings\n@required {zone_id: str}\n@optional {subdomain: str # Deprecated. When supplied, the response shape differs from the documented default and is not modeled in generated SDKs. Do not rely on this parameter.}\n@returns(200) Email Routing - DNS settings response\n\n@endpoint PATCH /zones/{zone_id}/email/routing/dns\n@desc Unlock Email Routing\n@required {zone_id: str}\n@optional {name: str # Domain of your zone.}\n@returns(200) Unlock Email Routing MX records\n\n@endpoint POST /zones/{zone_id}/email/routing/dns\n@desc Enable Email Routing\n@required {zone_id: str}\n@optional {name: str # Domain of your zone.}\n@returns(200) Enable Email Routing response\n\n@endpoint POST /zones/{zone_id}/email/routing/enable\n@desc Enable Email Routing\n@required {zone_id: str}\n@returns(200) Enable Email Routing response\n\n@endpoint GET /zones/{zone_id}/email/routing/rules\n@desc List routing rules\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=20, enabled: bool(true/false)}\n@returns(200) List routing rules response\n\n@endpoint POST /zones/{zone_id}/email/routing/rules\n@desc Create routing rule\n@required {zone_id: str, actions: [map{type!: str, value: [str]}] # List actions patterns., matchers: [map{field: str, type!: str, value: str}] # Matching patterns to forward to your actions.}\n@optional {enabled: bool(true/false)=true # Routing rule status., name: str # Routing rule name., owner_worker_tag: str # Public tag (script_tag) of the Worker that owns this rule. Required when `source` is `wrangler`., priority: num=0 # Priority of the routing rule., source: str(api/wrangler)=api # Who manages the rule. `api` covers dashboard, generic API, and Terraform; `wrangler` means the rule is managed by a Worker's wrangler.jsonc. Defaults to `api` when omitted on write.}\n@returns(200) Create routing rule response\n@errors {400: Error 2054: Destination address is not verified. A forward action destination address must be verified before it can be used in a rule., 422: Error 2007: Invalid Input. Forward actions must contain exactly one destination address.}\n\n@endpoint GET /zones/{zone_id}/email/routing/rules/catch_all\n@desc Get catch-all rule\n@required {zone_id: str}\n@returns(200) Get catch-all rule response\n\n@endpoint PUT /zones/{zone_id}/email/routing/rules/catch_all\n@desc Update catch-all rule\n@required {zone_id: str, actions: [map{type!: str, value: [str]}] # List actions for the catch-all routing rule., matchers: [map{type!: str}] # List of matchers for the catch-all routing rule.}\n@optional {enabled: bool(true/false)=true # Routing rule status., name: str # Routing rule name., owner_worker_tag: str # Public tag (script_tag) of the Worker that owns this rule. Required when `source` is `wrangler`., source: str(api/wrangler)=api # Who manages the rule. `api` covers dashboard, generic API, and Terraform; `wrangler` means the rule is managed by a Worker's wrangler.jsonc. Defaults to `api` when omitted on write.}\n@returns(200) Update catch-all rule response\n@errors {400: Error 2054: Destination address is not verified. A forward action destination address must be verified before it can be used in a rule., 422: Error 2007: Invalid Input. Forward actions must contain exactly one destination address.}\n\n@endpoint DELETE /zones/{zone_id}/email/routing/rules/{rule_identifier}\n@desc Delete routing rule\n@required {rule_identifier: str, zone_id: str}\n@returns(200) Delete routing rule response\n\n@endpoint GET /zones/{zone_id}/email/routing/rules/{rule_identifier}\n@desc Get routing rule\n@required {rule_identifier: str, zone_id: str}\n@returns(200) Get routing rule response\n\n@endpoint PUT /zones/{zone_id}/email/routing/rules/{rule_identifier}\n@desc Update routing rule\n@required {rule_identifier: str, zone_id: str, actions: [map{type!: str, value: [str]}] # List actions patterns., matchers: [map{field: str, type!: str, value: str}] # Matching patterns to forward to your actions.}\n@optional {enabled: bool(true/false)=true # Routing rule status., name: str # Routing rule name., owner_worker_tag: str # Public tag (script_tag) of the Worker that owns this rule. Required when `source` is `wrangler`., priority: num=0 # Priority of the routing rule., source: str(api/wrangler)=api # Who manages the rule. `api` covers dashboard, generic API, and Terraform; `wrangler` means the rule is managed by a Worker's wrangler.jsonc. Defaults to `api` when omitted on write.}\n@returns(200) Update routing rule response\n@errors {400: Error 2054: Destination address is not verified. A forward action destination address must be verified before it can be used in a rule., 422: Error 2007: Invalid Input. Forward actions must contain exactly one destination address.}\n\n@endpoint GET /zones/{zone_id}/email/routing/suppression\n@desc List zone email suppressions\n@required {zone_id: str}\n@optional {page: int=1, per_page: int=100, order: str(email/expires_at/created_at)=created_at, direction: str(asc/desc)=desc}\n@returns(200) {page: int, per_page: int, result: [map], total: int} # Returns suppressed emails.\n@errors {400: Bad request.}\n\n@endpoint POST /zones/{zone_id}/email/routing/suppression\n@desc Create zone email suppression\n@required {zone_id: str, email: str(email)}\n@optional {expires_at: str(date-time)}\n@returns(200) {result: map{id: str(uuid)}} # Returns suppression.\n@errors {400: Bad request.}\n\n@endpoint DELETE /zones/{zone_id}/email/routing/suppression/{suppression_id}\n@desc Delete zone email suppression\n@required {zone_id: str, suppression_id: str}\n@returns(200) {success: bool} # Deletes suppression.\n@errors {404: Suppression not found.}\n\n@endpoint GET /zones/{zone_id}/email/routing/suppression/{suppression_id}\n@desc Get zone email suppression\n@required {zone_id: str, suppression_id: str}\n@returns(200) {result: map{created_at: str(date-time), email: str(email), expires_at: str(date-time)?, id: str(uuid), reason: str, zones: [str]}} # Returns suppression.\n@errors {404: Suppression not found.}\n\n@endpoint POST /zones/{zone_id}/email/routing/unlock\n@desc Unlock Email Routing\n@required {zone_id: str}\n@optional {name: str # Domain of your zone.}\n@returns(200) Unlock Email Routing response\n\n@endpoint GET /zones/{zone_id}/email/sending/subdomains\n@desc List sending subdomains\n@required {zone_id: str}\n@returns(200) List sending subdomains response\n\n@endpoint POST /zones/{zone_id}/email/sending/subdomains\n@desc Create a sending subdomain\n@required {zone_id: str, name: str # The domain name within the zone. A wildcard is allowed only as the complete leftmost label (`*.example.com`) and requires the account wildcard Email Sending entitlement.}\n@returns(200) Create a sending subdomain response\n@errors {403: Error 2067: Wildcard Email Sending is not enabled for this account.}\n\n@endpoint POST /zones/{zone_id}/email/sending/subdomains/preview\n@desc Preview sending subdomain DNS\n@required {zone_id: str, name: str # The domain name within the zone. A wildcard is allowed only as the complete leftmost label (`*.example.com`) and requires the account wildcard Email Sending entitlement.}\n@returns(200) Preview sending subdomain DNS response\n@errors {403: Error 2067: Wildcard Email Sending is not enabled for this account.}\n\n@endpoint DELETE /zones/{zone_id}/email/sending/subdomains/{subdomain_id}\n@desc Delete a sending subdomain\n@required {subdomain_id: str, zone_id: str}\n@returns(200) Delete a sending subdomain response\n\n@endpoint GET /zones/{zone_id}/email/sending/subdomains/{subdomain_id}\n@desc Get a sending subdomain\n@required {subdomain_id: str, zone_id: str}\n@returns(200) Get a sending subdomain response\n\n@endpoint PATCH /zones/{zone_id}/email/sending/subdomains/{subdomain_id}\n@desc Update a sending subdomain\n@required {subdomain_id: str, zone_id: str}\n@optional {drop_suppressed_recipients: bool # Whether a send request that includes a recipient suppressed on this subdomain drops that recipient and still delivers to the rest, instead of failing the entire request., preview_enabled: bool # Whether sent messages from this subdomain can be previewed in the activity log.}\n@returns(200) Update a sending subdomain response\n\n@endpoint GET /zones/{zone_id}/email/sending/subdomains/{subdomain_id}/dns\n@desc Get sending subdomain DNS records\n@required {subdomain_id: str, zone_id: str}\n@returns(200) Get sending subdomain DNS records response\n\n@endpoint POST /zones/{zone_id}/email/sending/subdomains/{subdomain_id}/dns\n@desc Fix sending subdomain DNS records\n@required {subdomain_id: str, zone_id: str}\n@returns(200) Fix sending subdomain DNS records response\n@errors {400: Error 2028: subdomain_id is not a valid UUID., 403: Error 2043: zone is admin-locked and cannot be mutated., 404: Error 2033: sending subdomain not found., 409: Conflict — manual DNS cleanup required. Errors 2008 (foreign MX), 2026 (multiple SPF), 2027 (multiple DMARC), or a multi-DKIM error.}\n\n@endpoint GET /zones/{zone_id}/email/sending/subdomains/{subdomain_id}/dns/status\n@desc Get sending subdomain DNS status\n@required {subdomain_id: str, zone_id: str}\n@returns(200) Get sending subdomain DNS status response\n@errors {400: Error 2028: subdomain_id is not a valid UUID., 404: Error 2033: sending subdomain not found.}\n\n@endpoint GET /zones/{zone_id}/email/sending/subdomains/{subdomain_id}/reputation/complaints\n@desc Get sending subdomain complaint count\n@required {subdomain_id: str, zone_id: str, start_at: str(date-time), end_at: str(date-time)}\n@returns(200) Sending subdomain complaint count response\n@errors {400: Error 2028: subdomain_id is not a valid UUID., 404: Error 2033: sending subdomain not found., 422: Error 2011: invalid time window., 502: Error 2045: complaint data is unavailable.}\n\n@endpoint GET /zones/{zone_id}/email/sending/suppression\n@desc List zone email suppressions\n@required {zone_id: str}\n@optional {page: int=1, per_page: int=100, order: str(email/expires_at/created_at)=created_at, direction: str(asc/desc)=desc}\n@returns(200) {page: int, per_page: int, result: [map], total: int} # Returns suppressed emails.\n@errors {400: Bad request.}\n\n@endpoint POST /zones/{zone_id}/email/sending/suppression\n@desc Create zone email suppression\n@required {zone_id: str, email: str(email)}\n@optional {expires_at: str(date-time)}\n@returns(200) {result: map{id: str(uuid)}} # Returns suppression.\n@errors {400: Bad request.}\n\n@endpoint DELETE /zones/{zone_id}/email/sending/suppression/{suppression_id}\n@desc Delete zone email suppression\n@required {zone_id: str, suppression_id: str}\n@returns(200) {success: bool} # Deletes suppression.\n@errors {404: Suppression not found.}\n\n@endpoint GET /zones/{zone_id}/email/sending/suppression/{suppression_id}\n@desc Get zone email suppression\n@required {zone_id: str, suppression_id: str}\n@returns(200) {result: map{created_at: str(date-time), email: str(email), expires_at: str(date-time)?, id: str(uuid), reason: str, zones: [str]}} # Returns suppression.\n@errors {404: Suppression not found.}\n\n@endpoint GET /zones/{zone_id}/entitlements\n@desc Get Zone Entitlements\n@required {zone_id: str # Identifier of the zone.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # List of entitlements for the zone.\n@returns(204) Request canceled by the client before the upstream could respond. No response body.\n@errors {400: Bad request — invalid zone identifier or object type., 401: Authentication required., 403: Insufficient permissions., 404: Zone not found or unknown route., 405: HTTP method not allowed., 500: Internal server error., 503: Upstream entitlements service unavailable or timed out.}\n\n@endpoint GET /zones/{zone_id}/environments\n@desc List zone environments\n@returns(200) {errors: [map], messages: [map], result: map{environments: [map]}, success: bool} # Successfully listed zone environments.\n@errors {4XX: Client error response.}\n\n@endpoint PATCH /zones/{zone_id}/environments\n@desc Partially update zone environments\n@required {environments: [map{expression!: str, http_application_id: str, locked_on_deployment!: bool, name!: str, position!: map, ref!: str, version!: int(int64)}]}\n@returns(200) {errors: [map], messages: [map], result: map{environments: [map]}, success: bool} # Successfully updated zone environments.\n@errors {4XX: Client error response.}\n\n@endpoint POST /zones/{zone_id}/environments\n@desc Create zone environments\n@required {environments: [map{expression!: str, http_application_id: str, locked_on_deployment!: bool, name!: str, position!: map, ref!: str, version!: int(int64)}]}\n@returns(200) {errors: [map], messages: [map], result: map{environments: [map]}, success: bool} # Successfully created zone environments.\n@errors {4XX: Client error response.}\n\n@endpoint PUT /zones/{zone_id}/environments\n@desc Upsert zone environments\n@required {environments: [map{expression!: str, http_application_id: str, locked_on_deployment!: bool, name!: str, position!: map, ref!: str, version!: int(int64)}]}\n@returns(200) {errors: [map], messages: [map], result: map{environments: [map]}, success: bool} # Successfully upserted zone environments.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /zones/{zone_id}/environments/{environment_id}\n@desc Delete zone environment\n@returns(200) {errors: [map], messages: [map], result: map{environments: [map]}, success: bool} # Successfully deleted zone environment.\n@errors {4XX: Client error response.}\n\n@endpoint POST /zones/{zone_id}/environments/{environment_id}/purge_cache\n@desc Purge Cached Content by Environment\n@required {zone_id: str, environment_id: str}\n@returns(200) {errors: [map], messages: [map], result: map?{id: str}, success: bool} # Request to purge cached content successful.\n@errors {4XX: Request to purge cached content failed.}\n@example_request {\"hosts\":[\"www.example.com\",\"images.example.com\"]}\n\n@endpoint POST /zones/{zone_id}/environments/{environment_id}/rollback\n@desc Roll back zone environment\n@returns(200) {errors: [map], messages: [map], result: map{environments: [map]}, success: bool} # Successfully rolled back zone environment.\n@errors {4XX: Client error response.}\n\n@endpoint DELETE /zones/{zone_id}/filters\n@desc Delete filters\n@required {zone_id: str, id: [str]}\n@returns(200) Delete filters response\n@errors {4XX: Delete filters response failure}\n\n@endpoint GET /zones/{zone_id}/filters\n@desc List filters\n@required {zone_id: str}\n@optional {paused: any, expression: str, description: str, ref: str, page: num=1, per_page: num=25, id: str}\n@returns(200) List filters response\n@errors {4XX: List filters response failure}\n\n@endpoint POST /zones/{zone_id}/filters\n@desc Create filters\n@required {zone_id: str}\n@returns(200) Create filters response\n@errors {4XX: Create filters response failure}\n\n@endpoint PUT /zones/{zone_id}/filters\n@desc Update filters\n@required {zone_id: str}\n@returns(200) Update filters response\n@errors {4XX: Update filters response failure}\n\n@endpoint DELETE /zones/{zone_id}/filters/{filter_id}\n@desc Delete a filter\n@required {filter_id: str, zone_id: str}\n@returns(200) Delete a filter response\n@errors {4XX: Delete a filter response failure}\n\n@endpoint GET /zones/{zone_id}/filters/{filter_id}\n@desc Get a filter\n@required {filter_id: str, zone_id: str}\n@returns(200) Get a filter response\n@errors {4XX: Get a filter response failure}\n\n@endpoint PUT /zones/{zone_id}/filters/{filter_id}\n@desc Update a filter\n@required {filter_id: str, zone_id: str}\n@optional {description: str # An informative summary of the filter., expression: str # The filter expression. For more information, refer to [Expressions](https://developers.cloudflare.com/ruleset-engine/rules-language/expressions/)., id: str # The unique identifier of the filter., paused: bool # When true, indicates that the filter is currently paused., ref: str # A short reference tag. Allows you to select related filters.}\n@returns(200) Update a filter response\n@errors {4XX: Update a filter response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/access_rules/rules\n@desc List IP Access rules\n@required {zone_id: str}\n@optional {mode: str, configuration.target: str(ip/ip_range/asn/country), configuration.value: str, notes: str, match: str(any/all)=all, page: num, per_page: num, order: str(configuration.target/configuration.value/mode), direction: str(asc/desc)}\n@returns(200) List IP Access rules response.\n@errors {4XX: List IP Access rules response failure.}\n\n@endpoint POST /zones/{zone_id}/firewall/access_rules/rules\n@desc Create an IP Access rule\n@required {zone_id: str, configuration: map # The rule configuration., mode: str(block/challenge/whitelist/js_challenge/managed_challenge) # The action to apply to a matched request.}\n@optional {notes: any=}\n@returns(200) Create an IP Access rule response.\n@errors {4XX: Create an IP Access rule response failure.}\n\n@endpoint DELETE /zones/{zone_id}/firewall/access_rules/rules/{rule_id}\n@desc Delete an IP Access rule\n@required {zone_id: str, rule_id: str}\n@optional {cascade: str(none/basic/aggressive)=none # The level to attempt to delete similar rules defined for other zones with the same owner. The default value is `none`, which will only delete the current rule. Using `basic` will delete rules that match the same action (mode) and configuration, while using `aggressive` will delete rules that match the same configuration.}\n@returns(200) Delete an IP Access rule response.\n@errors {4XX: Delete an IP Access rule response failure.}\n\n@endpoint PATCH /zones/{zone_id}/firewall/access_rules/rules/{rule_id}\n@desc Update an IP Access rule\n@required {zone_id: str, rule_id: str}\n@optional {mode: str(block/challenge/whitelist/js_challenge/managed_challenge) # The action to apply to a matched request., notes: str # An informative summary of the rule, typically used as a reminder or explanation.}\n@returns(200) Update an IP Access rule response.\n@errors {4XX: Update an IP Access rule response failure.}\n\n@endpoint GET /zones/{zone_id}/firewall/lockdowns\n@desc List Zone Lockdown rules\n@required {zone_id: str}\n@optional {page: num=1, description: any, modified_on: any, ip: any, priority: any, uri_search: any, ip_range_search: any, per_page: num=20, created_on: str(date-time), description_search: str, ip_search: str}\n@returns(200) List Zone Lockdown rules response\n@errors {4XX: List Zone Lockdown rules response failure}\n\n@endpoint POST /zones/{zone_id}/firewall/lockdowns\n@desc Create a Zone Lockdown rule\n@required {zone_id: str, configurations: [any] # A list of IP addresses or CIDR ranges that will be allowed to access the URLs specified in the Zone Lockdown rule. You can include any number of `ip` or `ip_range` configurations., urls: [str] # The URLs to include in the current WAF override. You can use wildcards. Each entered URL will be escaped before use, which means you can only use simple wildcard patterns.}\n@optional {description: str # An informative summary of the rule. This value is sanitized and any tags will be removed., paused: bool # When true, indicates that the rule is currently paused., priority: num # The priority of the rule to control the processing order. A lower number indicates higher priority. If not provided, any rules with a configured priority will be processed before rules without a priority.}\n@returns(200) Create a Zone Lockdown rule response\n@errors {4XX: Create a Zone Lockdown rule response failure}\n\n@endpoint DELETE /zones/{zone_id}/firewall/lockdowns/{lock_downs_id}\n@desc Delete a Zone Lockdown rule\n@required {lock_downs_id: str, zone_id: str}\n@returns(200) {result: map{id: str}} # Delete a Zone Lockdown rule response\n@errors {4XX: Delete a Zone Lockdown rule response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/lockdowns/{lock_downs_id}\n@desc Get a Zone Lockdown rule\n@required {lock_downs_id: str, zone_id: str}\n@returns(200) Get a Zone Lockdown rule response\n@errors {4XX: Get a Zone Lockdown rule response failure}\n\n@endpoint PUT /zones/{zone_id}/firewall/lockdowns/{lock_downs_id}\n@desc Update a Zone Lockdown rule\n@required {lock_downs_id: str, zone_id: str, configurations: [any] # A list of IP addresses or CIDR ranges that will be allowed to access the URLs specified in the Zone Lockdown rule. You can include any number of `ip` or `ip_range` configurations., urls: [str] # The URLs to include in the current WAF override. You can use wildcards. Each entered URL will be escaped before use, which means you can only use simple wildcard patterns.}\n@returns(200) Update a Zone Lockdown rule response\n@errors {4XX: Update a Zone Lockdown rule response failure}\n\n@endpoint DELETE /zones/{zone_id}/firewall/rules\n@desc Delete firewall rules\n@required {zone_id: str, id: str # The unique identifier of the firewall rule.}\n@returns(200) Delete firewall rules response\n@errors {4XX: Delete firewall rules response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/rules\n@desc List firewall rules\n@required {zone_id: str}\n@optional {description: str, action: str, page: num=1, per_page: num=25, id: str, paused: bool}\n@returns(200) List firewall rules response\n@errors {4XX: List firewall rules response failure}\n\n@endpoint PATCH /zones/{zone_id}/firewall/rules\n@desc Update priority of firewall rules\n@required {zone_id: str}\n@returns(200) Update priority of firewall rules response\n@errors {4XX: Update priority of firewall rules response failure}\n\n@endpoint POST /zones/{zone_id}/firewall/rules\n@desc Create firewall rules\n@required {zone_id: str, action: map # The action to perform when the threshold of matched traffic within the configured period is exceeded., filter: map{description: str, expression: str, id: str, paused: bool, ref: str}}\n@returns(200) Create firewall rules response\n@errors {4XX: Create firewall rules response failure}\n\n@endpoint PUT /zones/{zone_id}/firewall/rules\n@desc Update firewall rules\n@required {zone_id: str}\n@returns(200) Update firewall rules response\n@errors {4XX: Update firewall rules response failure}\n\n@endpoint DELETE /zones/{zone_id}/firewall/rules/{rule_id}\n@desc Delete a firewall rule\n@required {rule_id: str, zone_id: str}\n@optional {delete_filter_if_unused: bool # When true, indicates that Cloudflare should also delete the associated filter if there are no other firewall rules referencing the filter.}\n@returns(200) Delete a firewall rule response\n@errors {4XX: Delete a firewall rule response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/rules/{rule_id}\n@desc Get a firewall rule\n@required {rule_id: str, zone_id: str}\n@optional {id: any}\n@returns(200) Get a firewall rule response\n@errors {4XX: Get a firewall rule response failure}\n\n@endpoint PATCH /zones/{zone_id}/firewall/rules/{rule_id}\n@desc Update priority of a firewall rule\n@required {rule_id: str, zone_id: str, id: str # The unique identifier of the resource.}\n@returns(200) Update priority of a firewall rule response\n@errors {4XX: Update priority of a firewall rule response failure}\n\n@endpoint PUT /zones/{zone_id}/firewall/rules/{rule_id}\n@desc Update a firewall rule\n@required {rule_id: str, zone_id: str, action: map # The action to perform when the threshold of matched traffic within the configured period is exceeded., filter: map{description: str, expression: str, id: str, paused: bool, ref: str}, id: str # The unique identifier of the resource.}\n@returns(200) Update a firewall rule response\n@errors {4XX: Update a firewall rule response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/ua_rules\n@desc List User Agent Blocking rules\n@required {zone_id: str}\n@optional {page: num=1, description: any, per_page: num=20, user_agent: str, paused: bool}\n@returns(200) List User Agent Blocking rules response\n@errors {4XX: List User Agent Blocking rules response failure}\n\n@endpoint POST /zones/{zone_id}/firewall/ua_rules\n@desc Create a User Agent Blocking rule\n@required {zone_id: str, configuration: map{target: str, value: str}, mode: str(block/challenge/whitelist/js_challenge/managed_challenge) # The action to apply to a matched request.}\n@optional {description: str # An informative summary of the rule. This value is sanitized and any tags will be removed., paused: bool # When true, indicates that the rule is currently paused.}\n@returns(200) Create a User Agent Blocking rule response\n@errors {4XX: Create a User Agent Blocking rule response failure}\n\n@endpoint DELETE /zones/{zone_id}/firewall/ua_rules/{ua_rule_id}\n@desc Delete a User Agent Blocking rule\n@required {ua_rule_id: str, zone_id: str}\n@returns(200) Delete a User Agent Blocking rule response\n@errors {4XX: Delete a User Agent Blocking rule response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/ua_rules/{ua_rule_id}\n@desc Get a User Agent Blocking rule\n@required {ua_rule_id: str, zone_id: str}\n@returns(200) Get a User Agent Blocking rule response\n@errors {4XX: Get a User Agent Blocking rule response failure}\n\n@endpoint PUT /zones/{zone_id}/firewall/ua_rules/{ua_rule_id}\n@desc Update a User Agent Blocking rule\n@required {ua_rule_id: str, zone_id: str, configuration: map # The rule configuration., id: str # The unique identifier of the resource., mode: str(block/challenge/whitelist/js_challenge/managed_challenge) # The action to apply to a matched request.}\n@optional {description: str # An informative summary of the rule. This value is sanitized and any tags will be removed., paused: bool # When true, indicates that the rule is currently paused.}\n@returns(200) Update a User Agent Blocking rule response\n@errors {4XX: Update a User Agent Blocking rule response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/overrides\n@desc List WAF overrides\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=50}\n@returns(200) List WAF overrides response\n@errors {4XX: List WAF overrides response failure}\n\n@endpoint POST /zones/{zone_id}/firewall/waf/overrides\n@desc Create a WAF override\n@required {zone_id: str, urls: [str] # The URLs to include in the current WAF override. You can use wildcards. Each entered URL will be escaped before use, which means you can only use simple wildcard patterns.}\n@returns(200) Create a WAF override response\n@errors {4XX: Create a WAF override response failure}\n\n@endpoint DELETE /zones/{zone_id}/firewall/waf/overrides/{overrides_id}\n@desc Delete a WAF override\n@required {overrides_id: str, zone_id: str}\n@returns(200) {result: map{id: str}} # Delete a WAF override response\n@errors {4XX: Delete a WAF override response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/overrides/{overrides_id}\n@desc Get a WAF override\n@required {overrides_id: str, zone_id: str}\n@returns(200) Get a WAF override response\n@errors {4XX: Get a WAF override response failure}\n\n@endpoint PUT /zones/{zone_id}/firewall/waf/overrides/{overrides_id}\n@desc Update WAF override\n@required {overrides_id: str, zone_id: str, id: str # Defines an identifier., rewrite_action: map{block: any, challenge: any, default: any, disable: any, simulate: any} # Specifies that, when a WAF rule matches, its configured action will be replaced by the action configured in this object., rules: map # An object that allows you to override the action of specific WAF rules. Each key of this object must be the ID of a WAF rule, and each value must be a valid WAF action. Unless you are disabling a rule, ensure that you also enable the rule group that this WAF rule belongs to. When creating a new URI-based WAF override, you must provide a `groups` object or a `rules` object., urls: [str] # The URLs to include in the current WAF override. You can use wildcards. Each entered URL will be escaped before use, which means you can only use simple wildcard patterns.}\n@returns(200) Update WAF override response\n@errors {4XX: Update WAF override response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/packages\n@desc List WAF packages\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=50, order: str, direction: str(asc/desc), match: str(any/all)=all, name: str}\n@returns(200) List WAF packages response\n@errors {4XX: List WAF packages response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/packages/{package_id}\n@desc Get a WAF package\n@required {package_id: str, zone_id: str}\n@returns(200) Get a WAF package response\n@errors {4XX: Get a WAF package response failure}\n\n@endpoint PATCH /zones/{zone_id}/firewall/waf/packages/{package_id}\n@desc Update a WAF package\n@required {package_id: str, zone_id: str}\n@optional {action_mode: str(simulate/block/challenge)=challenge # The default action performed by the rules in the WAF package., sensitivity: str(high/medium/low/off)=high # The sensitivity of the WAF package.}\n@returns(200) Update a WAF package response\n@errors {4XX: Update a WAF package response failure}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/packages/{package_id}/groups\n@desc List WAF rule groups\n@required {package_id: str, zone_id: str}\n@optional {mode: any, page: num=1, per_page: num=50, order: str(mode/rules_count), direction: str(asc/desc), match: str(any/all)=all, name: str, rules_count: num=0}\n@returns(200) Defines the list WAF rule groups response.\n@errors {4XX: Defines the list WAF rule groups response failure.}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/packages/{package_id}/groups/{group_id}\n@desc Get a WAF rule group\n@required {group_id: str, package_id: str, zone_id: str}\n@returns(200) Get a WAF rule group response.\n@errors {4XX: Get a WAF rule group response failure.}\n\n@endpoint PATCH /zones/{zone_id}/firewall/waf/packages/{package_id}/groups/{group_id}\n@desc Update a WAF rule group\n@required {group_id: str, package_id: str, zone_id: str}\n@optional {mode: str(on/off)=on # Defines the state of the rules contained in the rule group. When `on`, the rules in the group are configurable/usable.}\n@returns(200) Update a WAF rule group response.\n@errors {4XX: Update a WAF rule group response failure.}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/packages/{package_id}/rules\n@desc List WAF rules\n@required {package_id: str, zone_id: str}\n@optional {mode: str(DIS/CHL/BLK/SIM), group_id: any, page: num=1, per_page: num=50, order: str(priority/group_id/description), direction: str(asc/desc), match: str(any/all)=all, description: str, priority: str}\n@returns(200) List WAF rules response.\n@errors {4XX: List WAF rules response failure.}\n\n@endpoint GET /zones/{zone_id}/firewall/waf/packages/{package_id}/rules/{rule_id}\n@desc Get a WAF rule\n@required {rule_id: str, package_id: str, zone_id: str}\n@returns(200) Get a WAF rule response.\n@errors {4XX: Get a WAF rule response failure.}\n\n@endpoint PATCH /zones/{zone_id}/firewall/waf/packages/{package_id}/rules/{rule_id}\n@desc Update a WAF rule\n@required {rule_id: str, package_id: str, zone_id: str}\n@optional {mode: str(default/disable/simulate/block/challenge/on/off) # Defines the mode/action of the rule when triggered. You must use a value from the `allowed_modes` array of the current rule.}\n@returns(200) Update a WAF rule response.\n@errors {4XX: Update a WAF rule response failure.}\n\n@endpoint GET /zones/{zone_id}/fraud_detection/settings\n@desc Get Fraud Detection Settings\n@required {zone_id: str}\n@returns(200) Fraud Detection settings response\n@errors {4XX: Fraud Detection settings response failure}\n\n@endpoint PUT /zones/{zone_id}/fraud_detection/settings\n@desc Update Fraud Detection Settings\n@required {zone_id: str}\n@optional {authentication_settings: map{failure_criteria: any, success_criteria: any} # Configuration for classifying login authentication outcomes based on the origin response. Requires `user_profiles` to be enabled.  - Success and failure criteria are independently updatable — sending only `success_criteria`   leaves failure codes untouched, and vice versa. - Omit `authentication_settings` entirely to leave both unchanged. - Status codes must not overlap between success and failure criteria., user_profiles: str(enabled/disabled) # Whether Fraud User Profiles is enabled for the zone., username_expressions: [str] # List of expressions to detect usernames in write HTTP requests.  - Maximum of 10 expressions. - Omit or set to null to leave unchanged on update. - Provide an empty array `[]` to clear all expressions on update. - Invalid expressions will result in a 10400 Bad Request with details in the `messages` array.}\n@returns(200) Updated Fraud Detection settings response\n@errors {4XX: Update Fraud Detection settings failure}\n@example_request {\"username_expressions\":[]}\n\n@endpoint GET /zones/{zone_id}/healthchecks\n@desc List Health Checks\n@required {zone_id: str}\n@optional {page: num=1 # Page number of paginated results., per_page: num=25 # Maximum number of results per page. Must be a multiple of 5.}\n@returns(200) List Health Checks response\n@errors {4XX: List Health Checks response failure.}\n\n@endpoint POST /zones/{zone_id}/healthchecks\n@desc Create Health Check\n@required {zone_id: str, address: str # The hostname or IP address of the origin server to run health checks on., name: str # A short name to identify the health check. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means Cloudflare will pick a default region., consecutive_fails: int=1 # The number of consecutive fails required from a health check before changing the health to unhealthy., consecutive_successes: int=1 # The number of consecutive successes required from a health check before changing the health to healthy., description: str # A human-readable description of the health check., http_config: map{allow_insecure: bool, expected_body: str, expected_codes: [str], follow_redirects: bool, header: map, method: str, path: str, port: int} # Parameters specific to an HTTP or HTTPS health check., interval: int=60 # The interval between each health check. Shorter intervals may give quicker notifications if the origin status changes, but will increase load on the origin as we check from multiple locations., retries: int=2 # The number of retries to attempt in case of a timeout before marking the origin as unhealthy. Retries are attempted immediately., suspended: bool=false # If suspended, no health checks are sent to the origin., tcp_config: map{method: str, port: int} # Parameters specific to TCP health check., timeout: int=5 # The timeout (in seconds) before marking the health check as failed., type: str=HTTP # The protocol to use for the health check. Currently supported protocols are 'HTTP', 'HTTPS' and 'TCP'.}\n@returns(200) Create Health Check response.\n@errors {4XX: Create Health Check response failure.}\n\n@endpoint POST /zones/{zone_id}/healthchecks/preview\n@desc Create Preview Health Check\n@required {zone_id: str, address: str # The hostname or IP address of the origin server to run health checks on., name: str # A short name to identify the health check. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means Cloudflare will pick a default region., consecutive_fails: int=1 # The number of consecutive fails required from a health check before changing the health to unhealthy., consecutive_successes: int=1 # The number of consecutive successes required from a health check before changing the health to healthy., description: str # A human-readable description of the health check., http_config: map{allow_insecure: bool, expected_body: str, expected_codes: [str], follow_redirects: bool, header: map, method: str, path: str, port: int} # Parameters specific to an HTTP or HTTPS health check., interval: int=60 # The interval between each health check. Shorter intervals may give quicker notifications if the origin status changes, but will increase load on the origin as we check from multiple locations., retries: int=2 # The number of retries to attempt in case of a timeout before marking the origin as unhealthy. Retries are attempted immediately., suspended: bool=false # If suspended, no health checks are sent to the origin., tcp_config: map{method: str, port: int} # Parameters specific to TCP health check., timeout: int=5 # The timeout (in seconds) before marking the health check as failed., type: str=HTTP # The protocol to use for the health check. Currently supported protocols are 'HTTP', 'HTTPS' and 'TCP'.}\n@returns(200) Create Preview Health Check response.\n@errors {4XX: Create Preview Health Check response failure.}\n\n@endpoint DELETE /zones/{zone_id}/healthchecks/preview/{healthcheck_id}\n@desc Delete Preview Health Check\n@required {healthcheck_id: str, zone_id: str}\n@returns(200) Delete Preview Health Check response.\n@errors {4XX: Delete Preview Health Check response failure.}\n\n@endpoint GET /zones/{zone_id}/healthchecks/preview/{healthcheck_id}\n@desc Health Check Preview Details\n@required {healthcheck_id: str, zone_id: str}\n@returns(200) Health Check Preview Details response.\n@errors {4XX: Health Check Preview Details response failure.}\n\n@endpoint DELETE /zones/{zone_id}/healthchecks/{healthcheck_id}\n@desc Delete Health Check\n@required {healthcheck_id: str, zone_id: str}\n@returns(200) Delete Health Check response.\n@errors {4XX: Delete Health Check response failure.}\n\n@endpoint GET /zones/{zone_id}/healthchecks/{healthcheck_id}\n@desc Health Check Details\n@required {healthcheck_id: str, zone_id: str}\n@returns(200) Health Check Details response.\n@errors {4XX: Health Check Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/healthchecks/{healthcheck_id}\n@desc Patch Health Check\n@required {healthcheck_id: str, zone_id: str, address: str # The hostname or IP address of the origin server to run health checks on., name: str # A short name to identify the health check. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means Cloudflare will pick a default region., consecutive_fails: int=1 # The number of consecutive fails required from a health check before changing the health to unhealthy., consecutive_successes: int=1 # The number of consecutive successes required from a health check before changing the health to healthy., description: str # A human-readable description of the health check., http_config: map{allow_insecure: bool, expected_body: str, expected_codes: [str], follow_redirects: bool, header: map, method: str, path: str, port: int} # Parameters specific to an HTTP or HTTPS health check., interval: int=60 # The interval between each health check. Shorter intervals may give quicker notifications if the origin status changes, but will increase load on the origin as we check from multiple locations., retries: int=2 # The number of retries to attempt in case of a timeout before marking the origin as unhealthy. Retries are attempted immediately., suspended: bool=false # If suspended, no health checks are sent to the origin., tcp_config: map{method: str, port: int} # Parameters specific to TCP health check., timeout: int=5 # The timeout (in seconds) before marking the health check as failed., type: str=HTTP # The protocol to use for the health check. Currently supported protocols are 'HTTP', 'HTTPS' and 'TCP'.}\n@returns(200) Patch Health Check response.\n@errors {4XX: Patch Health Check response failure.}\n\n@endpoint PUT /zones/{zone_id}/healthchecks/{healthcheck_id}\n@desc Update Health Check\n@required {healthcheck_id: str, zone_id: str, address: str # The hostname or IP address of the origin server to run health checks on., name: str # A short name to identify the health check. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means Cloudflare will pick a default region., consecutive_fails: int=1 # The number of consecutive fails required from a health check before changing the health to unhealthy., consecutive_successes: int=1 # The number of consecutive successes required from a health check before changing the health to healthy., description: str # A human-readable description of the health check., http_config: map{allow_insecure: bool, expected_body: str, expected_codes: [str], follow_redirects: bool, header: map, method: str, path: str, port: int} # Parameters specific to an HTTP or HTTPS health check., interval: int=60 # The interval between each health check. Shorter intervals may give quicker notifications if the origin status changes, but will increase load on the origin as we check from multiple locations., retries: int=2 # The number of retries to attempt in case of a timeout before marking the origin as unhealthy. Retries are attempted immediately., suspended: bool=false # If suspended, no health checks are sent to the origin., tcp_config: map{method: str, port: int} # Parameters specific to TCP health check., timeout: int=5 # The timeout (in seconds) before marking the health check as failed., type: str=HTTP # The protocol to use for the health check. Currently supported protocols are 'HTTP', 'HTTPS' and 'TCP'.}\n@returns(200) Update Health Check response.\n@errors {4XX: Update Health Check response failure.}\n\n@endpoint DELETE /zones/{zone_id}/hold\n@desc Remove Zone Hold\n@required {zone_id: str # Zone ID}\n@optional {hold_after: str # If `hold_after` is provided, the hold will be temporarily disabled, then automatically re-enabled by the system at the time specified in this RFC3339-formatted timestamp. Otherwise, the hold will be disabled indefinitely. `hold_after` cannot be provided for CDN-only zones.}\n@returns(200) Successful Response\n@errors {4XX: Client Error}\n\n@endpoint GET /zones/{zone_id}/hold\n@desc Get Zone Hold\n@required {zone_id: str # Zone ID}\n@returns(200) Successful Response\n@errors {4XX: Client Error}\n\n@endpoint PATCH /zones/{zone_id}/hold\n@desc Update Zone Hold\n@required {zone_id: str # Zone ID}\n@optional {hold_after: str= # If `hold_after` is provided and future-dated, the hold will be temporarily disabled, then automatically re-enabled by the system at the time specified in this RFC3339-formatted timestamp. A past-dated `hold_after` value will have no effect on an existing, enabled hold. Providing an empty string will set its value to the current time. Providing `null` will disable the hold indefinitely., include_subdomains: bool=false # If `true`, the zone hold will extend to block any subdomain of the given zone, as well as SSL4SaaS Custom Hostnames. For example, a zone hold on a zone with the hostname 'example.com' and include_subdomains=true will block 'example.com', 'staging.example.com', 'api.staging.example.com', etc.}\n@returns(200) Successful Response\n@errors {4XX: Client Error}\n\n@endpoint POST /zones/{zone_id}/hold\n@desc Create Zone Hold\n@required {zone_id: str # Zone ID}\n@optional {include_subdomains: bool # If provided, the zone hold will extend to block any subdomain of the given zone, as well as SSL4SaaS Custom Hostnames. For example, a zone hold on a zone with the hostname 'example.com' and include_subdomains=true will block 'example.com', 'staging.example.com', 'api.staging.example.com', etc.}\n@returns(200) Successful Response\n@errors {4XX: Client Error}\n\n@endpoint GET /zones/{zone_id}/hold/{zone_name}\n@desc Get Zone Hold by Zone Name\n@required {zone_id: str # Zone identifier. Consumed by the API gateway for routing; the backend handler does not use this value directly., zone_name: str # The hostname to check for a zone hold. May be a subdomain (e.g. `subdomain.example.com`) or an apex domain (e.g. `example.com`). The service checks the hostname and its ancestor domains for active holds with `include_subdomains` enabled.}\n@returns(200) {hold: bool, hold_after: str(date-time)?, include_subdomains: bool} # Successful Response\n@errors {4XX: Client Error}\n\n@endpoint GET /zones/{zone_id}/hostnames/settings/{setting_id}\n@desc List TLS setting for hostnames\n@required {zone_id: str, setting_id: str}\n@returns(200) List per-hostname TLS settings response.\n@errors {4XX: List per-hostname TLS settings response failure.}\n\n@endpoint DELETE /zones/{zone_id}/hostnames/settings/{setting_id}/{hostname}\n@desc Delete TLS setting for hostname\n@required {zone_id: str, setting_id: str, hostname: str}\n@returns(200) Delete TLS setting for hostname response.\n@errors {4XX: Delete TLS setting for hostname response failure.}\n\n@endpoint GET /zones/{zone_id}/hostnames/settings/{setting_id}/{hostname}\n@desc Get TLS setting for hostname\n@required {zone_id: str, setting_id: str, hostname: str}\n@returns(200) Get TLS setting for hostname response.\n@errors {4XX: Get TLS setting for hostname response failure.}\n\n@endpoint PUT /zones/{zone_id}/hostnames/settings/{setting_id}/{hostname}\n@desc Edit TLS setting for hostname\n@required {zone_id: str, setting_id: str, hostname: str, value: any # The TLS setting value. The type depends on the `setting_id` used in the request path: - `ciphers`: an array of allowed cipher suite strings in BoringSSL format (e.g., `[\"ECDHE-RSA-AES128-GCM-SHA256\", \"AES128-GCM-SHA256\"]`). - `min_tls_version`: a string indicating the minimum TLS version — one of `\"1.0\"`, `\"1.1\"`, `\"1.2\"`, or `\"1.3\"` (e.g., `\"1.2\"`). - `http2`: a string indicating whether HTTP/2 is enabled — `\"on\"` or `\"off\"` (e.g., `\"on\"`).}\n@returns(200) Edit TLS setting for hostname response.\n@errors {4XX: Edit TLS setting for hostname response failure.}\n\n@endpoint POST /zones/{zone_id}/intel/sinkholes/{sinkhole_id}/ingresses\n@desc Create an ingress rule\n@required {zone_id: str # The unique identifier for the Cloudflare zone., sinkhole_id: str # The unique identifier for the sinkhole., cidr: str # The CIDR block for the ingress rule in IPv4 or IPv6 notation (e.g., 192.0.2.0/24). Provide a Cloudflare BYOIP CIDR that your account owns.}\n@returns(201) Ingress created.\n@errors {4XX: Error response.}\n\n@endpoint DELETE /zones/{zone_id}/intel/sinkholes/{sinkhole_id}/ingresses/{ingress_id}\n@desc Delete an ingress rule\n@required {zone_id: str # The unique identifier for the Cloudflare zone., sinkhole_id: str # The unique identifier for the sinkhole., ingress_id: str # The unique identifier for the ingress rule.}\n@returns(200) Successful response.\n@errors {4XX: Error response.}\n\n@endpoint GET /zones/{zone_id}/intel/sinkholes/{sinkhole_id}/ingresses/{ingress_id}\n@desc Get an ingress rule\n@required {zone_id: str # The unique identifier for the Cloudflare zone., sinkhole_id: str # The unique identifier for the sinkhole., ingress_id: str # The unique identifier for the ingress rule.}\n@returns(200) Successful response.\n@errors {4XX: Error response.}\n\n@endpoint PUT /zones/{zone_id}/intel/sinkholes/{sinkhole_id}/ingresses/{ingress_id}\n@desc Update an ingress rule\n@required {zone_id: str # The unique identifier for the Cloudflare zone., sinkhole_id: str # The unique identifier for the sinkhole., ingress_id: str # The unique identifier for the ingress rule., cidr: str # The CIDR block for the ingress rule in IPv4 or IPv6 notation (e.g., 192.0.2.0/24). Provide a Cloudflare BYOIP CIDR that your account owns.}\n@returns(200) Successful response.\n@errors {4XX: Error response.}\n\n@endpoint GET /zones/{zone_id}/keyless_certificates\n@desc List Keyless SSL Configurations\n@required {zone_id: str}\n@returns(200) List Keyless SSL Configurations response.\n@errors {4XX: List Keyless SSL Configurations response failure.}\n\n@endpoint POST /zones/{zone_id}/keyless_certificates\n@desc Create Keyless SSL Configuration\n@required {zone_id: str, certificate: str # The zone's SSL certificate or SSL certificate and intermediate(s)., host: str(hostname) # The keyless SSL name., port: num=24008 # The keyless SSL port used to communicate between Cloudflare and the client's Keyless SSL server.}\n@optional {bundle_method: str(ubiquitous/optimal/force)=ubiquitous # A ubiquitous bundle has the highest probability of being verified everywhere, even by clients using outdated or unusual trust stores. An optimal bundle uses the shortest chain and newest intermediates. And the force bundle verifies the chain, but does not otherwise modify it., name: str # The keyless SSL name., tunnel: map{private_ip!: str, vnet_id!: str} # Configuration for using Keyless SSL through a Cloudflare Tunnel.}\n@returns(200) Create Keyless SSL Configuration response.\n@errors {4XX: Create Keyless SSL Configuration response failure.}\n\n@endpoint DELETE /zones/{zone_id}/keyless_certificates/{keyless_certificate_id}\n@desc Delete Keyless SSL Configuration\n@required {keyless_certificate_id: str, zone_id: str}\n@returns(200) Delete Keyless SSL Configuration response.\n@errors {4XX: Delete Keyless SSL Configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/keyless_certificates/{keyless_certificate_id}\n@desc Get Keyless SSL Configuration\n@required {keyless_certificate_id: str, zone_id: str}\n@returns(200) Get Keyless SSL Configuration response.\n@errors {4XX: Get Keyless SSL Configuration response failure.}\n\n@endpoint PATCH /zones/{zone_id}/keyless_certificates/{keyless_certificate_id}\n@desc Edit Keyless SSL Configuration\n@required {keyless_certificate_id: str, zone_id: str}\n@optional {enabled: bool # Whether or not the Keyless SSL is on or off., host: str(hostname) # The keyless SSL name., name: str # The keyless SSL name., port: num=24008 # The keyless SSL port used to communicate between Cloudflare and the client's Keyless SSL server., tunnel: map{private_ip!: str, vnet_id!: str} # Configuration for using Keyless SSL through a Cloudflare Tunnel.}\n@returns(200) Edit Keyless SSL Configuration response.\n@errors {4XX: Edit Keyless SSL Configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/leaked-credential-checks\n@desc Get the Leaked Credential Checks status for a zone.\n@required {zone_id: str}\n@returns(200) Get Leaked Credential Checks status response.\n@errors {4XX: Get Leaked Credential Checks status failure response.}\n\n@endpoint POST /zones/{zone_id}/leaked-credential-checks\n@desc Update the Leaked Credential Checks status for a zone.\n@required {zone_id: str}\n@optional {enabled: bool # Determines whether or not Leaked Credential Checks are enabled.}\n@returns(200) Update Leaked Credential Checks status response.\n@errors {4XX: Update Leaked Credential Checks status failure response.}\n\n@endpoint GET /zones/{zone_id}/leaked-credential-checks/detections\n@desc List the custom detection locations of a zone.\n@required {zone_id: str}\n@returns(200) List Leaked Credential Checks custom detection locations response.\n@errors {4XX: List Leaked Credential Checks custom detection locations failure response.}\n\n@endpoint POST /zones/{zone_id}/leaked-credential-checks/detections\n@desc Create a custom detection location for a zone.\n@required {zone_id: str}\n@optional {id: any # Defines the unique ID for this custom detection., password: str # Defines ehe ruleset expression to use in matching the password in a request., username: str # Defines the ruleset expression to use in matching the username in a request.}\n@returns(200) Create Leaked Credential Checks custom detection location response.\n@errors {4XX: Create Leaked Credential Checks custom detection location failure response.}\n\n@endpoint DELETE /zones/{zone_id}/leaked-credential-checks/detections/{detection_id}\n@desc Delete a custom detection location from a zone.\n@required {zone_id: str, detection_id: any}\n@returns(200) {errors: [map], messages: [map], result: any, success: bool} # Delete Leaked Credential Checks custom detection location response.\n@errors {4XX: Delete Leaked Credential Checks custom detection location failure response.}\n\n@endpoint GET /zones/{zone_id}/leaked-credential-checks/detections/{detection_id}\n@desc Get a custom detection location of a zone.\n@required {zone_id: str, detection_id: any}\n@returns(200) Get Leaked Credential Checks custom detection location response.\n@errors {4XX: Get Leaked Credential Checks custom detection location failure response.}\n\n@endpoint PUT /zones/{zone_id}/leaked-credential-checks/detections/{detection_id}\n@desc Update a custom detection location of a zone.\n@required {zone_id: str, detection_id: any}\n@optional {id: any # Defines the unique ID for this custom detection., password: str # Defines ehe ruleset expression to use in matching the password in a request., username: str # Defines the ruleset expression to use in matching the username in a request.}\n@returns(200) Update Leaked Credential Checks custom detection location response.\n@errors {4XX: Update Leaked Credential Checks custom detection location failure response.}\n\n@endpoint GET /zones/{zone_id}/load_balancers\n@desc List Load Balancers\n@required {zone_id: str}\n@returns(200) List Load Balancers response.\n@errors {4XX: List Load Balancers response failure.}\n\n@endpoint POST /zones/{zone_id}/load_balancers\n@desc Create Load Balancer\n@required {zone_id: str, default_pools: [str] # A list of pool IDs ordered by their failover priority. Pools defined here are used by default, or when region_pools are not configured for a given region., fallback_pool: str # The pool ID to use when all other pools are detected as unhealthy., name: str # The DNS hostname to associate with your Load Balancer. If this hostname already exists as a DNS record in Cloudflare's DNS, the Load Balancer will take precedence and the DNS record will not be used.}\n@optional {adaptive_routing: map{failover_across_pools: bool} # Controls features that modify the routing of requests to pools and origins in response to dynamic conditions, such as during the interval between active health monitoring requests. For example, zero-downtime failover occurs immediately when an origin becomes unavailable due to HTTP 521, 522, or 523 response codes. If there is another healthy origin in the same pool, the request is retried once against this alternate origin., country_pools: map # A mapping of country codes to a list of pool IDs (ordered by their failover priority) for the given country. Any country not explicitly defined will fall back to using the corresponding region_pool mapping if it exists else to default_pools., description: str # Object description., location_strategy: map{mode: str, prefer_ecs: str} # Controls location-based steering for non-proxied requests. See `steering_policy` to learn how steering is affected., networks: [str] # List of networks where Load Balancer or Pool is enabled., pop_pools: map # Enterprise only: A mapping of Cloudflare PoP identifiers to a list of pool IDs (ordered by their failover priority) for the PoP (datacenter). Any PoPs not explicitly defined will fall back to using the corresponding country_pool, then region_pool mapping if it exists else to default_pools., proxied: bool=false # Whether the hostname should be gray clouded (false) or orange clouded (true)., random_steering: map{default_weight: num, pool_weights: map} # Configures pool weights. - `steering_policy=\"random\"`: A random pool is selected with probability proportional to pool weights. - `steering_policy=\"least_outstanding_requests\"`: Use pool weights to scale each pool's outstanding requests. - `steering_policy=\"least_connections\"`: Use pool weights to scale each pool's open connections., region_pools: map # A mapping of region codes to a list of pool IDs (ordered by their failover priority) for the given region. Any regions not explicitly defined will fall back to using default_pools., rules: [map{condition: str, disabled: bool, fixed_response: map, name: str, overrides: map, priority: int, terminates: bool}] # BETA Field Not General Access: A list of rules for this load balancer to execute., session_affinity: str(none/cookie/ip_cookie/header)=none # Specifies the type of session affinity the load balancer should use unless specified as `\"none\"`. The supported types are: - `\"cookie\"`: On the first request to a proxied load balancer, a cookie is generated, encoding information of which origin the request will be forwarded to. Subsequent requests, by the same client to the same load balancer, will be sent to the origin server the cookie encodes, for the duration of the cookie and as long as the origin server remains healthy. If the cookie has expired or the origin server is unhealthy, then a new origin server is calculated and used. - `\"ip_cookie\"`: Behaves the same as `\"cookie\"` except the initial origin selection is stable and based on the client's ip address. - `\"header\"`: On the first request to a proxied load balancer, a session key based on the configured HTTP headers (see `session_affinity_attributes.headers`) is generated, encoding the request headers used for storing in the load balancer session state which origin the request will be forwarded to. Subsequent requests to the load balancer with the same headers will be sent to the same origin server, for the duration of the session and as long as the origin server remains healthy. If the session has been idle for the duration of `session_affinity_ttl` seconds or the origin server is unhealthy, then a new origin server is calculated and used. See `headers` in `session_affinity_attributes` for additional required configuration., session_affinity_attributes: map{drain_duration: num, headers: [str], require_all_headers: bool, samesite: str, secure: str, zero_downtime_failover: str} # Configures attributes for session affinity., session_affinity_ttl: num # Time, in seconds, until a client's session expires after being created. Once the expiry time has been reached, subsequent requests may get sent to a different origin server. The accepted ranges per `session_affinity` policy are: - `\"cookie\"` / `\"ip_cookie\"`: The current default of 23 hours will be used unless explicitly set. The accepted range of values is between [1800, 604800]. - `\"header\"`: The current default of 1800 seconds will be used unless explicitly set. The accepted range of values is between [30, 3600]. Note: With session affinity by header, sessions only expire after they haven't been used for the number of seconds specified., steering_policy: str(off/geo/random/dynamic_latency/proximity/least_outstanding_requests/least_connections/)= # Steering Policy for this load balancer. - `\"off\"`: Use `default_pools`. - `\"geo\"`: Use `region_pools`/`country_pools`/`pop_pools`. For non-proxied requests, the country for `country_pools` is determined by `location_strategy`. - `\"random\"`: Select a pool randomly. - `\"dynamic_latency\"`: Use round trip time to select the closest pool in default_pools (requires pool health checks). - `\"proximity\"`: Use the pools' latitude and longitude to select the closest pool using the Cloudflare PoP location for proxied requests or the location determined by `location_strategy` for non-proxied requests. - `\"least_outstanding_requests\"`: Select a pool by taking into consideration `random_steering` weights, as well as each pool's number of outstanding requests. Pools with more pending requests are weighted proportionately less relative to others. - `\"least_connections\"`: Select a pool by taking into consideration `random_steering` weights, as well as each pool's number of open connections. Pools with more open connections are weighted proportionately less relative to others. Supported for HTTP/1 and HTTP/2 connections. - `\"\"`: Will map to `\"geo\"` if you use `region_pools`/`country_pools`/`pop_pools` otherwise `\"off\"`., ttl: num # Time to live (TTL) of the DNS entry for the IP address returned by this load balancer. This only applies to gray-clouded (unproxied) load balancers.}\n@returns(200) Create Load Balancer response.\n@errors {4XX: Create Load Balancer response failure.}\n\n@endpoint DELETE /zones/{zone_id}/load_balancers/{load_balancer_id}\n@desc Delete Load Balancer\n@required {zone_id: str, load_balancer_id: str}\n@returns(200) Delete Load Balancer response.\n@errors {4XX: Delete Load Balancer response failure.}\n\n@endpoint GET /zones/{zone_id}/load_balancers/{load_balancer_id}\n@desc Load Balancer Details\n@required {zone_id: str, load_balancer_id: str}\n@returns(200) Load Balancer Details response.\n@errors {4XX: Load Balancer Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/load_balancers/{load_balancer_id}\n@desc Patch Load Balancer\n@required {zone_id: str, load_balancer_id: str}\n@optional {adaptive_routing: map{failover_across_pools: bool} # Controls features that modify the routing of requests to pools and origins in response to dynamic conditions, such as during the interval between active health monitoring requests. For example, zero-downtime failover occurs immediately when an origin becomes unavailable due to HTTP 521, 522, or 523 response codes. If there is another healthy origin in the same pool, the request is retried once against this alternate origin., country_pools: map # A mapping of country codes to a list of pool IDs (ordered by their failover priority) for the given country. Any country not explicitly defined will fall back to using the corresponding region_pool mapping if it exists else to default_pools., default_pools: [str] # A list of pool IDs ordered by their failover priority. Pools defined here are used by default, or when region_pools are not configured for a given region., description: str # Object description., enabled: bool=true # Whether to enable (the default) this load balancer., fallback_pool: str # The pool ID to use when all other pools are detected as unhealthy., location_strategy: map{mode: str, prefer_ecs: str} # Controls location-based steering for non-proxied requests. See `steering_policy` to learn how steering is affected., name: str # The DNS hostname to associate with your Load Balancer. If this hostname already exists as a DNS record in Cloudflare's DNS, the Load Balancer will take precedence and the DNS record will not be used., pop_pools: map # Enterprise only: A mapping of Cloudflare PoP identifiers to a list of pool IDs (ordered by their failover priority) for the PoP (datacenter). Any PoPs not explicitly defined will fall back to using the corresponding country_pool, then region_pool mapping if it exists else to default_pools., proxied: bool=false # Whether the hostname should be gray clouded (false) or orange clouded (true)., random_steering: map{default_weight: num, pool_weights: map} # Configures pool weights. - `steering_policy=\"random\"`: A random pool is selected with probability proportional to pool weights. - `steering_policy=\"least_outstanding_requests\"`: Use pool weights to scale each pool's outstanding requests. - `steering_policy=\"least_connections\"`: Use pool weights to scale each pool's open connections., region_pools: map # A mapping of region codes to a list of pool IDs (ordered by their failover priority) for the given region. Any regions not explicitly defined will fall back to using default_pools., rules: [map{condition: str, disabled: bool, fixed_response: map, name: str, overrides: map, priority: int, terminates: bool}] # BETA Field Not General Access: A list of rules for this load balancer to execute., session_affinity: str(none/cookie/ip_cookie/header)=none # Specifies the type of session affinity the load balancer should use unless specified as `\"none\"`. The supported types are: - `\"cookie\"`: On the first request to a proxied load balancer, a cookie is generated, encoding information of which origin the request will be forwarded to. Subsequent requests, by the same client to the same load balancer, will be sent to the origin server the cookie encodes, for the duration of the cookie and as long as the origin server remains healthy. If the cookie has expired or the origin server is unhealthy, then a new origin server is calculated and used. - `\"ip_cookie\"`: Behaves the same as `\"cookie\"` except the initial origin selection is stable and based on the client's ip address. - `\"header\"`: On the first request to a proxied load balancer, a session key based on the configured HTTP headers (see `session_affinity_attributes.headers`) is generated, encoding the request headers used for storing in the load balancer session state which origin the request will be forwarded to. Subsequent requests to the load balancer with the same headers will be sent to the same origin server, for the duration of the session and as long as the origin server remains healthy. If the session has been idle for the duration of `session_affinity_ttl` seconds or the origin server is unhealthy, then a new origin server is calculated and used. See `headers` in `session_affinity_attributes` for additional required configuration., session_affinity_attributes: map{drain_duration: num, headers: [str], require_all_headers: bool, samesite: str, secure: str, zero_downtime_failover: str} # Configures attributes for session affinity., session_affinity_ttl: num # Time, in seconds, until a client's session expires after being created. Once the expiry time has been reached, subsequent requests may get sent to a different origin server. The accepted ranges per `session_affinity` policy are: - `\"cookie\"` / `\"ip_cookie\"`: The current default of 23 hours will be used unless explicitly set. The accepted range of values is between [1800, 604800]. - `\"header\"`: The current default of 1800 seconds will be used unless explicitly set. The accepted range of values is between [30, 3600]. Note: With session affinity by header, sessions only expire after they haven't been used for the number of seconds specified., steering_policy: str(off/geo/random/dynamic_latency/proximity/least_outstanding_requests/least_connections/)= # Steering Policy for this load balancer. - `\"off\"`: Use `default_pools`. - `\"geo\"`: Use `region_pools`/`country_pools`/`pop_pools`. For non-proxied requests, the country for `country_pools` is determined by `location_strategy`. - `\"random\"`: Select a pool randomly. - `\"dynamic_latency\"`: Use round trip time to select the closest pool in default_pools (requires pool health checks). - `\"proximity\"`: Use the pools' latitude and longitude to select the closest pool using the Cloudflare PoP location for proxied requests or the location determined by `location_strategy` for non-proxied requests. - `\"least_outstanding_requests\"`: Select a pool by taking into consideration `random_steering` weights, as well as each pool's number of outstanding requests. Pools with more pending requests are weighted proportionately less relative to others. - `\"least_connections\"`: Select a pool by taking into consideration `random_steering` weights, as well as each pool's number of open connections. Pools with more open connections are weighted proportionately less relative to others. Supported for HTTP/1 and HTTP/2 connections. - `\"\"`: Will map to `\"geo\"` if you use `region_pools`/`country_pools`/`pop_pools` otherwise `\"off\"`., ttl: num # Time to live (TTL) of the DNS entry for the IP address returned by this load balancer. This only applies to gray-clouded (unproxied) load balancers.}\n@returns(200) Patch Load Balancer response.\n@errors {4XX: Patch Load Balancer response failure.}\n\n@endpoint PUT /zones/{zone_id}/load_balancers/{load_balancer_id}\n@desc Update Load Balancer\n@required {zone_id: str, load_balancer_id: str, default_pools: [str] # A list of pool IDs ordered by their failover priority. Pools defined here are used by default, or when region_pools are not configured for a given region., fallback_pool: str # The pool ID to use when all other pools are detected as unhealthy., name: str # The DNS hostname to associate with your Load Balancer. If this hostname already exists as a DNS record in Cloudflare's DNS, the Load Balancer will take precedence and the DNS record will not be used.}\n@optional {adaptive_routing: map{failover_across_pools: bool} # Controls features that modify the routing of requests to pools and origins in response to dynamic conditions, such as during the interval between active health monitoring requests. For example, zero-downtime failover occurs immediately when an origin becomes unavailable due to HTTP 521, 522, or 523 response codes. If there is another healthy origin in the same pool, the request is retried once against this alternate origin., country_pools: map # A mapping of country codes to a list of pool IDs (ordered by their failover priority) for the given country. Any country not explicitly defined will fall back to using the corresponding region_pool mapping if it exists else to default_pools., description: str # Object description., enabled: bool=true # Whether to enable (the default) this load balancer., location_strategy: map{mode: str, prefer_ecs: str} # Controls location-based steering for non-proxied requests. See `steering_policy` to learn how steering is affected., networks: [str] # List of networks where Load Balancer or Pool is enabled., pop_pools: map # Enterprise only: A mapping of Cloudflare PoP identifiers to a list of pool IDs (ordered by their failover priority) for the PoP (datacenter). Any PoPs not explicitly defined will fall back to using the corresponding country_pool, then region_pool mapping if it exists else to default_pools., proxied: bool=false # Whether the hostname should be gray clouded (false) or orange clouded (true)., random_steering: map{default_weight: num, pool_weights: map} # Configures pool weights. - `steering_policy=\"random\"`: A random pool is selected with probability proportional to pool weights. - `steering_policy=\"least_outstanding_requests\"`: Use pool weights to scale each pool's outstanding requests. - `steering_policy=\"least_connections\"`: Use pool weights to scale each pool's open connections., region_pools: map # A mapping of region codes to a list of pool IDs (ordered by their failover priority) for the given region. Any regions not explicitly defined will fall back to using default_pools., rules: [map{condition: str, disabled: bool, fixed_response: map, name: str, overrides: map, priority: int, terminates: bool}] # BETA Field Not General Access: A list of rules for this load balancer to execute., session_affinity: str(none/cookie/ip_cookie/header)=none # Specifies the type of session affinity the load balancer should use unless specified as `\"none\"`. The supported types are: - `\"cookie\"`: On the first request to a proxied load balancer, a cookie is generated, encoding information of which origin the request will be forwarded to. Subsequent requests, by the same client to the same load balancer, will be sent to the origin server the cookie encodes, for the duration of the cookie and as long as the origin server remains healthy. If the cookie has expired or the origin server is unhealthy, then a new origin server is calculated and used. - `\"ip_cookie\"`: Behaves the same as `\"cookie\"` except the initial origin selection is stable and based on the client's ip address. - `\"header\"`: On the first request to a proxied load balancer, a session key based on the configured HTTP headers (see `session_affinity_attributes.headers`) is generated, encoding the request headers used for storing in the load balancer session state which origin the request will be forwarded to. Subsequent requests to the load balancer with the same headers will be sent to the same origin server, for the duration of the session and as long as the origin server remains healthy. If the session has been idle for the duration of `session_affinity_ttl` seconds or the origin server is unhealthy, then a new origin server is calculated and used. See `headers` in `session_affinity_attributes` for additional required configuration., session_affinity_attributes: map{drain_duration: num, headers: [str], require_all_headers: bool, samesite: str, secure: str, zero_downtime_failover: str} # Configures attributes for session affinity., session_affinity_ttl: num # Time, in seconds, until a client's session expires after being created. Once the expiry time has been reached, subsequent requests may get sent to a different origin server. The accepted ranges per `session_affinity` policy are: - `\"cookie\"` / `\"ip_cookie\"`: The current default of 23 hours will be used unless explicitly set. The accepted range of values is between [1800, 604800]. - `\"header\"`: The current default of 1800 seconds will be used unless explicitly set. The accepted range of values is between [30, 3600]. Note: With session affinity by header, sessions only expire after they haven't been used for the number of seconds specified., steering_policy: str(off/geo/random/dynamic_latency/proximity/least_outstanding_requests/least_connections/)= # Steering Policy for this load balancer. - `\"off\"`: Use `default_pools`. - `\"geo\"`: Use `region_pools`/`country_pools`/`pop_pools`. For non-proxied requests, the country for `country_pools` is determined by `location_strategy`. - `\"random\"`: Select a pool randomly. - `\"dynamic_latency\"`: Use round trip time to select the closest pool in default_pools (requires pool health checks). - `\"proximity\"`: Use the pools' latitude and longitude to select the closest pool using the Cloudflare PoP location for proxied requests or the location determined by `location_strategy` for non-proxied requests. - `\"least_outstanding_requests\"`: Select a pool by taking into consideration `random_steering` weights, as well as each pool's number of outstanding requests. Pools with more pending requests are weighted proportionately less relative to others. - `\"least_connections\"`: Select a pool by taking into consideration `random_steering` weights, as well as each pool's number of open connections. Pools with more open connections are weighted proportionately less relative to others. Supported for HTTP/1 and HTTP/2 connections. - `\"\"`: Will map to `\"geo\"` if you use `region_pools`/`country_pools`/`pop_pools` otherwise `\"off\"`., ttl: num # Time to live (TTL) of the DNS entry for the IP address returned by this load balancer. This only applies to gray-clouded (unproxied) load balancers.}\n@returns(200) Update Load Balancer response.\n@errors {4XX: Update Load Balancer response failure.}\n\n@endpoint GET /zones/{zone_id}/logpush/datasets/{dataset_id}/fields\n@desc List fields\n@required {dataset_id: str, zone_id: str}\n@returns(200) List fields response.\n@errors {4XX: List fields response failure.}\n\n@endpoint GET /zones/{zone_id}/logpush/datasets/{dataset_id}/jobs\n@desc List Logpush jobs for a dataset\n@required {dataset_id: str, zone_id: str}\n@returns(200) List Logpush jobs for a dataset response.\n@errors {4XX: List Logpush jobs for a dataset response failure.}\n\n@endpoint GET /zones/{zone_id}/logpush/edge/jobs\n@desc List Instant Logs jobs\n@required {zone_id: str}\n@returns(200) List Instant Logs jobs response.\n@errors {4XX: List Instant Logs jobs response failure.}\n\n@endpoint POST /zones/{zone_id}/logpush/edge/jobs\n@desc Create Instant Logs job\n@required {zone_id: str}\n@optional {fields: str # Comma-separated list of fields., filter: str # Filters to drill down into specific events., sample: int # The sample parameter is the sample rate of the records set by the client: \"sample\": 1 is 100% of records \"sample\": 10 is 10% and so on.}\n@returns(200) Create Instant Logs job response.\n@errors {4XX: Create Instant Logs job response failure.}\n\n@endpoint GET /zones/{zone_id}/logpush/jobs\n@desc List Logpush jobs\n@required {zone_id: str}\n@returns(200) List Logpush jobs response.\n@errors {4XX: List Logpush jobs response failure.}\n\n@endpoint POST /zones/{zone_id}/logpush/jobs\n@desc Create Logpush job\n@required {zone_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@optional {dataset: str(access_requests/account_abuse_protection_events/audit_logs/audit_logs_v2/biso_user_actions/casb_findings/device_posture_results/dex_application_tests/dex_device_state_events/dlp_forensic_copies/dns_firewall_logs/dns_logs/email_security_alerts/email_security_post_delivery_events/firewall_events/gateway_dns/gateway_http/gateway_network/http_requests/ipsec_logs/magic_bgp_logs/magic_ids_detections/mcp_portal_logs/mnm_flow_logs/nel_reports/network_analytics_logs/page_shield_events/sinkhole_http_logs/spectrum_events/ssh_logs/turnstile_events/warp_config_changes/warp_toggle_changes/websocket_analytics/workers_trace_events/zaraz_events/zero_trust_network_sessions)=http_requests # Name of the dataset. A list of supported datasets can be found on the [Developer Docs](https://developers.cloudflare.com/logs/reference/log-fields/)., enabled: bool=false # Flag that indicates if the job is enabled., filter: str # The filters to select the events to include and/or remove from your logs. For more information, refer to [Filters](https://developers.cloudflare.com/logs/reference/filters/)., filter_attack_traffic: bool=false # When true, excludes DDoS attack traffic from logs. This option is supported for the `http_requests`, `firewall_events`, and `network_analytics_logs` datasets., frequency: str(high/low)=high # This field is deprecated. Please use `max_upload_*` parameters instead. . The frequency at which Cloudflare sends batches of logs to your destination. Setting frequency to high sends your logs in larger quantities of smaller files. Setting frequency to low sends logs in smaller quantities of larger files., kind: str(/edge)= # The kind parameter (optional) is used to differentiate between Logpush and Edge Log Delivery jobs (when supported by the dataset)., logpull_options: str(uri-reference) # This field is deprecated. Use `output_options` instead. Configuration string. It specifies things like requested fields and timestamp formats. If migrating from the logpull api, copy the url (full url or just the query string) of your call here, and logpush will keep on making this call for you, setting start and end times appropriately., max_upload_bytes: int # The maximum uncompressed file size of a batch of logs. This setting value must be between `5 MB` and `1 GB`, or `0` to disable it. Note that you cannot set a minimum file size; this means that log files may be much smaller than this batch size., max_upload_interval_seconds: int # The maximum interval in seconds for log batches. This setting must be between 30 and 300 seconds (5 minutes), or `0` to disable it. Note that you cannot specify a minimum interval for log batches; this means that log files may be sent in shorter intervals than this., max_upload_records: int # The maximum number of log lines per batch. This setting must be between 1000 and 1,000,000 lines, or `0` to disable it. Note that you cannot specify a minimum number of log lines per batch; this means that log files may contain many fewer lines than this., name: str # Optional human readable job name. Not unique. Cloudflare suggests. that you set this to a meaningful string, like the domain name, to make it easier to identify your job., output_options: map{CVE-2021-44228: bool, batch_prefix: str, batch_suffix: str, field_delimiter: str, field_names: [str], merge_subrequests: bool, output_type: str, record_delimiter: str, record_prefix: str, record_suffix: str, record_template: str, sample_rate: num(float), timestamp_format: str} # The structured replacement for `logpull_options`. When including this field, the `logpull_option` field will be ignored., ownership_challenge: str # Ownership challenge token to prove destination ownership.}\n@returns(200) Create Logpush job response.\n@errors {4XX: Create Logpush job response failure.}\n@example_request {\"dataset\":\"http_requests\",\"destination_conf\":\"s3://mybucket/logs?region=us-west-2\",\"enabled\":false,\"filter\":\"{\\\"where\\\":{\\\"and\\\":[{\\\"key\\\":\\\"ClientRequestPath\\\",\\\"operator\\\":\\\"contains\\\",\\\"value\\\":\\\"/static\\\"},{\\\"key\\\":\\\"ClientRequestHost\\\",\\\"operator\\\":\\\"eq\\\",\\\"value\\\":\\\"example.com\\\"}]}}\",\"kind\":\"\",\"max_upload_bytes\":5000000,\"max_upload_interval_seconds\":30,\"max_upload_records\":1000,\"name\":\"example.com\",\"output_options\":{\"CVE-2021-44228\":false,\"batch_prefix\":\"\",\"batch_suffix\":\"\",\"field_delimiter\":\",\",\"field_names\":[\"RayID\",\"ClientIP\",\"EdgeStartTimestamp\"],\"output_type\":\"ndjson\",\"record_delimiter\":\"\",\"record_prefix\":\"{\",\"record_suffix\":\"}\\n\",\"sample_rate\":1,\"timestamp_format\":\"unixnano\"},\"ownership_challenge\":\"00000000000000000000\"}\n\n@endpoint DELETE /zones/{zone_id}/logpush/jobs/{job_id}\n@desc Delete Logpush job\n@required {job_id: int, zone_id: str}\n@returns(200) Delete Logpush job response.\n@errors {4XX: Delete Logpush job response failure.}\n\n@endpoint GET /zones/{zone_id}/logpush/jobs/{job_id}\n@desc Get Logpush job details\n@required {job_id: int, zone_id: str}\n@returns(200) Get Logpush job details response.\n@errors {4XX: Get Logpush job details response failure.}\n\n@endpoint PUT /zones/{zone_id}/logpush/jobs/{job_id}\n@desc Update Logpush job\n@required {job_id: int, zone_id: str}\n@optional {destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included., enabled: bool=false # Flag that indicates if the job is enabled., filter: str # The filters to select the events to include and/or remove from your logs. For more information, refer to [Filters](https://developers.cloudflare.com/logs/reference/filters/)., filter_attack_traffic: bool=false # When true, excludes DDoS attack traffic from logs. This option is supported for the `http_requests`, `firewall_events`, and `network_analytics_logs` datasets., frequency: str(high/low)=high # This field is deprecated. Please use `max_upload_*` parameters instead. . The frequency at which Cloudflare sends batches of logs to your destination. Setting frequency to high sends your logs in larger quantities of smaller files. Setting frequency to low sends logs in smaller quantities of larger files., kind: str(/edge)= # The kind parameter (optional) is used to differentiate between Logpush and Edge Log Delivery jobs (when supported by the dataset)., logpull_options: str(uri-reference) # This field is deprecated. Use `output_options` instead. Configuration string. It specifies things like requested fields and timestamp formats. If migrating from the logpull api, copy the url (full url or just the query string) of your call here, and logpush will keep on making this call for you, setting start and end times appropriately., max_upload_bytes: int # The maximum uncompressed file size of a batch of logs. This setting value must be between `5 MB` and `1 GB`, or `0` to disable it. Note that you cannot set a minimum file size; this means that log files may be much smaller than this batch size., max_upload_interval_seconds: int # The maximum interval in seconds for log batches. This setting must be between 30 and 300 seconds (5 minutes), or `0` to disable it. Note that you cannot specify a minimum interval for log batches; this means that log files may be sent in shorter intervals than this., max_upload_records: int # The maximum number of log lines per batch. This setting must be between 1000 and 1,000,000 lines, or `0` to disable it. Note that you cannot specify a minimum number of log lines per batch; this means that log files may contain many fewer lines than this., name: str # Optional human readable job name. Not unique. Cloudflare suggests. that you set this to a meaningful string, like the domain name, to make it easier to identify your job., output_options: map{CVE-2021-44228: bool, batch_prefix: str, batch_suffix: str, field_delimiter: str, field_names: [str], merge_subrequests: bool, output_type: str, record_delimiter: str, record_prefix: str, record_suffix: str, record_template: str, sample_rate: num(float), timestamp_format: str} # The structured replacement for `logpull_options`. When including this field, the `logpull_option` field will be ignored., ownership_challenge: str # Ownership challenge token to prove destination ownership.}\n@returns(200) Update Logpush job response.\n@errors {4XX: Update Logpush job response failure.}\n@example_request {\"destination_conf\":\"s3://mybucket/logs?region=us-west-2\",\"enabled\":false,\"filter\":\"{\\\"where\\\":{\\\"and\\\":[{\\\"key\\\":\\\"ClientRequestPath\\\",\\\"operator\\\":\\\"contains\\\",\\\"value\\\":\\\"/static\\\"},{\\\"key\\\":\\\"ClientRequestHost\\\",\\\"operator\\\":\\\"eq\\\",\\\"value\\\":\\\"example.com\\\"}]}}\",\"kind\":\"\",\"max_upload_bytes\":5000000,\"max_upload_interval_seconds\":30,\"max_upload_records\":1000,\"output_options\":{\"CVE-2021-44228\":false,\"batch_prefix\":\"\",\"batch_suffix\":\"\",\"field_delimiter\":\",\",\"field_names\":[\"RayID\",\"ClientIP\",\"EdgeStartTimestamp\"],\"output_type\":\"ndjson\",\"record_delimiter\":\"\",\"record_prefix\":\"{\",\"record_suffix\":\"}\\n\",\"sample_rate\":1,\"timestamp_format\":\"unixnano\"},\"ownership_challenge\":\"00000000000000000000\"}\n\n@endpoint POST /zones/{zone_id}/logpush/ownership\n@desc Get ownership challenge\n@required {zone_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@returns(200) Get ownership challenge response.\n@errors {4XX: Get ownership challenge response failure.}\n\n@endpoint POST /zones/{zone_id}/logpush/ownership/validate\n@desc Validate ownership challenge\n@required {zone_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included., ownership_challenge: str # Ownership challenge token to prove destination ownership.}\n@returns(200) Validate ownership challenge response.\n@errors {4XX: Validate ownership challenge response failure.}\n\n@endpoint POST /zones/{zone_id}/logpush/validate/destination\n@desc Validate destination\n@required {zone_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@returns(200) Validate destination response.\n@errors {4XX: Validate destination response failure.}\n\n@endpoint POST /zones/{zone_id}/logpush/validate/destination/exists\n@desc Check destination exists\n@required {zone_id: str, destination_conf: str(uri) # Uniquely identifies a resource (such as an s3 bucket) where data. will be pushed. Additional configuration parameters supported by the destination may be included.}\n@returns(200) Check destination exists response.\n@errors {4XX: Check destination exists response failure.}\n\n@endpoint POST /zones/{zone_id}/logpush/validate/origin\n@desc Validate origin\n@required {zone_id: str, logpull_options: str(uri-reference) # This field is deprecated. Use `output_options` instead. Configuration string. It specifies things like requested fields and timestamp formats. If migrating from the logpull api, copy the url (full url or just the query string) of your call here, and logpush will keep on making this call for you, setting start and end times appropriately.}\n@returns(200) Validate origin response.\n@errors {4XX: Validate origin response failure.}\n\n@endpoint GET /zones/{zone_id}/logs/control/retention/flag\n@desc Get log retention flag\n@required {zone_id: str}\n@returns(200) Get log retention flag response\n@errors {4XX: Get log retention flag response failure}\n\n@endpoint POST /zones/{zone_id}/logs/control/retention/flag\n@desc Update log retention flag\n@required {zone_id: str}\n@optional {flag: bool # The log retention flag for Logpull API.}\n@returns(200) Update log retention flag response\n@errors {4XX: Update log retention flag response failure}\n\n@endpoint GET /zones/{zone_id}/logs/explorer/datasets\n@desc List zone datasets\n@required {zone_id: str # Cloudflare zone ID.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # The datasets the zone has configured.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint POST /zones/{zone_id}/logs/explorer/datasets\n@desc Create a zone dataset\n@required {zone_id: str # Cloudflare zone ID., dataset: str # Dataset type name to create (e.g. `http_requests`).}\n@optional {fields: [map{enabled!: bool, name!: str}] # Controls which fields the API ingests. Defaults to all available fields when absent., filter: str # Optional Logpush filter predicate to restrict which events are ingested. If provided, replaces the dataset's default filter entirely. See [Logpush filters](https://developers.cloudflare.com/logs/reference/filters/) for syntax and examples.}\n@returns(201) {errors: [map], messages: [str], result: any, success: bool} # Dataset created successfully.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist., 409: A dataset of this type already exists for this account or zone.}\n\n@endpoint GET /zones/{zone_id}/logs/explorer/datasets/available\n@desc List available zone datasets\n@required {zone_id: str # Cloudflare zone ID.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # List of dataset types available to create.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint DELETE /zones/{zone_id}/logs/explorer/datasets/{dataset_id}\n@desc Delete a zone dataset\n@required {zone_id: str # Cloudflare zone ID., dataset_id: str # Log Explorer dataset ID.}\n@returns(202) {errors: [map], messages: [str], result: any, success: bool} # Dataset deletion accepted.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist., 409: A dataset of this type already exists for this account or zone.}\n\n@endpoint GET /zones/{zone_id}/logs/explorer/datasets/{dataset_id}\n@desc Get a zone dataset\n@required {zone_id: str # Cloudflare zone ID., dataset_id: str # Log Explorer dataset ID.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # Dataset details, including the fields active for ingestion.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint PUT /zones/{zone_id}/logs/explorer/datasets/{dataset_id}\n@desc Update a zone dataset\n@required {zone_id: str # Cloudflare zone ID., dataset_id: str # Log Explorer dataset ID., enabled: bool # Whether to enable or disable log ingest for this dataset.}\n@optional {deletion_protection: bool # Set to `false` to allow deletion of this dataset., fields: [map{enabled!: bool, name!: str}] # Controls which fields the API ingests after the update. Defaults to all available fields when absent., filter: str # Optional Logpush filter predicate to restrict which events are ingested. If omitted, the existing filter is left unchanged. Set to an empty string (`\"\"`) to clear the filter. Otherwise, replaces the dataset's filter entirely. See [Logpush filters](https://developers.cloudflare.com/logs/reference/filters/) for syntax and examples.}\n@returns(200) {errors: [map], messages: [str], result: any, success: bool} # The dataset after the update.\n@errors {400: Invalid request, unsupported dataset, or invalid field configuration., 403: The caller lacks permission or entitlement to access this resource., 404: The requested resource does not exist.}\n\n@endpoint GET /zones/{zone_id}/logs/explorer/query/sql\n@desc Run a log query\n@required {zone_id: str # Cloudflare zone ID., query: str # SQL query to execute.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # Query results.\n@errors {400: Invalid request or unsupported query., 403: Missing permission to access the requested resource., 404: Requested resource not found., 507: Query exceeded internal memory or resource limits.}\n\n@endpoint POST /zones/{zone_id}/logs/explorer/query/sql\n@desc Run a log query\n@required {zone_id: str # Cloudflare zone ID.}\n@returns(200) {errors: [map], messages: [str], result: [map]?, success: bool} # Query results.\n@errors {400: Invalid request or unsupported query., 403: Missing permission to access the requested resource., 404: Requested resource not found., 507: Query exceeded internal memory or resource limits.}\n\n@endpoint GET /zones/{zone_id}/logs/rayids/{ray_id}\n@desc Get logs RayIDs\n@required {zone_id: str, ray_id: str}\n@optional {fields: str, timestamps: str}\n@returns(200) Get logs RayIDs response\n@errors {4XX: Get logs RayIDs response failure}\n\n@endpoint GET /zones/{zone_id}/logs/received\n@desc Get logs received\n@required {zone_id: str, end: any}\n@optional {start: any, fields: str, sample: num, count: int, timestamps: str}\n@returns(200) Get logs received response\n@errors {4XX: Get logs received response failure}\n\n@endpoint GET /zones/{zone_id}/logs/received/fields\n@desc List fields\n@required {zone_id: str}\n@returns(200) {key: str} # List fields response\n@errors {4XX: List fields response failure}\n\n@endpoint DELETE /zones/{zone_id}/managed_headers\n@desc Delete Managed Transforms\n@required {zone_id: str}\n@returns(204) An empty response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/managed_headers\n@desc List Managed Transforms\n@required {zone_id: str}\n@returns(200) A Managed Transforms response.\n@errors {4XX: A failure response.}\n\n@endpoint PATCH /zones/{zone_id}/managed_headers\n@desc Update Managed Transforms\n@required {zone_id: str}\n@optional {managed_request_headers: [any] # The list of Managed Request Transforms., managed_response_headers: [any] # The list of Managed Response Transforms.}\n@returns(200) A Managed Transforms response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/media/usage\n@desc Get zone Media usage\n@required {zone_id: str # Standard Cloudflare hex zone identifier. The API gateway resolves this to the owning account and translates it to an internal numeric ID before forwarding to the backend service.}\n@optional {metrics: str # Comma-separated list of metrics to include in the response. Available metrics depend on the endpoint. Billing usage supports: streamMinutesViewed, rateLimitingRequestsAllowed, loadBalancingQueries, argoAcceleratedBytes, workersRequests, workersKVReads, imageResizingRequests, spectrumBytesTransferred, mediaUniqueTransformations. Stream/media usage supports: streamMinutesViewed., since: str(date-time) # Start of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to 6 hours before the current time., until: str(date-time) # End of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to the current time., time_delta: str(hour/day/week/month/quarter/year)=hour # Time unit to aggregate usage observations into. Data retention is approximately 18 months. The effective number of data points returned depends on the time range and granularity selected. For example, requesting hourly granularity over 18 months could produce up to ~13,000 data points; use the limit parameter to cap results and be aware that responses may be truncated., limit: int=100 # Maximum number of data points to return. The actual number of results depends on the interaction between the time range (since/until) and time_delta granularity. Results are truncated to this limit without error if the time range produces more data points than the limit allows., filters: str # Filter expressions to apply to the query. Format: field==value. Multiple filters can be combined.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Usage analytics response.\n@errors {400: Bad request - invalid parameters or query., 401: Authentication required., 403: Insufficient permissions to access this resource.}\n\n@endpoint GET /zones/{zone_id}/origin/cloud_regions\n@desc List origin cloud region mappings\n@required {zone_id: str}\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Number of items per page.}\n@returns(200) List origin cloud region mappings response.\n@errors {4XX: List origin cloud region mappings failure.}\n\n@endpoint DELETE /zones/{zone_id}/origin/cloud_regions/batch\n@desc Batch delete origin cloud region mappings\n@required {zone_id: str}\n@returns(200) Batch delete origin cloud region mappings successful.\n@errors {4XX: Batch delete origin cloud region mappings failure.}\n@example_request [\"192.0.2.1\",\"2001:db8::1\"]\n\n@endpoint PUT /zones/{zone_id}/origin/cloud_regions/batch\n@desc Batch create or replace origin cloud region mappings\n@required {zone_id: str}\n@returns(200) Batch create or replace origin cloud region mappings successful.\n@errors {4XX: Batch create or replace origin cloud region mappings failure.}\n@example_request [{\"origin_ip\":\"192.0.2.1\",\"region\":\"us-east-1\",\"vendor\":\"aws\"},{\"origin_ip\":\"2001:db8::1\",\"region\":\"us-central1\",\"vendor\":\"gcp\"}]\n\n@endpoint GET /zones/{zone_id}/origin/cloud_regions/supported_regions\n@desc List supported cloud vendors and regions\n@required {zone_id: str}\n@returns(200) List supported cloud vendors and regions response.\n@errors {4XX: List supported cloud vendors and regions failure.}\n\n@endpoint DELETE /zones/{zone_id}/origin/cloud_regions/{origin_ip}\n@desc Delete an origin cloud region mapping\n@required {zone_id: str, origin_ip: str # Origin IP address whose mapping should be deleted.}\n@returns(200) Delete origin cloud region mapping response.\n@errors {4XX: Delete origin cloud region mapping failure.}\n\n@endpoint GET /zones/{zone_id}/origin/cloud_regions/{origin_ip}\n@desc Get an origin cloud region mapping\n@required {zone_id: str, origin_ip: str # Origin IP address to look up. IPv4 and IPv6 are supported.}\n@returns(200) Get origin cloud region mapping response.\n@errors {4XX: Get origin cloud region mapping failure.}\n\n@endpoint PUT /zones/{zone_id}/origin/cloud_regions/{origin_ip}\n@desc Create or replace an origin cloud region mapping\n@required {zone_id: str, origin_ip: str # Origin IP address to create or replace., origin_ip: str # Origin IP address (IPv4 or IPv6). For the single PUT endpoint (`PUT /origin/cloud_regions/{origin_ip}`), this field must match the path parameter or the request will be rejected with a 400 error. For the batch PUT endpoint, this field identifies which mapping to upsert., region: str # Cloud vendor region identifier. Must be a valid region for the specified vendor as returned by the supported_regions endpoint., vendor: str(aws/azure/gcp/oci) # Cloud vendor hosting the origin. Must be one of the supported vendors.}\n@returns(200) Create or replace origin cloud region mapping response.\n@errors {4XX: Create or replace origin cloud region mapping failure.}\n@example_request {\"origin_ip\":\"192.0.2.1\",\"region\":\"us-east-1\",\"vendor\":\"aws\"}\n\n@endpoint GET /zones/{zone_id}/origin_tls_client_auth\n@desc List Certificates\n@required {zone_id: str}\n@returns(200) List Certificates response.\n@errors {4XX: List Certificates response failure.}\n\n@endpoint POST /zones/{zone_id}/origin_tls_client_auth\n@desc Upload Certificate\n@required {zone_id: str, certificate: str # The zone's leaf certificate., private_key: str # The zone's private key.}\n@returns(200) Upload Certificate response.\n@errors {4XX: Upload Certificate response failure.}\n\n@endpoint GET /zones/{zone_id}/origin_tls_client_auth/hostnames\n@desc List Hostname Associations\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=50, status: str(active/pending_deployment/pending_deletion/deleted/deployment_timed_out/deletion_timed_out/all)}\n@returns(200) List Hostname Associations response.\n@errors {4XX: List Hostname Associations response failure.}\n\n@endpoint PUT /zones/{zone_id}/origin_tls_client_auth/hostnames\n@desc Enable or Disable a Hostname for Client Authentication\n@required {zone_id: str, config: [map{cert_id: str, enabled: bool, hostname: str}]}\n@returns(200) Enable or Disable a Hostname for Client Authentication response.\n@errors {4XX: Enable or Disable a Hostname for Client Authentication response failure.}\n\n@endpoint GET /zones/{zone_id}/origin_tls_client_auth/hostnames/certificates\n@desc List Certificates\n@required {zone_id: str}\n@returns(200) List Certificates response.\n@errors {4XX: List Certificates response failure.}\n\n@endpoint POST /zones/{zone_id}/origin_tls_client_auth/hostnames/certificates\n@desc Upload a Hostname Client Certificate\n@required {zone_id: str, certificate: str # The hostname certificate., private_key: str # The hostname certificate's private key.}\n@returns(200) Upload a Hostname Client Certificate response.\n@errors {4XX: Upload a Hostname Client Certificate response failure.}\n\n@endpoint DELETE /zones/{zone_id}/origin_tls_client_auth/hostnames/certificates/{certificate_id}\n@desc Delete Hostname Client Certificate\n@required {certificate_id: str, zone_id: str}\n@returns(200) Delete Hostname Client Certificate response.\n@errors {4XX: Delete Hostname Client Certificate response failure.}\n\n@endpoint GET /zones/{zone_id}/origin_tls_client_auth/hostnames/certificates/{certificate_id}\n@desc Get the Hostname Client Certificate\n@required {certificate_id: str, zone_id: str}\n@returns(200) Get the Hostname Client Certificate response.\n@errors {4XX: Get the Hostname Client Certificate response failure.}\n\n@endpoint GET /zones/{zone_id}/origin_tls_client_auth/hostnames/{hostname}\n@desc Get the Hostname Status for Client Authentication\n@required {hostname: str, zone_id: str}\n@returns(200) Get the Hostname Status for Client Authentication response.\n@errors {4XX: Get the Hostname Status for Client Authentication response failure.}\n\n@endpoint GET /zones/{zone_id}/origin_tls_client_auth/settings\n@desc Get Enablement Setting for Zone\n@required {zone_id: str}\n@returns(200) Get Enablement Setting for Zone response.\n@errors {4XX: Get Enablement Setting for Zone response failure.}\n\n@endpoint PUT /zones/{zone_id}/origin_tls_client_auth/settings\n@desc Set Enablement for Zone\n@required {zone_id: str, enabled: bool # Indicates whether zone-level authenticated origin pulls is enabled.}\n@returns(200) Set Enablement for Zone response.\n@errors {4XX: Set Enablement for Zone response failure.}\n\n@endpoint DELETE /zones/{zone_id}/origin_tls_client_auth/{certificate_id}\n@desc Delete Certificate\n@required {certificate_id: str, zone_id: str}\n@returns(200) Delete Certificate response.\n@errors {4XX: Delete Certificate response failure.}\n\n@endpoint GET /zones/{zone_id}/origin_tls_client_auth/{certificate_id}\n@desc Get Certificate Details\n@required {certificate_id: str, zone_id: str}\n@returns(200) Get Certificate Details response.\n@errors {4XX: Get Certificate Details response failure.}\n\n@endpoint GET /zones/{zone_id}/page_shield\n@desc Get client-side security settings\n@required {zone_id: str}\n@returns(200) Get Client-Side Security settings response\n@errors {4XX: Get Client-Side Security settings response failure}\n\n@endpoint PUT /zones/{zone_id}/page_shield\n@desc Update client-side security settings\n@required {zone_id: str}\n@optional {enabled: bool # When true, indicates that Client-Side Security is enabled., use_cloudflare_reporting_endpoint: bool # When true, CSP reports will be sent to https://csp-reporting.cloudflare.com/cdn-cgi/script_monitor/report, use_connection_url_path: bool # When true, the paths associated with connections URLs will also be analyzed.}\n@returns(200) Update Client-Side Security settings response\n@errors {4XX: Update Client-Side Security settings response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/connections\n@desc List detected connections\n@required {zone_id: str}\n@optional {exclude_urls: str, urls: str, hosts: str, page: str, per_page: num, order_by: str(first_seen_at/last_seen_at), direction: str(asc/desc), prioritize_malicious: bool, exclude_cdn_cgi: bool, status: str, page_url: str, export: str}\n@returns(200) List Client-Side Security connections response\n@errors {4XX: List Client-Side Security connections response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/connections/{connection_id}\n@desc Get a detected connection\n@required {zone_id: str, connection_id: str}\n@returns(200) Get a Client-Side Security connection response\n@errors {4XX: Get a Client-Side Security connection response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/cookies\n@desc List detected cookies\n@required {zone_id: str}\n@optional {hosts: str, page: str, per_page: num, order_by: str(first_seen_at/last_seen_at), direction: str(asc/desc), page_url: str, export: str, name: str, secure: bool, http_only: bool, same_site: str(lax/strict/none), type: str(first_party/unknown), path: str, domain: str}\n@returns(200) List Client-Side Security cookies response\n@errors {4XX: List Client-Side Security cookies response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/cookies/{cookie_id}\n@desc Get a detected cookie\n@required {zone_id: str, cookie_id: str}\n@returns(200) Get a Client-Side Security cookie response\n@errors {4XX: Get a Client-Side Security cookie response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/policies\n@desc List content security rules\n@required {zone_id: str}\n@returns(200) List Client-Side Security policies response\n@errors {4XX: List Client-Side Security policies response failure}\n\n@endpoint POST /zones/{zone_id}/page_shield/policies\n@desc Create a content security rule\n@required {zone_id: str, action: str(allow/log/add_reporting_directives) # The action to take if the expression matches, description: str # A description for the policy, enabled: bool # Whether the policy is enabled, expression: str # The expression which must match for the policy to be applied, using the Cloudflare Firewall rule expression syntax, value: str # The policy which will be applied}\n@returns(200) Create a Client-Side Security policy response\n@errors {4XX: Create a Client-Side Security policy response failure}\n\n@endpoint DELETE /zones/{zone_id}/page_shield/policies/{policy_id}\n@desc Delete a content security rule\n@required {zone_id: str, policy_id: str}\n@returns(204) Delete a Client-Side Security policy response\n@errors {4XX: Delete a Client-Side Security policy response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/policies/{policy_id}\n@desc Get a content security rule\n@required {zone_id: str, policy_id: str}\n@returns(200) Get a Client-Side Security policy response\n@errors {4XX: Get a Client-Side Security policy response failure}\n\n@endpoint PUT /zones/{zone_id}/page_shield/policies/{policy_id}\n@desc Update a content security rule\n@required {zone_id: str, policy_id: str}\n@optional {action: str(allow/log/add_reporting_directives) # The action to take if the expression matches, description: str # A description for the policy, enabled: bool # Whether the policy is enabled, expression: str # The expression which must match for the policy to be applied, using the Cloudflare Firewall rule expression syntax, value: str # The policy which will be applied}\n@returns(200) Update a Client-Side Security policy response\n@errors {4XX: Update a Client-Side Security policy response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/scripts\n@desc List detected scripts\n@required {zone_id: str}\n@optional {exclude_urls: str, urls: str, hosts: str, page: str, per_page: num, order_by: str(first_seen_at/last_seen_at), direction: str(asc/desc), prioritize_malicious: bool, exclude_cdn_cgi: bool=true, exclude_duplicates: bool=true, status: str, page_url: str, export: str}\n@returns(200) List Client-Side Security scripts response\n@errors {4XX: List Client-Side Security scripts response failure}\n\n@endpoint GET /zones/{zone_id}/page_shield/scripts/{script_id}\n@desc Get a detected script\n@required {zone_id: str, script_id: str}\n@returns(200) Get a Client-Side Security script response\n@errors {4XX: Get a Client-Side Security script response failure}\n\n@endpoint GET /zones/{zone_id}/pagerules\n@desc List Page Rules\n@required {zone_id: str}\n@optional {order: str(status/priority)=priority, direction: str(asc/desc)=desc, match: str(any/all)=all, status: str(active/disabled)=disabled}\n@returns(200) List Page Rules response\n@errors {4XX: List Page Rules response failure}\n\n@endpoint POST /zones/{zone_id}/pagerules\n@desc Create a Page Rule\n@required {zone_id: str, actions: [any] # The set of actions to perform if the targets of this rule match the request. Actions can redirect to another URL or override settings, but not both., targets: [any] # The rule targets to evaluate on each request.}\n@optional {priority: int=1 # The priority of the rule, used to define which Page Rule is processed over another. A higher number indicates a higher priority. For example, if you have a catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to take precedence (rule B: `/images/special/*`), specify a higher priority for rule B so it overrides rule A., status: str(active/disabled)=disabled # The status of the Page Rule.}\n@returns(200) Create a Page Rule response\n@errors {4XX: Create a Page Rule response failure}\n\n@endpoint GET /zones/{zone_id}/pagerules/settings\n@desc List available Page Rules settings\n@required {zone_id: str}\n@returns(200) List available Page Rules settings response\n@errors {4XX: List available Page Rules settings response failure}\n\n@endpoint DELETE /zones/{zone_id}/pagerules/{pagerule_id}\n@desc Delete a Page Rule\n@required {pagerule_id: str, zone_id: str}\n@returns(200) Delete a Page Rule response\n@errors {4XX: Delete a Page Rule response failure}\n\n@endpoint GET /zones/{zone_id}/pagerules/{pagerule_id}\n@desc Get a Page Rule\n@required {pagerule_id: str, zone_id: str}\n@returns(200) Get a Page Rule response\n@errors {4XX: Get a Page Rule response failure}\n\n@endpoint PATCH /zones/{zone_id}/pagerules/{pagerule_id}\n@desc Edit a Page Rule\n@required {pagerule_id: str, zone_id: str}\n@optional {actions: [any] # The set of actions to perform if the targets of this rule match the request. Actions can redirect to another URL or override settings, but not both., priority: int=1 # The priority of the rule, used to define which Page Rule is processed over another. A higher number indicates a higher priority. For example, if you have a catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to take precedence (rule B: `/images/special/*`), specify a higher priority for rule B so it overrides rule A., status: str(active/disabled)=disabled # The status of the Page Rule., targets: [any] # The rule targets to evaluate on each request.}\n@returns(200) Edit a Page Rule response\n@errors {4XX: Edit a Page Rule response failure}\n\n@endpoint PUT /zones/{zone_id}/pagerules/{pagerule_id}\n@desc Update a Page Rule\n@required {pagerule_id: str, zone_id: str, actions: [any] # The set of actions to perform if the targets of this rule match the request. Actions can redirect to another URL or override settings, but not both., targets: [any] # The rule targets to evaluate on each request.}\n@optional {priority: int=1 # The priority of the rule, used to define which Page Rule is processed over another. A higher number indicates a higher priority. For example, if you have a catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to take precedence (rule B: `/images/special/*`), specify a higher priority for rule B so it overrides rule A., status: str(active/disabled)=disabled # The status of the Page Rule.}\n@returns(200) Update a Page Rule response\n@errors {4XX: Update a Page Rule response failure}\n\n@endpoint GET /zones/{zone_id}/pay-per-crawl/can_be_enabled\n@desc Get pay-per-crawl zone eligibility\n@required {zone_id: str # zone id}\n@returns(200) {errors: [map], messages: [map], result: map{can_be_enabled: bool, enabled: bool, id: str}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /zones/{zone_id}/pay-per-crawl/configuration\n@desc Get the pay-per-crawl config\n@required {zone_id: str # zone id}\n@returns(200) {errors: [map], messages: [map], result: map{bot_overrides: map, enabled: bool, price_usd_microcents: int}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint PATCH /zones/{zone_id}/pay-per-crawl/configuration\n@desc Changes pay-per-crawl config for a zone\n@required {zone_id: str # zone id}\n@optional {bot_overrides: map, enabled: bool, price_usd_microcents: int # Price in microcents 1 USD = 100,000,000 microcents. Must be 0 or a multiple of 100,000 $0.001. Range: $0.001–$9,999.999.}\n@returns(200) {errors: [map], messages: [map], result: map{bot_overrides: map, enabled: bool, price_usd_microcents: int}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint POST /zones/{zone_id}/pay-per-crawl/configuration\n@desc Creates pay-per-crawl config for a zone\n@required {zone_id: str # zone id}\n@optional {bot_overrides: map, enabled: bool, price_usd_microcents: int # Price in microcents 1 USD = 100,000,000 microcents. Must be 0 or a multiple of 100,000 $0.001. Range: $0.001–$9,999.999.}\n@returns(200) {errors: [map], messages: [map], result: map{bot_overrides: map, enabled: bool, price_usd_microcents: int}, result_info: map{count: int, page: int, per_page: int, total_count: int, total_pages: int}, success: bool} # OK\n@errors {400: Bad Request}\n\n@endpoint GET /zones/{zone_id}/precursor\n@desc Get Zone Precursor Config\n@required {zone_id: str}\n@returns(200) Precursor config response.\n@errors {4XX: Precursor config response failure.}\n\n@endpoint PUT /zones/{zone_id}/precursor\n@desc Update Zone Precursor Config\n@required {zone_id: str}\n@optional {default_mode: str(off/min-friction/max-security)=off # The zone-level Precursor enforcement mode applied to requests that do not match a more specific enforcement rule., enforcement_rules: [map{description: str, enabled: bool, expression!: str, id: str, mode!: str}] # The ordered list of enforcement rules for the zone.}\n@returns(200) Update Precursor response.\n@errors {4XX: Update Precursor response failure.}\n@example_request {\"default_mode\":\"min-friction\"}\n\n@endpoint POST /zones/{zone_id}/purge_cache\n@desc Purge Cached Content\n@required {zone_id: str}\n@returns(200) {errors: [map], messages: [map], result: map?{id: str}, success: bool} # Request to purge cached content successful.\n@errors {4XX: Request to purge cached content failed.}\n@example_request {\"hosts\":[\"www.example.com\",\"images.example.com\"]}\n\n@endpoint GET /zones/{zone_id}/rate_limit_analytics\n@desc Get Rate Limiting Analytics\n@required {zone_id: str # Identifier of the zone., since: str(date-time) # The start of the queried time period. Time must be rounded to the time segment boundary and formatted as RFC 3339., until: str(date-time) # The exclusive end of the queried time period. Time must be rounded to the time segment boundary and formatted as RFC 3339., time_delta: int(60/3600/86400/2592000) # Length (in seconds) of each time segment dividing the entire time period. Accepted values are 60 (minute), 3600 (hour), 86400 (day), and 2592000 (month).}\n@returns(200) {labels: map, since: str(date-time), time_delta: int, timeseries: [map], until: str(date-time), zone_id: int(int64)} # Successful response.\n@errors {400: Bad request. Invalid or missing parameters., 401: Unauthorized. Missing or invalid authentication credentials., 403: Forbidden. Insufficient permissions for the requested resource., 500: Internal server error.}\n\n@endpoint GET /zones/{zone_id}/rate_limits\n@desc List rate limits\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=20}\n@returns(200) List rate limits response.\n@errors {4XX: List rate limits response failure.}\n\n@endpoint POST /zones/{zone_id}/rate_limits\n@desc Create a rate limit\n@required {zone_id: str, action: map # The action to perform when the threshold of matched traffic within the configured period is exceeded., match: map # Determines which traffic the rate limit counts towards the threshold., period: num # The time in seconds (an integer value) to count matching traffic. If the count exceeds the configured threshold within this period, Cloudflare will perform the configured action., threshold: num # The threshold that will trigger the configured mitigation action. Configure this value along with the `period` property to establish a threshold per period.}\n@returns(200) Create a rate limit response.\n@errors {4XX: Create a rate limit response failure.}\n\n@endpoint DELETE /zones/{zone_id}/rate_limits/{rate_limit_id}\n@desc Delete a rate limit\n@required {rate_limit_id: str, zone_id: str}\n@returns(200) Delete a rate limit response.\n@errors {4XX: Delete a rate limit response failure.}\n\n@endpoint GET /zones/{zone_id}/rate_limits/{rate_limit_id}\n@desc Get a rate limit\n@required {rate_limit_id: str, zone_id: str}\n@returns(200) Get a rate limit response.\n@errors {4XX: Get a rate limit response failure.}\n\n@endpoint PUT /zones/{zone_id}/rate_limits/{rate_limit_id}\n@desc Update a rate limit\n@required {rate_limit_id: str, zone_id: str, action: map # The action to perform when the threshold of matched traffic within the configured period is exceeded., match: map # Determines which traffic the rate limit counts towards the threshold., period: num # The time in seconds (an integer value) to count matching traffic. If the count exceeds the configured threshold within this period, Cloudflare will perform the configured action., threshold: num # The threshold that will trigger the configured mitigation action. Configure this value along with the `period` property to establish a threshold per period.}\n@returns(200) Update a rate limit response.\n@errors {4XX: Update a rate limit response failure.}\n\n@endpoint GET /zones/{zone_id}/rulesets\n@desc List zone rulesets\n@required {zone_id: str}\n@optional {cursor: str, per_page: int}\n@returns(200) A rulesets response.\n@errors {4XX: A failure response.}\n\n@endpoint POST /zones/{zone_id}/rulesets\n@desc Create a zone ruleset\n@required {zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint\n@desc Get a zone entry point ruleset\n@required {ruleset_phase: str, zone_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint PUT /zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint\n@desc Update a zone entry point ruleset\n@required {ruleset_phase: str, zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint/versions\n@desc List a zone entry point ruleset's versions\n@required {ruleset_phase: str, zone_id: str}\n@returns(200) A rulesets response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint/versions/{ruleset_version}\n@desc Get a zone entry point ruleset version\n@required {ruleset_version: str, ruleset_phase: str, zone_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint DELETE /zones/{zone_id}/rulesets/{ruleset_id}\n@desc Delete a zone ruleset\n@required {ruleset_id: str, zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(204) An empty response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/rulesets/{ruleset_id}\n@desc Get a zone ruleset\n@required {ruleset_id: str, zone_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint PUT /zones/{zone_id}/rulesets/{ruleset_id}\n@desc Update a zone ruleset\n@required {ruleset_id: str, zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint POST /zones/{zone_id}/rulesets/{ruleset_id}/rules\n@desc Create a zone ruleset rule\n@required {ruleset_id: str, zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint DELETE /zones/{zone_id}/rulesets/{ruleset_id}/rules/{rule_id}\n@desc Delete a zone ruleset rule\n@required {rule_id: str, ruleset_id: str, zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint PATCH /zones/{zone_id}/rulesets/{ruleset_id}/rules/{rule_id}\n@desc Update a zone ruleset rule\n@required {rule_id: str, ruleset_id: str, zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(200) A ruleset response, or a successful dry-run validation response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/rulesets/{ruleset_id}/versions\n@desc List a zone ruleset's versions\n@required {ruleset_id: str, zone_id: str}\n@returns(200) A rulesets response.\n@errors {4XX: A failure response.}\n\n@endpoint DELETE /zones/{zone_id}/rulesets/{ruleset_id}/versions/{ruleset_version}\n@desc Delete a zone ruleset version\n@required {ruleset_version: str, ruleset_id: str, zone_id: str}\n@optional {dry_run: bool=false # Validates the request without persisting changes when set to `true`. Responses that normally return 200 return `result: null`; endpoints that normally return 204 continue to return 204.}\n@returns(204) An empty response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/rulesets/{ruleset_id}/versions/{ruleset_version}\n@desc Get a zone ruleset version\n@required {ruleset_version: str, ruleset_id: str, zone_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/rulesets/{ruleset_id}/versions/{ruleset_version}/by_tag/{rule_tag}\n@desc List a zone ruleset version's rules by tag\n@required {rule_tag: str, ruleset_version: str, ruleset_id: str, zone_id: str}\n@returns(200) A ruleset response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/schema_validation/schemas\n@desc List all uploaded schemas\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page., omit_source: bool=false # Omit the source-files of schemas and only retrieve their meta-data., validation_enabled: bool # Filter for enabled schemas}\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint POST /zones/{zone_id}/schema_validation/schemas\n@desc Upload a schema\n@required {kind: str # The kind of the schema, name: str # A human-readable name for the schema, source: str # The raw schema, e.g., the OpenAPI schema, either as JSON or YAML, validation_enabled: bool # An indicator if this schema is enabled}\n@returns(200) Successfully uploaded the schema\n@errors {4XX: Failed uploaded the schema}\n\n@endpoint GET /zones/{zone_id}/schema_validation/schemas/hosts\n@desc List hosts covered by uploaded schemas\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page.}\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint DELETE /zones/{zone_id}/schema_validation/schemas/{schema_id}\n@desc Delete a schema\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/schema_validation/schemas/{schema_id}\n@desc Get details of a schema\n@optional {omit_source: bool=false # Omit the source-files of schemas and only retrieve their meta-data.}\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint PATCH /zones/{zone_id}/schema_validation/schemas/{schema_id}\n@desc Set schema validation state\n@optional {validation_enabled: bool # Flag whether schema is enabled for validation.}\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/schema_validation/schemas/{schema_id}/operations\n@desc Retrieve all operations from the schema\n@optional {feature: [str] # Add feature(s) to the results. The feature name that is given here corresponds to the resulting feature object. Have a look at the top-level object description for more details on the specific meaning., host: [str], method: [str], endpoint: str, page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page., operation_status: str(new/existing) # Filter results by whether operations exist in Web Asset Management or not. `new` will just return operations from the schema that do not exist otherwise. `existing` will just return operations from the schema that already exist.}\n@returns(200) All operations in the schema\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/schema_validation/settings\n@desc Get global schema validation settings\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint PATCH /zones/{zone_id}/schema_validation/settings\n@desc Edit global schema validation settings\n@optional {validation_default_mitigation_action: str(none/log/block) # The default mitigation action used Mitigation actions are as follows:    - `\"log\"` - log request when request does not conform to schema   - `\"block\"` - deny access to the site when request does not conform to schema   - `\"none\"` - skip running schema validation, validation_override_mitigation_action: str # When set, this overrides both zone level and operation level mitigation actions.    - `\"none\"` - skip running schema validation entirely for the request   - `null` - clears any existing override}\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint PUT /zones/{zone_id}/schema_validation/settings\n@desc Update global schema validation settings\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/schema_validation/settings/operations\n@desc List per-operation schema validation settings\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page.}\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint PATCH /zones/{zone_id}/schema_validation/settings/operations\n@desc Bulk edit per-operation schema validation settings\n@returns(200) Update multiple operation-level schema validation settings response\n@errors {4XX: Failure}\n\n@endpoint DELETE /zones/{zone_id}/schema_validation/settings/operations/{operation_id}\n@desc Delete per-operation schema validation setting\n@returns(200) Successfully deleted\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/schema_validation/settings/operations/{operation_id}\n@desc Get per-operation schema validation setting\n@returns(200) Success\n@errors {4XX: Failure}\n\n@endpoint PUT /zones/{zone_id}/schema_validation/settings/operations/{operation_id}\n@desc Update per-operation schema validation setting\n@returns(200) Successfully updated\n@errors {4XX: Failure}\n\n@endpoint POST /zones/{zone_id}/secondary_dns/force_axfr\n@desc Force AXFR\n@required {zone_id: str}\n@returns(200) Force AXFR response.\n@errors {4XX: Force AXFR response failure.}\n\n@endpoint DELETE /zones/{zone_id}/secondary_dns/incoming\n@desc Delete Secondary Zone Configuration\n@required {zone_id: str}\n@returns(200) Delete Secondary Zone Configuration response.\n@errors {4XX: Delete Secondary Zone Configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/secondary_dns/incoming\n@desc Secondary Zone Configuration Details\n@required {zone_id: str}\n@returns(200) Secondary Zone Configuration Details response.\n@errors {4XX: Secondary Zone Configuration Details response failure.}\n\n@endpoint POST /zones/{zone_id}/secondary_dns/incoming\n@desc Create Secondary Zone Configuration\n@required {zone_id: str, auto_refresh_seconds: num=86400 # How often should a secondary zone auto refresh regardless of DNS NOTIFY. Not applicable for primary zones., id: str, name: str # Zone name., peers: [str] # A list of peer tags.}\n@returns(200) Create Secondary Zone Configuration response.\n@errors {4XX: Create Secondary Zone Configuration response failure.}\n\n@endpoint PUT /zones/{zone_id}/secondary_dns/incoming\n@desc Update Secondary Zone Configuration\n@required {zone_id: str, auto_refresh_seconds: num=86400 # How often should a secondary zone auto refresh regardless of DNS NOTIFY. Not applicable for primary zones., id: str, name: str # Zone name., peers: [str] # A list of peer tags.}\n@returns(200) Update Secondary Zone Configuration response.\n@errors {4XX: Update Secondary Zone Configuration response failure.}\n\n@endpoint DELETE /zones/{zone_id}/secondary_dns/outgoing\n@desc Delete Primary Zone Configuration\n@required {zone_id: str}\n@returns(200) Delete Primary Zone Configuration response.\n@errors {4XX: Delete Primary Zone Configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/secondary_dns/outgoing\n@desc Primary Zone Configuration Details\n@required {zone_id: str}\n@returns(200) Primary Zone Configuration Details response.\n@errors {4XX: Primary Zone Configuration Details response failure.}\n\n@endpoint POST /zones/{zone_id}/secondary_dns/outgoing\n@desc Create Primary Zone Configuration\n@required {zone_id: str, id: str, name: str # Zone name., peers: [str] # A list of peer tags.}\n@returns(200) Create Primary Zone Configuration response.\n@errors {4XX: Create Primary Zone Configuration response failure.}\n\n@endpoint PUT /zones/{zone_id}/secondary_dns/outgoing\n@desc Update Primary Zone Configuration\n@required {zone_id: str, id: str, name: str # Zone name., peers: [str] # A list of peer tags.}\n@returns(200) Update Primary Zone Configuration response.\n@errors {4XX: Update Primary Zone Configuration response failure.}\n\n@endpoint POST /zones/{zone_id}/secondary_dns/outgoing/disable\n@desc Disable Outgoing Zone Transfers\n@required {zone_id: str}\n@returns(200) Disable Outgoing Zone Transfers response.\n@errors {4XX: Disable Outgoing Zone Transfers response failure.}\n\n@endpoint POST /zones/{zone_id}/secondary_dns/outgoing/enable\n@desc Enable Outgoing Zone Transfers\n@required {zone_id: str}\n@returns(200) Enable Outgoing Zone Transfers response.\n@errors {4XX: Enable Outgoing Zone Transfers response failure.}\n\n@endpoint POST /zones/{zone_id}/secondary_dns/outgoing/force_notify\n@desc Force DNS NOTIFY\n@required {zone_id: str}\n@returns(200) Force DNS NOTIFY response.\n@errors {4XX: Force DNS NOTIFY response failure.}\n\n@endpoint GET /zones/{zone_id}/secondary_dns/outgoing/status\n@desc Get Outgoing Zone Transfer Status\n@required {zone_id: str}\n@returns(200) Get Outgoing Zone Transfer Status response.\n@errors {4XX: Get Outgoing Zone Transfer Status response failure.}\n\n@endpoint GET /zones/{zone_id}/security-center/insights\n@desc Retrieves Zone Security Center Insights\n@required {zone_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str], page: any=1, per_page: any=25}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/security-center/insights/audit-log\n@desc Retrieves Zone Audit Log\n@required {zone_id: str}\n@optional {per_page: int=25 # Number of results per page., cursor: str # Opaque cursor for pagination. Use the cursor value from result_info of the previous response., field_changed: str(status/user_classification) # Filter by the field that was changed., changed_by: str # Filter by the actor that made the change., since: str(date-time) # Filter entries changed at or after this timestamp (RFC 3339)., before: str(date-time) # Filter entries changed before this timestamp (RFC 3339)., order: str(asc/desc)=desc # Sort order for results. Use 'asc' for oldest first or 'desc' for newest first.}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/security-center/insights/class\n@desc Retrieves Zone Security Center Insight Counts by Class\n@required {zone_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/security-center/insights/scans\n@desc Get Recent Zone Scans\n@required {zone_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint POST /zones/{zone_id}/security-center/insights/scans\n@desc Start On-Demand Zone Scan\n@required {zone_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/security-center/insights/severity\n@desc Retrieves Zone Security Center Insight Counts by Severity\n@required {zone_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/security-center/insights/type\n@desc Retrieves Zone Security Center Insight Counts by Type\n@required {zone_id: str}\n@optional {dismissed: bool, issue_class: [str], issue_type: [str], product: [str], source: [str], severity: [str], subject: [str], issue_class~neq: [str], issue_type~neq: [str], product~neq: [str], severity~neq: [str], subject~neq: [str]}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/security-center/insights/{issue_id}/audit-log\n@desc Retrieves Zone Issue Audit Log\n@required {zone_id: str, issue_id: str}\n@optional {per_page: int=25 # Number of results per page., cursor: str # Opaque cursor for pagination. Use the cursor value from result_info of the previous response., field_changed: str(status/user_classification) # Filter by the field that was changed., changed_by: str # Filter by the actor that made the change., since: str(date-time) # Filter entries changed at or after this timestamp (RFC 3339)., before: str(date-time) # Filter entries changed before this timestamp (RFC 3339)., order: str(asc/desc)=desc # Sort order for results. Use 'asc' for oldest first or 'desc' for newest first.}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint PATCH /zones/{zone_id}/security-center/insights/{issue_id}/classification\n@desc Updates Zone Security Center Insight Classification\n@required {zone_id: str, issue_id: str}\n@optional {classification: str(false_positive/accept_risk/other) # User-defined classification for the insight. Can be 'false_positive', 'accept_risk', 'other', or null., rationale: str # Rationale for the classification change. Required when classification is 'accept_risk' or 'other'.}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint PUT /zones/{zone_id}/security-center/insights/{issue_id}/dismiss\n@desc Archives Zone Security Center Insight\n@required {zone_id: str, issue_id: str}\n@optional {dismiss: bool=true}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint DELETE /zones/{zone_id}/security-center/securitytxt\n@desc Deletes security.txt\n@required {zone_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/security-center/securitytxt\n@desc Retrieves security.txt\n@required {zone_id: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint PUT /zones/{zone_id}/security-center/securitytxt\n@desc Updates security.txt\n@required {zone_id: str}\n@optional {acknowledgments: [str(uri)], canonical: [str(uri)], contact: [str(uri)], enabled: bool, encryption: [str(uri)], expires: str(date-time), hiring: [str(uri)], policy: [str(uri)], preferred_languages: str}\n@returns(200) The request was successful.\n@errors {4XX: A client error occurred.}\n\n@endpoint GET /zones/{zone_id}/settings\n@desc Get all zone settings\n@required {zone_id: str}\n@returns(200) Get all Zone settings response\n@errors {4XX: Get all Zone settings response failure}\n\n@endpoint PATCH /zones/{zone_id}/settings\n@desc Edit multiple zone settings\n@required {zone_id: str}\n@returns(200) Edit zone settings info response\n@errors {4XX: Edit zone settings info response failure}\n\n@endpoint GET /zones/{zone_id}/settings/aegis\n@desc Get aegis setting\n@required {zone_id: str}\n@returns(200) Get aegis setting response.\n@errors {4XX: Get aegis setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/aegis\n@desc Change aegis setting\n@required {zone_id: str, value: map{enabled: bool, pool_id: str} # Value of the zone setting.}\n@returns(200) Change aegis setting response.\n@errors {4XX: Change aegis setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/auto_origin_tls_kex\n@desc Get Auto-Origin TLS KEX enrollment status for the given zone\n@required {zone_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{enabled: any, id: str, modified_on: str(date-time)}, success: bool} # Get Auto-Origin TLS KEX enrollment status response.\n@errors {4XX: Get Auto-Origin TLS KEX enrollment status failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/auto_origin_tls_kex\n@desc Patch Auto-Origin TLS KEX enrollment status for the given zone\n@required {zone_id: str, enabled: bool # Controls enablement of Auto-Origin TLS KEX selection for the zone.}\n@returns(200) {errors: [map], messages: [map], result: map{enabled: any, id: str, modified_on: str(date-time)}, success: bool} # Patch Auto-Origin TLS KEX enrollment status response.\n@errors {4XX: Patch Auto-Origin TLS KEX enrollment status failure.}\n\n@endpoint GET /zones/{zone_id}/settings/automatic_platform_optimization\n@desc Get Automatic Platform Optimization setting\n@required {zone_id: str}\n@returns(200) Get Automatic Platform Optimization setting response.\n@errors {4XX: Get Automatic Platform Optimization setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/automatic_platform_optimization\n@desc Change Automatic Platform Optimization setting\n@required {zone_id: str, value: any # Configuration for Automatic Platform Optimization (APO) for WordPress. Set to \"off\" to disable, or provide an object to configure APO settings.}\n@returns(200) Change Automatic Platform Optimization setting response.\n@errors {4XX: Change Automatic Platform Optimization setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/binary_ast\n@desc Get Binary AST setting\n@required {zone_id: str}\n@returns(200) Get Binary AST setting response.\n@errors {4XX: Get Binary AST setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/binary_ast\n@desc Change Binary AST setting\n@required {zone_id: str, value: str(off/on/latest) # Controls Binary AST behavior: - \"off\": Feature disabled. - \"on\": Binary AST enabled. - \"latest\": Binary AST enabled using the latest version.}\n@returns(200) Change Binary AST setting response.\n@errors {4XX: Change Binary AST setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/csam_scanner_third_party\n@desc Get CSAM Scanner setting\n@required {zone_id: str # Identifier for the zone.}\n@returns(200) CSAM Scanner setting response\n@errors {400: Bad request - malformed zone ID in URL, 401: Unauthorized, 403: Forbidden, 404: Zone not found, 500: Internal server error}\n\n@endpoint PATCH /zones/{zone_id}/settings/csam_scanner_third_party\n@desc Update CSAM Scanner setting\n@required {zone_id: str # Identifier for the zone.}\n@optional {id: str # The feature identifier., value: map{email: str, enabled: bool, resend_email: bool, sources: map} # Writable CSAM Scanner feature configuration values.}\n@returns(200) CSAM Scanner setting updated\n@errors {400: Bad request - validation failure or malformed request body, 401: Unauthorized, 403: Forbidden - zone or account is locked, 404: Zone not found, 500: Internal server error}\n\n@endpoint GET /zones/{zone_id}/settings/fonts\n@desc Get Cloudflare Fonts setting\n@required {zone_id: str}\n@returns(200) Get Cloudflare Fonts setting response.\n@errors {4XX: Get Cloudflare Fonts setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/fonts\n@desc Change Cloudflare Fonts setting\n@required {zone_id: str, value: str(on/off)=off # Whether the feature is enabled or disabled.}\n@returns(200) Change Cloudflare Fonts setting response.\n@errors {4XX: Change Cloudflare Fonts setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/google-tag-gateway/config\n@desc Get Google Tag Gateway configuration\n@required {zone_id: str}\n@returns(200) Get Google Tag Gateway configuration response.\n@errors {4XX: Get Google Tag Gateway configuration response failure.}\n\n@endpoint PUT /zones/{zone_id}/settings/google-tag-gateway/config\n@desc Update Google Tag Gateway configuration\n@required {zone_id: str, enabled: bool # Enables or disables Google Tag Gateway for this zone., endpoint: str # Specifies the endpoint path for proxying Google Tag Manager requests. Use an absolute path starting with '/', with no nested paths and alphanumeric characters only (e.g. /metrics)., hideOriginalIp: bool # Hides the original client IP address from Google when enabled., measurementId: str # Specify the Google Tag Manager container or measurement ID (e.g. GTM-XXXXXXX or G-XXXXXXXXXX).}\n@optional {setUpTag: bool # Set up the associated Google Tag on the zone automatically when enabled.}\n@returns(200) Update Google Tag Gateway configuration response.\n@errors {4XX: Update Google Tag Gateway configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/h2_prioritization\n@desc Get HTTP/2 Prioritization setting\n@required {zone_id: str}\n@returns(200) Get HTTP/2 Prioritization setting response.\n@errors {4XX: Get HTTP/2 Prioritization setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/h2_prioritization\n@desc Change HTTP/2 Prioritization setting\n@required {zone_id: str, value: str(off/on/custom) # Controls HTTP/2 Prioritization behavior: - \"off\": Use browser default prioritization. - \"on\": Use Cloudflare's optimized prioritization. - \"custom\": Use custom prioritization rules.}\n@returns(200) Change HTTP/2 Prioritization setting response.\n@errors {4XX: Change HTTP/2 Prioritization setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/image_resizing\n@desc Get Image Transformations setting\n@required {zone_id: str}\n@returns(200) Get Image Resizing setting response.\n@errors {4XX: Get Image Resizing setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/image_resizing\n@desc Change Image Transformations setting\n@required {zone_id: str, value: str(off/on/open/latest) # Controls Image Resizing behavior: - \"off\": Feature disabled. - \"on\": Resizing is enabled for same-zone images only. - \"open\": Resizing is enabled for images from any origin. - \"latest\": Resizing is enabled for same-zone images using the latest version.}\n@returns(200) Change Image Resizing setting response.\n@errors {4XX: Change Image Resizing setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/nel\n@desc Get NEL setting\n@required {zone_id: str # Identifier of the zone.}\n@returns(200) {errors: [map], messages: [map], result: map{editable: bool, id: str, modified_on: str(date-time), value: map{enabled: bool}}, success: bool} # NEL setting response\n@errors {401: Authentication required, 403: Insufficient permissions, 500: Internal server error}\n\n@endpoint PATCH /zones/{zone_id}/settings/nel\n@desc Edit NEL setting\n@required {zone_id: str # Identifier of the zone., value: map{enabled!: bool} # The NEL configuration value.}\n@returns(200) {errors: [map], messages: [map], result: map{editable: bool, id: str, modified_on: str(date-time), value: map{enabled: bool}}, success: bool} # Updated NEL setting response\n@errors {400: Invalid request body, 401: Authentication required, 403: Insufficient permissions or NEL feature not enabled, 500: Internal server error}\n@example_request {\"value\":{\"enabled\":false}}\n\n@endpoint GET /zones/{zone_id}/settings/origin_h2_max_streams\n@desc Get Origin H2 Max Streams Setting\n@required {zone_id: str}\n@returns(200) Get Origin H2 Max Streams setting response.\n@errors {4XX: Get Origin H2 Max Streams setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/origin_h2_max_streams\n@desc Change Origin H2 Max Streams Setting\n@required {zone_id: str, value: int # Value of the Origin H2 Max Streams Setting.}\n@returns(200) Change Origin H2 Max Streams setting response.\n@errors {4XX: Change Origin H2 Max Streams response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/origin_max_http_version\n@desc Get Origin Max HTTP Version Setting\n@required {zone_id: str}\n@returns(200) Get Origin Max HTTP Version setting response.\n@errors {4XX: Get Origin Max HTTP Version setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/origin_max_http_version\n@desc Change Origin Max HTTP Version Setting\n@required {zone_id: str, value: str(2/1) # Value of the Origin Max HTTP Version Setting.}\n@returns(200) Change Origin Max HTTP Version setting response.\n@errors {4XX: Change Origin Max HTTP Version response failure.}\n\n@endpoint DELETE /zones/{zone_id}/settings/origin_tls_compliance_modes\n@desc Delete Origin TLS Compliance Modes setting\n@required {zone_id: str}\n@returns(200) Delete Origin TLS Compliance Modes setting response.\n@errors {4XX: Delete Origin TLS Compliance Modes setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/origin_tls_compliance_modes\n@desc Get Origin TLS Compliance Modes setting\n@required {zone_id: str}\n@returns(200) Get Origin TLS Compliance Modes setting response.\n@errors {4XX: Get Origin TLS Compliance Modes setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/origin_tls_compliance_modes\n@desc Change Origin TLS Compliance Modes setting\n@required {zone_id: str, value: [str] # List of TLS compliance modes that constrain the key-exchange algorithms Cloudflare may use when establishing the TLS connection to the zone's origin. Currently supported values are `fips` (FIPS-approved curves) and `pqh` (post-quantum hybrid). Future modes (e.g. `cnsa2`) may be added; clients should treat unknown values as opaque strings. Multiple modes are combined as the intersection of their permitted algorithm lists; selections whose intersection is empty are rejected. An empty list clears the constraint.}\n@returns(200) Change Origin TLS Compliance Modes setting response.\n@errors {4XX: Change Origin TLS Compliance Modes setting response failure.}\n\n@endpoint PUT /zones/{zone_id}/settings/origin_tls_compliance_modes\n@desc Replace Origin TLS Compliance Modes setting\n@required {zone_id: str, value: [str] # List of TLS compliance modes that constrain the key-exchange algorithms Cloudflare may use when establishing the TLS connection to the zone's origin. Currently supported values are `fips` (FIPS-approved curves) and `pqh` (post-quantum hybrid). Future modes (e.g. `cnsa2`) may be added; clients should treat unknown values as opaque strings. Multiple modes are combined as the intersection of their permitted algorithm lists; selections whose intersection is empty are rejected. An empty list clears the constraint.}\n@returns(200) Replace Origin TLS Compliance Modes setting response.\n@errors {4XX: Replace Origin TLS Compliance Modes setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/rum\n@desc Get RUM status for a zone\n@required {zone_id: str}\n@returns(200) Rum Status.\n@errors {4XX: Failure response.}\n\n@endpoint PATCH /zones/{zone_id}/settings/rum\n@desc Toggle RUM on/off for a zone\n@required {zone_id: str}\n@optional {value: str # Value can either be On or Off.}\n@returns(200) Rum toggled on/off for an existing zone.\n@errors {4XX: Failure response.}\n\n@endpoint GET /zones/{zone_id}/settings/speed_brain\n@desc Get Cloudflare Speed Brain setting\n@required {zone_id: str}\n@returns(200) Get Cloudflare Speed Brain setting response.\n@errors {4XX: Get Cloudflare Speed Brain setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/speed_brain\n@desc Change Cloudflare Speed Brain setting\n@required {zone_id: str, value: str(on/off) # Whether the feature is enabled or disabled.}\n@returns(200) Cloudflare Speed Brain setting response.\n@errors {4XX: Change Cloudflare Speed Brain setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/ssl_automatic_mode\n@desc Get Automatic SSL/TLS enrollment status for the given zone\n@required {zone_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{editable: bool, id: str, modified_on: str(date-time), next_scheduled_scan: str(date-time)?, value: str}, success: bool} # Get Automatic SSL/TLS Enrollment status response.\n@errors {4XX: Get Automatic SSL/TLS Enrollment status failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/ssl_automatic_mode\n@desc Patch Automatic SSL/TLS Enrollment status for given zone\n@required {zone_id: str, value: str(auto/custom) # Controls enablement of Automatic SSL/TLS.}\n@returns(200) {errors: [map], messages: [map], result: map{editable: bool, id: str, modified_on: str(date-time), next_scheduled_scan: str(date-time)?, value: str}, success: bool} # Patch Automatic SSL/TLS Enrollment status response.\n@errors {4XX: Patch Automatic SSL/TLS Enrollment status failure.}\n\n@endpoint GET /zones/{zone_id}/settings/transformations_allowed_origins\n@desc Get Image Transformations Allowed Origins setting\n@required {zone_id: str}\n@returns(200) Get Image Transformations Allowed Origins setting response.\n@errors {4XX: Get Image Transformations Allowed Origins setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/transformations_allowed_origins\n@desc Change Image Transformations Allowed Origins setting\n@required {zone_id: str, value: str # Comma-separated list of allowed origin domains for image and video transformations. Use \"*\" to allow all origins (default).}\n@returns(200) Change Image Transformations Allowed Origins setting response.\n@errors {4XX: Change Image Transformations Allowed Origins setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/transformations_c2pa\n@desc Get Image Transformations C2PA setting\n@required {zone_id: str}\n@returns(200) Get Image Transformations C2PA setting response.\n@errors {4XX: Get Image Transformations C2PA setting response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/transformations_c2pa\n@desc Change Image Transformations C2PA setting\n@required {zone_id: str, value: str(off/on) # Whether C2PA signing is enabled for image transformations.}\n@returns(200) Change Image Transformations C2PA setting response.\n@errors {4XX: Change Image Transformations C2PA setting response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/transformations_config\n@desc Get Transformations configuration\n@required {zone_id: str}\n@returns(200) Get Transformations configuration response.\n@errors {4XX: Get Transformations configuration response failure.}\n\n@endpoint PATCH /zones/{zone_id}/settings/transformations_config\n@desc Change Transformations configuration\n@required {zone_id: str, value: map{allowed_origins: str, c2pa: str, transformations: str} # Combined configuration value for Transformations. All fields are optional on PATCH; omitted fields are left unchanged.}\n@returns(200) Change Transformations configuration response.\n@errors {4XX: Change Transformations configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/zaraz/config\n@desc Get Zaraz configuration\n@required {zone_id: str}\n@returns(200) Get Zaraz configuration response.\n@errors {4XX: Get Zaraz configuration response failure.}\n\n@endpoint PUT /zones/{zone_id}/settings/zaraz/config\n@desc Update Zaraz configuration\n@required {zone_id: str}\n@returns(200) Update Zaraz configuration response.\n@errors {4XX: Update Zaraz configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/zaraz/default\n@desc Get default Zaraz configuration\n@required {zone_id: str}\n@returns(200) Get Zaraz default configuration response.\n@errors {4XX: Get Zaraz default configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/zaraz/export\n@desc Export Zaraz configuration\n@required {zone_id: str}\n@returns(200) Get Zaraz configuration response.\n@errors {4XX: Get Zaraz configuration response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/zaraz/history\n@desc List Zaraz historical configuration records\n@required {zone_id: str}\n@optional {offset: int # Ordinal number to start listing the results with. Default value is 0., limit: int # Maximum amount of results to list. Default value is 10., sortField: str(id/user_id/description/created_at/updated_at) # The field to sort by. Default is updated_at., sortOrder: str(DESC/ASC) # Sorting order. Default is DESC.}\n@returns(200) List Zaraz historical configuration records response.\n@errors {4XX: List Zaraz historical configuration records failure.}\n\n@endpoint PUT /zones/{zone_id}/settings/zaraz/history\n@desc Restore Zaraz historical configuration by ID\n@required {zone_id: str}\n@returns(200) Restore Zaraz historical configuration by ID response.\n@errors {4XX: Restore Zaraz historical configuration by ID failure.}\n\n@endpoint GET /zones/{zone_id}/settings/zaraz/history/configs\n@desc Get Zaraz historical configurations by ID(s)\n@required {zone_id: str, ids: [int] # Comma separated list of Zaraz configuration IDs.}\n@returns(200) Get Zaraz historical configurations by ID(s) response.\n@errors {4XX: Get Zaraz historical configurations by ID(s) failure.}\n\n@endpoint POST /zones/{zone_id}/settings/zaraz/publish\n@desc Publish Zaraz preview configuration\n@required {zone_id: str}\n@returns(200) Update Zaraz workflow response.\n@errors {4XX: Update Zaraz workflow response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/zaraz/workflow\n@desc Get Zaraz workflow\n@required {zone_id: str}\n@returns(200) Get Zaraz workflow response.\n@errors {4XX: Get Zaraz workflow response failure.}\n\n@endpoint PUT /zones/{zone_id}/settings/zaraz/workflow\n@desc Update Zaraz workflow\n@required {zone_id: str}\n@returns(200) Update Zaraz workflow response.\n@errors {4XX: Update Zaraz workflow response failure.}\n\n@endpoint GET /zones/{zone_id}/settings/{setting_id}\n@desc Get zone setting\n@required {zone_id: str, setting_id: str}\n@returns(200) Get zone setting response\n@errors {4XX: Get zone setting response failure}\n\n@endpoint PATCH /zones/{zone_id}/settings/{setting_id}\n@desc Edit zone setting\n@required {zone_id: str, setting_id: str}\n@returns(200) Edit zone setting response\n@errors {4XX: Edit zone settings info response failure}\n\n@endpoint GET /zones/{zone_id}/smart_shield\n@desc Get Smart Shield Settings\n@required {zone_id: str}\n@returns(200) Smart Shield Settings response.\n@errors {500: Get Smart Shield Settings response failure., 502: Get Smart Shield Settings response failure., 4XX: Patch Smart Shield Settings response failure.}\n\n@endpoint PATCH /zones/{zone_id}/smart_shield\n@desc Patch Smart Shield Settings\n@required {zone_id: str}\n@optional {cache_reserve: map{value: str}, regional_tiered_cache: map{value: str}, smart_routing: map{value: str}, smart_tiered_cache: map{value: str}}\n@returns(200) Smart Shield Settings response.\n@errors {500: Get Smart Shield Settings response failure., 502: Smart Shield Settings response failure., 4XX: Patch Smart Shield Settings response failure.}\n\n@endpoint GET /zones/{zone_id}/smart_shield/cache_reserve_clear\n@desc Get Cache Reserve Clear\n@required {zone_id: str}\n@returns(200) Get Cache Reserve Clear response.\n@errors {4XX: Get Cache Reserve Clear failure response.}\n\n@endpoint POST /zones/{zone_id}/smart_shield/cache_reserve_clear\n@desc Start Cache Reserve Clear\n@required {zone_id: str}\n@returns(200) Start Cache Reserve Clear response.\n@errors {4XX: Start Cache Reserve Clear failure response.}\n\n@endpoint GET /zones/{zone_id}/smart_shield/healthchecks\n@desc List Health Checks\n@required {zone_id: str}\n@optional {page: num=1 # Page number of paginated results., per_page: num=25 # Maximum number of results per page. Must be a multiple of 5.}\n@returns(200) List Health Checks response\n@errors {4XX: List Health Checks response failure.}\n\n@endpoint POST /zones/{zone_id}/smart_shield/healthchecks\n@desc Create Health Check\n@required {zone_id: str, address: str # The hostname or IP address of the origin server to run health checks on., name: str # A short name to identify the health check. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means Cloudflare will pick a default region., consecutive_fails: int=1 # The number of consecutive fails required from a health check before changing the health to unhealthy., consecutive_successes: int=1 # The number of consecutive successes required from a health check before changing the health to healthy., description: str # A human-readable description of the health check., http_config: map{allow_insecure: bool, expected_body: str, expected_codes: [str], follow_redirects: bool, header: map, method: str, path: str, port: int} # Parameters specific to an HTTP or HTTPS health check., interval: int=60 # The interval between each health check. Shorter intervals may give quicker notifications if the origin status changes, but will increase load on the origin as we check from multiple locations., retries: int=2 # The number of retries to attempt in case of a timeout before marking the origin as unhealthy. Retries are attempted immediately., suspended: bool=false # If suspended, no health checks are sent to the origin., tcp_config: map{method: str, port: int} # Parameters specific to TCP health check., timeout: int=5 # The timeout (in seconds) before marking the health check as failed., type: str=HTTP # The protocol to use for the health check. Currently supported protocols are 'HTTP', 'HTTPS' and 'TCP'.}\n@returns(200) Create Health Check response.\n@errors {4XX: Create Health Check response failure.}\n\n@endpoint DELETE /zones/{zone_id}/smart_shield/healthchecks/{healthcheck_id}\n@desc Delete Health Check\n@required {healthcheck_id: str, zone_id: str}\n@returns(200) Delete Health Check response.\n@errors {4XX: Delete Health Check response failure.}\n\n@endpoint GET /zones/{zone_id}/smart_shield/healthchecks/{healthcheck_id}\n@desc Health Check Details\n@required {healthcheck_id: str, zone_id: str}\n@returns(200) Health Check Details response.\n@errors {4XX: Health Check Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/smart_shield/healthchecks/{healthcheck_id}\n@desc Patch Health Check\n@required {healthcheck_id: str, zone_id: str, address: str # The hostname or IP address of the origin server to run health checks on., name: str # A short name to identify the health check. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {check_regions: [str] # A list of regions from which to run health checks. Null means Cloudflare will pick a default region., consecutive_fails: int=1 # The number of consecutive fails required from a health check before changing the health to unhealthy., consecutive_successes: int=1 # The number of consecutive successes required from a health check before changing the health to healthy., description: str # A human-readable description of the health check., http_config: map{allow_insecure: bool, expected_body: str, expected_codes: [str], follow_redirects: bool, header: map, method: str, path: str, port: int} # Parameters specific to an HTTP or HTTPS health check., interval: int=60 # The interval between each health check. Shorter intervals may give quicker notifications if the origin status changes, but will increase load on the origin as we check from multiple locations., retries: int=2 # The number of retries to attempt in case of a timeout before marking the origin as unhealthy. Retries are attempted immediately., suspended: bool=false # If suspended, no health checks are sent to the origin., tcp_config: map{method: str, port: int} # Parameters specific to TCP health check., timeout: int=5 # The timeout (in seconds) before marking the health check as failed., type: str=HTTP # The protocol to use for the health check. Currently supported protocols are 'HTTP', 'HTTPS' and 'TCP'.}\n@returns(200) Patch Health Check response.\n@errors {4XX: Patch Health Check response failure.}\n\n@endpoint PUT /zones/{zone_id}/smart_shield/healthchecks/{healthcheck_id}\n@desc Update Health Check\n@required {healthcheck_id: str, zone_id: str}\n@returns(200) Update Health Check response.\n@errors {4XX: Update Health Check response failure.}\n\n@endpoint GET /zones/{zone_id}/snippets\n@desc List zone snippets\n@required {zone_id: str}\n@optional {page: int, per_page: int}\n@returns(200) A snippets response.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint DELETE /zones/{zone_id}/snippets/snippet_rules\n@desc Delete zone snippet rules\n@required {zone_id: str}\n@returns(200) A snippet rules response.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint GET /zones/{zone_id}/snippets/snippet_rules\n@desc List zone snippet rules\n@required {zone_id: str}\n@returns(200) A snippet rules response.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint PUT /zones/{zone_id}/snippets/snippet_rules\n@desc Update zone snippet rules\n@required {zone_id: str, rules: [map{description: str, enabled: bool, expression!: str, id!: str, last_updated!: str(date-time), snippet_name!: str}] # Lists snippet rules.}\n@returns(200) A snippet rules response.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint DELETE /zones/{zone_id}/snippets/{snippet_name}\n@desc Delete a zone snippet\n@required {zone_id: str, snippet_name: str}\n@returns(200) Return a null response.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint GET /zones/{zone_id}/snippets/{snippet_name}\n@desc Get a zone snippet\n@required {zone_id: str, snippet_name: str}\n@returns(200) Return a snippet response.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint PUT /zones/{zone_id}/snippets/{snippet_name}\n@desc Update a zone snippet\n@required {zone_id: str, snippet_name: str}\n@returns(200) Return a snippet response.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint GET /zones/{zone_id}/snippets/{snippet_name}/content\n@desc Get a zone snippet content\n@required {zone_id: str, snippet_name: str}\n@returns(200) Return snippet content.\n@errors {4XX: Return a failure response., 5XX: Return a failure response.}\n\n@endpoint GET /zones/{zone_id}/spectrum/analytics/aggregate/current\n@desc Get current aggregated analytics\n@required {zone_id: str}\n@optional {appID: str, colo_name: str}\n@returns(200) Get current aggregated analytics response.\n@errors {4xx: Get current aggregated analytics response failure.}\n\n@endpoint GET /zones/{zone_id}/spectrum/analytics/events/bytime\n@desc Get analytics by time\n@required {zone_id: str, time_delta: str(year/quarter/month/week/day/hour/dekaminute/minute)}\n@optional {dimensions: [str], sort: [str], until: any, metrics: [str], filters: str, since: any}\n@returns(200) Get analytics by time response.\n@errors {4xx: Get analytics by time response failure.}\n\n@endpoint GET /zones/{zone_id}/spectrum/analytics/events/summary\n@desc Get analytics summary\n@required {zone_id: str}\n@optional {dimensions: [str], sort: [str], until: any, metrics: [str], filters: str, since: any}\n@returns(200) Get analytics summary response.\n@errors {4xx: Get analytics summary response failure.}\n\n@endpoint GET /zones/{zone_id}/spectrum/apps\n@desc List Spectrum applications\n@required {zone_id: str}\n@optional {page: num, per_page: num=20, direction: str(asc/desc)=asc, order: str(protocol/app_id/created_on/modified_on/dns)=dns}\n@returns(200) List Spectrum applications response.\n@errors {4XX: List Spectrum applications response failure.}\n\n@endpoint POST /zones/{zone_id}/spectrum/apps\n@desc Create Spectrum application using a name for the origin\n@required {zone_id: str}\n@returns(200) Create Spectrum application using a name for the origin response.\n@errors {4XX: Create Spectrum application using a name for the origin response failure.}\n\n@endpoint DELETE /zones/{zone_id}/spectrum/apps/{app_id}\n@desc Delete Spectrum application\n@required {app_id: str, zone_id: str}\n@returns(200) Delete Spectrum application response.\n@errors {4XX: Delete Spectrum application response failure.}\n\n@endpoint GET /zones/{zone_id}/spectrum/apps/{app_id}\n@desc Get Spectrum application configuration\n@required {app_id: str, zone_id: str}\n@returns(200) Get Spectrum application configuration response.\n@errors {4XX: Get Spectrum application configuration response failure.}\n\n@endpoint PUT /zones/{zone_id}/spectrum/apps/{app_id}\n@desc Update Spectrum application configuration using a name for the origin\n@required {app_id: str, zone_id: str}\n@returns(200) Update Spectrum application configuration using a name for the origin response.\n@errors {4XX: Update Spectrum application configuration using a name for the origin response failure.}\n\n@endpoint GET /zones/{zone_id}/spectrum/protocols\n@desc List Spectrum application protocols\n@required {zone_id: str}\n@returns(200) List Spectrum application protocols response.\n@errors {4XX: List Spectrum application protocols response failure.}\n\n@endpoint GET /zones/{zone_id}/speed_api/availabilities\n@desc Get quota and availability\n@required {zone_id: str}\n@returns(200) Page test availability.\n@errors {4XX: Failure response.}\n\n@endpoint GET /zones/{zone_id}/speed_api/pages\n@desc List tested webpages\n@required {zone_id: str}\n@returns(200) List of pages.\n@errors {4XX: Failure response.}\n\n@endpoint DELETE /zones/{zone_id}/speed_api/pages/{url}/tests\n@desc Delete all page tests\n@required {zone_id: str, url: str}\n@optional {region: any}\n@returns(200) Number of deleted tests.\n@errors {4XX: Failure response.}\n\n@endpoint GET /zones/{zone_id}/speed_api/pages/{url}/tests\n@desc List page test history\n@required {zone_id: str, url: str}\n@optional {page: int=1, per_page: int=20, region: any}\n@returns(200) List of test history for a page.\n@errors {4XX: Failure response.}\n\n@endpoint POST /zones/{zone_id}/speed_api/pages/{url}/tests\n@desc Start page test\n@required {zone_id: str, url: str}\n@optional {region: any}\n@returns(200) Page test details.\n@errors {4XX: Failure response.}\n\n@endpoint GET /zones/{zone_id}/speed_api/pages/{url}/tests/{test_id}\n@desc Get a page test result\n@required {zone_id: str, url: str, test_id: str}\n@returns(200) Page test result.\n@errors {4XX: Failure response.}\n\n@endpoint GET /zones/{zone_id}/speed_api/pages/{url}/trend\n@desc List core web vital metrics trend\n@required {zone_id: str, url: str, region: str, deviceType: str, start: str(date-time), tz: str # The timezone of the start and end timestamps., metrics: str # A comma-separated list of metrics to include in the results.}\n@optional {end: str(date-time)}\n@returns(200) Page trend.\n@errors {4XX: Failure response.}\n\n@endpoint DELETE /zones/{zone_id}/speed_api/schedule/{url}\n@desc Delete scheduled page test\n@required {zone_id: str, url: str}\n@optional {region: any}\n@returns(200) Number of deleted tests.\n@errors {4XX: Failure response.}\n\n@endpoint GET /zones/{zone_id}/speed_api/schedule/{url}\n@desc Get a page test schedule\n@required {zone_id: str, url: str}\n@optional {region: any}\n@returns(200) Page test schedule.\n@errors {4XX: Failure response.}\n\n@endpoint POST /zones/{zone_id}/speed_api/schedule/{url}\n@desc Create scheduled page test\n@required {zone_id: str, url: str}\n@optional {region: any, frequency: str # The frequency of the scheduled test. Defaults to WEEKLY for free plans, DAILY for paid plans.}\n@returns(200) Page test schedule.\n@errors {4XX: Failure response.}\n\n@endpoint POST /zones/{zone_id}/ssl/analyze\n@desc Analyze Certificate\n@required {zone_id: str}\n@optional {bundle_method: str(ubiquitous/optimal/force)=ubiquitous # A ubiquitous bundle has the highest probability of being verified everywhere, even by clients using outdated or unusual trust stores. An optimal bundle uses the shortest chain and newest intermediates. And the force bundle verifies the chain, but does not otherwise modify it., certificate: str # The zone's SSL certificate or certificate and the intermediate(s).}\n@returns(200) Analyze Certificate response.\n@errors {4XX: Analyze Certificate response failure.}\n\n@endpoint GET /zones/{zone_id}/ssl/certificate_packs\n@desc List Certificate Packs\n@required {zone_id: str}\n@optional {page: num=1, per_page: num=20, status: str, deploy: str(staging/production)}\n@returns(200) List Certificate Packs response.\n@errors {4XX: List Certificate Packs response failure.}\n\n@endpoint POST /zones/{zone_id}/ssl/certificate_packs/order\n@desc Order Advanced Certificate Manager Certificate Pack\n@required {zone_id: str, certificate_authority: str(google/lets_encrypt/ssl_com) # Certificate Authority selected for the order.  For information on any certificate authority specific details or restrictions [see this page for more details](https://developers.cloudflare.com/ssl/reference/certificate-authorities)., hosts: [str] # Comma separated list of valid host names for the certificate packs. Must contain the zone apex, may not contain more than 50 hosts, and may not be empty., type: str # Type of certificate pack., validation_method: str(txt/http/email) # Validation Method selected for the order., validity_days: int(14/30/90/365) # Validity Days selected for the order.}\n@optional {cloudflare_branding: bool # Whether or not to add Cloudflare Branding for the order.  This will add a subdomain of sni.cloudflaressl.com as the Common Name if set to true.}\n@returns(200) Order Advanced Certificate Manager Certificate Pack response.\n@errors {4XX: Order Advanced Certificate Manager Certificate Pack response failure.}\n\n@endpoint GET /zones/{zone_id}/ssl/certificate_packs/quota\n@desc Get Certificate Pack Quotas\n@required {zone_id: str}\n@returns(200) Get Certificate Pack Quotas response.\n@errors {4XX: Get Certificate Pack Quotas response failure.}\n\n@endpoint DELETE /zones/{zone_id}/ssl/certificate_packs/{certificate_pack_id}\n@desc Delete Advanced Certificate Manager Certificate Pack\n@required {certificate_pack_id: str, zone_id: str}\n@returns(200) Delete Advanced Certificate Manager Certificate Pack response.\n@errors {4XX: Delete Advanced Certificate Manager Certificate Pack response failure.}\n\n@endpoint GET /zones/{zone_id}/ssl/certificate_packs/{certificate_pack_id}\n@desc Get Certificate Pack\n@required {certificate_pack_id: str, zone_id: str}\n@returns(200) Get Certificate Pack response.\n@errors {4XX: Get Certificate Pack response failure.}\n\n@endpoint PATCH /zones/{zone_id}/ssl/certificate_packs/{certificate_pack_id}\n@desc Restart Validation or Update Advanced Certificate Manager Certificate Pack\n@required {certificate_pack_id: str, zone_id: str}\n@optional {cloudflare_branding: bool # Whether or not to add Cloudflare Branding for the order.  This will add a subdomain of sni.cloudflaressl.com as the Common Name if set to true.}\n@returns(200) Restart Validation for Advanced Certificate Manager Certificate Pack response.\n@errors {4XX: Restart Validation for Advanced Certificate Manager Certificate Pack response failure.}\n\n@endpoint GET /zones/{zone_id}/ssl/recommendation\n@desc SSL/TLS Recommendation\n@required {zone_id: str}\n@returns(200) {errors: [map], messages: [map], result: map{editable: bool, id: str, modified_on: str(date-time), next_scheduled_scan: str(date-time)?, value: str}, success: bool} # SSL/TLS Recommendation response.\n@errors {4XX: SSL/TLS Recommendation response failure.}\n\n@endpoint GET /zones/{zone_id}/ssl/universal/settings\n@desc Universal SSL Settings Details\n@required {zone_id: str}\n@returns(200) Universal SSL Settings Details response.\n@errors {4XX: Universal SSL Settings Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/ssl/universal/settings\n@desc Edit Universal SSL Settings\n@required {zone_id: str}\n@optional {enabled: bool # Disabling Universal SSL removes any currently active Universal SSL certificates for your zone from the edge and prevents any future Universal SSL certificates from being ordered. If there are no advanced certificates or custom certificates uploaded for the domain, visitors will be unable to access the domain over HTTPS.  By disabling Universal SSL, you understand that the following Cloudflare settings and preferences will result in visitors being unable to visit your domain unless you have uploaded a custom certificate or purchased an advanced certificate.  * HSTS * Always Use HTTPS * Opportunistic Encryption * Onion Routing * Any Page Rules redirecting traffic to HTTPS  Similarly, any HTTP redirect to HTTPS at the origin while the Cloudflare proxy is enabled will result in users being unable to visit your site without a valid certificate at Cloudflare's edge.  If you do not have a valid custom or advanced certificate at Cloudflare's edge and are unsure if any of the above Cloudflare settings are enabled, or if any HTTP redirects exist at your origin, we advise leaving Universal SSL enabled for your domain.}\n@returns(200) Edit Universal SSL Settings response.\n@errors {4XX: Edit Universal SSL Settings response failure.}\n\n@endpoint GET /zones/{zone_id}/ssl/verification\n@desc SSL Verification Details\n@required {zone_id: str}\n@optional {retry: bool}\n@returns(200) SSL Verification Details response.\n@errors {4XX: SSL Verification Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/ssl/verification/{certificate_pack_id}\n@desc Edit SSL Certificate Pack Validation Method\n@required {certificate_pack_id: str, zone_id: str, validation_method: str(http/cname/txt/email) # Desired validation method.}\n@returns(200) Edit SSL Certificate Pack Validation Method response.\n@errors {4XX: Edit SSL Certificate Pack Validation Method response failure.}\n\n@endpoint GET /zones/{zone_id}/stream/usage\n@desc Get zone Stream usage\n@required {zone_id: str # Standard Cloudflare hex zone identifier. The API gateway resolves this to the owning account and translates it to an internal numeric ID before forwarding to the backend service.}\n@optional {metrics: str # Comma-separated list of metrics to include in the response. Available metrics depend on the endpoint. Billing usage supports: streamMinutesViewed, rateLimitingRequestsAllowed, loadBalancingQueries, argoAcceleratedBytes, workersRequests, workersKVReads, imageResizingRequests, spectrumBytesTransferred, mediaUniqueTransformations. Stream/media usage supports: streamMinutesViewed., since: str(date-time) # Start of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to 6 hours before the current time., until: str(date-time) # End of the time range for the query (inclusive). ISO 8601 timestamp. Defaults to the current time., time_delta: str(hour/day/week/month/quarter/year)=hour # Time unit to aggregate usage observations into. Data retention is approximately 18 months. The effective number of data points returned depends on the time range and granularity selected. For example, requesting hourly granularity over 18 months could produce up to ~13,000 data points; use the limit parameter to cap results and be aware that responses may be truncated., limit: int=100 # Maximum number of data points to return. The actual number of results depends on the interaction between the time range (since/until) and time_delta granularity. Results are truncated to this limit without error if the time range produces more data points than the limit allows., filters: str # Filter expressions to apply to the query. Format: field==value. Multiple filters can be combined.}\n@returns(200) {errors: [map], messages: [map], result: [map], success: bool} # Usage analytics response.\n@errors {400: Bad request - invalid parameters or query., 401: Authentication required., 403: Insufficient permissions to access this resource.}\n\n@endpoint DELETE /zones/{zone_id}/subscription\n@desc Delete Zone Subscription\n@required {zone_id: str}\n@returns(200) Delete Zone Subscription response\n@errors {4XX: Delete Zone Subscription response failure}\n\n@endpoint GET /zones/{zone_id}/subscription\n@desc Zone Subscription Details\n@required {zone_id: str}\n@returns(200) Zone Subscription Details response\n@errors {4XX: Zone Subscription Details response failure}\n\n@endpoint POST /zones/{zone_id}/subscription\n@desc Create Zone Subscription\n@required {zone_id: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Create Zone Subscription response\n@errors {4XX: Create Zone Subscription response failure}\n\n@endpoint PUT /zones/{zone_id}/subscription\n@desc Update Zone Subscription\n@required {zone_id: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Update Zone Subscription response\n@errors {4XX: Update Zone Subscription response failure}\n\n@endpoint DELETE /zones/{zone_id}/subscriptions\n@desc Delete Zone Subscription\n@required {zone_id: str}\n@returns(200) Delete Zone Subscription response\n@errors {4XX: Delete Zone Subscription response failure}\n\n@endpoint POST /zones/{zone_id}/subscriptions\n@desc Create Zone Subscription\n@required {zone_id: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Create Zone Subscription response\n@errors {4XX: Create Zone Subscription response failure}\n\n@endpoint PUT /zones/{zone_id}/subscriptions\n@desc Update Zone Subscription\n@required {zone_id: str}\n@optional {app: map{install_id: str} # Cloudflare Apps Marketplace is sunset. This field is retained for legacy grandfathered app subscriptions only., component_values: [map{default: num, display_name: str, kind: str, name: str, price: num, value: num}] # Configurable component values for the subscription., currency: str # The monetary unit in which pricing information is displayed., current_period_end: str(date-time) # The end of the current period and also when the next billing is due., current_period_start: str(date-time) # When the current billing period started. May match initial_period_start if this is the first period., frequency: str(weekly/monthly/quarterly/yearly) # How often the subscription is renewed automatically., id: str # Subscription identifier tag., price: num # The price of the subscription that will be billed, in US dollars., rate_plan: map{currency: str, externally_managed: bool, id: str, is_contract: bool, public_name: str, scope: str, sets: [str]} # The rate plan applied to the subscription., state: str(Trial/Provisioned/Paid/AwaitingPayment/Cancelled/Failed/Expired) # The state that the subscription is in., zone: map{id: str, name: str} # A simple zone object. May have null properties if not a zone subscription.}\n@returns(200) Update Zone Subscription response\n@errors {4XX: Update Zone Subscription response failure}\n\n@endpoint DELETE /zones/{zone_id}/tags\n@desc Delete tags from a zone-level resource\n@required {zone_id: str}\n@optional {If-Match: str # ETag value for optimistic concurrency control. When provided, the server will verify the current resource ETag matches before applying the write. Returns 412 Precondition Failed if the resource has been modified since the ETag was obtained. Omit this header for unconditional writes.}\n@returns(204) Tags successfully deleted (no content).\n@errors {412: Precondition failed. The resource has been modified since the provided ETag was obtained., 4XX: Delete tags response failure., 5XX: Delete tags response failure.}\n\n@endpoint GET /zones/{zone_id}/tags\n@desc Get tags for a zone-level resource\n@required {zone_id: str, resource_id: str # The ID of the resource to retrieve tags for., resource_type: str # The type of the resource.}\n@optional {access_application_id: str(uuid) # Access application ID identifier. Required for access_application_policy resources.}\n@returns(200) Get tags for single resource response.\n@errors {4XX: Get tags for single resource response failure., 5XX: Get tags for single resource response failure.}\n\n@endpoint PUT /zones/{zone_id}/tags\n@desc Set tags for a zone-level resource\n@required {zone_id: str}\n@optional {If-Match: str # ETag value for optimistic concurrency control. When provided, the server will verify the current resource ETag matches before applying the write. Returns 412 Precondition Failed if the resource has been modified since the ETag was obtained. Omit this header for unconditional writes.}\n@returns(200) Set tags response.\n@errors {412: Precondition failed. The resource has been modified since the provided ETag was obtained., 4XX: Set tags response failure., 5XX: Set tags response failure.}\n\n@endpoint GET /zones/{zone_id}/token_validation/config\n@desc List token validation configurations\n@optional {page: int=1 # Page number of paginated results., per_page: int=20 # Maximum number of results per page.}\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint POST /zones/{zone_id}/token_validation/config\n@desc Create a token validation configuration\n@required {credentials: map{keys!: [map]} # Request payload for create and PUT credentials operations. Provided keys define the complete stored key set. Key identities (`{alg,kid}`) must be unique., description: str, title: str, token_sources: [any], token_type: str}\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint DELETE /zones/{zone_id}/token_validation/config/{config_id}\n@desc Delete a token validation configuration\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/token_validation/config/{config_id}\n@desc Get a token validation configuration\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint PATCH /zones/{zone_id}/token_validation/config/{config_id}\n@desc Edit a token validation configuration\n@optional {description: str, title: str, token_sources: [any]}\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint PATCH /zones/{zone_id}/token_validation/config/{config_id}/credentials\n@desc Edit token validation credentials\n@required {keys: [map]}\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint PUT /zones/{zone_id}/token_validation/config/{config_id}/credentials\n@desc Replace token validation credentials\n@required {keys: [map]}\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/token_validation/rules\n@desc List token validation rules\n@optional {per_page: int=20 # Maximum number of results per page., page: int=1 # Page number of paginated results., token_configuration: [any] # Select rules using any of these token configurations., action: str, enabled: bool, id: any # Select rules with these IDs., rule_id: any # Select rules with these IDs., host: str(hostname) # Select rules with this host in `include`., hostname: str(hostname) # Select rules with this host in `include`.}\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint POST /zones/{zone_id}/token_validation/rules\n@desc Create a token validation rule\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint PATCH /zones/{zone_id}/token_validation/rules/bulk\n@desc Edit token validation rules\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint POST /zones/{zone_id}/token_validation/rules/bulk\n@desc Create token validation rules\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint POST /zones/{zone_id}/token_validation/rules/preview\n@desc Preview a token validation rule\n@optional {per_page: int=20 # Maximum number of results per page., page: int=1 # Page number of paginated results., state: [str], host: [str(hostname)] # Filter operations by host., hostname: [str(hostname)] # Filter operations by host., method: [str] # Filter operations by method., endpoint: [str(uri-template)] # Filter operations by endpoint. Allows substring matching., exclude: [map{operation_ids: [any]}] # Ignore operations that were otherwise included by `include`., include: [map{host: [str(hostname)]}] # Select all matching operations.}\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint DELETE /zones/{zone_id}/token_validation/rules/{rule_id}\n@desc Delete a token validation rule\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint GET /zones/{zone_id}/token_validation/rules/{rule_id}\n@desc Get a token validation rule\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint PATCH /zones/{zone_id}/token_validation/rules/{rule_id}\n@desc Edit a token validation rule\n@returns(200) OK\n@errors {4XX: Failure}\n\n@endpoint DELETE /zones/{zone_id}/url_normalization\n@desc Delete URL Normalization settings\n@required {zone_id: str}\n@returns(204) An empty response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/url_normalization\n@desc Get URL Normalization settings\n@required {zone_id: str}\n@returns(200) A URL Normalization response.\n@errors {4XX: A failure response.}\n\n@endpoint PUT /zones/{zone_id}/url_normalization\n@desc Update URL Normalization settings\n@required {zone_id: str, scope: str(incoming/both/none) # The scope of the URL normalization., type: str(cloudflare/rfc3986) # The type of URL normalization performed by Cloudflare.}\n@returns(200) A URL Normalization response.\n@errors {4XX: A failure response.}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms\n@desc List waiting rooms for zone\n@required {zone_id: str}\n@optional {page: num=1 # Page number of paginated results., per_page: num=25 # Maximum number of results per page. Must be a multiple of 5.}\n@returns(200) List waiting rooms for zone response\n@errors {4XX: List waiting rooms for zone response failure}\n\n@endpoint POST /zones/{zone_id}/waiting_rooms\n@desc Create waiting room\n@required {zone_id: str, host: str # 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., name: str # A unique name to identify the waiting room. Only alphanumeric characters, hyphens and underscores are allowed., new_users_per_minute: int # 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., total_active_users: int # 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.}\n@optional {additional_routes: [map{host: str, path: str}] # Only available for the Waiting Room Advanced subscription. Additional hostname and path combinations to which this waiting room will be applied. There is an implied wildcard at the end of the path. The hostname and path combination must be unique to this and all other waiting rooms., cookie_attributes: map{samesite: str, secure: str} # Configures cookie attributes for the waiting room cookie. This encrypted cookie stores a user's status in the waiting room, such as queue position., cookie_suffix: str= # Appends a '_' + a custom suffix to the end of Cloudflare Waiting Room's cookie name(__cf_waitingroom). If `cookie_suffix` is \"abcd\", the cookie name will be `__cf_waitingroom_abcd`. This field is required if using `additional_routes`., custom_page_html: str= # 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: 1. {{`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**. 2. {{`waitTimeFormatted`}} Estimated wait time for the user. For example, five minutes. Alternatively, you can use: 3. {{`waitTime`}} Number of minutes of estimated wait for a user. 4. {{`waitTimeHours`}} Number of hours of estimated wait for a user (`Math.floor(waitTime/60)`). 5. {{`waitTimeHourMinutes`}} Number of minutes above the `waitTimeHours` value (`waitTime%60`). 6. {{`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., default_template_language: str(en-US/es-ES/de-DE/fr-FR/it-IT/ja-JP/ko-KR/pt-BR/zh-CN/zh-TW/nl-NL/pl-PL/id-ID/tr-TR/ar-EG/ru-RU/fa-IR/bg-BG/hr-HR/cs-CZ/da-DK/fi-FI/lt-LT/ms-MY/nb-NO/ro-RO/el-GR/he-IL/hi-IN/hu-HU/sr-BA/sk-SK/sl-SI/sv-SE/tl-PH/th-TH/uk-UA/vi-VN)=en-US # The language of the default page template. If no default_template_language is provided, then `en-US` (English) will be used., description: str= # A note that you can use to add more details about the waiting room., disable_session_renewal: bool=false # 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., enabled_origin_commands: [str]= # A list of enabled origin commands., json_response_enabled: bool=false # 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: 1. `inWaitingRoom`: Boolean indicating if the user is in the waiting room (always **true**). 2. `waitTimeKnown`: Boolean indicating if the current estimated wait times are accurate. If **false**, they are not available. 3. `waitTime`: Valid only when `waitTimeKnown` is **true**. Integer indicating the current estimated time in minutes the user will wait in the waiting room. When `queueingMethod` is **random**, this is set to `waitTime50Percentile`. 4. `waitTime25Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **true**. Integer indicating the current estimated maximum wait time for the 25% of users that gain entry the fastest (25th percentile). 5. `waitTime50Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **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 before `waitTime50Percentile` and half are expected to be let in after it. 6. `waitTime75Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **true**. Integer indicating the current estimated maximum wait time for the 75% of users that gain entry the fastest (75th percentile). 7. `waitTimeFormatted`: String displaying the `waitTime` formatted in English for users. If `waitTimeKnown` is **false**, `waitTimeFormatted` will display **unavailable**. 8. `queueIsFull`: Boolean indicating if the waiting room's queue is currently full and not accepting new users at the moment. 9. `queueAll`: Boolean indicating if all users will be queued in the waiting room and no one will be let into the origin website. 10. `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 after `refreshIntervalSeconds` past this time. If the user makes a request too soon, it will be ignored and `lastUpdated` will not change. 11. `refreshIntervalSeconds`: Integer indicating the number of seconds after `lastUpdated` until the user is able to make another attempt to leave the waiting room and be let into the origin website. When the `queueingMethod` is `reject`, there is no specified refresh time —\\_it will always be **zero**. 12. `queueingMethod`: The queueing method currently used by the waiting room. It is either **fifo**, **random**, **passthrough**, or **reject**. 13. `isFIFOQueue`: Boolean indicating if the waiting room uses a FIFO (First-In-First-Out) queue. 14. `isRandomQueue`: Boolean indicating if the waiting room uses a Random queue where users gain access randomly. 15. `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 when `queueAll` is **true** or `isEventPrequeueing` is **true** because in all other cases requests will go directly to the origin. 16. `isRejectQueue`: Boolean indicating if the waiting room uses a reject queue. 17. `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 properties `prequeue_start_time`, `event_start_time`, and `event_end_time` in 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. 18. `isEventPrequeueing`: Valid only when `isEventActive` is **true**. Boolean indicating if an event is currently prequeueing users before it starts. 19. `timeUntilEventStart`: Valid only when `isEventPrequeueing` is **true**. Integer indicating the number of minutes until the event starts. 20. `timeUntilEventStartFormatted`: String displaying the `timeUntilEventStart` formatted in English for users. If `isEventPrequeueing` is **false**, `timeUntilEventStartFormatted` will display **unavailable**. 21. `timeUntilEventEnd`: Valid only when `isEventActive` is **true**. Integer indicating the number of minutes until the event ends. 22. `timeUntilEventEndFormatted`: String displaying the `timeUntilEventEnd` formatted in English for users. If `isEventActive` is **false**, `timeUntilEventEndFormatted` will display **unavailable**. 23. `shuffleAtEventStart`: Valid only when `isEventActive` is **true**. Boolean indicating if the users in the prequeue are shuffled randomly when the event starts. 24. `turnstile`: Empty when turnstile isn't enabled. String displaying an html tag to display the Turnstile widget. Please add the `{{{turnstile}}}` tag to the `custom_html` template to ensure the Turnstile widget appears. 25. `infiniteQueue`: Boolean indicating whether the response is for a user in the infinite queue.  An example cURL to a waiting room could be:  \tcurl -X GET \"https://example.com/waitingroom\" \\ \t\t-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:  \t{ \t\t\"cfWaitingRoom\": { \t\t\t\"inWaitingRoom\": true, \t\t\t\"waitTimeKnown\": true, \t\t\t\"waitTime\": 10, \t\t\t\"waitTime25Percentile\": 0, \t\t\t\"waitTime50Percentile\": 0, \t\t\t\"waitTime75Percentile\": 0, \t\t\t\"waitTimeFormatted\": \"10 minutes\", \t\t\t\"queueIsFull\": false, \t\t\t\"queueAll\": false, \t\t\t\"lastUpdated\": \"2020-08-03T23:46:00.000Z\", \t\t\t\"refreshIntervalSeconds\": 20, \t\t\t\"queueingMethod\": \"fifo\", \t\t\t\"isFIFOQueue\": true, \t\t\t\"isRandomQueue\": false, \t\t\t\"isPassthroughQueue\": false, \t\t\t\"isRejectQueue\": false, \t\t\t\"isEventActive\": false, \t\t\t\"isEventPrequeueing\": false, \t\t\t\"timeUntilEventStart\": 0, \t\t\t\"timeUntilEventStartFormatted\": \"unavailable\", \t\t\t\"timeUntilEventEnd\": 0, \t\t\t\"timeUntilEventEndFormatted\": \"unavailable\", \t\t\t\"shuffleAtEventStart\": false \t\t} \t}  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:  \t{ \t\t\"cfWaitingRoom\": { \t\t\t\"inWaitingRoom\": true, \t\t\t\"waitTimeKnown\": true, \t\t\t\"waitTime\": 10, \t\t\t\"waitTime25Percentile\": 5, \t\t\t\"waitTime50Percentile\": 10, \t\t\t\"waitTime75Percentile\": 15, \t\t\t\"waitTimeFormatted\": \"5 minutes to 15 minutes\", \t\t\t\"queueIsFull\": false, \t\t\t\"queueAll\": false, \t\t\t\"lastUpdated\": \"2020-08-03T23:46:00.000Z\", \t\t\t\"refreshIntervalSeconds\": 20, \t\t\t\"queueingMethod\": \"random\", \t\t\t\"isFIFOQueue\": false, \t\t\t\"isRandomQueue\": true, \t\t\t\"isPassthroughQueue\": false, \t\t\t\"isRejectQueue\": false, \t\t\t\"isEventActive\": true, \t\t\t\"isEventPrequeueing\": false, \t\t\t\"timeUntilEventStart\": 0, \t\t\t\"timeUntilEventStartFormatted\": \"unavailable\", \t\t\t\"timeUntilEventEnd\": 15, \t\t\t\"timeUntilEventEndFormatted\": \"15 minutes\", \t\t\t\"shuffleAtEventStart\": true \t\t} \t}, path: str=/ # 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., queue_all: bool=false # 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., queueing_method: str(fifo/random/passthrough/reject)=fifo # Sets the queueing method used by the waiting room. Changing this parameter from the **default** queueing method is only available for the Waiting Room Advanced subscription. Regardless of the queueing method, if `queue_all` is enabled or an event is prequeueing, users in the waiting room will not be accepted to the origin. These users will always see a waiting room page that refreshes automatically. The valid queueing methods are: 1. `fifo` **(default)**: First-In-First-Out queue where customers gain access in the order they arrived. 2. `random`: Random queue where customers gain access randomly, regardless of arrival time. 3. `passthrough`: Users will pass directly through the waiting room and into the origin website. As a result, any configured limits will not be respected while this is enabled. This method can be used as an alternative to disabling a waiting room (with `suspended`) so that analytics are still reported. This can be used if you wish to allow all traffic normally, but want to restrict traffic during a waiting room event, or vice versa. 4. `reject`: Users will be immediately rejected from the waiting room. As a result, no users will reach the origin website while this is enabled. This can be used if you wish to reject all traffic while performing maintenance, block traffic during a specified period of time (an event), or block traffic while events are not occurring. Consider a waiting room used for vaccine distribution that only allows traffic during sign-up events, and otherwise blocks all traffic. For this case, the waiting room uses `reject`, and its events override this with `fifo`, `random`, or `passthrough`. When this queueing method is enabled and neither `queueAll` is enabled nor an event is prequeueing, the waiting room page **will not refresh automatically**., queueing_status_code: int(200/202/429)=200 # HTTP status code returned to a user while in the queue., session_duration: int=5 # 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., suspended: bool=false # Suspends or allows traffic going to the waiting room. If set to `true`, the traffic will not go to the waiting room., turnstile_action: str(log/infinite_queue)=log # Which action to take when a bot is detected using Turnstile. `log` will have no impact on queueing behavior, simply keeping track of how many bots are detected in Waiting Room Analytics. `infinite_queue` will send bots to a false queueing state, where they will never reach your origin. `infinite_queue` requires Advanced Waiting Room., turnstile_mode: str(off/invisible/visible_non_interactive/visible_managed)=invisible # Which Turnstile widget type to use for detecting bot traffic. See [the Turnstile documentation](https://developers.cloudflare.com/turnstile/concepts/widget/#widget-types) for the definitions of these widget types. Set to `off` to disable the Turnstile integration entirely. Setting this to anything other than `off` or `invisible` requires Advanced Waiting Room.}\n@returns(200) Create waiting room response\n@errors {4XX: Create waiting room response failure}\n\n@endpoint POST /zones/{zone_id}/waiting_rooms/preview\n@desc Create a custom waiting room page preview\n@required {zone_id: str, custom_html: str= # 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: 1. {{`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**. 2. {{`waitTimeFormatted`}} Estimated wait time for the user. For example, five minutes. Alternatively, you can use: 3. {{`waitTime`}} Number of minutes of estimated wait for a user. 4. {{`waitTimeHours`}} Number of hours of estimated wait for a user (`Math.floor(waitTime/60)`). 5. {{`waitTimeHourMinutes`}} Number of minutes above the `waitTimeHours` value (`waitTime%60`). 6. {{`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.}\n@returns(200) Create a custom waiting room page preview response\n@errors {4XX: Create a custom waiting room page preview response failure}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms/settings\n@desc Get zone-level Waiting Room settings\n@required {zone_id: str}\n@returns(200) The current zone-level Waiting Room settings\n@errors {4XX: The current zone-level Waiting Room settings response failure}\n\n@endpoint PATCH /zones/{zone_id}/waiting_rooms/settings\n@desc Patch zone-level Waiting Room settings\n@required {zone_id: str}\n@optional {search_engine_crawler_bypass: bool=false # Whether to allow verified search engine crawlers to bypass all waiting rooms on this zone. Verified search engine crawlers will not be tracked or counted by the waiting room system, and will not appear in waiting room analytics.}\n@returns(200) The updated zone-level Waiting Room settings\n@errors {4XX: The zone-level Waiting Room settings response failure}\n\n@endpoint PUT /zones/{zone_id}/waiting_rooms/settings\n@desc Update zone-level Waiting Room settings\n@required {zone_id: str}\n@optional {search_engine_crawler_bypass: bool=false # Whether to allow verified search engine crawlers to bypass all waiting rooms on this zone. Verified search engine crawlers will not be tracked or counted by the waiting room system, and will not appear in waiting room analytics.}\n@returns(200) The updated zone-level Waiting Room settings\n@errors {4XX: The zone-level Waiting Room settings response failure}\n\n@endpoint DELETE /zones/{zone_id}/waiting_rooms/{waiting_room_id}\n@desc Delete waiting room\n@required {waiting_room_id: str, zone_id: str}\n@returns(200) Delete waiting room response\n@errors {4XX: Delete waiting room response failure}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms/{waiting_room_id}\n@desc Waiting room details\n@required {waiting_room_id: str, zone_id: str}\n@returns(200) Waiting room details response\n@errors {4XX: Waiting room details response failure}\n\n@endpoint PATCH /zones/{zone_id}/waiting_rooms/{waiting_room_id}\n@desc Patch waiting room\n@required {waiting_room_id: str, zone_id: str, host: str # 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., name: str # A unique name to identify the waiting room. Only alphanumeric characters, hyphens and underscores are allowed., new_users_per_minute: int # 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., total_active_users: int # 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.}\n@optional {additional_routes: [map{host: str, path: str}] # Only available for the Waiting Room Advanced subscription. Additional hostname and path combinations to which this waiting room will be applied. There is an implied wildcard at the end of the path. The hostname and path combination must be unique to this and all other waiting rooms., cookie_attributes: map{samesite: str, secure: str} # Configures cookie attributes for the waiting room cookie. This encrypted cookie stores a user's status in the waiting room, such as queue position., cookie_suffix: str= # Appends a '_' + a custom suffix to the end of Cloudflare Waiting Room's cookie name(__cf_waitingroom). If `cookie_suffix` is \"abcd\", the cookie name will be `__cf_waitingroom_abcd`. This field is required if using `additional_routes`., custom_page_html: str= # 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: 1. {{`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**. 2. {{`waitTimeFormatted`}} Estimated wait time for the user. For example, five minutes. Alternatively, you can use: 3. {{`waitTime`}} Number of minutes of estimated wait for a user. 4. {{`waitTimeHours`}} Number of hours of estimated wait for a user (`Math.floor(waitTime/60)`). 5. {{`waitTimeHourMinutes`}} Number of minutes above the `waitTimeHours` value (`waitTime%60`). 6. {{`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., default_template_language: str(en-US/es-ES/de-DE/fr-FR/it-IT/ja-JP/ko-KR/pt-BR/zh-CN/zh-TW/nl-NL/pl-PL/id-ID/tr-TR/ar-EG/ru-RU/fa-IR/bg-BG/hr-HR/cs-CZ/da-DK/fi-FI/lt-LT/ms-MY/nb-NO/ro-RO/el-GR/he-IL/hi-IN/hu-HU/sr-BA/sk-SK/sl-SI/sv-SE/tl-PH/th-TH/uk-UA/vi-VN)=en-US # The language of the default page template. If no default_template_language is provided, then `en-US` (English) will be used., description: str= # A note that you can use to add more details about the waiting room., disable_session_renewal: bool=false # 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., enabled_origin_commands: [str]= # A list of enabled origin commands., json_response_enabled: bool=false # 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: 1. `inWaitingRoom`: Boolean indicating if the user is in the waiting room (always **true**). 2. `waitTimeKnown`: Boolean indicating if the current estimated wait times are accurate. If **false**, they are not available. 3. `waitTime`: Valid only when `waitTimeKnown` is **true**. Integer indicating the current estimated time in minutes the user will wait in the waiting room. When `queueingMethod` is **random**, this is set to `waitTime50Percentile`. 4. `waitTime25Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **true**. Integer indicating the current estimated maximum wait time for the 25% of users that gain entry the fastest (25th percentile). 5. `waitTime50Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **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 before `waitTime50Percentile` and half are expected to be let in after it. 6. `waitTime75Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **true**. Integer indicating the current estimated maximum wait time for the 75% of users that gain entry the fastest (75th percentile). 7. `waitTimeFormatted`: String displaying the `waitTime` formatted in English for users. If `waitTimeKnown` is **false**, `waitTimeFormatted` will display **unavailable**. 8. `queueIsFull`: Boolean indicating if the waiting room's queue is currently full and not accepting new users at the moment. 9. `queueAll`: Boolean indicating if all users will be queued in the waiting room and no one will be let into the origin website. 10. `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 after `refreshIntervalSeconds` past this time. If the user makes a request too soon, it will be ignored and `lastUpdated` will not change. 11. `refreshIntervalSeconds`: Integer indicating the number of seconds after `lastUpdated` until the user is able to make another attempt to leave the waiting room and be let into the origin website. When the `queueingMethod` is `reject`, there is no specified refresh time —\\_it will always be **zero**. 12. `queueingMethod`: The queueing method currently used by the waiting room. It is either **fifo**, **random**, **passthrough**, or **reject**. 13. `isFIFOQueue`: Boolean indicating if the waiting room uses a FIFO (First-In-First-Out) queue. 14. `isRandomQueue`: Boolean indicating if the waiting room uses a Random queue where users gain access randomly. 15. `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 when `queueAll` is **true** or `isEventPrequeueing` is **true** because in all other cases requests will go directly to the origin. 16. `isRejectQueue`: Boolean indicating if the waiting room uses a reject queue. 17. `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 properties `prequeue_start_time`, `event_start_time`, and `event_end_time` in 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. 18. `isEventPrequeueing`: Valid only when `isEventActive` is **true**. Boolean indicating if an event is currently prequeueing users before it starts. 19. `timeUntilEventStart`: Valid only when `isEventPrequeueing` is **true**. Integer indicating the number of minutes until the event starts. 20. `timeUntilEventStartFormatted`: String displaying the `timeUntilEventStart` formatted in English for users. If `isEventPrequeueing` is **false**, `timeUntilEventStartFormatted` will display **unavailable**. 21. `timeUntilEventEnd`: Valid only when `isEventActive` is **true**. Integer indicating the number of minutes until the event ends. 22. `timeUntilEventEndFormatted`: String displaying the `timeUntilEventEnd` formatted in English for users. If `isEventActive` is **false**, `timeUntilEventEndFormatted` will display **unavailable**. 23. `shuffleAtEventStart`: Valid only when `isEventActive` is **true**. Boolean indicating if the users in the prequeue are shuffled randomly when the event starts. 24. `turnstile`: Empty when turnstile isn't enabled. String displaying an html tag to display the Turnstile widget. Please add the `{{{turnstile}}}` tag to the `custom_html` template to ensure the Turnstile widget appears. 25. `infiniteQueue`: Boolean indicating whether the response is for a user in the infinite queue.  An example cURL to a waiting room could be:  \tcurl -X GET \"https://example.com/waitingroom\" \\ \t\t-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:  \t{ \t\t\"cfWaitingRoom\": { \t\t\t\"inWaitingRoom\": true, \t\t\t\"waitTimeKnown\": true, \t\t\t\"waitTime\": 10, \t\t\t\"waitTime25Percentile\": 0, \t\t\t\"waitTime50Percentile\": 0, \t\t\t\"waitTime75Percentile\": 0, \t\t\t\"waitTimeFormatted\": \"10 minutes\", \t\t\t\"queueIsFull\": false, \t\t\t\"queueAll\": false, \t\t\t\"lastUpdated\": \"2020-08-03T23:46:00.000Z\", \t\t\t\"refreshIntervalSeconds\": 20, \t\t\t\"queueingMethod\": \"fifo\", \t\t\t\"isFIFOQueue\": true, \t\t\t\"isRandomQueue\": false, \t\t\t\"isPassthroughQueue\": false, \t\t\t\"isRejectQueue\": false, \t\t\t\"isEventActive\": false, \t\t\t\"isEventPrequeueing\": false, \t\t\t\"timeUntilEventStart\": 0, \t\t\t\"timeUntilEventStartFormatted\": \"unavailable\", \t\t\t\"timeUntilEventEnd\": 0, \t\t\t\"timeUntilEventEndFormatted\": \"unavailable\", \t\t\t\"shuffleAtEventStart\": false \t\t} \t}  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:  \t{ \t\t\"cfWaitingRoom\": { \t\t\t\"inWaitingRoom\": true, \t\t\t\"waitTimeKnown\": true, \t\t\t\"waitTime\": 10, \t\t\t\"waitTime25Percentile\": 5, \t\t\t\"waitTime50Percentile\": 10, \t\t\t\"waitTime75Percentile\": 15, \t\t\t\"waitTimeFormatted\": \"5 minutes to 15 minutes\", \t\t\t\"queueIsFull\": false, \t\t\t\"queueAll\": false, \t\t\t\"lastUpdated\": \"2020-08-03T23:46:00.000Z\", \t\t\t\"refreshIntervalSeconds\": 20, \t\t\t\"queueingMethod\": \"random\", \t\t\t\"isFIFOQueue\": false, \t\t\t\"isRandomQueue\": true, \t\t\t\"isPassthroughQueue\": false, \t\t\t\"isRejectQueue\": false, \t\t\t\"isEventActive\": true, \t\t\t\"isEventPrequeueing\": false, \t\t\t\"timeUntilEventStart\": 0, \t\t\t\"timeUntilEventStartFormatted\": \"unavailable\", \t\t\t\"timeUntilEventEnd\": 15, \t\t\t\"timeUntilEventEndFormatted\": \"15 minutes\", \t\t\t\"shuffleAtEventStart\": true \t\t} \t}, path: str=/ # 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., queue_all: bool=false # 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., queueing_method: str(fifo/random/passthrough/reject)=fifo # Sets the queueing method used by the waiting room. Changing this parameter from the **default** queueing method is only available for the Waiting Room Advanced subscription. Regardless of the queueing method, if `queue_all` is enabled or an event is prequeueing, users in the waiting room will not be accepted to the origin. These users will always see a waiting room page that refreshes automatically. The valid queueing methods are: 1. `fifo` **(default)**: First-In-First-Out queue where customers gain access in the order they arrived. 2. `random`: Random queue where customers gain access randomly, regardless of arrival time. 3. `passthrough`: Users will pass directly through the waiting room and into the origin website. As a result, any configured limits will not be respected while this is enabled. This method can be used as an alternative to disabling a waiting room (with `suspended`) so that analytics are still reported. This can be used if you wish to allow all traffic normally, but want to restrict traffic during a waiting room event, or vice versa. 4. `reject`: Users will be immediately rejected from the waiting room. As a result, no users will reach the origin website while this is enabled. This can be used if you wish to reject all traffic while performing maintenance, block traffic during a specified period of time (an event), or block traffic while events are not occurring. Consider a waiting room used for vaccine distribution that only allows traffic during sign-up events, and otherwise blocks all traffic. For this case, the waiting room uses `reject`, and its events override this with `fifo`, `random`, or `passthrough`. When this queueing method is enabled and neither `queueAll` is enabled nor an event is prequeueing, the waiting room page **will not refresh automatically**., queueing_status_code: int(200/202/429)=200 # HTTP status code returned to a user while in the queue., session_duration: int=5 # 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., suspended: bool=false # Suspends or allows traffic going to the waiting room. If set to `true`, the traffic will not go to the waiting room., turnstile_action: str(log/infinite_queue)=log # Which action to take when a bot is detected using Turnstile. `log` will have no impact on queueing behavior, simply keeping track of how many bots are detected in Waiting Room Analytics. `infinite_queue` will send bots to a false queueing state, where they will never reach your origin. `infinite_queue` requires Advanced Waiting Room., turnstile_mode: str(off/invisible/visible_non_interactive/visible_managed)=invisible # Which Turnstile widget type to use for detecting bot traffic. See [the Turnstile documentation](https://developers.cloudflare.com/turnstile/concepts/widget/#widget-types) for the definitions of these widget types. Set to `off` to disable the Turnstile integration entirely. Setting this to anything other than `off` or `invisible` requires Advanced Waiting Room.}\n@returns(200) Patch waiting room response\n@errors {4XX: Patch waiting room response failure}\n\n@endpoint PUT /zones/{zone_id}/waiting_rooms/{waiting_room_id}\n@desc Update waiting room\n@required {waiting_room_id: str, zone_id: str, host: str # 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., name: str # A unique name to identify the waiting room. Only alphanumeric characters, hyphens and underscores are allowed., new_users_per_minute: int # 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., total_active_users: int # 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.}\n@optional {additional_routes: [map{host: str, path: str}] # Only available for the Waiting Room Advanced subscription. Additional hostname and path combinations to which this waiting room will be applied. There is an implied wildcard at the end of the path. The hostname and path combination must be unique to this and all other waiting rooms., cookie_attributes: map{samesite: str, secure: str} # Configures cookie attributes for the waiting room cookie. This encrypted cookie stores a user's status in the waiting room, such as queue position., cookie_suffix: str= # Appends a '_' + a custom suffix to the end of Cloudflare Waiting Room's cookie name(__cf_waitingroom). If `cookie_suffix` is \"abcd\", the cookie name will be `__cf_waitingroom_abcd`. This field is required if using `additional_routes`., custom_page_html: str= # 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: 1. {{`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**. 2. {{`waitTimeFormatted`}} Estimated wait time for the user. For example, five minutes. Alternatively, you can use: 3. {{`waitTime`}} Number of minutes of estimated wait for a user. 4. {{`waitTimeHours`}} Number of hours of estimated wait for a user (`Math.floor(waitTime/60)`). 5. {{`waitTimeHourMinutes`}} Number of minutes above the `waitTimeHours` value (`waitTime%60`). 6. {{`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., default_template_language: str(en-US/es-ES/de-DE/fr-FR/it-IT/ja-JP/ko-KR/pt-BR/zh-CN/zh-TW/nl-NL/pl-PL/id-ID/tr-TR/ar-EG/ru-RU/fa-IR/bg-BG/hr-HR/cs-CZ/da-DK/fi-FI/lt-LT/ms-MY/nb-NO/ro-RO/el-GR/he-IL/hi-IN/hu-HU/sr-BA/sk-SK/sl-SI/sv-SE/tl-PH/th-TH/uk-UA/vi-VN)=en-US # The language of the default page template. If no default_template_language is provided, then `en-US` (English) will be used., description: str= # A note that you can use to add more details about the waiting room., disable_session_renewal: bool=false # 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., enabled_origin_commands: [str]= # A list of enabled origin commands., json_response_enabled: bool=false # 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: 1. `inWaitingRoom`: Boolean indicating if the user is in the waiting room (always **true**). 2. `waitTimeKnown`: Boolean indicating if the current estimated wait times are accurate. If **false**, they are not available. 3. `waitTime`: Valid only when `waitTimeKnown` is **true**. Integer indicating the current estimated time in minutes the user will wait in the waiting room. When `queueingMethod` is **random**, this is set to `waitTime50Percentile`. 4. `waitTime25Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **true**. Integer indicating the current estimated maximum wait time for the 25% of users that gain entry the fastest (25th percentile). 5. `waitTime50Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **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 before `waitTime50Percentile` and half are expected to be let in after it. 6. `waitTime75Percentile`: Valid only when `queueingMethod` is **random** and `waitTimeKnown` is **true**. Integer indicating the current estimated maximum wait time for the 75% of users that gain entry the fastest (75th percentile). 7. `waitTimeFormatted`: String displaying the `waitTime` formatted in English for users. If `waitTimeKnown` is **false**, `waitTimeFormatted` will display **unavailable**. 8. `queueIsFull`: Boolean indicating if the waiting room's queue is currently full and not accepting new users at the moment. 9. `queueAll`: Boolean indicating if all users will be queued in the waiting room and no one will be let into the origin website. 10. `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 after `refreshIntervalSeconds` past this time. If the user makes a request too soon, it will be ignored and `lastUpdated` will not change. 11. `refreshIntervalSeconds`: Integer indicating the number of seconds after `lastUpdated` until the user is able to make another attempt to leave the waiting room and be let into the origin website. When the `queueingMethod` is `reject`, there is no specified refresh time —\\_it will always be **zero**. 12. `queueingMethod`: The queueing method currently used by the waiting room. It is either **fifo**, **random**, **passthrough**, or **reject**. 13. `isFIFOQueue`: Boolean indicating if the waiting room uses a FIFO (First-In-First-Out) queue. 14. `isRandomQueue`: Boolean indicating if the waiting room uses a Random queue where users gain access randomly. 15. `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 when `queueAll` is **true** or `isEventPrequeueing` is **true** because in all other cases requests will go directly to the origin. 16. `isRejectQueue`: Boolean indicating if the waiting room uses a reject queue. 17. `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 properties `prequeue_start_time`, `event_start_time`, and `event_end_time` in 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. 18. `isEventPrequeueing`: Valid only when `isEventActive` is **true**. Boolean indicating if an event is currently prequeueing users before it starts. 19. `timeUntilEventStart`: Valid only when `isEventPrequeueing` is **true**. Integer indicating the number of minutes until the event starts. 20. `timeUntilEventStartFormatted`: String displaying the `timeUntilEventStart` formatted in English for users. If `isEventPrequeueing` is **false**, `timeUntilEventStartFormatted` will display **unavailable**. 21. `timeUntilEventEnd`: Valid only when `isEventActive` is **true**. Integer indicating the number of minutes until the event ends. 22. `timeUntilEventEndFormatted`: String displaying the `timeUntilEventEnd` formatted in English for users. If `isEventActive` is **false**, `timeUntilEventEndFormatted` will display **unavailable**. 23. `shuffleAtEventStart`: Valid only when `isEventActive` is **true**. Boolean indicating if the users in the prequeue are shuffled randomly when the event starts. 24. `turnstile`: Empty when turnstile isn't enabled. String displaying an html tag to display the Turnstile widget. Please add the `{{{turnstile}}}` tag to the `custom_html` template to ensure the Turnstile widget appears. 25. `infiniteQueue`: Boolean indicating whether the response is for a user in the infinite queue.  An example cURL to a waiting room could be:  \tcurl -X GET \"https://example.com/waitingroom\" \\ \t\t-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:  \t{ \t\t\"cfWaitingRoom\": { \t\t\t\"inWaitingRoom\": true, \t\t\t\"waitTimeKnown\": true, \t\t\t\"waitTime\": 10, \t\t\t\"waitTime25Percentile\": 0, \t\t\t\"waitTime50Percentile\": 0, \t\t\t\"waitTime75Percentile\": 0, \t\t\t\"waitTimeFormatted\": \"10 minutes\", \t\t\t\"queueIsFull\": false, \t\t\t\"queueAll\": false, \t\t\t\"lastUpdated\": \"2020-08-03T23:46:00.000Z\", \t\t\t\"refreshIntervalSeconds\": 20, \t\t\t\"queueingMethod\": \"fifo\", \t\t\t\"isFIFOQueue\": true, \t\t\t\"isRandomQueue\": false, \t\t\t\"isPassthroughQueue\": false, \t\t\t\"isRejectQueue\": false, \t\t\t\"isEventActive\": false, \t\t\t\"isEventPrequeueing\": false, \t\t\t\"timeUntilEventStart\": 0, \t\t\t\"timeUntilEventStartFormatted\": \"unavailable\", \t\t\t\"timeUntilEventEnd\": 0, \t\t\t\"timeUntilEventEndFormatted\": \"unavailable\", \t\t\t\"shuffleAtEventStart\": false \t\t} \t}  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:  \t{ \t\t\"cfWaitingRoom\": { \t\t\t\"inWaitingRoom\": true, \t\t\t\"waitTimeKnown\": true, \t\t\t\"waitTime\": 10, \t\t\t\"waitTime25Percentile\": 5, \t\t\t\"waitTime50Percentile\": 10, \t\t\t\"waitTime75Percentile\": 15, \t\t\t\"waitTimeFormatted\": \"5 minutes to 15 minutes\", \t\t\t\"queueIsFull\": false, \t\t\t\"queueAll\": false, \t\t\t\"lastUpdated\": \"2020-08-03T23:46:00.000Z\", \t\t\t\"refreshIntervalSeconds\": 20, \t\t\t\"queueingMethod\": \"random\", \t\t\t\"isFIFOQueue\": false, \t\t\t\"isRandomQueue\": true, \t\t\t\"isPassthroughQueue\": false, \t\t\t\"isRejectQueue\": false, \t\t\t\"isEventActive\": true, \t\t\t\"isEventPrequeueing\": false, \t\t\t\"timeUntilEventStart\": 0, \t\t\t\"timeUntilEventStartFormatted\": \"unavailable\", \t\t\t\"timeUntilEventEnd\": 15, \t\t\t\"timeUntilEventEndFormatted\": \"15 minutes\", \t\t\t\"shuffleAtEventStart\": true \t\t} \t}, path: str=/ # 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., queue_all: bool=false # 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., queueing_method: str(fifo/random/passthrough/reject)=fifo # Sets the queueing method used by the waiting room. Changing this parameter from the **default** queueing method is only available for the Waiting Room Advanced subscription. Regardless of the queueing method, if `queue_all` is enabled or an event is prequeueing, users in the waiting room will not be accepted to the origin. These users will always see a waiting room page that refreshes automatically. The valid queueing methods are: 1. `fifo` **(default)**: First-In-First-Out queue where customers gain access in the order they arrived. 2. `random`: Random queue where customers gain access randomly, regardless of arrival time. 3. `passthrough`: Users will pass directly through the waiting room and into the origin website. As a result, any configured limits will not be respected while this is enabled. This method can be used as an alternative to disabling a waiting room (with `suspended`) so that analytics are still reported. This can be used if you wish to allow all traffic normally, but want to restrict traffic during a waiting room event, or vice versa. 4. `reject`: Users will be immediately rejected from the waiting room. As a result, no users will reach the origin website while this is enabled. This can be used if you wish to reject all traffic while performing maintenance, block traffic during a specified period of time (an event), or block traffic while events are not occurring. Consider a waiting room used for vaccine distribution that only allows traffic during sign-up events, and otherwise blocks all traffic. For this case, the waiting room uses `reject`, and its events override this with `fifo`, `random`, or `passthrough`. When this queueing method is enabled and neither `queueAll` is enabled nor an event is prequeueing, the waiting room page **will not refresh automatically**., queueing_status_code: int(200/202/429)=200 # HTTP status code returned to a user while in the queue., session_duration: int=5 # 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., suspended: bool=false # Suspends or allows traffic going to the waiting room. If set to `true`, the traffic will not go to the waiting room., turnstile_action: str(log/infinite_queue)=log # Which action to take when a bot is detected using Turnstile. `log` will have no impact on queueing behavior, simply keeping track of how many bots are detected in Waiting Room Analytics. `infinite_queue` will send bots to a false queueing state, where they will never reach your origin. `infinite_queue` requires Advanced Waiting Room., turnstile_mode: str(off/invisible/visible_non_interactive/visible_managed)=invisible # Which Turnstile widget type to use for detecting bot traffic. See [the Turnstile documentation](https://developers.cloudflare.com/turnstile/concepts/widget/#widget-types) for the definitions of these widget types. Set to `off` to disable the Turnstile integration entirely. Setting this to anything other than `off` or `invisible` requires Advanced Waiting Room.}\n@returns(200) Update waiting room response\n@errors {4XX: Update waiting room response failure}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms/{waiting_room_id}/events\n@desc List events\n@required {waiting_room_id: str, zone_id: str}\n@optional {page: num=1 # Page number of paginated results., per_page: num=25 # Maximum number of results per page. Must be a multiple of 5.}\n@returns(200) List events response\n@errors {4XX: List events response failure}\n\n@endpoint POST /zones/{zone_id}/waiting_rooms/{waiting_room_id}/events\n@desc Create event\n@required {waiting_room_id: str, zone_id: str, event_end_time: str # An ISO 8601 timestamp that marks the end of the event., event_start_time: str # An ISO 8601 timestamp that marks the start of the event. At this time, queued users will be processed with the event's configuration. The start time must be at least one minute before `event_end_time`., name: str # A unique name to identify the event. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {custom_page_html: str # If set, the event will override the waiting room's `custom_page_html` property while it is active. If null, the event will inherit it., description: str= # A note that you can use to add more details about the event., disable_session_renewal: bool # If set, the event will override the waiting room's `disable_session_renewal` property while it is active. If null, the event will inherit it., new_users_per_minute: int # If set, the event will override the waiting room's `new_users_per_minute` property while it is active. If null, the event will inherit it. This can only be set if the event's `total_active_users` property is also set., prequeue_start_time: str # An ISO 8601 timestamp that marks when to begin queueing all users before the event starts. The prequeue must start at least five minutes before `event_start_time`., queueing_method: str # If set, the event will override the waiting room's `queueing_method` property while it is active. If null, the event will inherit it., session_duration: int # If set, the event will override the waiting room's `session_duration` property while it is active. If null, the event will inherit it., shuffle_at_event_start: bool=false # If enabled, users in the prequeue will be shuffled randomly at the `event_start_time`. Requires that `prequeue_start_time` is not null. This is useful for situations when many users will join the event prequeue at the same time and you want to shuffle them to ensure fairness. Naturally, it makes the most sense to enable this feature when the `queueing_method` during the event respects ordering such as **fifo**, or else the shuffling may be unnecessary., suspended: bool=false # Suspends or allows an event. If set to `true`, the event is ignored and traffic will be handled based on the waiting room configuration., total_active_users: int # If set, the event will override the waiting room's `total_active_users` property while it is active. If null, the event will inherit it. This can only be set if the event's `new_users_per_minute` property is also set., turnstile_action: str(log/infinite_queue) # If set, the event will override the waiting room's `turnstile_action` property while it is active. If null, the event will inherit it., turnstile_mode: str(off/invisible/visible_non_interactive/visible_managed) # If set, the event will override the waiting room's `turnstile_mode` property while it is active. If null, the event will inherit it.}\n@returns(200) Create event response\n@errors {4XX: Create event response failure}\n\n@endpoint DELETE /zones/{zone_id}/waiting_rooms/{waiting_room_id}/events/{event_id}\n@desc Delete event\n@required {event_id: str, waiting_room_id: str, zone_id: str}\n@returns(200) Delete event response\n@errors {4XX: Delete event response failure}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms/{waiting_room_id}/events/{event_id}\n@desc Event details\n@required {event_id: str, waiting_room_id: str, zone_id: str}\n@returns(200) Event details response\n@errors {4XX: Event details response failure}\n\n@endpoint PATCH /zones/{zone_id}/waiting_rooms/{waiting_room_id}/events/{event_id}\n@desc Patch event\n@required {event_id: str, waiting_room_id: str, zone_id: str, event_end_time: str # An ISO 8601 timestamp that marks the end of the event., event_start_time: str # An ISO 8601 timestamp that marks the start of the event. At this time, queued users will be processed with the event's configuration. The start time must be at least one minute before `event_end_time`., name: str # A unique name to identify the event. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {custom_page_html: str # If set, the event will override the waiting room's `custom_page_html` property while it is active. If null, the event will inherit it., description: str= # A note that you can use to add more details about the event., disable_session_renewal: bool # If set, the event will override the waiting room's `disable_session_renewal` property while it is active. If null, the event will inherit it., new_users_per_minute: int # If set, the event will override the waiting room's `new_users_per_minute` property while it is active. If null, the event will inherit it. This can only be set if the event's `total_active_users` property is also set., prequeue_start_time: str # An ISO 8601 timestamp that marks when to begin queueing all users before the event starts. The prequeue must start at least five minutes before `event_start_time`., queueing_method: str # If set, the event will override the waiting room's `queueing_method` property while it is active. If null, the event will inherit it., session_duration: int # If set, the event will override the waiting room's `session_duration` property while it is active. If null, the event will inherit it., shuffle_at_event_start: bool=false # If enabled, users in the prequeue will be shuffled randomly at the `event_start_time`. Requires that `prequeue_start_time` is not null. This is useful for situations when many users will join the event prequeue at the same time and you want to shuffle them to ensure fairness. Naturally, it makes the most sense to enable this feature when the `queueing_method` during the event respects ordering such as **fifo**, or else the shuffling may be unnecessary., suspended: bool=false # Suspends or allows an event. If set to `true`, the event is ignored and traffic will be handled based on the waiting room configuration., total_active_users: int # If set, the event will override the waiting room's `total_active_users` property while it is active. If null, the event will inherit it. This can only be set if the event's `new_users_per_minute` property is also set., turnstile_action: str(log/infinite_queue) # If set, the event will override the waiting room's `turnstile_action` property while it is active. If null, the event will inherit it., turnstile_mode: str(off/invisible/visible_non_interactive/visible_managed) # If set, the event will override the waiting room's `turnstile_mode` property while it is active. If null, the event will inherit it.}\n@returns(200) Patch event response\n@errors {4XX: Patch event response failure}\n\n@endpoint PUT /zones/{zone_id}/waiting_rooms/{waiting_room_id}/events/{event_id}\n@desc Update event\n@required {event_id: str, waiting_room_id: str, zone_id: str, event_end_time: str # An ISO 8601 timestamp that marks the end of the event., event_start_time: str # An ISO 8601 timestamp that marks the start of the event. At this time, queued users will be processed with the event's configuration. The start time must be at least one minute before `event_end_time`., name: str # A unique name to identify the event. Only alphanumeric characters, hyphens and underscores are allowed.}\n@optional {custom_page_html: str # If set, the event will override the waiting room's `custom_page_html` property while it is active. If null, the event will inherit it., description: str= # A note that you can use to add more details about the event., disable_session_renewal: bool # If set, the event will override the waiting room's `disable_session_renewal` property while it is active. If null, the event will inherit it., new_users_per_minute: int # If set, the event will override the waiting room's `new_users_per_minute` property while it is active. If null, the event will inherit it. This can only be set if the event's `total_active_users` property is also set., prequeue_start_time: str # An ISO 8601 timestamp that marks when to begin queueing all users before the event starts. The prequeue must start at least five minutes before `event_start_time`., queueing_method: str # If set, the event will override the waiting room's `queueing_method` property while it is active. If null, the event will inherit it., session_duration: int # If set, the event will override the waiting room's `session_duration` property while it is active. If null, the event will inherit it., shuffle_at_event_start: bool=false # If enabled, users in the prequeue will be shuffled randomly at the `event_start_time`. Requires that `prequeue_start_time` is not null. This is useful for situations when many users will join the event prequeue at the same time and you want to shuffle them to ensure fairness. Naturally, it makes the most sense to enable this feature when the `queueing_method` during the event respects ordering such as **fifo**, or else the shuffling may be unnecessary., suspended: bool=false # Suspends or allows an event. If set to `true`, the event is ignored and traffic will be handled based on the waiting room configuration., total_active_users: int # If set, the event will override the waiting room's `total_active_users` property while it is active. If null, the event will inherit it. This can only be set if the event's `new_users_per_minute` property is also set., turnstile_action: str(log/infinite_queue) # If set, the event will override the waiting room's `turnstile_action` property while it is active. If null, the event will inherit it., turnstile_mode: str(off/invisible/visible_non_interactive/visible_managed) # If set, the event will override the waiting room's `turnstile_mode` property while it is active. If null, the event will inherit it.}\n@returns(200) Update event response\n@errors {4XX: Update event response failure}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms/{waiting_room_id}/events/{event_id}/details\n@desc Preview active event details\n@required {event_id: str, waiting_room_id: str, zone_id: str}\n@returns(200) Preview active event details response\n@errors {4XX: Preview active event details response failure}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms/{waiting_room_id}/rules\n@desc List Waiting Room Rules\n@required {waiting_room_id: str, zone_id: str}\n@returns(200) List Waiting Room Rules response\n@errors {4XX: List Waiting Room Rules response failure}\n\n@endpoint POST /zones/{zone_id}/waiting_rooms/{waiting_room_id}/rules\n@desc Create Waiting Room Rule\n@required {waiting_room_id: str, zone_id: str, action: str # The action to take when the expression matches., expression: str # Criteria defining when there is a match for the current rule.}\n@optional {description: str= # The description of the rule., enabled: bool=true # When set to true, the rule is enabled.}\n@returns(200) Create Waiting Room Rule response\n@errors {4XX: Create Waiting Room Rule response failure}\n\n@endpoint PUT /zones/{zone_id}/waiting_rooms/{waiting_room_id}/rules\n@desc Replace Waiting Room Rules\n@required {waiting_room_id: str, zone_id: str}\n@returns(200) Replace Waiting Room Rules response\n@errors {4XX: Replace Waiting Room Rules response failure}\n\n@endpoint DELETE /zones/{zone_id}/waiting_rooms/{waiting_room_id}/rules/{rule_id}\n@desc Delete Waiting Room Rule\n@required {rule_id: str, waiting_room_id: str, zone_id: str}\n@returns(200) Delete Waiting Room Rule response\n@errors {4XX: Delete Waiting Room Rule response failure}\n\n@endpoint PATCH /zones/{zone_id}/waiting_rooms/{waiting_room_id}/rules/{rule_id}\n@desc Patch Waiting Room Rule\n@required {rule_id: str, waiting_room_id: str, zone_id: str, action: str # The action to take when the expression matches., expression: str # Criteria defining when there is a match for the current rule.}\n@optional {description: str= # The description of the rule., enabled: bool=true # When set to true, the rule is enabled., position: map # Reorder the position of a rule}\n@returns(200) Patch Waiting Room Rule response\n@errors {4XX: Patch Waiting Room Rule response failure}\n\n@endpoint GET /zones/{zone_id}/waiting_rooms/{waiting_room_id}/status\n@desc Get waiting room status\n@required {waiting_room_id: str, zone_id: str}\n@returns(200) Get waiting room status response\n@errors {4XX: Get waiting room status response failure}\n\n@endpoint GET /zones/{zone_id}/web3/hostnames\n@desc List Web3 Hostnames\n@required {zone_id: str}\n@returns(200) List Web3 Hostnames response.\n@errors {4XX: List Web3 Hostnames error response (4XX)., 5XX: List Web3 Hostnames response failure.}\n\n@endpoint POST /zones/{zone_id}/web3/hostnames\n@desc Create Web3 Hostname\n@required {zone_id: str, name: str # Specify the hostname that points to the target gateway via CNAME., target: str(ethereum/ipfs/ipfs_universal_path) # Specify the target gateway of the hostname.}\n@optional {description: str # Specify an optional description of the hostname., dnslink: str # Specify the DNSLink value used if the target is ipfs.}\n@returns(200) Create Web3 Hostname response.\n@errors {4XX: Create Web3 Hostname error response (4XX)., 5XX: Create Web3 Hostname response failure.}\n\n@endpoint DELETE /zones/{zone_id}/web3/hostnames/{identifier}\n@desc Delete Web3 Hostname\n@required {identifier: str, zone_id: str}\n@returns(200) Delete Web3 Hostname response.\n@errors {4XX: Delete Web3 Hostname error response (4XX)., 5XX: Delete Web3 Hostname response failure.}\n\n@endpoint GET /zones/{zone_id}/web3/hostnames/{identifier}\n@desc Web3 Hostname Details\n@required {identifier: str, zone_id: str}\n@returns(200) Web3 Hostname Details response.\n@errors {4XX: Web3 Hostname Details error response (4XX)., 5XX: Web3 Hostname Details response failure.}\n\n@endpoint PATCH /zones/{zone_id}/web3/hostnames/{identifier}\n@desc Edit Web3 Hostname\n@required {identifier: str, zone_id: str}\n@optional {description: str # Specify an optional description of the hostname., dnslink: str # Specify the DNSLink value used if the target is ipfs.}\n@returns(200) Edit Web3 Hostname response.\n@errors {4XX: Edit Web3 Hostname error response (4XX)., 5XX: Edit Web3 Hostname response failure.}\n\n@endpoint GET /zones/{zone_id}/web3/hostnames/{identifier}/ipfs_universal_path/content_list\n@desc IPFS Universal Path Gateway Content List Details\n@required {identifier: str, zone_id: str}\n@returns(200) IPFS Universal Path Gateway Content List Details response.\n@errors {4XX: IPFS Universal Path Gateway Content List Details error response (4XX)., 5XX: IPFS Universal Path Gateway Content List Details response failure.}\n\n@endpoint PUT /zones/{zone_id}/web3/hostnames/{identifier}/ipfs_universal_path/content_list\n@desc Update IPFS Universal Path Gateway Content List\n@required {identifier: str, zone_id: str, action: str # Behavior of the content list., entries: [map{content: str, created_on: str(date-time), description: str, id: str, modified_on: str(date-time), type: str}] # Provides content list entries.}\n@returns(200) Update IPFS Universal Path Gateway Content List response.\n@errors {4XX: Update IPFS Universal Path Gateway Content List error response (4XX)., 5XX: Update IPFS Universal Path Gateway Content List response failure.}\n\n@endpoint GET /zones/{zone_id}/web3/hostnames/{identifier}/ipfs_universal_path/content_list/entries\n@desc List IPFS Universal Path Gateway Content List Entries\n@required {identifier: str, zone_id: str}\n@returns(200) List IPFS Universal Path Gateway Content List Entries response.\n@errors {4XX: List IPFS Universal Path Gateway Content List Entries error response (4XX)., 5XX: List IPFS Universal Path Gateway Content List Entries response failure.}\n\n@endpoint POST /zones/{zone_id}/web3/hostnames/{identifier}/ipfs_universal_path/content_list/entries\n@desc Create IPFS Universal Path Gateway Content List Entry\n@required {identifier: str, zone_id: str, content: str # Specify the CID or content path of content to block., type: str(cid/content_path) # Specify the type of content list entry to block.}\n@optional {description: str # Specify an optional description of the content list entry.}\n@returns(200) Create IPFS Universal Path Gateway Content List Entry response.\n@errors {4XX: Create IPFS Universal Path Gateway Content List Entry error response (4XX)., 5XX: Create IPFS Universal Path Gateway Content List Entry response failure.}\n\n@endpoint DELETE /zones/{zone_id}/web3/hostnames/{identifier}/ipfs_universal_path/content_list/entries/{content_list_entry_identifier}\n@desc Delete IPFS Universal Path Gateway Content List Entry\n@required {content_list_entry_identifier: str, identifier: str, zone_id: str}\n@returns(200) Delete IPFS Universal Path Gateway Content List Entry response.\n@errors {4XX: Delete IPFS Universal Path Gateway Content List Entry error response (4XX)., 5XX: Delete IPFS Universal Path Gateway Content List Entry response failure.}\n\n@endpoint GET /zones/{zone_id}/web3/hostnames/{identifier}/ipfs_universal_path/content_list/entries/{content_list_entry_identifier}\n@desc IPFS Universal Path Gateway Content List Entry Details\n@required {content_list_entry_identifier: str, identifier: str, zone_id: str}\n@returns(200) IPFS Universal Path Gateway Content List Entry Details response.\n@errors {4XX: IPFS Universal Path Gateway Content List Entry Details error response (4XX)., 5XX: IPFS Universal Path Gateway Content List Entry Details response failure.}\n\n@endpoint PUT /zones/{zone_id}/web3/hostnames/{identifier}/ipfs_universal_path/content_list/entries/{content_list_entry_identifier}\n@desc Edit IPFS Universal Path Gateway Content List Entry\n@required {content_list_entry_identifier: str, identifier: str, zone_id: str, content: str # Specify the CID or content path of content to block., type: str(cid/content_path) # Specify the type of content list entry to block.}\n@optional {description: str # Specify an optional description of the content list entry.}\n@returns(200) Edit IPFS Universal Path Gateway Content List Entry response.\n@errors {4XX: Edit IPFS Universal Path Gateway Content List Entry error response (4XX)., 5XX: Edit IPFS Universal Path Gateway Content List Entry response failure.}\n\n@endpoint GET /zones/{zone_id}/workers/routes\n@desc List Worker Routes\n@required {zone_id: str}\n@returns(200) List Routes response.\n@errors {4XX: List Routes response failure.}\n\n@endpoint POST /zones/{zone_id}/workers/routes\n@desc Create Worker Route\n@required {zone_id: str, id: any, pattern: str # Pattern to match incoming requests against. [Learn more](https://developers.cloudflare.com/workers/configuration/routing/routes/#matching-behavior).}\n@optional {script: str # Name of the script to run if the route matches.}\n@returns(200) Create Route response.\n@errors {4XX: Create Route response failure.}\n\n@endpoint DELETE /zones/{zone_id}/workers/routes/{route_id}\n@desc Delete Worker Route\n@required {route_id: str, zone_id: str}\n@returns(200) Delete Route response.\n@errors {4XX: Delete Route response failure.}\n\n@endpoint GET /zones/{zone_id}/workers/routes/{route_id}\n@desc Get Worker Route\n@required {route_id: str, zone_id: str}\n@returns(200) Get Route response.\n@errors {4XX: Get Route response failure.}\n\n@endpoint PUT /zones/{zone_id}/workers/routes/{route_id}\n@desc Replace Worker Route\n@required {route_id: str, zone_id: str, id: any, pattern: str # Pattern to match incoming requests against. [Learn more](https://developers.cloudflare.com/workers/configuration/routing/routes/#matching-behavior).}\n@optional {script: str # Name of the script to run if the route matches.}\n@returns(200) Update Route response.\n@errors {4XX: Update Route response failure.}\n\n@endgroup\n\n@end\n"}