Skip to content

Changelog

New updates and improvements at Cloudflare.

Content encoding support for Markdown for Agents and other improvements

When AI systems request pages from any website that uses Cloudflare and has Markdown for Agents enabled, they can express the preference for text/markdown in the request: our network will automatically and efficiently convert the HTML to markdown, when possible, on the fly.

This release adds the following improvements:

  • The origin response limit was raised from 1 MB to 2 MB (2,097,152 bytes).
  • We no longer require the origin to send the content-length header.
  • We now support content encoded responses from the origin.

If you haven’t enabled automatic Markdown conversion yet, visit the AI Crawl Control section of the Cloudflare dashboard and enable Markdown for Agents.

Refer to our developer documentation for more details.

Fine-grained permissions for Access policies and service tokens

Fine-grained permissions for Access policies and Access service tokens are available. These new resource-scoped roles expand the existing RBAC model, enabling administrators to grant permissions scoped to individual resources.

New roles

  • Cloudflare Access policy admin: Can edit a specific Access policy in an account.
  • Cloudflare Access service token admin: Can edit a specific Access service token in an account.

These roles complement the existing resource-scoped roles for Access applications, identity providers, and infrastructure targets.

For more information:

Cloudflare Python SDK v5.0.0-beta.1 now available

Disclaimer: Please note that v5.0.0-beta.1 is in Beta and we are still testing it for stability.

Full Changelog: v4.3.1...v5.0.0-beta.1

In this release, you'll see a large number of breaking changes. This is primarily due to a change in OpenAPI definitions, which our libraries are based off of, and codegen updates that we rely on to read those OpenAPI definitions and produce our SDK libraries. As the codegen is always evolving and improving, so are our code bases.

There may be changes that are not captured in this changelog. Feel free to open an issue to report any inaccuracies, and we will make sure it gets into the changelog before the v5.0.0 release.

Most of the breaking changes below are caused by improvements to the accuracy of the base OpenAPI schemas, which sometimes translates to breaking changes in downstream clients that depend on those schemas.

Please ensure you read through the list of changes below and the migration guide before moving to this version - this will help you understand any down or upstream issues it may cause to your environments.

Breaking Changes

The following resources have breaking changes. See the v5 Migration Guide for detailed migration instructions.

  • abusereports
  • acm.totaltls
  • apigateway.configurations
  • cloudforceone.threatevents
  • d1.database
  • intel.indicatorfeeds
  • logpush.edge
  • origintlsclientauth.hostnames
  • queues.consumers
  • radar.bgp
  • rulesets.rules
  • schemavalidation.schemas
  • snippets
  • zerotrust.dlp
  • zerotrust.networks

Features

New API Resources

  • abusereports - Abuse report management
  • abusereports.mitigations - Abuse report mitigation actions
  • ai.tomarkdown - AI-powered markdown conversion
  • aigateway.dynamicrouting - AI Gateway dynamic routing configuration
  • aigateway.providerconfigs - AI Gateway provider configurations
  • aisearch - AI-powered search functionality
  • aisearch.instances - AI Search instance management
  • aisearch.tokens - AI Search authentication tokens
  • alerting.silences - Alert silence management
  • brandprotection.logomatches - Brand protection logo match detection
  • brandprotection.logos - Brand protection logo management
  • brandprotection.matches - Brand protection match results
  • brandprotection.queries - Brand protection query management
  • cloudforceone.binarystorage - CloudForce One binary storage
  • connectivity.directory - Connectivity directory services
  • d1.database - D1 database management
  • diagnostics.endpointhealthchecks - Endpoint health check diagnostics
  • fraud - Fraud detection and prevention
  • iam.sso - IAM Single Sign-On configuration
  • loadbalancers.monitorgroups - Load balancer monitor groups
  • organizations - Organization management
  • organizations.organizationprofile - Organization profile settings
  • origintlsclientauth.hostnamecertificates - Origin TLS client auth hostname certificates
  • origintlsclientauth.hostnames - Origin TLS client auth hostnames
  • origintlsclientauth.zonecertificates - Origin TLS client auth zone certificates
  • pipelines - Data pipeline management
  • pipelines.sinks - Pipeline sink configurations
  • pipelines.streams - Pipeline stream configurations
  • queues.subscriptions - Queue subscription management
  • r2datacatalog - R2 Data Catalog integration
  • r2datacatalog.credentials - R2 Data Catalog credentials
  • r2datacatalog.maintenanceconfigs - R2 Data Catalog maintenance configurations
  • r2datacatalog.namespaces - R2 Data Catalog namespaces
  • radar.bots - Radar bot analytics
  • radar.ct - Radar certificate transparency data
  • radar.geolocations - Radar geolocation data
  • realtimekit.activesession - Real-time Kit active session management
  • realtimekit.analytics - Real-time Kit analytics
  • realtimekit.apps - Real-time Kit application management
  • realtimekit.livestreams - Real-time Kit live streaming
  • realtimekit.meetings - Real-time Kit meeting management
  • realtimekit.presets - Real-time Kit preset configurations
  • realtimekit.recordings - Real-time Kit recording management
  • realtimekit.sessions - Real-time Kit session management
  • realtimekit.webhooks - Real-time Kit webhook configurations
  • tokenvalidation.configuration - Token validation configuration
  • tokenvalidation.rules - Token validation rules
  • workers.beta - Workers beta features

New Endpoints (Existing Resources)

acm.totaltls

  • edit()
  • update()

cloudforceone.threatevents

  • list()

contentscanning

  • create()
  • get()
  • update()

dns.records

  • scan_list()
  • scan_review()
  • scan_trigger()

intel.indicatorfeeds

  • create()
  • delete()
  • list()

leakedcredentialchecks.detections

  • get()

queues.consumers

  • list()

radar.ai

  • summary()
  • timeseries()
  • timeseries_groups()

