Charges and credits
Charges
GET /v1/charges?from=2026-10-01T00:00:00Z&to=2026-11-01T00:00:00Z scope billing:read{"charges":[{"id":"chg_311","lead_id":"6b1c...","service_id":"water-heater-installation","zip":"98391","amount_cents":4500,
"reason":"pro accepted direct lead","status":"pending","created_at":"2026-10-22T16:04:11Z","settled_at":null}]}status: pending (on your balance), invoiced, paid or void (credited). reason says what the charge is for. One charge per lead. Up to 1,000, newest first. Each lead also shows charged_cents.
Credits
GET /v1/credits scope billing:read
POST /v1/leads/{id}/credit-request scope billing:write
Content-Type: application/json
{"reason":"duplicate","note":"Same customer and job as lead 91de... yesterday"}reason: wrong_contact, not_reachable, outside_area, service_not_offered, duplicate, not_a_real_request, other. Same rules as the app: within 48 hours of getting the lead, once per lead, paid leads only. Our team decides; you get credit.approved or credit.denied by webhook, and an approved credit voids the charge (charge.voided). If you already paid, refund_due is true on the credit.
{"credits":[{"lead_id":"6b1c...","reason":"duplicate","note":"...","requested_at":"2026-10-22T17:00:00Z","state":"approved",
"decided_at":"2026-10-23T15:10:00Z","decision_note":"Confirmed duplicate","refund_due":false}]}