Architecture

Data Layer

The Reseller Intelligence API is built on a source-agnostic data adapter layer. Data sources — sold comp providers, active market data, platform APIs — are swappable without modifying the pipeline above them.

How it works

Every data source adapter implements the same interface. The adapter takes a query, calls the underlying data source, and returns data in the normalized internal schema. The pipeline above the adapter consumes only the normalized schema — it never reads raw API responses directly.

This means the data source powering any given deployment can change — from a third-party aggregator to a direct platform API — without the pipeline or the API response shape changing. Operators receive the same intelligence schema regardless of what's powering it underneath.

Adapter interface
class CompDataAdapter:
    async def get_sold_comps(
        self,
        keywords: str,
        condition: str,
        days: int
    ) -> dict:
        # Returns normalized sold comp data

    async def get_active_market(
        self,
        keywords: str,
        condition: str
    ) -> dict:
        # Returns active listing count + sample prices
Deployment tiers

Deployments of the API are offered in three tiers, defined by capability scope rather than data source. The specific data sources powering each deployment are documented in a source schedule attached to the deployment agreement — not baked into the tier definition. This allows sources to evolve as direct platform API access is approved without contract renegotiation.

Full     — Complete intelligence stack. All data sourced through Acine.
Partial  — Identification + cache. Operator provides comp data pipeline.
Minimal  — Cache + canonical dataset as read layer only.