npm package: @railblock/openlisting-sdk
Description: JavaScript SDK for the OpenListing real estate protocol
Latest version: 1.0.3

# OpenListing SDK

```
 ██████╗ ██████╗ ███████╗███╗   ██╗    ██╗     ██╗███████╗████████╗██╗███╗   ██╗ ██████╗
██╔═══██╗██╔══██╗██╔════╝████╗  ██║    ██║     ██║██╔════╝╚══██╔══╝██║████╗  ██║██╔════╝
██║   ██║██████╔╝█████╗  ██╔██╗ ██║    ██║     ██║███████╗   ██║   ██║██╔██╗ ██║██║  ███╗
██║   ██║██╔═══╝ ██╔══╝  ██║╚██╗██║    ██║     ██║╚════██║   ██║   ██║██║╚██╗██║██║   ██║
╚██████╔╝██║     ███████╗██║ ╚████║    ███████╗██║███████║   ██║   ██║██║ ╚████║╚██████╔╝
 ╚═════╝ ╚═╝     ╚══════╝╚═╝  ╚═══╝   ╚══════╝╚═╝╚══════╝   ╚═╝   ╚═╝╚═╝  ╚═══╝ ╚═════╝
```

> The TypeScript SDK for OpenListing smart contract and API integrations.

[![npm version](https://img.shields.io/npm/v/@railblock/openlisting-sdk.svg)](https://www.npmjs.com/package/@railblock/openlisting-sdk)
[![license](https://img.shields.io/npm/l/@railblock/openlisting-sdk.svg)](./LICENSE)
[![types](https://img.shields.io/badge/types-TypeScript-blue.svg)](https://www.typescriptlang.org/)

---

## Install

```bash
npm install @railblock/openlisting-sdk
```

## Quick start

```ts
import { OpenListing } from "@railblock/openlisting-sdk";

const client = new OpenListing({
  apiKey: process.env.OPENLISTING_API_KEY,
  endpoint: "https://api.openlisting.pro",
});
```

## One-liner usage

```ts
const client = new OpenListing({ apiKey: process.env.OPENLISTING_API_KEY });
```

## What this SDK does

- Talks to the OpenListing API
- Supports contract-backed property, listing, and marketplace flows
- Falls back to REST when no contract config is provided
- Exposes contract ABIs for `PropertyRegistry`, `OpenListing`, and `MarketplaceRegistry`

## Contract-backed usage

### Property registration

```ts
const client = new OpenListing({
  apiKey: process.env.OPENLISTING_API_KEY,
  endpoint: "https://api.openlisting.pro",
  provider: window.ethereum,
  contracts: {
    propertyRegistry: "0xYourPropertyRegistryAddress",
  },
});

const result = await client.registerProperty("ipfs://metadata-uri");
```

### Listing management

```ts
const client = new OpenListing({
  apiKey: process.env.OPENLISTING_API_KEY,
  endpoint: "https://api.openlisting.pro",
  provider: window.ethereum,
  contracts: {
    listingManager: "0xYourListingManagerAddress",
  },
});

await client.createListing(1, "1.5");
await client.updatePrice(1, "2.0");
await client.cancelListing(1);
```

### Marketplace registration

Marketplace operators can configure their own marketplace fee percentage. Protocol, listing, and buy-side fees continue to route to the contract treasury.

```ts
const client = new OpenListing({
  apiKey: process.env.OPENLISTING_API_KEY,
  endpoint: "https://api.openlisting.pro",
  provider: window.ethereum,
  contracts: {
    marketplaceRegistry: "0xYourMarketplaceRegistryAddress",
  },
});

const marketplace = await client.registerMarketplace({
  fee_percent: 1.5,
});

await client.updateMarketplaceFee(marketplace.marketplaceId, 2.0);
await client.deactivateMarketplace(marketplace.marketplaceId);
```

## REST fallback

```ts
const client = new OpenListing({
  apiKey: process.env.OPENLISTING_API_KEY,
  endpoint: "https://api.openlisting.pro",
});

const listings = await client.getListings();
```

## Why OpenListing

OpenListing is built for marketplace workflows that need a simple SDK entry point for contract operations and API access. This package is designed to be easy to install, easy to brand, and easy to use in a one-line consumer setup.

## Publishing notes

- Keep the README install snippet current with the published npm package name.
- Use this file as the public-facing entry point for npm consumers.
- Update examples when contract ABIs or method signatures change.