List vendors
GET /expenses/vendors Expenses and bills: read
Example
curl https://app.msmepulse.com/api/v1/expenses/vendors \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Add a vendor
POST /expenses/vendors Expenses and bills: read and write
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | 2–150 characters |
email | "" or string | ||
phone | string | up to 30 characters | |
country | string | default "IN" | |
state | string | up to 2 characters | |
gstin | "" or string | ||
pan | "" or string | ||
udyamNumber | "" or string | ||
msmeCategory | "none" | "micro" | "small" | "medium" | default "none" | |
uen | string | up to 20 characters | |
gstRegistered | boolean | default false | |
agreedPaymentDays | integer or null | 0 to 365 | |
defaultCategory | string | up to 30 characters | |
notes | string | up to 1000 characters |
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/vendors \
-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.
Update a vendor
PUT /expenses/vendors/{id} Expenses and bills: read and write
id
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | 2–150 characters |
email | "" or string | ||
phone | string | up to 30 characters | |
country | string | default "IN" | |
state | string | up to 2 characters | |
gstin | "" or string | ||
pan | "" or string | ||
udyamNumber | "" or string | ||
msmeCategory | "none" | "micro" | "small" | "medium" | default "none" | |
uen | string | up to 20 characters | |
gstRegistered | boolean | default false | |
agreedPaymentDays | integer or null | 0 to 365 | |
defaultCategory | string | up to 30 characters | |
notes | string | up to 1000 characters |
Example
curl -X PUT https://app.msmepulse.com/api/v1/expenses/vendors/{id} \
-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.
Archive a vendor
POST /expenses/vendors/{id}/archive Expenses and bills: read and write
id
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/vendors/{id}/archive \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
List expenses (view=company or mine)
GET /expenses Expenses and bills: read
Example
curl https://app.msmepulse.com/api/v1/expenses \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Record an expense
POST /expenses Expenses and bills: read and write
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
date | string | Yes | format ^\d{4}-\d{2}-\d{2}$ |
category | string | Yes | at least 1 characters |
description | string | Yes | 2–300 characters |
vendorId | string or null | ||
vendorName | string | up to 150 characters | |
vendorGstin | "" or string | ||
projectId | string or null | ||
billable | boolean | default false | |
markupBps | integer | 0 to 10000 · default 0 | |
currency | string | Yes | |
amount | integer | Yes | 1 to … |
taxRateBps | integer | 0 to 2800 · default 0 | |
sgTaxCode | "TX" | "IM" | "ZP" | "EP" | "OP" | "NR" | default "OP" | |
taxOverride | integer or null | 0 to … | |
paidBy | "company" | "employee" | default "company" | |
paymentMethod | string | up to 30 characters | |
reference | string | up to 80 characters |
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"date":"2026-10-26","category":"category value","description":"Rollout support","currency":"INR","amount":100000}'
Answers 200 with the same data the MSMEPulse web app shows for it.
Get an expense
GET /expenses/item/{id} Expenses and bills: read
id
Example
curl https://app.msmepulse.com/api/v1/expenses/item/{id} \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Update an expense
PUT /expenses/item/{id} Expenses and bills: read and write
id
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
date | string | Yes | format ^\d{4}-\d{2}-\d{2}$ |
category | string | Yes | at least 1 characters |
description | string | Yes | 2–300 characters |
vendorId | string or null | ||
vendorName | string | up to 150 characters | |
vendorGstin | "" or string | ||
projectId | string or null | ||
billable | boolean | default false | |
markupBps | integer | 0 to 10000 · default 0 | |
currency | string | Yes | |
amount | integer | Yes | 1 to … |
taxRateBps | integer | 0 to 2800 · default 0 | |
sgTaxCode | "TX" | "IM" | "ZP" | "EP" | "OP" | "NR" | default "OP" | |
taxOverride | integer or null | 0 to … | |
paidBy | "company" | "employee" | default "company" | |
paymentMethod | string | up to 30 characters | |
reference | string | up to 80 characters |
Example
curl -X PUT https://app.msmepulse.com/api/v1/expenses/item/{id} \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"date":"2026-10-26","category":"category value","description":"Rollout support","currency":"INR","amount":100000}'
Answers 200 with the same data the MSMEPulse web app shows for it.
Delete a draft expense
DELETE /expenses/item/{id} Expenses and bills: read and write
id
Example
curl -X DELETE https://app.msmepulse.com/api/v1/expenses/item/{id} \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Submit a claim for approval
POST /expenses/item/{id}/submit Expenses and bills: read and write
id
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/item/{id}/submit \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Attach a receipt
POST /expenses/item/{id}/receipts Expenses and bills: read and write
id
Request body
A file upload (multipart/form-data) in the field file.
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/item/{id}/receipts \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-F "file=@receipt.pdf"
Answers 200 with the same data the MSMEPulse web app shows for it.
Download a receipt
GET /expenses/attachments/{aid} Expenses and bills: read
aid
Example
curl https://app.msmepulse.com/api/v1/expenses/attachments/{aid} \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
List vendor bills
GET /expenses/bills Expenses and bills: read
Example
curl https://app.msmepulse.com/api/v1/expenses/bills \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Record a vendor bill
POST /expenses/bills Expenses and bills: read and write
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
vendorId | string | Yes | at least 1 characters |
billNumber | string | Yes | 1–40 characters |
billDate | string | Yes | format ^\d{4}-\d{2}-\d{2}$ |
acceptedOn | string or null | format ^\d{4}-\d{2}-\d{2}$ | |
dueDate | string or null | format ^\d{4}-\d{2}-\d{2}$ | |
currency | string | Yes | |
lines | array of object | Yes | at most 100 items |
lines[].description | string | Yes | 1–300 characters |
lines[].category | string | at least 1 characters · default "other" | |
lines[].amount | integer | Yes | 0 to … |
lines[].taxRateBps | integer | 0 to 2800 · default 0 | |
lines[].sgTaxCode | "TX" | "IM" | "ZP" | "EP" | "OP" | "NR" | default "TX" | |
lines[].projectId | string or null | ||
notes | string | up to 1000 characters |
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/bills \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"vendorId":"65f0c2a1b4e8d9f0a1b2c3d4","billNumber":"billNumber value","billDate":"2026-10-26","currency":"INR","lines":[{"description":"Rollout support","amount":100000}]}'
Answers 200 with the same data the MSMEPulse web app shows for it.
Get a vendor bill
GET /expenses/bills/{id} Expenses and bills: read
id
Example
curl https://app.msmepulse.com/api/v1/expenses/bills/{id} \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Update a vendor bill
PUT /expenses/bills/{id} Expenses and bills: read and write
id
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
vendorId | string | Yes | at least 1 characters |
billNumber | string | Yes | 1–40 characters |
billDate | string | Yes | format ^\d{4}-\d{2}-\d{2}$ |
acceptedOn | string or null | format ^\d{4}-\d{2}-\d{2}$ | |
dueDate | string or null | format ^\d{4}-\d{2}-\d{2}$ | |
currency | string | Yes | |
lines | array of object | Yes | at most 100 items |
lines[].description | string | Yes | 1–300 characters |
lines[].category | string | at least 1 characters · default "other" | |
lines[].amount | integer | Yes | 0 to … |
lines[].taxRateBps | integer | 0 to 2800 · default 0 | |
lines[].sgTaxCode | "TX" | "IM" | "ZP" | "EP" | "OP" | "NR" | default "TX" | |
lines[].projectId | string or null | ||
notes | string | up to 1000 characters |
Example
curl -X PUT https://app.msmepulse.com/api/v1/expenses/bills/{id} \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"vendorId":"65f0c2a1b4e8d9f0a1b2c3d4","billNumber":"billNumber value","billDate":"2026-10-26","currency":"INR","lines":[{"description":"Rollout support","amount":100000}]}'
Answers 200 with the same data the MSMEPulse web app shows for it.
Void a vendor bill
POST /expenses/bills/{id}/void Expenses and bills: read and write
id
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
reason | string | Yes | 3–300 characters |
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/bills/{id}/void \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason":"Duplicate charge"}'
Answers 200 with the same data the MSMEPulse web app shows for it.
Record a payment to a vendor (with TDS in India)
POST /expenses/bills/{id}/payments Expenses and bills: read and write
id
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
date | string | Yes | format ^\d{4}-\d{2}-\d{2}$ |
amount | integer | Yes | 0 to … |
tdsAmount | integer | 0 to … · default 0 | |
tdsSection | string | up to 20 characters | |
method | "bank_transfer" | "upi" | "paynow" | "cheque" | "cash" | "card" | "other" | Yes | |
reference | string | up to 80 characters |
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/bills/{id}/payments \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"date":"2026-10-26","amount":100000,"method":"bank_transfer"}'
Answers 200 with the same data the MSMEPulse web app shows for it.
Remove a vendor payment
DELETE /expenses/bills/{id}/payments/{pid} Expenses and bills: read and write
id · pid
Example
curl -X DELETE https://app.msmepulse.com/api/v1/expenses/bills/{id}/payments/{pid} \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Attach the bill document
POST /expenses/bills/{id}/receipts Expenses and bills: read and write
id
Request body
A file upload (multipart/form-data) in the field file.
Example
curl -X POST https://app.msmepulse.com/api/v1/expenses/bills/{id}/receipts \
-H "Authorization: Bearer $MSMEPULSE_TOKEN" \
-F "file=@receipt.pdf"
Answers 200 with the same data the MSMEPulse web app shows for it.
Input tax (GST paid on purchases) for a period
GET /expenses/reports/input-tax Expenses and bills: read
Example
curl https://app.msmepulse.com/api/v1/expenses/reports/input-tax \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
MSMED Act: payments due to micro and small suppliers
GET /expenses/reports/msmed Expenses and bills: read
Example
curl https://app.msmepulse.com/api/v1/expenses/reports/msmed \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.
Spending by category and project
GET /expenses/reports/summary Expenses and bills: read
Example
curl https://app.msmepulse.com/api/v1/expenses/reports/summary \
-H "Authorization: Bearer $MSMEPULSE_TOKEN"
Answers 200 with the same data the MSMEPulse web app shows for it.