Skip to content

Errors

All errors share one envelope:

{
"error": {
"code": "invalid_url",
"message": "Must be a https://www.zillow.com property URL",
"request_id": "8f7a3b..."
}
}

error.code is stable and machine-readable. Match on it; do not parse message. Include request_id when reporting issues.

Status code mapping

HTTPMeaning
200Success
201Created (e.g. webhook)
202Accepted, async job started
204No content (e.g. webhook revoke)
400Client validation failed
401Missing or invalid API key
403Account suspended
404Resource not found
409Job not in expected state
429Rate limit or quota
502Upstream call failed
504Upstream call timed out

Common error codes

CodeWhen
missing_api_keyNo Authorization header
invalid_api_keyBad format, unknown, or revoked
quota_exceededMonthly quota hit
rate_limitedPer-minute rate limit hit
invalid_urlURL doesn’t match the expected Zillow pattern
invalid_addressAddress too short or malformed
invalid_zpidNon-numeric zpid
missing_inputRequired body field absent
invalid_statusBad value for status
invalid_extract_unitsBad value for extract_units
not_foundProperty/job/webhook not found
job_not_readyJob is not in succeeded
job_not_foundUUID does not match an account-owned job
upstream_timeoutProvider call exceeded timeout
upstream_errorProvider returned non-2xx
invalid_jsonBody could not be parsed as JSON

Idempotency and retries

  • Reads (GET) are safe to retry on 5xx and 429.
  • Writes (POST async) create new jobs — retrying creates a new job. Use request_id correlation in your logs to match attempts.
  • Webhooks include a per-attempt counter (attempt) and a timestamp; treat any single delivery as at-least-once.