Reviews, business settings and metrics
Reviews
GET /v1/reviews?since=2026-10-01T00:00:00Z scope reviews:read{"reviews":[{"id":"rev_6b1c2f0e...","lead_id":"6b1c...","created_at":"2026-10-25T02:11:00Z","overall":5,"quality":5,"punctuality":5,
"communication":5,"value":4,"cleanliness":5,"would_hire_again":true,"hired":true,"comment":"Fast and clean work.","comment_status":"approved","source":"app"}]}comment shows once we approve it for display (comment_status). New reviews fire review.created.
Business
GET /v1/business scope business:read
PATCH /v1/business scope business:write
POST /v1/business/pause scope business:write
POST /v1/business/resume scope business:writeGET returns your profile, services, ZIP codes, highest lead price, license, insurance and bond as we last checked them, and your webhook status.
PATCH takes any of:
{"paused": true, "zips": ["98391","98390"], "max_price_cents": 6000}These are the same settings as in the app. paused: true stops new leads at once (for example when your schedule is full) and fires business.paused. zips: 1 to 200 five-digit ZIP codes. max_price_cents: 1,000 to 200,000.
Metrics
GET /v1/metrics?from=2026-10-01T00:00:00Z&to=2026-11-01T00:00:00Z&group_by=service scope metrics:readgroup_by: day, week, month (Pacific time), service or zip. No group_by gives one total. Default range: the last 30 days.
{"metrics":[{"bucket":"water-heater-installation","leads_received":14,"accepted":12,"declined":1,"contacted":11,"appointments":2,"hired":3,"jobs_done":4,
"not_hired":3,"unreachable":1,"spend_cents":52500,"credited_cents":4500,"cost_per_lead_cents":3750,"cost_per_hire_cents":7500,"hire_rate":0.583,
"response_minutes_median":6.5,"response_minutes_p90":31.0,"reported_job_total_cents":1275000,"reported_paid_cents":980000,"return_on_spend":18.67}]}The numbers are the same ones your dashboard uses. Revenue numbers come from the job_total_cents and paid_cents you report.