Seb’s List

Seb’s List API

A read API over verified, first-party rental listings in New York City, available over REST at https://api.sebslist.com/v1 and as a remote MCP server at https://api.sebslist.com/mcp. The full machine-readable spec is at /v1/openapi.json.

Authentication

Send your API key as a bearer token. Keys start with sl_live_, are shown once when issued, and can be revoked at any time. MCP clients that support OAuth can also sign in through our authorization server, advertised at /.well-known/oauth-protected-resource.

Authorization: Bearer sl_live_...

GET /v1/rentals/search returns currently available units from verified suppliers, newest confirmations first.

ParameterTypeNotes
marketstringMarket id. Default nyc.
neighborhoodscomma liste.g. East Village,Williamsburg (case-insensitive).
boroughscomma listManhattan, Brooklyn, Queens, Bronx, Staten Island.
bedrooms_min / bedrooms_maxnumber0 is a studio.
bathrooms_minnumber
rent_min / rent_maxnumberGross monthly rent, USD.
near_lat, near_lng, radius_metersnumberRadius search. radius_meters 100–25,000, default 1,500.
petsdogs | cats | anyUnits that accept the given pet.
no_feebooleanTenant pays no broker fee.
laundry_in_unitboolean
furnishedboolean
amenitiescomma listControlled vocabulary, e.g. doorman,elevator,dishwasher. All must match.
available_byYYYY-MM-DDAvailable on or before this date.
max_age_daysnumberOnly listings confirmed within this many days. Default 7, max 21.
sortnewest | rent_asc | rent_desc | distancedistance requires near_lat/near_lng.
limit1–50Default 20.
cursorstringnext_cursor from the previous page.
{
  "object": "list",
  "data": [ { "id": "rnt_01JB8X3F6Q9W2C4M7K5T0V8N1D", "object": "rental_listing", ... } ],
  "has_more": true,
  "next_cursor": "eyJvIjoyMH0"
}

Get a listing

GET /v1/rentals/{id} returns one listing, or 404 if it no longer exists or its supplier is no longer verified.

Contact a supplier

When your user wants to ask a question, tour, or apply, call POST /v1/rentals/{id}/contact. It returns the supplier’s direct contact details and their own listing page, and records the referral so suppliers can see the value agents bring them. Seb’s List never sits between the renter and the supplier.

{
  "object": "rental_contact",
  "listing_id": "rnt_01JB8X3F6Q9W2C4M7K5T0V8N1D",
  "referral_id": "ref_01JB8X5K2Q7T1C9M3N6V8W0Y4Z",
  "supplier": { "id": "org_...", "name": "Hudson Bridge Realty", "verified": true },
  "contact": { "name": "Maria Lopez", "email": "maria@hudsonbridgerealty.com", "phone": "+12125550142", "url": null },
  "supplier_url": "https://www.hudsonbridgerealty.com/rentals?ref=sebslist&sl_ref=...",
  "instructions": "Contact the supplier directly to ask questions, book a tour, or apply..."
}

The listing object

Fields are always present; unknown values are null rather than guessed. Key groups: rent (monthly, net effective, concessions), fees (no_fee, broker_fee with paid_by, application, amenity, move-in, deposit), layout, pets, amenities and building_amenities (controlled vocabulary), tours, supplier, contact, freshness and provenance. See the OpenAPI spec for the complete schema.

MCP server

Streamable HTTP at https://api.sebslist.com/mcp, stateless, authenticated like the REST API. Tools:

Freshness and provenance

Every listing has freshness.last_verified_at and verified_via (intake, checkin, source_sync, feed, admin). Listings become stale after 7 days without confirmation and are taken off market after 21. provenance maps each field to supplier_reported, public_record or derived.

Errors

Errors use RFC 9457 problem details with application/problem+json, and every response carries a Request-Id header to quote to support.

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://sebslist.com/docs/errors/invalid-request",
  "title": "Invalid query parameters",
  "status": 400,
  "request_id": "req_01JB8X...",
  "errors": [ { "path": "sort", "message": "sort=distance requires near_lat/near_lng" } ]
}

Rate limits

Limits are per partner, per minute, and reported on every response with RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. Over the limit you’ll get a 429 with Retry-After. Need more? Write to us and we’ll raise it.