Docs
V1 APILeads

Submit a lead

Creates a lead in Resi and triggers the client's leasing workflow: email notifications per the form's settings, a push through the form's CRM connections, and a `lead_submitted` demand event. **The payload is intentionally open.** Only `form_id` and `email` are validated; every other key you send is stored on the lead and forwarded to the client's CRM. Send the full context you collected — `first_name`, `phone`, `bedrooms`, `pets`, `message` — as flat top-level keys. Do not nest. **Attribution.** `resi_source_key` is matched exactly against a lead source `code` on the property and is the reliable path; `resi_source_name` is a normalized display-name fallback. Without either, the lead is stored unattributed and your traffic is invisible in the client's reporting. **No idempotency and no rate limit.** A retried request creates a second lead. Deduplicate on your side before retrying, and put your own spam controls (CAPTCHA, honeypot, edge rate limit) in front of the form.

POST/api/v1/leads

Creates a lead in Resi and triggers the client's leasing workflow: email notifications per the form's settings, a push through the form's CRM connections, and a lead_submitted demand event.

The payload is intentionally open. Only form_id and email are validated; every other key you send is stored on the lead and forwarded to the client's CRM. Send the full context you collected — first_name, phone, bedrooms, pets, message — as flat top-level keys. Do not nest.

Attribution. resi_source_key is matched exactly against a lead source code on the property and is the reliable path; resi_source_name is a normalized display-name fallback. Without either, the lead is stored unattributed and your traffic is invisible in the client's reporting.

No idempotency and no rate limit. A retried request creates a second lead. Deduplicate on your side before retrying, and put your own spam controls (CAPTCHA, honeypot, edge rate limit) in front of the form.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/leads" \  -H "Content-Type: application/json" \  -d '{    "form_id": "string",    "email": "user@example.com"  }'
{  "message": "string"}