/v1/visitsList site visits
Keyset-paginated visits in your scope (agent / booker, or visits on leads you can see).
Access: API key with site_visits:read, or a member session. Permission site_visits.view.
Parameters
cursorquery- string
Opaque cursor from the previous page (`meta.next_cursor`).
limitquery- integer
Page size, 1–200.
sortquery- string
Comma list of sort keys, "-" prefix for descending, e.g. -received_at.
viewquery- "upcoming" | "today" | "past" | "needs_feedback" | "all"
Default `all`; `today` uses the company’s day.
statusquery- string
Comma list of statuses.
agent_idquery- string
A member id, or `me`.
lead_idquery- Id
Opaque record id.
project_idquery- Id
Opaque record id.
property_idquery- Id
Opaque record id.
fromquery- string
scheduled_at ≥ (local date or instant).
toquery- string
scheduled_at ≤ (a local date includes the whole day).
Response · 200
datarequired- array of SiteVisit
metarequired- PageMeta
curl -X GET 'https://api.propzolo.com/v1/visits' \
-H 'Authorization: Bearer pz_live_…'{
"data": [
{
"id": "cmusrceel0000q7kaafxqi1om",
"status": "scheduled",
"phase": "upcoming",
"lead": {
"id": "cmusrceel0000q7kaafxqi1om",
"ref": "string",
"name": "string",
"contact_id": "cmusrceel0000q7kaafxqi1om"
},
"agent": {
"id": "cmusrceel0000q7kaafxqi1om",
"name": "string"
},
"presales": {
"id": "cmusrceel0000q7kaafxqi1om",
"name": "string"
},
"created_by_id": "cmusrceel0000q7kaafxqi1om",
"project": {
"id": "cmusrceel0000q7kaafxqi1om",
"name": "string"
},
"scheduled_at": "2026-10-06T05:30:00.000Z",
"ends_at": "2026-10-06T05:30:00.000Z",
"duration_min": 0,
"visit_number": 0,
"meeting_point": "string",
"pickup": {
"required": true,
"address": "string",
"at": "2026-10-06T05:30:00.000Z"
},
"partner_id": "cmusrceel0000q7kaafxqi1om",
"items": [
{
"id": "cmusrceel0000q7kaafxqi1om",
"sort_order": 0,
"property": {
"id": "cmusrceel0000q7kaafxqi1om",
"ref_code": "string",
"title": "string",
"listing_type": "string",
"locality": "string"
},
"unit": {
"id": "cmusrceel0000q7kaafxqi1om",
"unit_no": "string"
},
"planned_at": "2026-10-06T05:30:00.000Z",
"reaction": "liked",
"reasons": [
"string"
],
"remarks": "string"
}
],
"confirmed": {
"at": "2026-10-06T05:30:00.000Z",
"via": "link"
},
"otp": {
"required": true,
"verified_at": "2026-10-06T05:30:00.000Z",
"method": "otp",
"channel": "string",
"sent_at": "2026-10-06T05:30:00.000Z",
"expires_at": "2026-10-06T05:30:00.000Z",
"attempts_left": 0,
"locked": true,
"resend_in_sec": 0
},
"check_in": {
"at": "2026-10-06T05:30:00.000Z",
"lat": 0,
"lng": 0,
"accuracy_m": 0,
"distance_m": 0,
"far": true,
"mock": true,
"has_photo": true
},
"check_out": {
"at": "2026-10-06T05:30:00.000Z",
"lat": 0,
"lng": 0,
"distance_m": 0,
"mock": true
},
"completed_at": "2026-10-06T05:30:00.000Z",
"actual_minutes": 0,
"rating": 0,
"notes": "string",
"next_step": "string",
"objections": [
"string"
],
"revisit_at": "2026-10-06T05:30:00.000Z",
"feedback_at": "2026-10-06T05:30:00.000Z",
"cancelled_reason": "string",
"no_show_reason": "string",
"reschedules": [
{
"from": "2026-10-06T05:30:00.000Z",
"to": "2026-10-06T05:30:00.000Z",
"reason": "string",
"at": "2026-10-06T05:30:00.000Z"
}
],
"requests": [
{
"id": "cmusrceel0000q7kaafxqi1om",
"at": "2026-10-06T05:30:00.000Z",
"preferred_at": "2026-10-06T05:30:00.000Z",
"note": "string",
"status": "open"
}
],
"confirm_url": "string",
"can_edit": true,
"created_at": "2026-10-06T05:30:00.000Z",
"updated_at": "2026-10-06T05:30:00.000Z"
}
],
"meta": {
"next_cursor": "string",
"has_more": true
}
}Errors
401No valid session or API key (missing, expired or revoked).403The caller lacks the permission, API-key scope or support grant this operation needs.422Invalid input; `error.fields` maps field paths to messages.429Too many requests; retry after the Retry-After header.500Unexpected error; quote `error.request_id` to support.

