ListStream Docs

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.

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)

FieldTypeNotes
grant_type required"client_credentials"
client_idstring
client_secretstring

Responses

  • 200 Token · object
  • 400 Wrong grant type
  • 401 invalid_client

REAXML upload (realestate.com.au-compatible)

GET /listing/v1/upload

Latest upload report for one listing

Parameters

NameInNotes
agencyId requiredqueryThe agency's ListStream ID (REAXML agentID).
externalListingId requiredqueryYour listing ID (REAXML uniqueID).

Responses

  • 200 Report · UploadReport
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 404 No upload for that listing
  • 429 Rate 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

  • 202 Accepted · object
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 413 Over 20 MB
  • 429 Rate 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

NameInNotes
uploadId requiredpath

Responses

  • 200 Report · UploadReport
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 404 No such upload
  • 429 Rate 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

NameInNotes
liststreamId requiredpathThe agency's ListStream ID (or your sandbox ID with test keys).
listingId requiredpathYour ID for the listing: 1-50 letters, digits or . _ : -

Responses

  • 200 Listing (public JSON)
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 404 Not found
  • 429 Rate 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

NameInNotes
liststreamId requiredpathThe agency's ListStream ID (or your sandbox ID with test keys).
listingId requiredpathYour ID for the listing: 1-50 letters, digits or . _ : -

Request body (application/json)

Schema: Listing

Responses

  • 202 Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook. · Accepted
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 422 Field errors · Error
  • 429 Rate 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

NameInNotes
liststreamId requiredpathThe agency's ListStream ID (or your sandbox ID with test keys).
listingId requiredpathYour ID for the listing: 1-50 letters, digits or . _ : -

Request body (application/json)

FieldTypeNotes
modifiedAtstring (date-time)With a time zone. Default: now.
type"residential" | "rental" | "land" | "rural"

Responses

  • 202 Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook. · Accepted
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 422 Invalid modifiedAt or type · Error
  • 429 Rate 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

NameInNotes
liststreamId requiredpath
listingId requiredpath

Request body (application/json)

FieldTypeNotes
status required"current" | "sold" | "leased" | "withdrawn" | "offmarket"
modifiedAt requiredstring (date-time)
type"residential" | "rental" | "land" | "rural"
soldSold

Responses

  • 202 Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook. · Accepted
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 422 Field errors · Error
  • 429 Rate 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

NameInNotes
id requiredpath

Responses

  • 200 Report · DeliveryReport
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 404 No such delivery
  • 429 Rate 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

  • 200 Connections · object
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 429 Rate 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)

FieldTypeNotes
liststreamId requiredstring

Responses

  • 202 Requested · object
  • 401 Missing, expired or revoked access token. · Error
  • 403 Not allowed: agency not connected, sandbox ID mismatch, or suspended account. · Error
  • 422 Not a six-letter ID
  • 429 Rate 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)

FieldTypeNotes
idstring
type"delivery.completed" | "connection.approved" | "connection.revoked" | "test.ping"
createdstring (date-time)
livemodeboolean
dataobject

Responses

  • 200 Received

Schemas

Error

FieldTypeNotes
errorobjectObject: code, message, fields

Accepted

FieldTypeNotes
deliveryIdstring
status"queued"
reportstring (uri)

Sold

FieldTypeNotes
pricenumber
showPriceboolean
datestring (date)

Listing

FieldTypeNotes
type required"residential" | "rental" | "land" | "rural"
status required"current" | "sold" | "leased" | "withdrawn" | "offmarket"
modifiedAt requiredstring (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 requiredobjectObject: subNumber, streetNumber, street, suburb, state, postcode, showStreet
categorystring
headlinestring
descriptionstring
priceobjectWith show: false, neither amount nor text is published.
rentobjectA current rental needs rent or price.text. With show: false, no rent figure or price text is published.
saleMethodobjectObject: type, closesAt
underOfferboolean
soldSold
bedroomsinteger0 is shown only when category is Studio; otherwise it's treated as not given.
bathroomsinteger
garagesinteger
carportsinteger
landAreaobjectObject: value, unit
buildingAreaobjectObject: value, unit
featuresarray of stringOne item per feature. Commas inside an item are kept.
agentsarray of object
photosarray of objectFirst photo is the main one.
inspectionsarray of objectShown in the property's local time; start and end on the same day.
externalLinkstring (uri)

ListingResult

FieldTypeNotes
uniqueIdstring
agentIdstring
result"new" | "updated" | "unchanged" | "removed" | "skipped"
listingIdstring
messagestring

DeliveryReport

FieldTypeNotes
idstring
environment"live" | "test"
status"queued" | "processing" | "done" | "failed"
receivedAtstring
finishedAtstring | null
countsobjectObject: new, updated, unchanged, skipped
itemsarray of ListingResult
errorsarray of string

UploadReport

FieldTypeNotes
uploadIdstring
progress"IN_PROGRESS" | "COMPLETED"
result"NEW" | "PROCESSED" | "DELETED" | "UNCHANGED" | "SKIPPED" | "INTERNAL_ERROR"
agencyIdstring | null
externalListingIdstring | null
listingIdstring | null
environment"live" | "test"
issuesobjectObject: errors, warnings
listingsarray of anyWhen one upload carried several listings.