radar.bgp

  • changes()
  • snapshot()

workers.subdomains

  • delete()

zerotrust.networks

  • create()
  • delete()
  • edit()
  • get()
  • list()

General Fixes and Improvements

Type System & Compatibility

  • Type inference improvements: Allow Pyright to properly infer TypedDict types within SequenceNotStr
  • Type completeness: Add missing types to method arguments and response models
  • Pydantic compatibility: Ensure compatibility with Pydantic versions prior to 2.8.0 when using additional fields

Request/Response Handling

  • Multipart form data: Correctly handle sending multipart/form-data requests with JSON data
  • Header handling: Do not send headers with default values set to omit
  • GET request headers: Don't send Content-Type header on GET requests
  • Response body model accuracy: Broad improvements to the correctness of models

Parsing & Data Processing

  • Discriminated unions: Correctly handle nested discriminated unions in response parsing
  • Extra field types: Parse extra field types correctly
  • Empty metadata: Ignore empty metadata fields during parsing
  • Singularization rules: Update resource name singularization rules for better consistency

Introducing Markdown for Agents

Cloudflare's network now supports real-time content conversion at the source, for enabled zones using content negotiation headers. When AI systems request pages from any website that uses Cloudflare and has Markdown for Agents enabled, they can express the preference for text/markdown in the request: our network will automatically and efficiently convert the HTML to markdown, when possible, on the fly.

Here is a curl example with the Accept negotiation header requesting this page from our developer documentation:

curl https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ \
  -H "Accept: text/markdown"

The response to this request is now formatted in markdown:

HTTP/2 200
date: Wed, 11 Feb 2026 11:44:48 GMT
content-type: text/markdown; charset=utf-8
content-length: 2899
vary: accept
x-markdown-tokens: 725
content-signal: ai-train=yes, search=yes, ai-input=yes

---
title: Markdown for Agents · Cloudflare Agents docs
---

## What is Markdown for Agents

Markdown has quickly become the lingua franca for agents and AI systems
as a whole. The format’s explicit structure makes it ideal for AI processing,
ultimately resulting in better results while minimizing token waste.
...

Refer to our developer documentation and our blog announcement for more details.

Terraform v5.17.0 now available

In January 2025, we announced the launch of the new Terraform v5 Provider. We greatly appreciate the proactive engagement and valuable feedback from the Cloudflare community following the v5 release. In response, we have established a consistent and rapid 2-3 week cadence for releasing targeted improvements, demonstrating our commitment to stability and reliability.

With the help of the community, we have a growing number of resources that we have marked as stable, with that list continuing to grow with every release. The most used resources are on track to be stable by the end of March 2026, when we will also be releasing a new migration tool to help you migrate from v4 to v5 with ease.

This release brings new capabilities for AI Search, enhanced Workers Script placement controls, and numerous bug fixes based on community feedback. We also begun laying foundational work for improving the v4 to v5 migration process. Stay tuned for more details as we approach the March 2026 release timeline.

Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.

Features

  • ai_search_instance: add data source for querying AI Search instances
  • ai_search_token: add data source for querying AI Search tokens
  • account: add support for tenant unit management with new unit field
  • account: add automatic mapping from managed_by.parent_org_id to unit.id
  • authenticated_origin_pulls_certificate: add data source for querying authenticated origin pull certificates
  • authenticated_origin_pulls_hostname_certificate: add data source for querying hostname-specific authenticated origin pull certificates
  • authenticated_origin_pulls_settings: add data source for querying authenticated origin pull settings
  • workers_kv: add value field to data source to retrieve KV values directly
  • workers_script: add script field to data source to retrieve script content
  • workers_script: add support for simple rate limit binding
  • workers_script: add support for targeted placement mode with placement.target array for specifying placement targets (region, hostname, host)
  • workers_script: add placement_mode and placement_status computed fields
  • zero_trust_dex_test: add data source with filter support for finding specific tests
  • zero_trust_dlp_predefined_profile: add enabled_entries field for flexible entry management

Bug Fixes

  • account: map managed_by.parent_org_id to unit.id in unmarshall and add acceptance tests
  • authenticated_origin_pulls_certificate: add certificate normalization to prevent drift
  • authenticated_origin_pulls: handle array response and implement full lifecycle
  • authenticated_origin_pulls_hostname_certificate: fix resource and tests
  • cloudforce_one_request_message: use correct request_id field instead of id in API calls
  • dns_zone_transfers_incoming: use correct zone_id field instead of id in API calls
  • dns_zone_transfers_outgoing: use correct zone_id field instead of id in API calls
  • email_routing_settings: use correct zone_id field instead of id in API calls
  • hyperdrive_config: add proper handling for write-only fields to prevent state drift
  • hyperdrive_config: add normalization for empty mtls objects to prevent unnecessary diffs
  • magic_network_monitoring_rule: use correct account_id field instead of id in API calls
  • mtls_certificates: fix resource and test
  • pages_project: revert build_config to computed optional
  • stream_key: use correct account_id field instead of id in API calls
  • total_tls: use upsert pattern for singleton zone setting
  • waiting_room_rules: use correct waiting_room_id field instead of id in API calls
  • workers_script: add support for placement mode/status
  • zero_trust_access_application: update v4 version on migration tests
  • zero_trust_device_posture_rule: update tests to match API
  • zero_trust_dlp_integration_entry: use correct entry_id field instead of id in API calls
  • zero_trust_dlp_predefined_entry: use correct entry_id field instead of id in API calls
  • zero_trust_organization: fix plan issues

