API reference

Proposals

Proposals and quotes, sending them, and turning accepted ones into projects.

Proposal templates

GET /proposals/templates Leads, deals and proposals: read

Example

curl https://app.msmepulse.com/api/v1/proposals/templates \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN"

Answers 200 with the same data the MSMEPulse web app shows for it.

List proposals

GET /proposals Leads, deals and proposals: read

Example

curl https://app.msmepulse.com/api/v1/proposals \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN"

Answers 200 with the same data the MSMEPulse web app shows for it.

Create a draft proposal

POST /proposals Leads, deals and proposals: read and write

Request body

FieldTypeRequiredNotes
clientIdstringYesat least 1 characters
titlestringYes3–150 characters
issueDatestringYesformat ^\d{4}-\d{2}-\d{2}$
validUntilstringYesformat ^\d{4}-\d{2}-\d{2}$
currency"INR" | "SGD" | "USD" | "EUR" | "GBP" | "AED" | "AUD" | "MYR" | "CAD" | "CHF" | "HKD" | "NZD"Yes
exchangeRatenumber or null
introstringup to 20000 characters
termsstringup to 20000 characters
linesarray of objectYesat most 100 items
lines[].descriptionstringYes1–1000 characters
lines[].quantitynumberYes0.001 to 1000000
lines[].unitstringup to 20 characters
lines[].unitPriceintegerYes0 to …
lines[].discountinteger0 to … · default 0
lines[].hsnSacstringup to 8 characters
lines[].rateBpsinteger0 to … · default 0
lines[].treatment"taxable" | "exempt" | "nil" | "non_gst"default "taxable"
lines[].sgTaxCode"SR" | "ZR" | "ES" | "OS"default "SR"
lines[].catalogueItemIdstring or null
templateIdstring or null
dealIdstring or null

Example

curl -X POST https://app.msmepulse.com/api/v1/proposals \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"clientId":"65f0c2a1b4e8d9f0a1b2c3d4","title":"Website rebuild","issueDate":"2026-10-26","validUntil":"2026-10-26","currency":"INR","lines":[{"description":"Rollout support","quantity":1,"unitPrice":100000}]}'

Answers 200 with the same data the MSMEPulse web app shows for it.

Work out a proposal's totals without saving it

POST /proposals/preview Leads, deals and proposals: read and write

Request body

FieldTypeRequiredNotes
clientIdstringYesat least 1 characters
titlestringYes3–150 characters
issueDatestringYesformat ^\d{4}-\d{2}-\d{2}$
validUntilstringYesformat ^\d{4}-\d{2}-\d{2}$
currency"INR" | "SGD" | "USD" | "EUR" | "GBP" | "AED" | "AUD" | "MYR" | "CAD" | "CHF" | "HKD" | "NZD"Yes
exchangeRatenumber or null
introstringup to 20000 characters
termsstringup to 20000 characters
linesarray of objectYesat most 100 items
lines[].descriptionstringYes1–1000 characters
lines[].quantitynumberYes0.001 to 1000000
lines[].unitstringup to 20 characters
lines[].unitPriceintegerYes0 to …
lines[].discountinteger0 to … · default 0
lines[].hsnSacstringup to 8 characters
lines[].rateBpsinteger0 to … · default 0
lines[].treatment"taxable" | "exempt" | "nil" | "non_gst"default "taxable"
lines[].sgTaxCode"SR" | "ZR" | "ES" | "OS"default "SR"
lines[].catalogueItemIdstring or null
templateIdstring or null
dealIdstring or null

Example

curl -X POST https://app.msmepulse.com/api/v1/proposals/preview \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"clientId":"65f0c2a1b4e8d9f0a1b2c3d4","title":"Website rebuild","issueDate":"2026-10-26","validUntil":"2026-10-26","currency":"INR","lines":[{"description":"Rollout support","quantity":1,"unitPrice":100000}]}'

Answers 200 with the same data the MSMEPulse web app shows for it.

Get a proposal

GET /proposals/{id} Leads, deals and proposals: read

