Manage quotes
Learn how to manage quotes and change quotes statuses.
Update a quote
All newly created quotes start in the draft
status. You can edit draft quotes before issuing them to a counterpart.
To edit a draft quote, send a PATCH
request to the /receivables/{receivable_id}
endpoint with the updated fields in the request body. You can update counterpart data, quote memo, existing line items data, and other details.
curl -X PATCH 'https://api.sandbox.monite.com/v1/receivables/411dc6eb...6289b3' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"quote": {
"currency": "USD",
"counterpart_id": "782b6f0f-0177-475c-b1e4-98dc160a656f",
"contact_id": "796d1f1d-f345-4888-849c-6cbcfbd39982",
"entity_bank_account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
}'
When updating a quote's counterpart, you must also provide the new counterpart's contact_id
in the request body to update the counterpart_contact
object.
Update quote line items
You can modify a quote's line items to add, remove, or update the products and product details on the quote. To update a quote's line item, send a PUT
request to the /receivables/{receivable_id}/line_items
endpoint. In the request body, use the data
field to pecify an array of the quote's new line items.
curl -X PUT 'https://api.sandbox.monite.com/v1/receivables/411dc6eb...6289b3/line_items' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": [
{
"quantity": 2,
"product_id": "fb2cc78f-3396-42e1-a69f-04b1931e4a84",
"vat_rate_id": "8d4c2c10-f7d7-4d7c-a1f5-5f3a9d56371e",
"discount": {
"type": "amount",
"amount": 0
}
},
{
"quantity": 4,
"product_id": "d1bc6df0-1571-457c-8407-7cf42aceb5dd",
"vat_rate_id":"8d4c2c10-f7d7-4d7c-a1f5-5f3a9d56371e",
"discount": {
"type":"amount",
"amount":0
}
}
]
}'
A successful request overwrites the quote's existing line items and replaces them with the newly defined array of line item objects.
Preview a quote's email
After creating a quote, you can preview a quote's email before issuing it. This step can be used when troubleshooting email template layouts for a quote to ensure that the final presentation aligns with your template design. To preview a quote's template, make a POST
request to the /receivables/{receivable_id}/preview
endpoint as shown:
curl -X PUT 'https://api.sandbox.monite.com/v1/receivables/411dc6eb...6289b3/preview' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"subject_text": "New quote #{quote_number}",
"body_text": "Dear {contact_name},\n\nThank you for requesting a quote for your project. We are happy to provide you with our quote #{quote_number}!\n\nIf you have any questions, please dont hesitate to contact us at {entity_email}."
}
The subject_text
and body_text
fields are email template variables that represent the email subject and body. For more information, see Create and manage email templates.
Only quotes in the
draft
andissued
statuses can be previewed. Attempting to preview an invoice in any other status will return a409 Conflict
error.
Accept or decline a quote
If the customer accepts the quote, call POST /receivables/{quote_id}/accept
to mark the quote as accepted
:
curl -X POST 'https://api.sandbox.monite.com/v1/receivables/e9a25c...8c47/accept' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN'
If the customer declined the quote, call POST /receivables/{quote_id}/decline
to mark the quote as declined
. As a best practice, customers should provide a reason why they declined the quote. This reason can be specified in the comment
field in the request body. If no comment
is available, you can omit the request body.
curl -X POST 'https://api.sandbox.monite.com/v1/receivables/e9a25c...8c47/decline' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"comment": "Thanks for the quote, but we decided to go with another vendor."}'
Accept quotes using QR codes
The field quote_accept_page_url
defines a link to a page that can be accessed to accept or decline the quote. When quote_accept_page_url
is specified, the quote will include a QR code representing the provided URL. Monite's partners must implement and host this page on their side.
The default value of quote_accept_page_url
is https://monite.com
.
Create an invoice based on the quote
If the customer accepts the quote, you can create an invoice based on this quote after the goods or services have been delivered.
To create an invoice from a quote, call POST /receivables
and provide the quote ID in the based_on
field in the request body:
curl -X POST 'https://api.sandbox.monite.com/v1/receivables' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"type": "invoice",
"based_on": "e9a25ceb-003d-4c82-9e90-5d568ccd8c47"
}'
Tip
Invoices can be created not only from
accepted
quotes, but also from any other quote states, evendeclined
.
The request above creates a new draft invoice with a copy of the quote data (that is, with the same line items and counterpart). The ID and document number of the original quote are saved in the based_on
and based_on_document_id
properties, respectively:
{
"type": "invoice",
"id": "b21c80f9-18c0-40ce-be6b-89ddcc4d8ad9",
"created_at": "2022-05-19T06:04:29.499753+00:00",
"updated_at": "2022-05-19T06:04:30.976539+00:00",
"currency": "EUR",
"subtotal": 5000,
"total_amount": 5900,
"line_items": [ ... ],
...
"status": "draft",
"based_on": "e9a25ceb-003d-4c82-9e90-5d568ccd8c47",
"based_on_document_id": "#quote-00015",
"payment_terms": null
}
Next, update the created draft invoice and add other necessary information, such as:
payment_terms_id
- payment terms that define the invoice due date and, optionally, early payment discounts;entity_vat_id_id
- entity VAT ID to be displayed on the invoice;payment_reminder_id
- payment reminder configuration for this invoice. Required if entity settingreminder.enabled
istrue
.
For a complete list of fields that can be updated in draft invoices, refer to the description of the
PATCH /receivables/{receivable_id}
endpoint.
curl -X PATCH 'https://api.sandbox.monite.com/v1/receivables/b21c80...8ad9' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"invoice": {
"payment_terms_id": "411d9079-02af-476d-8723-4789882e01c3",
"entity_vat_id_id": "cb6c1c38-fdae-48f8-8e51-2d50d116b882"
}
}'
The invoice due date is calculated automatically based on the creation date and payment terms and is returned in the payment_terms.term_final.end_date
property in the response.
{
"type": "invoice",
"id": "b21c80f9-18c0-40ce-be6b-89ddcc4d8ad9",
"created_at": "2022-05-19T06:04:29.499753+00:00",
...
"payment_terms": {
"id": "411d9079-02af-476d-8723-4789882e01c3",
"name": "Net 30",
"description": "The payment is due within 30 days after the invoice issue date.",
"term_final": {
"number_of_days": 30,
"end_date": "2022-06-18"
}
}
}
Finally, you can download the invoice as PDF and send it to the customer via email.
Clone a quote
You can clone a quote of any status by sending a POST
request to the /receivables/{receivable_id}/clone
endpoint. Cloning a quote copies the updated entity and counterpart information associated with the quote.
curl -X POST 'https://api.sandbox.monite.com/v1/receivables/411dc6eb...6289b3/clone' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN'
A successful request returns an object with the newly cloned quote details.
All newly cloned quotes will have a
draft
status regardless of the status of the original quote they were cloned from. Therefore, all previously updated values related to issuing the original quote will be reset.
Quote expiration
After a quote's expiry_date
has passed, the quote status automatically becomes expired
. Expired quotes cannot be accepted or declined. If needed, you can create a fresh quote for the same counterpart.
Delete a quote
Draft quotes can be deleted by calling DELETE /receivables/{receivable_id}
. It's important to note that this action is irreversible, and once deleted, the quotes can no longer be accessed.
curl -X DELETE 'https://api.sandbox.monite.com/v1/receivables/411dc6eb...6289b3' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN'
Only quotes in the
draft
status can be deleted successfully. Attempting to delete a quote with any other status will throw an error.
List all quotes
To get a list of all quotes generated by an entity, call GET /receivables?type=quote
:
curl -X GET 'https://api.sandbox.monite.com/v1/receivables?type=quote' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN'
You can sort and filter the results by the amount, counterpart name, and other fields. For the full list of available sort and filter parameters, see the description of the GET /receivables
endpoint.
Some examples:
GET /receivables?type=quote&counterpart_name=Acme%20Inc.
- get all quotes issued to Acme Inc.GET /receivables?type=quote&amount__gte=15000
- get all quotes where the total amount is €150 or more.GET /receivables?type=quote&status__in=draft&status__in=issued
- get all draft and issued quotes.GET /receivables?type=quote&created_at__gte=2022-01-01T00%3A00%3A00
- get all quotes created on or after January 1, 2022.
Retrieve a quote
To get information about a specific quote, call GET /receivables/{receivable_id}
and provide the quote ID.
Find invoices created from a quote
To check if there are invoices created from a specific quote, call GET /receivables?based_on=QUOTE_ID
:
curl -X GET 'https://api.sandbox.monite.com/v1/receivables?based_on=e9a25ceb-003d-4c82-9e90-5d568ccd8c47' \
-H 'X-Monite-Version: 2023-06-04' \
-H 'X-Monite-Entity-Id: ENTITY_ID' \
-H 'Authorization: Bearer ACCESS_TOKEN'
The data
array in the response contains a list of related invoices, if any:
{
"data": [
{
"type": "invoice",
"id": "b21c80f9-18c0-40ce-be6b-89ddcc4d8ad9",
...
}
],
"prev_pagination_token": null,
"next_pagination_token": null
}
Updated 30 days ago