Aozo CRM API
Leads, deals, contacts, tasks and pipeline analytics — the full REST surface behind crm.aozo.in.
Contacts
Companies and people your team is talking to.
| Method | Path | Description |
|---|---|---|
| GET | /contacts | List contacts for an org (?orgId=) |
| POST | /contacts | Create a contact |
| DELETE | /contacts/:id | Delete a contact |
Create a contact
curl -X POST https://crm.aozo.in/api/contacts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"orgId": "org_123",
"name": "Priya Sharma",
"email": "priya@example.com",
"phone": "+91 98765 43210",
"company": "Acme Retail",
"designation": "Procurement Lead",
"type": "customer",
"notes": "Met at trade fair"
}'
Deals
The pipeline — one row per opportunity, moving through stages. Non-admin agents only see deals assigned to them.
| Method | Path | Description |
|---|---|---|
| GET | /deals | List deals (role-scoped) |
| POST | /deals | Create a deal |
| PUT | /deals/:id | Update a deal |
| DELETE | /deals/:id | Delete a deal |
Create a deal
curl -X POST https://crm.aozo.in/api/deals \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"orgId": "org_123",
"title": "Acme Retail — annual contract",
"amount": 480000,
"stage": "negotiation",
"closeDate": "2026-09-30",
"companyName": "Acme Retail",
"contactEmail": "priya@example.com",
"assignedToId": "user_45"
}'
Leads
Top-of-funnel prospects, with automatic scoring and a webhook intake for external forms.
| Method | Path | Description |
|---|---|---|
| GET | /leads | List leads (role-scoped) |
| POST | /leads | Create a lead — auto-computes score & probability |
| POST | /leads/webhook | Public intake endpoint — no auth header required |
| PUT | /leads/:id | Update a lead — recalculates score |
| GET | /leads/:id/activities | Timeline of activity on a lead |
| POST | /leads/:id/activities | Add an activity note |
| POST | /leads/:id/send-message | Generate a WhatsApp/SMS deep link to the lead |
| DELETE | /leads/:id | Delete a lead |
🔓 The webhook endpoint skips normal auth on purpose
POST /api/leads/webhook is built for Zapier, web forms and other external senders that can't do a Bearer/JWT handshake. Instead, authenticate with an x-api-key header, or simply pass orgId in the body.
curl -X POST https://crm.aozo.in/api/leads/webhook \
-H "x-api-key: aozo_your_key" \
-H "Content-Type: application/json" \
-d '{
"orgId": "org_123",
"name": "Rahul Verma",
"email": "rahul@example.com",
"phone": "+91 90000 11122",
"company": "Verma Traders",
"value": 25000,
"source": "website-form"
}'
Tasks
| Method | Path | Description |
|---|---|---|
| GET | /tasks | List tasks |
| POST | /tasks | Create a task (title, dueDate, priority, assignedToId) |
| PUT | /tasks/:id | Update a task |
| DELETE | /tasks/:id | Delete a task |
Analytics
| Method | Path | Description |
|---|---|---|
| GET | /analytics | Dashboard summary — counts, pipeline value, won revenue, deals by stage |
| GET | /analytics/leaderboard | Per-agent leaderboard — won amount vs. target |
Organization
Workspace settings, members and API keys. Most write actions require workspace ADMIN.
| Method | Path | Description |
|---|---|---|
| GET | /organization | List orgs you belong to (syncs from Central Auth first) |
| POST | /organization | Create an org (also registers it in Central Auth) |
| GET | /organization/:id | Org details |
| PUT | /organization/:id | Update org profile — ADMIN only |
| GET | /organization/:id/members | List members |
| POST | /organization/:id/members | Invite a member — ADMIN only, seat-limited |
| GET | /organization/:id/apikeys | List API keys — ADMIN only |
| POST | /organization/:id/apikeys | Generate a new API key — ADMIN only |