Quotes

Statuses: DRAFTSENTACCEPTEDDECLINEDEXPIREDCONVERTED

A CONVERTED quote has been turned into an invoice and is read-only.

GETList quotes

GET/quotes
ParameterTypeDescription
pageintegerPage number (default: 1)
limitintegerItems per page, max 100 (default: 20)
searchstringSearch in quote number and title
statusstringFilter by status
customerIdstringFilter by customer ID
sortstringcreatedAt | -createdAt | validUntil | -validUntil
curl "https://paymavo.com/api/v1/quotes?status=ACCEPTED" \
  -H "Authorization: Bearer sk_live_xxx"

GETGet a quote

GET/quotes/{id}
curl https://paymavo.com/api/v1/quotes/clx456 \
  -H "Authorization: Bearer sk_live_xxx"

POSTCreate a quote

POST/quotes
ParameterTypeDescription
customerId*stringCustomer ID
title*stringQuote title (max 200 chars)
items*arrayLine items — each with description, quantity, unitPrice (cents)
descriptionstringQuote description
validUntildate-timeValidity date (defaults to 30 days from now)
termsstringTerms and conditions
notesstringInternal notes
discountTypestringpercentage | fixed
discountValueintegerDiscount amount
curl -X POST https://paymavo.com/api/v1/quotes \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "clx...",
    "title": "Brand redesign proposal",
    "validUntil": "2026-04-01T00:00:00.000Z",
    "items": [
      { "description": "Discovery & strategy", "quantity": 1, "unitPrice": 150000 },
      { "description": "Design system", "quantity": 1, "unitPrice": 350000 }
    ]
  }'

PATCHUpdate a quote

PATCH/quotes/{id}

Cannot update a CONVERTED quote — returns 409.

curl -X PATCH https://paymavo.com/api/v1/quotes/clx456 \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "validUntil": "2026-05-01T00:00:00.000Z" }'

DELETEDelete a quote

DELETE/quotes/{id}

Cannot delete a CONVERTED quote.

curl -X DELETE https://paymavo.com/api/v1/quotes/clx456 \
  -H "Authorization: Bearer sk_live_xxx"

POSTSend a quote by email

POST/quotes/{id}/send

Generates the PDF and emails it to the customer (or an override email). Sets status to SENT.

curl -X POST https://paymavo.com/api/v1/quotes/clx456/send \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "email": "client@example.com" }'

POSTConvert a quote to an invoice

POST/quotes/{id}/convert-to-invoice

Creates an invoice from the quote, marks the quote as CONVERTED. Returns 409 if already converted.

curl -X POST https://paymavo.com/api/v1/quotes/clx456/convert-to-invoice \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "dueDate": "2026-05-01", "paymentMethod": "ONLINE_PAYMENT" }'

GETGet quote PDF

GET/quotes/{id}/pdf

Returns the Cloudinary URL of the quote PDF. Generates it on-the-fly if not yet created.

curl "https://paymavo.com/api/v1/quotes/clx456/pdf" \
  -H "Authorization: Bearer sk_live_xxx"