CleanedWeb Docs

Integration documentation

From a property question
to a trusted result.

One public contract for people, applications, and AI agents. Discover live capabilities, search maintained property snapshots, preserve provenance, and keep every machine request inside an explicit Unit budget.

01

For people

Use the console

Explore markets, search, save, and inspect usage without code.
02

For applications

Call the REST API

Use stable schemas, bounded requests, and durable receipts.
03

For AI systems

Connect through MCP

Expose five workspace-scoped tools with typed output and explicit Unit boundaries.

Integration architecture

Discover first. Bound the request. Accept the delivery.

Every integration path follows the same operating contract, whether the caller is a person, application, or agent.

  1. 01Capabilities

    Markets, schemas, limits, Unit costs and machine gate.

  2. 02Credential boundary

    Workspace-scoped session, API key, MCP or webhook secret.

  3. 03Bounded request

    Resolved location, explicit filters, limits and idempotency.

  4. 04Canonical delivery

    Property identity, source offers, provenance and timestamps.

  5. 05Acceptance

    Saved-row parity, completeness, receipt and recovery state.

Choose your responsibility

The shortest path to the contract you own.

Start in the workspace console.

The console is the fastest way to confirm access and learn the data shape. It uses your signed-in workspace session and shows only entitled, ready markets.

  1. 1
    Sign in.

    Open the console with your workspace account.

    Sign in ↗
  2. 2
    Confirm runtime access.

    Check that the workspace, market, and Search status are active.

  3. 3
    Run a narrow search.

    Inspect canonical IDs, sources, snapshot time, and Unit receipt before automating.

  4. 4
    Create a machine key when enabled.

    Open API keys, name the credential, and copy its one-time secret into a secret manager.

Credential boundary

Browser requests use the signed-in session. Server applications use a workspace Bearer key only when runtime machine access is enabled. Never put cookies or API-key secrets in prompts, URLs, logs, or client-side code.

Discover, then search.

The manifest is public and uncached. Read it before constructing a request so your client uses the current market list, filters, limits, schemas, and Unit costs.

Step 1

Read live capabilities

Do not replace a failed manifest request with an empty market list.

Shell
curl --fail-with-body --silent --show-error \
  https://app.cleanedweb.com/v1/capabilities
Step 2

Keep the key outside your code

Create it in the console and inject it from a server-side secret manager.

Shell
export CLEANEDWEB_API_KEY="cw_live_…"
Step 3

Send a bounded search

A machine search requires limit, max_units, and an idempotency key.

Shell
curl --fail-with-body --silent --show-error \
  --request POST \
  --header "Authorization: Bearer ${CLEANEDWEB_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: search-lu-belair-001" \
  --data '{
    "market": "LU",
    "response_schema": "property-profile-v2",
    "deal_type": ["buy"],
    "property_categories": ["apartment"],
    "limit": 100,
    "max_units": 100
  }' \
  https://app.cleanedweb.com/v1/properties/search

A 200 response is only the beginning.

Accept a property snapshot only after its identity, count, freshness, and completeness checks pass. Preserve source provenance beside every canonical record.

01

Envelope

returned === results.length

02

Schema

Every row is property-profile-v2.

03

Identity

Every property_entity_id is present and unique.

04

Freshness

snapshot.dataUpdatedAt passes your policy.

05

Completeness

Follow next_cursor until has_more is false.

06

Receipt

Persist request ID, Units, balance, and usage classification.

Give agents narrow tools, not raw access.

When the runtime gate is enabled, connect a trusted MCP client to the stateless Streamable HTTP endpoint. The client owns the Bearer key; it must never become a prompt, tool argument, tool result, URL, or trace.

Streamable HTTP endpointhttps://app.cleanedweb.com/mcp
cleanedweb_capabilitiesDiscover runtime truthFree read
cleanedweb_list_marketsList entitled, ready marketsFree read
cleanedweb_search_propertiesSearch a bounded snapshotMetered
cleanedweb_get_propertyRead one canonical propertyFree read
cleanedweb_list_property_changesRead finalized changesFree read

Agent handoff

Give the model an index. Keep secrets in the adapter.

Start with the compact index for discovery. Use the consolidated file when the agent needs the complete contract, then validate actual calls against OpenAPI and the runtime manifest.

Budget every delivery. Retry without paying twice.

Unit ceiling

Read unit_costs from capabilities and set max_units on every machine search. An empty Unit-cost object means machine charging is not ready; do not estimate a price from marketing copy.

Durable idempotency

Retry the exact request with the same key. A matching retry returns its stored receipt without another charge. Reusing the key for a changed request returns idempotency_conflict.

Rate limits

A shared key limit returns 429 with Retry-After. Wait, keep the same idempotency key, and do not spread retries across processes.

Availability

Retry 503 with bounded exponential backoff and jitter. Never turn an availability failure into an empty result set or empty capability manifest.

Evaluate the boundary, not a sales claim.

Review field semantics, credential isolation, compatibility rules, operational recovery, deterministic workflows, and explicit non-guarantees in one implementation-facing contract.

Build against contracts, not examples alone.

Need implementation help?Include your workspace ID and request or receipt ID.
info@cleanedweb.com