API Reference

Quotes

Create, send, convert, and manage quotes via the Rebill API. Includes the full quote object schema, status lifecycle, and actions for sending, reinstating, and converting.

Quotes let you send a priced proposal to a client before committing to an invoice. Once a client accepts a quote, you can convert it to an invoice in one step.

Quote statuses: draft · sent · accepted · declined · expired · converted

List quotes

GET /quote

Returns active quotes (draft and sent) by default.

Query parameterTypeDescription
include_acceptedbooleanInclude accepted quotes (default: false)
include_declinedbooleanInclude declined quotes (default: false)
include_expiredbooleanInclude expired quotes (default: false)
include_convertedbooleanInclude converted quotes (default: false)

Response:

{
  "quotes": [
    {
      "id": "q001",
      "number": "Q0001",
      "status": "sent",
      "client_id": "xyz789",
      "currency": "ZAR",
      "quote_date": "2026-03-01T00:00:00Z",
      "expiry_date": "2026-03-31T00:00:00Z",
      "amount": 150000,
      "items": [...]
    }
  ]
}

Get a quote

GET /quote/:id

Returns a single quote by ID.

Quote object

FieldTypeDescription
idstringUnique identifier
public_idstringShort ID used in public-facing quote links
createdtimestampWhen the quote was created
numberstringHuman-readable quote number (e.g. Q0001)
currencystringISO 4217 currency code
statusstringdraft · sent · accepted · declined · expired · converted
client_idstringID of the client this quote belongs to
quote_datetimestampQuote issue date
expiry_datetimestampDate after which the quote expires
accepted_attimestampWhen the client accepted (if applicable)
declined_attimestampWhen the client declined (if applicable)
amountintegerTotal quote amount in cents
itemsarrayLine items (same structure as invoice items)
notesstringNotes printed on the quote
bank_detailsstringBank details (optional)
deposit_typestringfixed or percentage (if applicable)
deposit_valueintegerCents (fixed) or basis points (percentage)
deposit_amountintegerCalculated deposit amount in cents
converted_to_invoice_idstringID of the resulting invoice if converted
custom_fieldsobjectKey-value pairs of custom fields
vat_enabledbooleanWhether VAT is shown on the quote

Create a quote

POST /quote
FieldRequiredTypeDescription
client_idYesstringID of an existing client
quote_dateYesdateQuote issue date
expiry_dateYesdateQuote expiry date
itemsYesarrayAt least one line item
currencyNostringISO 4217 code; defaults to your account currency
notesNostringNotes to print on the quote
bank_detailsNostringBank account details
deposit_typeNostringfixed or percentage
deposit_valueNointegerCents (fixed) or basis points (percentage)
custom_fieldsNoobjectAdditional key-value fields to display
curl -X POST https://rebill-api-896466068278.africa-south1.run.app/quote \
  -H "Authorization: Bearer sk_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "xyz789",
    "quote_date": "2026-03-15",
    "expiry_date": "2026-04-15",
    "items": [
      {
        "type": "service",
        "name": "Consulting",
        "description": "Strategy session (2 hours)",
        "quantity": 2,
        "unit_price": 75000,
        "vat_type": "exclusive",
        "vat_rate": 1500
      }
    ]
  }'

Response (201 Created):

{
  "id": "q001"
}

Update a quote

PUT /quote/:id

Updates an existing quote. Only draft quotes can be edited.

Delete a quote

DELETE /quote/:id

Permanently deletes a quote. Returns 200 OK on success.

Send a quote

POST /quote/:id/send

Sends the quote to the client by email and marks it as sent. Add ?whatsapp=true to send via WhatsApp instead.

# Send via email
curl -X POST https://rebill-api-896466068278.africa-south1.run.app/quote/q001/send \
  -H "Authorization: Bearer sk_your_secret_key"

# Send via WhatsApp
curl -X POST "https://rebill-api-896466068278.africa-south1.run.app/quote/q001/send?whatsapp=true" \
  -H "Authorization: Bearer sk_your_secret_key"

Mark a quote as sent

POST /quote/:id/mark_as_sent

Marks a draft quote as sent without sending any notification. Use this when you've shared the quote through another channel.

Convert a quote to an invoice

POST /quote/:id/convert

Converts an accepted quote into a draft invoice. The quote status changes to converted and the response contains the new invoice ID.

curl -X POST https://rebill-api-896466068278.africa-south1.run.app/quote/q001/convert \
  -H "Authorization: Bearer sk_your_secret_key"

Response:

{
  "id": "inv001"
}

Reinstate a quote

POST /quote/:id/reinstate

Reinstates a declined or expired quote back to sent status, allowing the client to reconsider.

Was this article helpful?