What does the URBLD CRM API do?
It captures leads from any source (form, phone, chat, agent), runs server-side fuzzy deduplication on phone and email, assigns an immutable lifecycle_number, and hands qualified leads off to scheduling. Every lead → customer → job transition preserves the same lifecycle_number so nothing gets lost between systems.
Core endpoints
POST /v1/leads— capture a leadGET /v1/leads— list with filters (status, source, unassigned, age)POST /v1/leads/{id}/convert— convert a qualified lead to a customerGET /v1/customers/{id}— full customer record with lifecycle history
Capturing a lead
curl -X POST https://api.urbld.com/v1/leads \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Homeowner",
"phone": "+15551234567",
"email": "jane@example.com",
"source": "website_form",
"service_needed": "hvac_repair",
"address": "123 Elm St, Austin, TX 78701",
"notes": "AC unit not cooling; unit is ~10 years old."
}'The response includes the new lead_id, lifecycle_number, and a duplicate_of field when the server detected a likely match against an existing record.
Converting to a customer
await fetch(`https://api.urbld.com/v1/leads/${leadId}/convert`, {
method: "POST",
headers: { Authorization: `Bearer ${token}` },
});The customer inherits the lead's lifecycle_number. Every future job, invoice, and communication is threaded under the same ID.
Design principles
- Never hard-delete. Leads and jobs are the most critical entities in the platform; loss is non-recoverable. Use
DELETE /v1/leads/{id}— it setsdeleted_atonly. - Tenant isolation. Every list endpoint is implicitly scoped to the token's organization. There is no cross-org list.
- Actionable leads only. The intake standard rejects leads that fail minimum data-point validation (at least one contact channel + service intent).
Frequently Asked Questions
Straight answers about how URBLD runs the business end-to-end.