Create Deal
Create a new deal in the pipeline.
POST
/v2/pipeline
Request Body
Writeable fields
| Field | Type | Status | Format | Notes |
|---|---|---|---|---|
| data | object | required | - | - |
| data.user_id | uuid | optional | uuid | Defaults to the caller's user_id unless provided |
| data.deal_size | number | optional | - | Monetary value (number only, no symbols). |
| data.stage | enum QualificationProposalNegotiationInterestedVerbalDiscoveryWonLost | required | - | Stage label |
| data.open_date | ISO 8601 datetime | optional | date-time | ISO datetime when the deal opened. Defaults to now if omitted. |
| data.close_date | ISO 8601 datetime | optional | date-time | ISO datetime if already closed. Leave null for open deals. |
| data.company | string | required | - | Company associated with the deal. |
| data.notes | string | optional | - | Freeform notes. |
| data.contact_email | string | optional | Email for the primary |
cURl example
curl -X POST 'https://lunarsend.com/api/v2/pipeline' \
-H 'x-api-key: $LUNARSEND_API_KEY' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data-raw '{
"stage": "Qualification",
"deal_size": 12000,
"company": "A-B Logistics",
"primary_contact": "150c081d-5d5f-401d-abd1-727c35222054",
"contact_email": "ops@ABLogistics.com",
"notes": "Kickoff pending legal review."
}'Response
[
{
status: "success",
data: {
id: "7b1b0e42-1f2a-4e1e-8e5d-1f6a7b0c9d21",
user_id: "77f463d7-4107-1957-8b71-ab03acc319a2",
deal_size: 12000,
primary_contact: "150c081d-5d5f-401d-abd1-727c35222054",
stage: "Qualification",
open_date: "2025-10-04T14:25:11.000Z",
close_date: null,
owner: "John",
company: "A-B Logistics",
notes: "Kickoff pending legal review.",
contact_email: "ops@ABLogistics.com",
created_at: "2025-10-04T14:25:11.000Z",
},
},
]Response Fields
| Field | Type | Status | Format | Notes |
|---|---|---|---|---|
| status | enum successerror | read-only optional | - | - |
| error | string - Error description (only present on error) | read-only optional | - | - |
| data | object | required | - | - |
| data.id | uuid | read-only optional nullable | uuid | Server-assigned UUID. |
| data.user_id | uuid | optional nullable | uuid | Defaults to the caller's user_id unless provided |
| data.deal_size | number | optional nullable | - | Monetary value (number only, no symbols). |
| data.primary_contact | uuid | read-only optional nullable | uuid | UUID of the primary contact, this is auto assigned if contact email is found in contacts |
| data.stage | enum QualificationProposalNegotiationInterestedVerbalDiscoveryWonLost | required | - | Stage label |
| data.open_date | ISO 8601 datetime | optional nullable | date-time | ISO datetime when the deal opened. Defaults to now if omitted. |
| data.close_date | ISO 8601 datetime | optional nullable | date-time | ISO datetime if already closed. Leave null for open deals. |
| data.owner | string | read-only optional | - | Resolved to the caller's display name. |
| data.company | string | required | - | Company associated with the deal. |
| data.notes | string | optional nullable | - | Freeform notes. |
| data.contact_email | string | optional nullable | Email for the primary | |
| data.created_at | ISO 8601 datetime | read-only optional nullable | date-time | Server-assigned creation time. |