Cloudflare Zombie API Endpoints: How to Retire Them Safely

Illustrated infographic summarizing: Cloudflare Zombie API Endpoints: A Practical Cleanup Plan

By Greg Nowak. Updated 28 September 2026.

Cloudflare’s cf-risk-zombie label is a useful prompt for investigation. It is not evidence that an API endpoint is safe to delete.

Cloudflare applies the label when a saved endpoint has received no traffic for 32 days, with risk scans running every 24 hours. That window can expose forgotten API surface, but it can also catch legitimate month-end processes, seasonal services, disaster-recovery tooling and low-volume partner integrations.

The practical response is to connect Cloudflare’s signal with application evidence and an accountable business decision. For an agency-managed platform, that usually means the agency investigates and implements the change while the client approves the retirement risk.

What the zombie label actually proves

The label proves that Cloudflare recorded no traffic for the saved operation during its 32-day window. It does not prove that the route has been removed from the application, that deployed clients no longer reference it or that an external partner has agreed to stop using it.

Deleting an operation from Cloudflare’s Web Assets inventory is also different from removing the underlying application route. Inventory deletion stops Cloudflare tracking the operation, and its previous historical metrics cannot be restored. If the handler still exists at the origin, callers may continue reaching it unless the application, gateway or another security control rejects them.

Evidence Likely interpretation Next decision
cf-risk-zombie only The saved operation has been quiet for 32 days. Investigate; do not retire it yet.
Quiet in Cloudflare and origin logs The route may be obsolete or rarely used. Check scheduled jobs, contracts, code and owners.
Present in OpenAPI but receiving no traffic The specification may be ahead of production or out of date. Test the deployment and reconcile the specification.
Traffic reaches an unknown operation A live route is missing from the managed inventory. Identify and classify it before enabling fallthrough blocking.
Removal approved by both owners The evidence and business impact have been reviewed. Remove at the origin, monitor and then clean the inventory.
A zombie label becomes actionable only when technical evidence is paired with ownership and an explicit retirement decision.

Build an inventory you can make decisions from

Compare three views: Cloudflare’s Web Assets inventory, traffic at the gateway and origin, and the current OpenAPI specification. None is a complete source of truth by itself.

Cloudflare API Discovery has important thresholds. To appear in Discovery, an endpoint must receive at least 500 qualifying requests during a continuous 10-day period, and those requests must return a 2xx response from the Cloudflare edge. Requests originating directly from a Cloudflare Worker—including Worker-based test harnesses—do not count toward those thresholds. Absence from Discovery therefore does not establish that a low-volume, failing or test-only route is unused.

Record each operation consistently by HTTP method, hostname and normalized path. Treat GET api.example.com/users/{userId} as a distinct operation from the corresponding DELETE request, but do not create a separate inventory entry for every user ID. Also record the environment, API version, authentication expectations, data sensitivity and known consumers.

Assign two named owners:

  • Service owner: responsible for code, infrastructure, logs, releases and technical rollback.
  • Business owner: responsible for confirming customer, supplier, contractual and internal-process dependencies.

If either owner is unknown, that is a finding—not permission to delete. OWASP treats incomplete API inventories and missing retirement strategies as a security risk because deprecated versions can remain exposed with weaker controls.

Use a change-controlled retirement workflow

  1. Preserve the evidence. Before changing Cloudflare, capture the operation identity, labels, traffic history, schema status, known consumers and review period in a ticket. Inventory metrics cannot be recovered after the full operation is deleted.
  2. Search beyond the dashboard. Review gateway and origin logs, repositories, mobile and desktop clients, scheduled jobs, integration documentation, support records and recent releases. Choose a review window long enough to cover monthly, quarterly and seasonal activity.
  3. Classify the route. Use clear states such as active, legacy but required, deprecation planned, approved for removal or owner unknown. Every temporary exception should have an owner and another review date.
  4. Plan for old callers. Decide whether they need a replacement endpoint, a communicated deadline or an explicit error. Keep authentication, authorization and rate controls in place while the route is deprecated.
  5. Remove the capability at its source. Disable or remove the origin handler through the normal application release process. Update tests, documentation and the OpenAPI document in the same change where practical.
  6. Observe before final cleanup. Monitor Cloudflare events, origin logs, failed requests and support channels. Keep a tested rollback path for integrations that were missed.
  7. Clean Cloudflare last. Delete the managed operation only after the application change is verified and the audit evidence is stored elsewhere.

Move from visibility to enforcement carefully

Once the inventory is trustworthy, it can support stronger controls. Cloudflare Schema Validation 2.0 compares requests with an uploaded OpenAPI schema and exposes violations through cf.schema_validation.uploaded.violated. Detection is always on once the uploaded profile is available, but it does not mitigate traffic by itself; blocking or other action is configured separately with WAF custom rules.

Dashboard uploads can add schema operations to Web Assets automatically. With API or Terraform workflows, those operations must be added separately. Cloudflare currently relies on OpenAPI 3.0, including its patch versions, and does not support OpenAPI 3.1 for Schema Validation. Validate the document before uploading it and send representative traffic before enforcing violations.

A fallthrough rule can identify requests that do not match known operations using cf.api_gateway.fallthrough_detected. Scope it to the intended API hostnames or root paths, review representative matches and account for emergency and infrequent routes before choosing a blocking action. Otherwise, a cleanup project can turn an incomplete inventory into an outage.

Make retirement a routine operational decision

API inventories start drifting again with the next release. Review newly discovered operations and risk labels regularly, connect schema changes to deployment work, and require an owner and expiry date for every legacy exception.

The objective is not an empty Cloudflare dashboard. It is an API surface that engineering, operations and the business can explain—and retire without surprises.

If your inventory contains forgotten routes, incomplete schemas or unclear client ownership, Greg can help turn the evidence into a safe cleanup and rollout plan.

Related on GrN.dk

Need help with this kind of work?

Plan a safe API cleanup with Greg Get in touch with Greg.

Sources

Latest articles

A blanket AI restriction can limit search discovery. Compare Google and Bing controls, agree content permissions, and check what your CMS actually delivers.

Measure AI automation costs per accepted result, including retries and human review. Check caching, batch processing and spending controls before scaling.

A 502 after maintenance can interrupt enquiries or checkout. Trace the NGINX-to-PHP connection, diagnose the failure, and check the fix survives a restart.

Let AI customer service retrieve order status from Shopify and Shipmondo. Learn how to define the scope, verify the customer's identity and hand over cases when information is uncertain.

Move a useful AI workflow into company-controlled projects, with clear ownership, tested permissions, service accounts and a practical plan for replacing credentials.

Drupal 10 reaches end of life on 9 December 2026. Decide whether to upgrade first or combine it with a relaunch, with clear budgets, compatibility checks and launch criteria.

Before expanding internal AI search, check how permissions survive indexing, retrieval and access changes, with practical tests for staff and client boundaries.

Let’s Encrypt moves to 64-day certificates in February 2027. Check that renewal, validation, deployment and alerts work across the services you’re responsible for.

Website slowing down during campaigns? Find where requests queue across HTTP/2, NGINX, Apache and PHP-FPM, then test whether a targeted change helps.

When a customer requests access to their personal data, AI can help bring together material from WordPress and Microsoft 365. Here’s how to keep track of data sources, responsibilities and checks.