CleanedWeb Docs

Operations and reliability

Operations and reliability

Operate CleanedWeb property workflows with runtime readiness checks, bounded limits, durable receipts, freshness policies, retries, and support evidence.

By CleanedWeb Published Updated

Operational lifecycle

A successful response is not the finish line.

Acceptance ends only after readiness, bounds, payload validation, persistence, and receipt checks agree.

Request lifecycle
  1. 01ReadyCapabilities
  2. 02EntitledMarket access
  3. 03BoundedLimit + max Units
  4. 04ValidatedSchema + counts
  5. 05PersistedRows saved
  6. 06ReceiptedUsage committed

Terminal receipt checklist

  • Request and workspace identifiers
  • Returned and persisted counts
  • Schema and capability versions
  • Charged Units and classification
  • Freshness and terminal status
Bounded recovery timeline
  1. AttemptPreserve request
  2. WaitRetry-After or jitter
  3. RetryWithin policy
  4. EscalateAttach evidence

Runtime readiness

Call GET https://app.cleanedweb.com/v1/capabilities before planning a workflow. Treat a market as ready only when it appears in available_markets. A 503 means readiness is unknown; it is not a zero-result response.

Authenticated GET /v1/markets narrows runtime-ready markets to the current workspace. Static coverage, pricing, and documentation never override these two runtime surfaces.

Limits

Use capabilities.limits as current truth for location suggestions, recommended interactive limits, machine search ceilings, and request-rate limits. A machine search must always use a positive bounded limit and max_units, even when a static example shows another value.

Bounded searches expose has_more and an opaque signed next_cursor. Send that cursor with the unchanged query and a positive limit to read the next page. A snapshot_changed response means the maintained projection advanced; restart from the first page. An omitted limit still streams every match.

Use POST /v1/properties/count when only an exact total is required. It applies the same filters without transferring rich property records, returns the projection identity with the total, and consumes no delivery Units. The server caches the result only within that projection generation; a rebuilt projection forces a fresh count.

Retry matrix

Outcome Retry? Required action
Network failure before a response Bounded Preserve body and idempotency key
429 rate_limited Yes Wait for Retry-After; preserve idempotency key
503 service_unavailable Bounded Exponential backoff with jitter
401, 402, 403, 404 No Restore auth, Units, entitlement, or identifier
409 max_units_exceeded No Narrow request or obtain approved new ceiling
409 idempotency_conflict No Do not reuse the key for a changed request
422 validation or location error No Correct input or obtain user choice

A reasonable transient schedule is 1, 2, 4, 8, then 16 seconds with jitter, followed by a surfaced failure. Do not create an unbounded retry loop.

Metering and receipts

Read Unit rates from capabilities.unit_costs. An empty object means machine charging is not published as ready. Every successful machine search returns a durable usage receipt plus request ID, Units, and balance headers. Store those identifiers with the downstream batch.

Exact retries inside the published idempotency window return the committed receipt without charging again. A changed payload with the same key fails. The current OpenAPI description states a 24-hour request-key window; clients must treat the deployed OpenAPI contract as authoritative if that value changes.

Freshness and latency

snapshot.dataUpdatedAt describes the maintained projection, not response latency or the freshness of every contributing source. Consumers must define their own acceptable maximum age and stop or request approval when the response exceeds it.

No numeric public response-time or availability SLA is established by this guide. Do not invent one from a successful health probe or a single request.

Support evidence

For an operational escalation, retain:

  • workspace ID;
  • UTC timestamp;
  • endpoint or MCP tool name;
  • X-CleanedWeb-Request-Id or usage requestId;
  • stable error code and HTTP status;
  • whether the request was an exact idempotent retry;
  • redacted request shape and market.

Do not attach API keys, session cookies, signing secrets, full contact data, or unredacted property payloads unless a separately approved secure channel requires them.

Standards and further reading

Continue with the primary sources.

IETF HTTP semantics and retry controls IETF Machine-readable API problem details