id

Example

curl https://app.msmepulse.com/api/v1/proposals/{id} \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN"

Answers 200 with the same data the MSMEPulse web app shows for it.

Replace a draft proposal

PUT /proposals/{id} Leads, deals and proposals: read and write

id

Request body

FieldTypeRequiredNotes
clientIdstringYesat least 1 characters
titlestringYes3–150 characters
issueDatestringYesformat ^\d{4}-\d{2}-\d{2}$
validUntilstringYesformat ^\d{4}-\d{2}-\d{2}$
currency"INR" | "SGD" | "USD" | "EUR" | "GBP" | "AED" | "AUD" | "MYR" | "CAD" | "CHF" | "HKD" | "NZD"Yes
exchangeRatenumber or null
introstringup to 20000 characters
termsstringup to 20000 characters
linesarray of objectYesat most 100 items
lines[].descriptionstringYes1–1000 characters
lines[].quantitynumberYes0.001 to 1000000
lines[].unitstringup to 20 characters
lines[].unitPriceintegerYes0 to …
lines[].discountinteger0 to … · default 0
lines[].hsnSacstringup to 8 characters
lines[].rateBpsinteger0 to … · default 0
lines[].treatment"taxable" | "exempt" | "nil" | "non_gst"default "taxable"
lines[].sgTaxCode"SR" | "ZR" | "ES" | "OS"default "SR"
lines[].catalogueItemIdstring or null
templateIdstring or null
dealIdstring or null

Example

curl -X PUT https://app.msmepulse.com/api/v1/proposals/{id} \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"clientId":"65f0c2a1b4e8d9f0a1b2c3d4","title":"Website rebuild","issueDate":"2026-10-26","validUntil":"2026-10-26","currency":"INR","lines":[{"description":"Rollout support","quantity":1,"unitPrice":100000}]}'

Answers 200 with the same data the MSMEPulse web app shows for it.

Delete a draft proposal

DELETE /proposals/{id} Leads, deals and proposals: read and write

id

Example

curl -X DELETE https://app.msmepulse.com/api/v1/proposals/{id} \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN"

Answers 200 with the same data the MSMEPulse web app shows for it.

Copy a proposal

POST /proposals/{id}/duplicate Leads, deals and proposals: read and write

id

Example

curl -X POST https://app.msmepulse.com/api/v1/proposals/{id}/duplicate \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN"

Answers 200 with the same data the MSMEPulse web app shows for it.

Email a proposal for e-signature

POST /proposals/{id}/send Leads, deals and proposals: read and write

id

Request body

FieldTypeRequiredNotes
tostringYesan email address
namestringup to 80 characters
messagestringup to 2000 characters

Example

curl -X POST https://app.msmepulse.com/api/v1/proposals/{id}/send \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"to":"someone@example.com"}'

Answers 200 with the same data the MSMEPulse web app shows for it.

Start a new revision of a sent proposal

POST /proposals/{id}/revise Leads, deals and proposals: read and write

id

Example

curl -X POST https://app.msmepulse.com/api/v1/proposals/{id}/revise \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN"

Answers 200 with the same data the MSMEPulse web app shows for it.

Turn an accepted proposal into a project

POST /proposals/{id}/convert Projects and tasks: read and write

id

Request body

FieldTypeRequiredNotes
namestringYes2–120 characters
as"milestones" | "budget"default "milestones"
startDatestring or nullformat ^\d{4}-\d{2}-\d{2}$

Example

curl -X POST https://app.msmepulse.com/api/v1/proposals/{id}/convert \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Nova Retail Pvt Ltd"}'

Answers 200 with the same data the MSMEPulse web app shows for it.

Download a proposal as a PDF

GET /proposals/{id}/pdf Leads, deals and proposals: read

id

Example

curl https://app.msmepulse.com/api/v1/proposals/{id}/pdf \
  -H "Authorization: Bearer $MSMEPULSE_TOKEN"

Answers 200 with the same data the MSMEPulse web app shows for it.