Chores

  • add state upgraders to 95+ resources to lay the foundation for replacing Grit (still under active development)
  • certificate_pack: add state migration handler for SDKv2 to Framework conversion
  • custom_hostname_fallback_origin: add comprehensive lifecycle test and migration support
  • dns_record: add state migration handler for SDKv2 to Framework conversion
  • leaked_credential_check: add import functionality and tests
  • load_balancer_pool: add state migration handler with detection for v4 vs v5 format
  • pages_project: add state migration handlers
  • tiered_cache: add state migration handlers
  • zero_trust_dlp_predefined_profile: deprecate entries field in favor of enabled_entries

For more information

Analytics enhancements

AI Crawl Control metrics have been enhanced with new views, improved filtering, and better data visualization.

AI Crawl Control path patterns

Path pattern grouping

  • In the Metrics tab > Most popular paths table, use the new Patterns tab that groups requests by URI pattern (/blog/*, /api/v1/*, /docs/*) to identify which site areas crawlers target most. Refer to the screenshot above.

Enhanced referral analytics

  • Destination patterns show which site areas receive AI-driven referral traffic.
  • In the Metrics tab, a new Referrals over time chart shows trends by operator or source.

Data transfer metrics

  • In the Metrics tab > Allowed requests over time chart, toggle Bytes to show bandwidth consumption.
  • In the Crawlers tab, a new Bytes Transferred column shows bandwidth per crawler.

Image exports

  • Export charts and tables as images for reports and presentations.

Learn more about analyzing AI traffic.

Tabs and pivots

Log Explorer now supports multiple concurrent queries with the new Tabs feature. Work with multiple queries simultaneously and pivot between datasets to investigate malicious activity more effectively.

Key capabilities

  • Multiple tabs: Open and switch between multiple query tabs to compare results across different datasets.
  • Quick filtering: Select the filter button from query results to add a value as a filter to your current query.
  • Pivot to new tab: Use Cmd + click on the filter button to start a new query tab with that filter applied.
  • Preserved progress: Your query progress is preserved on each tab if you navigate away and return.

For more information, refer to the Log Explorer documentation.

New reference documentation

New reference documentation is now available for AI Crawl Control:

  • GraphQL API reference — Query examples for crawler requests, top paths, referral traffic, and data transfer. Includes key filters for detection IDs, user agents, and referrer domains.
  • Bot reference — Detection IDs and user agents for major AI crawlers from OpenAI, Anthropic, Google, Meta, and others.
  • Worker templates — Deploy the x402 Payment-Gated Proxy to monetize crawler access or charge bots while letting humans through free.

Added Timezone preferences settings

You can now set the timezone in the Cloudflare dashboard as Coordinated Universal Time (UTC) or your browser or system's timezone.

What's New

Unless otherwise specified in the user interface, all dates and times in the Cloudflare dashboard are now displayed in the selected timezone.

You can change the timezone setting from the user profile dropdown.

Timezone preference dropdown

The page will reload to apply the new timezone setting.

Control request and response body buffering in Configuration Rules

You can now control how Cloudflare buffers HTTP request and response bodies using two new settings in Configuration Rules.

Request body buffering

Controls how Cloudflare buffers HTTP request bodies before forwarding them to your origin server:

Mode Behavior
Standard (default) Cloudflare can inspect a prefix of the request body for enabled functionality such as WAF and Bot Management.
Full Buffers the entire request body before sending to origin.
None No buffering — the request body streams directly to origin without inspection.

Response body buffering

Controls how Cloudflare buffers HTTP response bodies before forwarding them to the client:

Mode Behavior
Standard (default) Cloudflare can inspect a prefix of the response body for enabled functionality.
None No buffering — the response body streams directly to the client without inspection.

API example

{
  "action": "set_config",
  "action_parameters": {
    "request_body_buffering": "standard",
    "response_body_buffering": "none"
  }
}

For more information, refer to Configuration Rules.

New 2FA Experience for Login

Screenshot of new 2FA enrollment experience

In an effort to improve overall user security, users without 2FA will be prompted upon login to enroll in email 2FA. This will improve user security posture while minimizing friction. Users without email 2FA enabled will see a prompt to secure their account with additional factors upon logging in. Enrolling in 2FA remains optional, but strongly encouraged as it is the best way to prevent account takeovers.

We also made changes to existing 2FA screens to improve the user experience. Now we have distinct experiences for each 2FA factor type, reflective of the way that factor works.

For more information

New cryptographic functions — encode_base64() and sha256()

Cloudflare Rulesets now includes encode_base64() and sha256() functions, enabling you to generate signed request headers directly in rule expressions. These functions support common patterns like constructing a canonical string from request attributes, computing a SHA256 digest, and Base64-encoding the result.


New functions

Function Description Availability
encode_base64(input, flags) Encodes a string to Base64 format. Optional flags parameter: u for URL-safe encoding, p for padding (adds = characters to make the output length a multiple of 4, as required by some systems). By default, output is standard Base64 without padding. All plans (in header transform rules)
sha256(input) Computes a SHA256 hash of the input string. Requires enablement

Examples

Encode a string to Base64 format:

encode_base64("hello world")

Returns: aGVsbG8gd29ybGQ

Encode a string to Base64 format with padding:

encode_base64("hello world", "p")

Returns: aGVsbG8gd29ybGQ=

Perform a URL-safe Base64 encoding of a string:

encode_base64("hello world", "u")

Returns: aGVsbG8gd29ybGQ

Compute the SHA256 hash of a secret token:

sha256("my-token")

Returns a hash that your origin can validate to authenticate requests.

Compute the SHA256 hash of a string and encode the result to Base64 format:

encode_base64(sha256("my-token"))

Combines hashing and encoding for systems that expect Base64-encoded signatures.

For more information, refer to the Functions reference.

New functions for array and map operations

New functions for array and map operations

Cloudflare Rulesets now include new functions that enable advanced expression logic for evaluating arrays and maps. These functions allow you to build rules that match against lists of values in request or response headers, enabling use cases like country-based blocking using custom headers.


New functions

Function Description
split(source, delimiter) Splits a string into an array of strings using the specified delimiter.
join(array, delimiter) Joins an array of strings into a single string using the specified delimiter.
has_key(map, key) Returns true if the specified key exists in the map.
has_value(map, value) Returns true if the specified value exists in the map.

Example use cases

Check if a country code exists in a header list:

has_value(split(http.response.headers["x-allow-country"][0], ","), ip.src.country)

Check if a specific header key exists:

has_key(http.request.headers, "x-custom-header")

Join array values for logging or comparison:

join(http.request.headers.names, ", ")

For more information, refer to the Functions reference.

Cloudflare Typescript SDK v6.0.0-beta.1 now available

Disclaimer: Please note that v6.0.0-beta.1 is in Beta and we are still testing it for stability.

Full Changelog: v5.2.0...v6.0.0-beta.1

In this release, you'll see a large number of breaking changes. This is primarily due to a change in OpenAPI definitions, which our libraries are based off of, and codegen updates that we rely on to read those OpenAPI definitions and produce our SDK libraries. As the codegen is always evolving and improving, so are our code bases.

Some breaking changes were introduced due to bug fixes, also listed below.

Please ensure you read through the list of changes below before moving to this version - this will help you understand any down or upstream issues it may cause to your environments.


Breaking Changes

Addressing - Parameter Requirements Changed

  • BGPPrefixCreateParams.cidr: optional → required
  • PrefixCreateParams.asn: number | nullnumber
  • PrefixCreateParams.loa_document_id: required → optional
  • ServiceBindingCreateParams.cidr: optional → required
  • ServiceBindingCreateParams.service_id: optional → required

API Gateway

  • ConfigurationUpdateResponse removed
  • PublicSchemaOldPublicSchema
  • SchemaUploadUserSchemaCreateResponse
  • ConfigurationUpdateParams.properties removed; use normalize

CloudforceOne - Response Type Changes

  • ThreatEventBulkCreateResponse: number → complex object with counts and errors

D1 Database - Query Parameters

  • DatabaseQueryParams: simple interface → union type (D1SingleQuery | MultipleQueries)
  • DatabaseRawParams: same change
  • Supports batch queries via batch array

DNS Records - Type Renames (21 types)

All record type interfaces renamed from *Record to short names:

  • RecordResponse.ARecordRecordResponse.A
  • RecordResponse.AAAARecordRecordResponse.AAAA
  • RecordResponse.CNAMERecordRecordResponse.CNAME
  • RecordResponse.MXRecordRecordResponse.MX
  • RecordResponse.NSRecordRecordResponse.NS
  • RecordResponse.PTRRecordRecordResponse.PTR
  • RecordResponse.TXTRecordRecordResponse.TXT
  • RecordResponse.CAARecordRecordResponse.CAA
  • RecordResponse.CERTRecordRecordResponse.CERT
  • RecordResponse.DNSKEYRecordRecordResponse.DNSKEY
  • RecordResponse.DSRecordRecordResponse.DS
  • RecordResponse.HTTPSRecordRecordResponse.HTTPS
  • RecordResponse.LOCRecordRecordResponse.LOC
  • RecordResponse.NAPTRRecordRecordResponse.NAPTR
  • RecordResponse.SMIMEARecordRecordResponse.SMIMEA
  • RecordResponse.SRVRecordRecordResponse.SRV
  • RecordResponse.SSHFPRecordRecordResponse.SSHFP
  • RecordResponse.SVCBRecordRecordResponse.SVCB
  • RecordResponse.TLSARecordRecordResponse.TLSA
  • RecordResponse.URIRecordRecordResponse.URI
  • RecordResponse.OpenpgpkeyRecordRecordResponse.Openpgpkey

IAM Resource Groups

  • ResourceGroupCreateResponse.scope: optional single → required array
  • ResourceGroupCreateResponse.id: optional → required

Origin CA Certificates - Parameter Requirements Changed

  • OriginCACertificateCreateParams.csr: optional → required
  • OriginCACertificateCreateParams.hostnames: optional → required
  • OriginCACertificateCreateParams.request_type: optional → required

Pages

  • Renamed: DeploymentsSinglePageDeploymentListResponsesV4PagePaginationArray
  • Domain response fields: many optional → required

Pipelines - v0 to v1 Migration

  • Entire v0 API deprecated; use v1 methods (createV1, listV1, etc.)
  • New sub-resources: Sinks, Streams

R2

  • EventNotificationUpdateParams.rules: optional → required
  • Super Slurper: bucket, secret now required in source params

Radar

  • dataSource: string → typed enum (23 values)
  • eventType: string → typed enum (6 values)
  • V2 methods require dimension parameter (breaking signature change)

Resource Sharing

  • Removed: status_message field from all recipient response types

Schema Validation

  • Consolidated SchemaCreateResponse, SchemaListResponse, SchemaEditResponse, SchemaGetResponsePublicSchema
  • Renamed: SchemaListResponsesV4PagePaginationArrayPublicSchemasV4PagePaginationArray

Spectrum

  • Renamed union members: AppListResponse.UnionMember0SpectrumConfigAppConfig
  • Renamed union members: AppListResponse.UnionMember1SpectrumConfigPaygoAppConfig

Workers

  • Removed: WorkersBindingKindTailConsumer type (all occurrences)
  • Renamed: ScriptsSinglePageScriptListResponsesSinglePage
  • Removed: DeploymentsSinglePage

Zero-Trust DLP

  • datasets.create(), update(), get() return types changed
  • PredefinedGetResponse union members renamed to UnionMember0-5

Zero-Trust Tunnels

  • Removed: CloudflaredCreateResponse, CloudflaredListResponse, CloudflaredDeleteResponse, CloudflaredEditResponse, CloudflaredGetResponse
  • Removed: CloudflaredListResponsesV4PagePaginationArray

Features

Abuse Reports (client.abuseReports)

  • Reports: create, list, get
  • Mitigations: sub-resource for abuse mitigations

AI Search (client.aisearch)

  • Instances: create, update, list, delete, read, stats
  • Items: list, get
  • Jobs: create, list, get, logs
  • Tokens: create, update, list, delete, read

Connectivity (client.connectivity)

  • Directory Services: create, update, list, delete, get
  • Supports IPv4, IPv6, dual-stack, and hostname configurations

Organizations (client.organizations)

  • Organizations: create, update, list, delete, get
  • OrganizationProfile: update, get
  • Hierarchical organization support with parent/child relationships

R2 Data Catalog (client.r2DataCatalog)

  • Catalog: list, enable, disable, get
  • Credentials: create
  • MaintenanceConfigs: update, get
  • Namespaces: list
  • Tables: list, maintenance config management
  • Apache Iceberg integration

Realtime Kit (client.realtimeKit)

  • Apps: get, post
  • Meetings: create, get, participant management
  • Livestreams: 10+ methods for streaming
  • Recordings: start, pause, stop, get
  • Sessions: transcripts, summaries, chat
  • Webhooks: full CRUD
  • ActiveSession: polls, kick participants
  • Analytics: organization analytics

Token Validation (client.tokenValidation)

  • Configuration: create, list, delete, edit, get
  • Credentials: update
  • Rules: create, list, delete, bulkCreate, bulkEdit, edit, get
  • JWT validation with RS256/384/512, PS256/384/512, ES256, ES384

Alerting Silences (client.alerting.silences)

  • create, update, list, delete, get

IAM SSO (client.iam.sso)

  • create, update, list, delete, get, beginVerification

Pipelines v1 (client.pipelines)

  • Sinks: create, list, delete, get
  • Streams: create, update, list, delete, get

Zero-Trust AI Controls / MCP (client.zeroTrust.access.aiControls.mcp)

  • Portals: create, update, list, delete, read
  • Servers: create, update, list, delete, read, sync

Accounts

  • managed_by field with parent_org_id, parent_org_name

Addressing LOA Documents

  • auto_generated field on LOADocumentCreateResponse

Addressing Prefixes

  • delegate_loa_creation, irr_validation_state, ownership_validation_state, ownership_validation_token, rpki_validation_state

AI

  • Added toMarkdown.supported() method to get all supported conversion formats

AI Gateway

  • zdr field added to all responses and params

Alerting

  • New alert type: abuse_report_alert
  • type field added to PolicyFilter

Browser Rendering

  • ContentCreateParams: refined to discriminated union (Variant0 | Variant1)
  • Split into URL-based and HTML-based parameter variants for better type safety

Client Certificates

  • reactivate parameter in edit

CloudforceOne

  • ThreatEventCreateParams.indicatorType: required → optional
  • hasChildren field added to all threat event response types
  • datasetIds query parameter on AttackerListParams, CategoryListParams, TargetIndustryListParams
  • categoryUuid field on TagCreateResponse
  • indicators array for multi-indicator support per event
  • uuid and preserveUuid fields for UUID preservation in bulk create
  • format query parameter ('json' | 'stix2') on ThreatEventListParams
  • createdAt, datasetId fields on ThreatEventEditParams

Content Scanning

  • Added create(), update(), get() methods

Custom Pages

  • New page types: basic_challenge, under_attack, waf_challenge

D1

  • served_by_colo - colo that handled query
  • jurisdiction - 'eu' | 'fedramp'
  • Time Travel (client.d1.database.timeTravel): getBookmark(), restore() - point-in-time recovery

Email Security

  • New fields on InvestigateListResponse/InvestigateGetResponse: envelope_from, envelope_to, postfix_id_outbound, replyto
  • New detection classification: 'outbound_ndr'
  • Enhanced Finding interface with attachment, detection, field, portion, reason, score
  • Added cursor query parameter to InvestigateListParams

Gateway Lists

  • New list types: CATEGORY, LOCATION, DEVICE

Intel

  • New issue type: 'configuration_suggestion'
  • payload field: unknown → typed Payload interface with detection_method, zone_tag

Leaked Credential Checks

  • Added detections.get() method

Logpush

  • New datasets: dex_application_tests, dex_device_state_events, ipsec_logs, warp_config_changes, warp_toggle_changes

Load Balancers

  • Monitor.port: numbernumber | null
  • Pool.load_shedding: LoadSheddingLoadShedding | null
  • Pool.origin_steering: OriginSteeringOriginSteering | null

Magic Transit

  • license_key field on connectors
  • provision_license parameter for auto-provisioning
  • IPSec: custom_remote_identities with FQDN support
  • Snapshots: Bond interface, probed_mtu field

Pages

  • New response types: ProjectCreateResponse, ProjectListResponse, ProjectEditResponse, ProjectGetResponse
  • Deployment methods return specific response types instead of generic Deployment

Queues

  • Added subscriptions.get() method
  • Enhanced SubscriptionGetResponse with typed event source interfaces
  • New event source types: Images, KV, R2, Vectorize, Workers AI, Workers Builds, Workflows

R2

  • Sippy: new provider s3 (S3-compatible endpoints)
  • Sippy: bucketUrl field for S3-compatible sources
  • Super Slurper: keys field on source response schemas (specify specific keys to migrate)
  • Super Slurper: pathPrefix field on source schemas
  • Super Slurper: region field on S3 source params

Radar

  • Added geolocations.list(), geolocations.get() methods
  • Added V2 dimension-based methods (summaryV2, timeseriesGroupsV2) to radar sub-resources

Resource Sharing

  • Added terminal boolean field to Resource Error interfaces

Rules

  • Added id field to ItemDeleteParams.Item

Rulesets

  • New buffering fields on SetConfigRule: request_body_buffering, response_body_buffering

Secrets Store

  • New scopes: 'dex', 'access' (in addition to 'workers', 'ai_gateway')

SSL Certificate Packs

  • Response types now proper interfaces (was unknown)
  • Fields now required: id, certificates, hosts, status, type

Security Center

  • payload field: unknown → typed Payload interface with detection_method, zone_tag

Shared Types

  • Added: CloudflareTunnelsV4PagePaginationArray pagination class

Workers

  • Added subdomains.delete() method
  • Worker.references - track external dependencies (domains, Durable Objects, queues)
  • Worker.startup_time_ms - startup timing
  • Script.observability - observability settings with logging
  • Script.tag, Script.tags - immutable ID and tags
  • Placement: support for region, hostname, host-based placement
  • tags, tail_consumers now accept | null
  • Telemetry: traces field, $containers event info, durableObjectId, transactionName, abr_level fields

Workers for Platforms

  • ScriptUpdateResponse: new fields entry_point, observability, tag, tags
  • placement field now union of 4 variants (smart mode, region, hostname, host)
  • tags, tail_consumers now nullable
  • TagUpdateParams.body now accepts null

Workflows

  • instance_retention: unknown → typed InstanceRetention interface with error_retention, success_retention
  • New status option: 'restart' added to StatusEditParams.status

Zero-Trust Devices

  • External emergency disconnect settings (4 new fields)
  • antivirus device posture check type
  • os_version_extra documentation improvements

Zones

  • New response types: SubscriptionCreateResponse, SubscriptionUpdateResponse, SubscriptionGetResponse

Zero-Trust Access Applications

  • New ApplicationType values: 'mcp', 'mcp_portal', 'proxy_endpoint'
  • New destination type: ViaMcpServerPortalDestination for MCP server access

Zero-Trust Gateway

  • Added rules.listTenant() method

Zero-Trust Gateway - Proxy Endpoints

  • ProxyEndpoint: interface → discriminated union (ZeroTrustGatewayProxyEndpointIP | ZeroTrustGatewayProxyEndpointIdentity)
  • ProxyEndpointCreateParams: interface → union type
  • Added kind field: 'ip' | 'identity'

Zero-Trust Tunnels

  • WARPConnector*Response: union type → interface

Deprecations

  • API Gateway: UserSchemas, Settings, SchemaValidation resources
  • Audit Logs: auditLogId.not (use id.not)
  • CloudforceOne: ThreatEvents.get(), IndicatorTypes.list()
  • Devices: public_ip field (use DEX API)
  • Email Security: item_count field in Move responses
  • Pipelines: v0 methods (use v1)
  • Radar: old summary() and timeseriesGroups() methods (use V2)
  • Rulesets: disable_apps, mirage fields
  • WARP Connector: connections field
  • Workers: environment parameter in Domains
  • Zones: ResponseBuffering page rule

Bug Fixes

  • mcp: correct code tool API endpoint (599703c)
  • mcp: return correct lines on typescript errors (5d6f999)
  • organization_profile: fix bad reference (d84ea77)
  • schema_validation: correctly reflect model to openapi mapping (bb86151)
  • workers: fix tests (2ee37f7)

Documentation

  • Added deprecation notices with migration paths
  • api_gateway: deprecate API Shield Schema Validation resources (8a4b20f)
  • Improved JSDoc examples across all resources
  • workers: expose subdomain delete documentation (4f7cc1f)

Terraform v5.16.0 now available

In January 2025, we announced the launch of the new Terraform v5 Provider. We greatly appreciate the proactive engagement and valuable feedback from the Cloudflare community following the v5 release. In response, we've established a consistent and rapid 2-3 week cadence for releasing targeted improvements, demonstrating our commitment to stability and reliability.

With the help of the community, we have a growing number of resources that we have marked as stable, with that list continuing to grow with every release. The most used resources are on track to be stable by the end of March 2026, when we will also be releasing a new migration tool to you migrate from v4 to v5 with ease.

Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.

This release includes bug fixes, the stabilization of even more popular resources, and more.

Features

  • custom_pages: add "waf_challenge" as new supported error page type identifier in both resource and data source schemas
  • list: enhance CIDR validator to check for normalized CIDR notation requiring network address for IPv4 and IPv6
  • magic_wan_gre_tunnel: add automatic_return_routing attribute for automatic routing control
  • magic_wan_gre_tunnel: add BGP configuration support with new BGP model attribute
  • magic_wan_gre_tunnel: add bgp_status computed attribute for BGP connection status information
  • magic_wan_gre_tunnel: enhance schema with BGP-related attributes and validators
  • magic_wan_ipsec_tunnel: add automatic_return_routing attribute for automatic routing control
  • magic_wan_ipsec_tunnel: add BGP configuration support with new BGP model attribute
  • magic_wan_ipsec_tunnel: add bgp_status computed attribute for BGP connection status information
  • magic_wan_ipsec_tunnel: add custom_remote_identities attribute for custom identity configuration
  • magic_wan_ipsec_tunnel: enhance schema with BGP and identity-related attributes
  • ruleset: add request body buffering support
  • ruleset: enhance ruleset data source with additional configuration options
  • workers_script: add observability logs attributes to list data source model
  • workers_script: enhance list data source schema with additional configuration options

Bug Fixes

  • account_member: fix resource importability issues
  • dns_record: remove unnecessary fmt.Sprintf wrapper around LoadTestCase call in test configuration helper function
  • load_balancer: fix session_affinity_ttl type expectations to match Float64 in initial creation and Int64 after migration
  • workers_kv: handle special characters correctly in URL encoding

Documentation

  • account_subscription: update schema description for rate_plan.sets attribute to clarify it returns an array of strings
  • api_shield: add resource-level description for API Shield management of auth ID characteristics
  • api_shield: enhance auth_id_characteristics.name attribute description to include JWT token configuration format requirements
  • api_shield: specify JSONPath expression format for JWT claim locations
  • hyperdrive_config: add description attribute to name attribute explaining its purpose in dashboard and API identification
  • hyperdrive_config: apply description improvements across resource, data source, and list data source schemas
  • hyperdrive_config: improve schema descriptions for cache settings to clarify default values
  • hyperdrive_config: update port description to clarify defaults for different database types

For more information

Enhanced HTTP/3 request cancellation visibility

Enhanced HTTP/3 request cancellation visibility

Cloudflare now provides more accurate visibility into HTTP/3 client request cancellations, giving you better insight into real client behavior and reducing unnecessary load on your origins.

Previously, when an HTTP/3 client cancelled a request, the cancellation was not always actioned immediately. This meant requests could continue through the CDN — potentially all the way to your origin — even after the client had abandoned them. In these cases, logs would show the upstream response status (such as 200 or a timeout-related code) rather than reflecting the client cancellation.

Now, Cloudflare terminates cancelled HTTP/3 requests immediately and accurately logs them with a 499 status code.


Better observability for client behavior

When HTTP/3 clients cancel requests, Cloudflare now immediately reflects this in your logs with a 499 status code. This gives you:

  • More accurate traffic analysis: Understand exactly when and how often clients cancel requests.
  • Clearer debugging: Distinguish between true errors and intentional client cancellations.
  • Better availability metrics: Separate client-initiated cancellations from server-side issues.

Reduced origin load

Cloudflare now terminates cancelled requests faster, which means:

  • Less wasted compute: Your origin no longer processes requests that clients have already abandoned.
  • Lower bandwidth usage: Responses are no longer generated and transmitted for cancelled requests.
  • Improved efficiency: Resources are freed up to handle active requests.

What to expect in your logs

You may notice an increase in 499 status codes for HTTP/3 traffic. For HTTP/3, a 499 indicates the client cancelled the request stream before receiving a complete response — the underlying connection may remain open. This is a normal part of web traffic.

Tip: If you use 499 codes in availability calculations, consider whether client-initiated cancellations should be excluded from error rates. These typically represent normal user behavior — such as closing a browser, navigating away from a page, mobile network drops, or cancelling a download — rather than service issues.


For more information, refer to Error 499.

Verify WARP Connector connectivity with a simple ping

We have made it easier to validate connectivity when deploying WARP Connector as part of your software-defined private network.

You can now ping the WARP Connector host directly on its LAN IP address immediately after installation. This provides a fast, familiar way to confirm that the Connector is online and reachable within your network before testing access to downstream services.

Starting with version 2025.10.186.0, WARP Connector responds to traffic addressed to its own LAN IP, giving you immediate visibility into Connector reachability.

Learn more about deploying WARP Connector and building private network connectivity with Cloudflare One.

AI Crawl Control Read Only role now available

Account administrators can now assign the AI Crawl Control Read Only role to provide read-only access to AI Crawl Control at the domain level.

Users with this role can view the Overview, Crawlers, Metrics, Robots.txt, and Settings tabs but cannot modify crawler actions or settings.

This role is specific for AI Crawl Control. You still require correct permissions to access other areas / features of the dashboard.

To assign, go to Manage Account > Members and add a policy with the AI Crawl Control Read Only role scoped to the desired domain.

Metro code field now available in Rules

The ip.src.metro_code field in the Ruleset Engine is now populated with DMA (Designated Market Area) data.

You can use this field to build rules that target traffic based on geographic market areas, enabling more granular location-based policies for your applications.

Field details

Field Type Description
ip.src.metro_code String | null The metro code (DMA) of the incoming request's IP address. Returns the designated market area code for the client's location.

Example filter expression:

ip.src.metro_code eq "501"

For more information, refer to the Fields reference.

Terraform v5.15.0 now available

Earlier this year, we announced the launch of the new Terraform v5 Provider. We are aware of the high number of issues reported by the Cloudflare community related to the v5 release. We have committed to releasing improvements on a 2-3 week cadence to ensure its stability and reliability, including the v5.15 release. We have also pivoted from an issue-to-issue approach to a resource-per-resource approach - we will be focusing on specific resources to not only stabilize the resource but also ensure it is migration-friendly for those migrating from v4 to v5.

Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.

This release includes bug fixes, the stabilization of even more popular resources, and more.

Features

  • ai_search: Add AI Search endpoints (6f02adb)
  • certificate_pack: Ensure proper Terraform resource ID handling for path parameters in API calls (081f32a)
  • worker_version: Support startup_time_ms (286ab55)
  • zero_trust_dlp_custom_entry: Support upload_status (7dc0fe3)
  • zero_trust_dlp_entry: Support upload_status (7dc0fe3)
  • zero_trust_dlp_integration_entry: Support upload_status (7dc0fe3)
  • zero_trust_dlp_predefined_entry: Support upload_status (7dc0fe3)
  • zero_trust_gateway_policy: Support forensic_copy (5741fd0)
  • zero_trust_list: Support additional types (category, location, device) (5741fd0)

Bug fixes

  • access_rules: Add validation to prevent state drift. Ideally, we'd use Semantic Equality but since that isn't an option, this will remove a foot-gun. (4457791)
  • cloudflare_pages_project: Addressing drift issues (6edffcf) (3db318e)
  • cloudflare_worker: Can be cleanly imported (4859b52)
  • cloudflare_worker: Ensure clean imports (5b525bc)
  • list_items: Add validation for IP List items to avoid inconsistent state (b6733dc)
  • zero_trust_access_application: Remove all conditions from sweeper (3197f1a)
  • spectrum_application: Map missing fields during spectrum resource import (#6495) (ddb4e72)

Upgrade to newer version

We suggest waiting to migrate to v5 while we work on stabilization. This helps with avoiding any blocking issues while the Terraform resources are actively being stabilized. We will be releasing a new migration tool in March 2026 to help support v4 to v5 transitions for our most popular resources.

For more information

New AI Crawl Control Overview tab

The Overview tab is now the default view in AI Crawl Control. The previous default view with controls for individual AI crawlers is available in the Crawlers tab.

What's new

  • Executive summary — Monitor total requests, volume change, most common status code, most popular path, and high-volume activity
  • Operator grouping — Track crawlers by their operating companies (OpenAI, Microsoft, Google, ByteDance, Anthropic, Meta)
  • Customizable filters — Filter your snapshot by date range, crawler, operator, hostname, or path
AI Crawl Control Overview tab showing executive summary, metrics, and crawler groups

Get started

  1. Log in to the Cloudflare dashboard and select your account and domain.
  2. Go to AI Crawl Control, where the Overview tab opens by default with your activity snapshot.
  3. Use filters to customize your view by date range, crawler, operator, hostname, or path.
  4. Navigate to the Crawlers tab to manage controls for individual crawlers.

Learn more about analyzing AI traffic and managing AI crawlers.

Improved accuracy of cached request classification in analytics

The cached/uncached classification logic used in Zone Overview analytics has been updated to improve accuracy.

Previously, requests were classified as "cached" based on an overly broad condition that included blocked 403 responses, Snippets requests, and other non-cache request types. This caused inflated cache hit ratios — in some cases showing near-100% cached — and affected approximately 15% of requests classified as cached in rollups.

The condition has been removed from the Zone Overview page. Cached/uncached classification now aligns with the heuristics used in HTTP Analytics, so only requests genuinely served from cache are counted as cached.

What changed:

  • Zone Overview — Cache ratios now reflect actual cache performance.
  • HTTP Analytics — No change. HTTP Analytics already used the correct classification logic.
  • Historical data — This fix applies to new requests only. Previously logged data is not retroactively updated.

Pay Per Crawl (Private beta) - Discovery API, custom pricing, and advanced configuration

Pay Per Crawl is introducing enhancements for both AI crawler operators and site owners, focusing on programmatic discovery, flexible pricing models, and granular configuration control.

For AI crawler operators

Discovery API

A new authenticated API endpoint allows verified crawlers to programmatically discover domains participating in Pay Per Crawl. Crawlers can use this to build optimized crawl queues, cache domain lists, and identify new participating sites. This eliminates the need to discover payable content through trial requests.

The API endpoint is GET https://crawlers-api.ai-audit.cfdata.org/charged_zones and requires Web Bot Auth authentication. Refer to Discover payable content for authentication steps, request parameters, and response schema.

Payment header signature requirement

Payment headers (crawler-exact-price or crawler-max-price) must now be included in the Web Bot Auth signature-input header components. This security enhancement prevents payment header tampering, ensures authenticated payment intent, validates crawler identity with payment commitment, and protects against replay attacks with modified pricing. Crawlers must add their payment header to the list of signed components when constructing the signature-input header.

New crawler-error header

Pay Per Crawl error responses now include a new crawler-error header with 11 specific error codes for programmatic handling. Error response bodies remain unchanged for compatibility. These codes enable robust error handling, automated retry logic, and accurate spending tracking.

For site owners

Configure free pages

Site owners can now offer free access to specific pages like homepages, navigation, or discovery pages while charging for other content. Create a Configuration Rule in Rules > Configuration Rules, set your URI pattern using wildcard, exact, or prefix matching on the URI Full field, and enable the Disable Pay Per Crawl setting. When disabled for a URI pattern, crawler requests pass through without blocking or charging.

Some paths are always free to crawl. These paths are: /robots.txt, /sitemap.xml, /security.txt, /.well-known/security.txt, /crawlers.json.

Get started

AI crawler operators: Discover payable content | Crawl pages

Site owners: Advanced configuration

Terraform v5.14.0 now available

Earlier this year, we announced the launch of the new Terraform v5 Provider. We are aware of the high number of issues reported by the Cloudflare community related to the v5 release. We have committed to releasing improvements on a 2-3 week cadence to ensure its stability and reliability, including the v5.14 release. We have also pivoted from an issue-to-issue approach to a resource-per-resource approach - we will be focusing on specific resources to not only stabilize the resource but also ensure it is migration-friendly for those migrating from v4 to v5.

Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.

This release includes bug fixes, the stabilization of even more popular resources, and more.

Deprecation notice

Resource affected: api_shield_discovery_operation

Cloudflare continuously discovers and updates API endpoints and web assets of your web applications. To improve the maintainability of these dynamic resources, we are working on reducing the need to actively engage with discovered operations.

The corresponding public API endpoint of discovered operations is not affected and will continue to be supported.

Features

  • pages_project: Add v4 -> v5 migration tests (#6506)

Bug fixes

  • account_members: Makes member policies a set (#6488)
  • pages_project: Ensures non empty refresh plans (#6515)
  • R2: Improves sweeper (#6512)
  • workers_kv: Ignores value import state for verify (#6521)
  • workers_script: No longer treats the migrations attribute as WriteOnly (#6489)
  • workers_script: Resolves resource drift when worker has unmanaged secret (#6504)
  • zero_trust_device_posture_rule: Preserves input.version and other fields (#6500) and (#6503)
  • zero_trust_dlp_custom_profile: Adds sweepers for dlp_custom_profile
  • zone_subscription|account_subscription: Adds partners_ent as valid enum for rate_plan.id (#6505)
  • zone: Ensures datasource model schema parity (#6487)
  • subscription: Updates import signature to accept account_id/subscription_id to import account subscription (#6510)

Upgrade to newer version

We suggest waiting to migrate to v5 while we work on stabilization. This helps with avoiding any blocking issues while the Terraform resources are actively being stabilized. We will be releasing a new migration tool in March 2026 to help support v4 to v5 transitions for our most popular resources.

For more information