Skip to content

Invoices & Estimates

Invoices bill a contact for payment; estimates quote work that a contact can accept and turn into an invoice. Both live in your SMBcrm account and are managed through the same API.

Base URL: https://services.smbcrm.com · Version header: v3 · Scopes: invoices.readonly, invoices.write, invoices/estimate.readonly, invoices/estimate.write. See Scopes.

GET/invoices/

List invoices in your account.

scope invoices.readonlyauth Location token or PIT

altId, altType, limit, and offset are required. Filter with status, contactId, and startAt/endAt.

Terminal window
curl "https://services.smbcrm.com/invoices/?altId=<location_id>&altType=location&limit=20&offset=0" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"invoices": [
{
"_id": "<invoice_id>",
"status": "sent",
"name": "July retainer",
"invoiceNumber": 1042,
"currency": "USD",
"total": 500,
"amountDue": 500,
"contactDetails": { "id": "<contact_id>", "name": "Jordan Lee", "email": "[email protected]" },
"issueDate": "2026-07-08",
"dueDate": "2026-07-22"
}
],
"total": 1
}

Invoice status is one of draft, sent, payment_processing, paid, void, or partially_paid.

GET/invoices/{invoiceId}

Get a single invoice by ID.

scope invoices.readonlyauth Location token or PIT
Terminal window
curl "https://services.smbcrm.com/invoices/<invoice_id>?altId=<location_id>&altType=location" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
POST/invoices/

Create an invoice.

scope invoices.writeauth Location token or PIT
Terminal window
curl -X POST https://services.smbcrm.com/invoices/ \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"altId": "<location_id>",
"altType": "location",
"name": "July retainer",
"currency": "USD",
"contactDetails": { "id": "<contact_id>", "name": "Jordan Lee", "email": "[email protected]" },
"invoiceItems": [
{ "name": "Consulting", "currency": "USD", "amount": 500, "qty": 1 }
],
"issueDate": "2026-07-08",
"dueDate": "2026-07-22"
}'
POST/invoices/{invoiceId}/send

Send an invoice to the contact.

scope invoices.writeauth Location token or PIT

action selects how it’s delivered: email, sms, sms_and_email, or send_manually.

Terminal window
curl -X POST https://services.smbcrm.com/invoices/<invoice_id>/send \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"altId": "<location_id>",
"altType": "location",
"userId": "<user_id>",
"action": "email",
"liveMode": true
}'
GET/invoices/estimate/list

List estimates in your account.

scope invoices/estimate.readonlyauth Location token or PIT

altId, altType, limit, and offset are required. Filter with status (all, draft, sent, accepted, declined, invoiced, viewed) and contactId.

Terminal window
curl "https://services.smbcrm.com/invoices/estimate/list?altId=<location_id>&altType=location&limit=20&offset=0" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"estimates": [
{ "_id": "<estimate_id>", "name": "Website build", "total": 4000, "currency": "USD" }
],
"total": 1
}
POST/invoices/estimate

Create an estimate.

scope invoices/estimate.writeauth Location token or PIT
Terminal window
curl -X POST https://services.smbcrm.com/invoices/estimate \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"altId": "<location_id>",
"altType": "location",
"name": "Website build",
"currency": "USD",
"contactDetails": { "id": "<contact_id>", "name": "Jordan Lee", "phoneNo": "+15125550142", "email": "[email protected]" },
"items": [
{ "name": "Design & build", "currency": "USD", "amount": 4000, "qty": 1 }
],
"discount": { "value": 0, "type": "percentage" }
}'
POST/invoices/estimate/{estimateId}/invoice

Convert an accepted estimate into an invoice.

scope invoices/estimate.writeauth Location token or PIT