{"openapi":"3.1.0","info":{"title":"ListStream API","version":"1.0.0","summary":"Send Australian property listings to ListStream: REAXML (realestate.com.au-compatible) or JSON.","description":"Free for CRMs and integrators, no integration fees. Test keys validate and report but never publish; live keys publish for agencies that have approved a connection to you. Every delivery gets a per-listing report.","contact":{"email":"hello@liststream.com.au","url":"https://docs.liststream.com.au"}},"servers":[{"url":"https://liststream.com.au"}],"security":[{"bearer":[]}],"tags":[{"name":"Auth"},{"name":"REAXML upload (realestate.com.au-compatible)"},{"name":"Listings (JSON)"},{"name":"Deliveries"},{"name":"Connections"}],"paths":{"/oauth/token":{"post":{"tags":["Auth"],"security":[],"summary":"Get an access token (OAuth2 client credentials)","description":"HTTP Basic auth with your client ID and secret (or client_id and client_secret in the form). Tokens last an hour.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type"],"properties":{"grant_type":{"const":"client_credentials"},"client_id":{"type":"string"},"client_secret":{"type":"string"}}}}}},"responses":{"200":{"description":"Token","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"const":"Bearer"},"expires_in":{"type":"integer"},"scope":{"type":"string"}}}}}},"400":{"description":"Wrong grant type"},"401":{"description":"invalid_client"}}}},"/listing/v1/upload":{"post":{"tags":["REAXML upload (realestate.com.au-compatible)"],"summary":"Upload REAXML","description":"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.","requestBody":{"required":true,"content":{"application/xml":{"schema":{"type":"string"}},"text/xml":{"schema":{"type":"string"}},"application/zip":{"schema":{"type":"string","format":"binary"}}}},"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"type":"object","properties":{"uploadId":{"type":"string"}}}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Over 20 MB"},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["REAXML upload (realestate.com.au-compatible)"],"summary":"Latest upload report for one listing","parameters":[{"name":"agencyId","in":"query","required":true,"description":"The agency's ListStream ID (REAXML agentID).","schema":{"type":"string"}},{"name":"externalListingId","in":"query","required":true,"description":"Your listing ID (REAXML uniqueID).","schema":{"type":"string"}}],"responses":{"200":{"description":"Report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadReport"}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No upload for that listing"},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/listing/v1/upload/{uploadId}":{"get":{"tags":["REAXML upload (realestate.com.au-compatible)"],"summary":"Upload report","parameters":[{"name":"uploadId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadReport"}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such upload"},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/listings/{liststreamId}/{listingId}":{"parameters":[{"name":"liststreamId","in":"path","required":true,"description":"The agency's ListStream ID (or your sandbox ID with test keys).","schema":{"type":"string"}},{"name":"listingId","in":"path","required":true,"description":"Your ID for the listing: 1-50 letters, digits or . _ : -","schema":{"type":"string"}}],"put":{"tags":["Listings (JSON)"],"summary":"Create or replace a listing","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Listing"}}}},"responses":{"202":{"description":"Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Field errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Listings (JSON)"],"summary":"Remove a listing","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"modifiedAt":{"type":"string","format":"date-time","description":"With a time zone. Default: now."},"type":{"enum":["residential","rental","land","rural"]}}}}}},"responses":{"202":{"description":"Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid modifiedAt or type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Listings (JSON)"],"summary":"The listing as published (live keys)","responses":{"200":{"description":"Listing (public JSON)"},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/listings/{liststreamId}/{listingId}/status":{"post":{"tags":["Listings (JSON)"],"summary":"Change a listing's status","parameters":[{"name":"liststreamId","in":"path","required":true,"schema":{"type":"string"}},{"name":"listingId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["status","modifiedAt"],"properties":{"status":{"enum":["current","sold","leased","withdrawn","offmarket"]},"modifiedAt":{"type":"string","format":"date-time"},"type":{"enum":["residential","rental","land","rural"]},"sold":{"$ref":"#/components/schemas/Sold"}}}}}},"responses":{"202":{"description":"Accepted: stored and queued. Poll the report, or wait for the delivery.completed webhook.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Field errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/deliveries/{id}":{"get":{"tags":["Deliveries"],"summary":"Delivery report","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryReport"}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such delivery"},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connections":{"get":{"tags":["Connections"],"summary":"Your connection requests and their status","description":"Requests show as pending until the agency approves (or revokes), whether or not the ID exists; agencyName appears once approved.","responses":{"200":{"description":"Connections","content":{"application/json":{"schema":{"type":"object","properties":{"connections":{"type":"array","items":{"type":"object","properties":{"liststreamId":{"type":"string"},"status":{"enum":["pending","approved","revoked"]},"agencyName":{"type":"string"},"requestedAt":{"type":"string"},"approvedAt":{"type":"string"},"revokedAt":{"type":"string"}}}}}}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Connections"],"summary":"Ask an agency to connect (live keys)","description":"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.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["liststreamId"],"properties":{"liststreamId":{"type":"string","pattern":"^[A-Z]{6}$"}}}}}},"responses":{"202":{"description":"Requested","content":{"application/json":{"schema":{"type":"object","properties":{"liststreamId":{"type":"string"},"status":{"const":"requested"}}}}}},"401":{"description":"Missing, expired or revoked access token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Not allowed: agency not connected, sandbox ID mismatch, or suspended account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Not a six-letter ID"},"429":{"description":"Rate limited: 300 requests a minute per partner and environment, and 600 deliveries an hour per agency (when the delivery is for one agency).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"event":{"post":{"summary":"Events sent to your endpoint","description":"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).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"enum":["delivery.completed","connection.approved","connection.revoked","test.ping"]},"created":{"type":"string","format":"date-time"},"livemode":{"type":"boolean"},"data":{"type":"object"}}}}}},"responses":{"200":{"description":"Received"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Access token from POST /oauth/token."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}},"Accepted":{"type":"object","properties":{"deliveryId":{"type":"string"},"status":{"const":"queued"},"report":{"type":"string","format":"uri"}}},"Sold":{"type":"object","properties":{"price":{"type":"number","minimum":0},"showPrice":{"type":"boolean","default":true},"date":{"type":"string","format":"date"}}},"Listing":{"type":"object","required":["type","status","modifiedAt","address"],"properties":{"type":{"enum":["residential","rental","land","rural"]},"status":{"enum":["current","sold","leased","withdrawn","offmarket"]},"modifiedAt":{"type":"string","format":"date-time","description":"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":{"type":"object","required":["suburb","state"],"properties":{"subNumber":{"type":"string","maxLength":100},"streetNumber":{"type":"string","maxLength":100},"street":{"type":"string","maxLength":100},"suburb":{"type":"string","maxLength":100},"state":{"enum":["ACT","NSW","NT","QLD","SA","TAS","VIC","WA"]},"postcode":{"type":"string","pattern":"^\\d{4}$"},"showStreet":{"type":"boolean","default":true}}},"category":{"type":"string","examples":["House","Unit","Townhouse"]},"headline":{"type":"string","maxLength":300},"description":{"type":"string","maxLength":20000},"price":{"type":"object","description":"With show: false, neither amount nor text is published.","properties":{"text":{"type":"string","maxLength":200,"examples":["Offers over $780,000"]},"amount":{"type":"number","minimum":0},"show":{"type":"boolean","default":true}}},"rent":{"type":"object","required":["amount"],"description":"A current rental needs rent or price.text. With show: false, no rent figure or price text is published.","properties":{"amount":{"type":"number"},"period":{"enum":["week","month"],"default":"week"},"show":{"type":"boolean","default":true}}},"saleMethod":{"type":"object","required":["type"],"properties":{"type":{"enum":["sale","auction","setsale"]},"closesAt":{"type":"string","format":"date-time","description":"With a time zone; shown in the property's local time."}}},"underOffer":{"type":"boolean"},"sold":{"$ref":"#/components/schemas/Sold"},"bedrooms":{"type":"integer","minimum":0,"maximum":100,"description":"0 is shown only when category is Studio; otherwise it's treated as not given."},"bathrooms":{"type":"integer","minimum":0,"maximum":100},"garages":{"type":"integer","minimum":0,"maximum":100},"carports":{"type":"integer","minimum":0,"maximum":100},"landArea":{"type":"object","required":["value"],"properties":{"value":{"type":"number","exclusiveMinimum":0},"unit":{"enum":["squareMeter","acre","hectare"]}}},"buildingArea":{"type":"object","required":["value"],"properties":{"value":{"type":"number","exclusiveMinimum":0},"unit":{"const":"squareMeter"}}},"features":{"type":"array","maxItems":100,"description":"One item per feature. Commas inside an item are kept.","items":{"type":"string","maxLength":100,"pattern":"^[^\\r\\n]+$"}},"agents":{"type":"array","maxItems":5,"items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":120},"mobile":{"type":"string","maxLength":40},"phone":{"type":"string","maxLength":40},"email":{"type":"string","maxLength":200}}}},"photos":{"type":"array","maxItems":36,"description":"First photo is the main one.","items":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","pattern":"^https://"},"modifiedAt":{"type":"string","format":"date-time"}}}},"inspections":{"type":"array","maxItems":50,"description":"Shown in the property's local time; start and end on the same day.","items":{"type":"object","required":["start","end"],"properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"}}}},"externalLink":{"type":"string","format":"uri","pattern":"^https://"}}},"ListingResult":{"type":"object","properties":{"uniqueId":{"type":"string"},"agentId":{"type":"string"},"result":{"enum":["new","updated","unchanged","removed","skipped"]},"listingId":{"type":"string"},"message":{"type":"string"}}},"DeliveryReport":{"type":"object","properties":{"id":{"type":"string"},"environment":{"enum":["live","test"]},"status":{"enum":["queued","processing","done","failed"]},"receivedAt":{"type":"string"},"finishedAt":{"type":["string","null"]},"counts":{"type":"object","properties":{"new":{"type":"integer"},"updated":{"type":"integer"},"unchanged":{"type":"integer"},"skipped":{"type":"integer"}}},"items":{"type":"array","items":{"$ref":"#/components/schemas/ListingResult"}},"errors":{"type":"array","items":{"type":"string"}}}},"UploadReport":{"type":"object","properties":{"uploadId":{"type":"string"},"progress":{"enum":["IN_PROGRESS","COMPLETED"]},"result":{"enum":["NEW","PROCESSED","DELETED","UNCHANGED","SKIPPED","INTERNAL_ERROR"]},"agencyId":{"type":["string","null"]},"externalListingId":{"type":["string","null"]},"listingId":{"type":["string","null"]},"environment":{"enum":["live","test"]},"issues":{"type":"object","properties":{"errors":{"type":"array"},"warnings":{"type":"array"}}},"listings":{"type":"array","description":"When one upload carried several listings."}}}}}}