Reference
API reference v1.0.0
Send Australian property listings to ListStream: REAXML (realestate.com.au-compatible) or JSON. Generated from the OpenAPI 3.1 spec. Start with the quickstart.
Send Authorization: Bearer <access token> on every call except /oauth/token. Base URL: https://liststream.com.au.
- POST /oauth/token
- GET /listing/v1/upload
- POST /listing/v1/upload
- GET /listing/v1/upload/{uploadId}
- GET /v1/listings/{liststreamId}/{listingId}
- PUT /v1/listings/{liststreamId}/{listingId}
- DELETE /v1/listings/{liststreamId}/{listingId}
- POST /v1/listings/{liststreamId}/{listingId}/status
- GET /v1/deliveries/{id}
- GET /v1/connections
- POST /v1/connections
- Webhooks
- Schemas
Auth
POST /oauth/token
Get an access token (OAuth2 client credentials) · no token needed
HTTP Basic auth with your client ID and secret (or client_id and client_secret in the form). Tokens last an hour.
Request body (application/x-www-form-urlencoded)
| Field | Type | Notes |
|---|---|---|
grant_type required | "client_credentials" | |
client_id | string | |
client_secret | string |
Responses
200Token · object400Wrong grant type401invalid_client
REAXML upload (realestate.com.au-compatible)
GET /listing/v1/upload
Latest upload report for one listing
Parameters
| Name | In | Notes |
|---|---|---|
agencyId required | query | The agency's ListStream ID (REAXML agentID). |
externalListingId required | query | Your listing ID (REAXML uniqueID). |
Responses
200Report · UploadReport401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error404No upload for that listing429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
POST /listing/v1/upload
Upload REAXML
One REAXML document (one or more listings), or a zip of REAXML plus photo files. Same request and report shape as realestate.com.au's Listing Upload API. Up to 20 MB.
Request body (application/xml, text/xml, application/zip)
string
Responses
202Accepted · object401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error413Over 20 MB429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
GET /listing/v1/upload/{uploadId}
Upload report
Parameters
| Name | In | Notes |
|---|---|---|
uploadId required | path |
Responses
200Report · UploadReport401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error404No such upload429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
Listings (JSON)
GET /v1/listings/{liststreamId}/{listingId}
The listing as published (live keys)
Parameters
| Name | In | Notes |
|---|---|---|
liststreamId required | path | The agency's ListStream ID (or your sandbox ID with test keys). |
listingId required | path | Your ID for the listing: 1-50 letters, digits or . _ : - |
Responses
200Listing (public JSON)401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error404Not found429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
PUT /v1/listings/{liststreamId}/{listingId}
Create or replace a listing
Parameters
| Name | In | Notes |
|---|---|---|
liststreamId required | path | The agency's ListStream ID (or your sandbox ID with test keys). |
listingId required | path | Your ID for the listing: 1-50 letters, digits or . _ : - |
Request body (application/json)
Schema: Listing
Responses
202Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook. · Accepted401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error422Field errors · Error429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
DELETE /v1/listings/{liststreamId}/{listingId}
Remove a listing
Parameters
| Name | In | Notes |
|---|---|---|
liststreamId required | path | The agency's ListStream ID (or your sandbox ID with test keys). |
listingId required | path | Your ID for the listing: 1-50 letters, digits or . _ : - |
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
modifiedAt | string (date-time) | With a time zone. Default: now. |
type | "residential" | "rental" | "land" | "rural" |
Responses
202Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook. · Accepted401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error422Invalid modifiedAt or type · Error429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
POST /v1/listings/{liststreamId}/{listingId}/status
Change a listing's status
Parameters
| Name | In | Notes |
|---|---|---|
liststreamId required | path | |
listingId required | path |
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
status required | "current" | "sold" | "leased" | "withdrawn" | "offmarket" | |
modifiedAt required | string (date-time) | |
type | "residential" | "rental" | "land" | "rural" | |
sold | Sold |
Responses
202Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook. · Accepted401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error422Field errors · Error429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
Deliveries
GET /v1/deliveries/{id}
Delivery report
Parameters
| Name | In | Notes |
|---|---|---|
id required | path |
Responses
200Report · DeliveryReport401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error404No such delivery429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
Connections
GET /v1/connections
Your connection requests and their status
Requests show as pending until the agency approves (or revokes), whether or not the ID exists; agencyName appears once approved.
Responses
200Connections · object401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
POST /v1/connections
Ask an agency to connect (live keys)
The agency approves it in its dashboard; you then get a connection.approved webhook. The answer is always 202, whether or not the ID exists or the agency has already answered. A connection the agency revoked stays revoked unless the agency approves it again. Up to 100 new requests a day.
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
liststreamId required | string |
Responses
202Requested · object401Missing, expired or revoked access token. · Error403Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error422Not a six-letter ID429Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency). · Error
Webhooks
POST your endpoint
Events sent to your endpoint
Headers: ListStream-Event-Id (same on retries) and ListStream-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your endpoint secret>. Answer 2xx within 10 seconds; otherwise we retry with growing gaps for up to 3 days. Order isn't guaranteed, and an event may occasionally arrive twice (use the event ID). delivery.completed is also sent when a delivery fails (data.status = failed).
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
id | string | |
type | "delivery.completed" | "connection.approved" | "connection.revoked" | "test.ping" | |
created | string (date-time) | |
livemode | boolean | |
data | object |
Responses
200Received
Schemas
Error
| Field | Type | Notes |
|---|---|---|
error | object | Object: code, message, fields |
Accepted
| Field | Type | Notes |
|---|---|---|
deliveryId | string | |
status | "queued" | |
report | string (uri) |
Sold
| Field | Type | Notes |
|---|---|---|
price | number | |
showPrice | boolean | |
date | string (date) |
Listing
| Field | Type | Notes |
|---|---|---|
type required | "residential" | "rental" | "land" | "rural" | |
status required | "current" | "sold" | "leased" | "withdrawn" | "offmarket" | |
modifiedAt required | string (date-time) | When the listing last changed in your system, with a time zone (Z or +10:00). Older updates than what ListStream holds are ignored. |
address required | object | Object: subNumber, streetNumber, street, suburb, state, postcode, showStreet |
category | string | |
headline | string | |
description | string | |
price | object | With show: false, neither amount nor text is published. |
rent | object | A current rental needs rent or price.text. With show: false, no rent figure or price text is published. |
saleMethod | object | Object: type, closesAt |
underOffer | boolean | |
sold | Sold | |
bedrooms | integer | 0 is shown only when category is Studio; otherwise it's treated as not given. |
bathrooms | integer | |
garages | integer | |
carports | integer | |
landArea | object | Object: value, unit |
buildingArea | object | Object: value, unit |
features | array of string | One item per feature. Commas inside an item are kept. |
agents | array of object | |
photos | array of object | First photo is the main one. |
inspections | array of object | Shown in the property's local time; start and end on the same day. |
externalLink | string (uri) |
ListingResult
| Field | Type | Notes |
|---|---|---|
uniqueId | string | |
agentId | string | |
result | "new" | "updated" | "unchanged" | "removed" | "skipped" | |
listingId | string | |
message | string |
DeliveryReport
| Field | Type | Notes |
|---|---|---|
id | string | |
environment | "live" | "test" | |
status | "queued" | "processing" | "done" | "failed" | |
receivedAt | string | |
finishedAt | string | null | |
counts | object | Object: new, updated, unchanged, skipped |
items | array of ListingResult | |
errors | array of string |
UploadReport
| Field | Type | Notes |
|---|---|---|
uploadId | string | |
progress | "IN_PROGRESS" | "COMPLETED" | |
result | "NEW" | "PROCESSED" | "DELETED" | "UNCHANGED" | "SKIPPED" | "INTERNAL_ERROR" | |
agencyId | string | null | |
externalListingId | string | null | |
listingId | string | null | |
environment | "live" | "test" | |
issues | object | Object: errors, warnings |
listings | array of any | When one upload carried several listings. |