Pipeline CRM API
Manage your sales pipeline stages, contacts, and notes. Move contacts between stages and track your pipeline activity.
Stages
List Stages
/api/pipeline/stagesList all pipeline stages for the authenticated user, ordered by position.
curl --location --request GET 'http://outreach.weezly.com/api/pipeline/stages' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{
"stages": [
{ "id": "ps_001", "name": "Interested", "color": "#EF4444", "emoji": "🔥", "position": 0 },
{ "id": "ps_002", "name": "Meeting Booked", "color": "#3B82F6", "emoji": "📅", "position": 1 },
{ "id": "ps_003", "name": "Demo", "color": "#8B5CF6", "emoji": "🎯", "position": 2 },
{ "id": "ps_004", "name": "Won Deal", "color": "#22C55E", "emoji": "🏆", "position": 3 },
{ "id": "ps_005", "name": "Lost Deal", "color": "#6B7280", "emoji": "💀", "position": 4 }
]
}Create Stage
/api/pipeline/stagesCreate a new pipeline stage.
Request Body
| Parameter | Type | Description |
|---|---|---|
namerequired | string | Stage name (unique per user) |
color | string | Hex color code (default: #3B82F6) |
emoji | string | Emoji for the stage (default: 📋) |
position | number | Sort position (appended to end if omitted) |
curl --location --request POST 'http://outreach.weezly.com/api/pipeline/stages' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"name": "Negotiation",
"color": "#F59E0B",
"emoji": "🤝",
"position": 3
}'{
"stage": {
"id": "ps_006",
"name": "Negotiation",
"color": "#F59E0B",
"emoji": "🤝",
"position": 3,
"userId": "user_123",
"createdAt": "2026-06-07T10:00:00.000Z"
}
}Response Codes
| 201 | Stage created |
| 400 | Name is required |
| 409 | Stage with this name already exists |
Update Stage
/api/pipeline/stages/:idUpdate a pipeline stage's name, color, emoji, or position.
Request Body
| Parameter | Type | Description |
|---|---|---|
name | string | Stage name |
color | string | Hex color code |
emoji | string | Stage emoji |
position | number | Sort position |
curl --location --request PATCH 'http://outreach.weezly.com/api/pipeline/stages/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{
"stage": { "id": "ps_006", "name": "Final Negotiation", "color": "#F59E0B", "emoji": "🤝", "position": 3 }
}Delete Stage
/api/pipeline/stages/:idDelete a pipeline stage. Contacts in this stage are removed from the pipeline (not deleted).
curl --location --request DELETE 'http://outreach.weezly.com/api/pipeline/stages/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{ "ok": true }Response Codes
| 200 | Stage deleted |
| 404 | Stage not found |
Reorder Stages
/api/pipeline/stages/reorderReorder all stages by providing an ordered array of stage IDs.
Request Body
| Parameter | Type | Description |
|---|---|---|
stageIdsrequired | string[] | Ordered array of stage IDs |
curl --location --request PUT 'http://outreach.weezly.com/api/pipeline/stages/reorder' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"stageIds": [
"ps_004",
"ps_001",
"ps_002",
"ps_003",
"ps_005"
]
}'{ "ok": true }Contacts
List Contacts
/api/pipeline/contactsList all contacts in the pipeline, grouped by stage. Optionally filter by account.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
accountId | string | Filter by LinkedIn account ID (sender) |
stageId | string | Filter by stage ID |
curl --location --request GET 'http://outreach.weezly.com/api/pipeline/contacts' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{
"contacts": [
{
"id": "pc_001",
"providerContactId": "contact_abc123",
"contactName": "Sarah Chen",
"contactPhotoUrl": "https://media.licdn.com/...",
"chatId": "chat_xyz789",
"stageId": "ps_001",
"stage": { "id": "ps_001", "name": "Interested", "emoji": "🔥" },
"lastMessagePreview": "Thanks for connecting! I'd love to...",
"lastMessageAt": "2026-06-05T14:30:00.000Z",
"lastMessageIsSender": false,
"notes": [
{ "id": "cn_001", "content": "Interested in demo next week", "createdAt": "2026-06-05T15:00:00.000Z" }
],
"createdAt": "2026-06-03T08:00:00.000Z"
}
]
}Move Contact
/api/pipeline/contacts/:idMove a contact to a different pipeline stage. Set stageId to null to remove from pipeline.
Request Body
| Parameter | Type | Description |
|---|---|---|
stageIdrequired | string|null | Target stage ID, or null to remove from pipeline |
curl --location --request PATCH 'http://outreach.weezly.com/api/pipeline/contacts/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"stageId": "ps_002"
}'{
"contact": {
"id": "pc_001",
"stageId": "ps_002",
"stage": { "id": "ps_002", "name": "Meeting Booked", "emoji": "📅" }
}
}Add Contact to Pipeline
/api/pipeline/contactsAdd a contact to the pipeline. Uses the provider contact ID from your LinkedIn inbox.
Request Body
| Parameter | Type | Description |
|---|---|---|
providerContactIdrequired | string | Contact identifier from the inbox |
contactNamerequired | string | Contact display name |
contactPhotoUrl | string | Contact avatar URL |
chatId | string | Chat ID for the conversation |
stageIdrequired | string | Pipeline stage to place the contact in |
curl --location --request POST 'http://outreach.weezly.com/api/pipeline/contacts' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{
"contact": {
"id": "pc_new002",
"providerContactId": "contact_def456",
"contactName": "Marcus Johnson",
"stageId": "ps_001",
"createdAt": "2026-06-07T10:00:00.000Z"
}
}Response Codes
| 201 | Contact added to pipeline |
| 409 | Contact is already in the pipeline |
Remove Contact
/api/pipeline/contacts/:idRemove a contact from the pipeline entirely.
curl --location --request DELETE 'http://outreach.weezly.com/api/pipeline/contacts/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{ "ok": true }Contact Notes
List Notes
/api/pipeline/notesList notes for a specific contact.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
contactIdrequired | string | Provider contact ID |
curl --location --request GET 'http://outreach.weezly.com/api/pipeline/notes' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{
"notes": [
{
"id": "cn_001",
"providerContactId": "contact_abc123",
"content": "Interested in demo next week. Decision maker for their team of 15.",
"createdAt": "2026-06-05T15:00:00.000Z",
"updatedAt": "2026-06-05T15:00:00.000Z"
},
{
"id": "cn_002",
"providerContactId": "contact_abc123",
"content": "Follow up after July 1st — on vacation until then",
"createdAt": "2026-06-06T09:00:00.000Z",
"updatedAt": "2026-06-06T09:00:00.000Z"
}
]
}Create Note
/api/pipeline/notesAdd a note to a contact.
Request Body
| Parameter | Type | Description |
|---|---|---|
contactIdrequired | string | Provider contact ID |
contentrequired | string | Note text |
curl --location --request POST 'http://outreach.weezly.com/api/pipeline/notes' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"contactId": "contact_abc123",
"content": "Had a great call — sending proposal tomorrow"
}'{
"note": {
"id": "cn_003",
"providerContactId": "contact_abc123",
"content": "Had a great call — sending proposal tomorrow",
"createdAt": "2026-06-07T10:00:00.000Z"
}
}Update Note
/api/pipeline/notes/:idUpdate a note's content.
Request Body
| Parameter | Type | Description |
|---|---|---|
contentrequired | string | Updated note text |
curl --location --request PATCH 'http://outreach.weezly.com/api/pipeline/notes/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{
"note": { "id": "cn_003", "content": "Updated note content", "updatedAt": "2026-06-07T10:05:00.000Z" }
}Delete Note
/api/pipeline/notes/:idDelete a note.
curl --location --request DELETE 'http://outreach.weezly.com/api/pipeline/notes/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{ "ok": true }