Quotation API

Description Method URL
Get all quotations GET /api/v1/quotations/
Get one quotation GET /api/v1/quotations/{id}
Delete quotation DELETE /api/v1/quotations/{id}
Update quotation PUT /api/v1/quotations/{id}

All attributes used for quotations

Attribute Type Note
idread only integer Unique quotation id
actionrequired string(6) Define the action what we should do with your request.
'send': send the quotation
'save': save the quotation as a draft
sendmethod string(11) How to send the quotation to the receiver. Required when you use the action 'send'
'mail': print the quotation yourself. We'll send you the quotation id so you can execute a command to retrieve the PDF if you need so.
'email': send quotations through e-mail. It will be sent immediately.
'printcenter': send quotation through the printcenter.
savename string(40) Unique name for the quotation for your own references.
overwrite_if_exist boolean If a savename already exists, it will not be overwritten unless this attribute is set to 'true'. Default is 'false'.
quotationreference string(40) A unique public reference for the quotation, will be placed on the PDF
reference object Contains reference lines on the quotation. 'line1', 'line2', 'line3'. All are strings.
lines array All quotation lines on the quotation
Per line:
'discount_pct' (discount percentage)
'tax_country' (boolean, input only)*
'linetotal' (read only)

if you want to use a foreign tax for this line, set this to true. Read more

To use text lines on an quotation, only supply 'description' and do not use the other fields. Check the example below for more info.
profile id The ID of the used profile. Default is default profile.
profile_nameread only string The name of the used profile
category id The ID of the category. Use the categories api to retrieve a list of categories.
category_nameread only string The name of the used category
discounttype string(10) The type of discount: 'amount' or 'percentage'
discount float If 'discounttype' is amount, then this is the amount of discount set on the quotation. If 'discounttype' is set to 'percentage', this is the discount percentage set.
paymentcondition string The payment condition set on the quotation. Default is the payment condition set in the application.
quotationperiod integer Term of payment in days. Default is the payment period set in your settings
showtotals boolean If you want to show the totals of all the quotation lines including tax on the PDF.
date date The date the quotation is sent or saved
datedueread only date The due date. This is the quotation send date + the quotation period
notes string An internal note for this quotation
totalintaxread only float The total of the quotation including the tax
convert_prices_to_euro boolean When this option is set to 'true' we will convert all the given prices on the quotation to euro, based on the currency set in the selected client and the quotation date (to retrieve the current exchange rate).
sentread only boolean False = quotation not sent to customer, True = quotation sent to customer
customstatus string If there is a custom status set. Possible values are: 'progress', 'completed', 'billable', 'declined', 'clear'. Clear will remove the custom status. Only available for sent quotations.
approved array Contains information when a quotation is approved. These items are set when the quotation is approved: 'name', 'date', 'ip', 'comments'. Only available for sent quotations.
clientnrrequired integer Client number
contactread only string(50)
companyread only string(50)
addressread only string(50)
zipcoderead only string(7)
cityread only string(50)
countryread only integer or string Country id. You can get a list of country id's with the function api/v1/countrylist. When creating or updating a client, you can supply a country id or a country name. We'll then try to find the id of the country you supplied.
phoneread only string(13)
mobileread only string(13)
emailread only email
sign_urlread only url The url where the client can sign the quotation


Example 1 - create a new quotation

Create a new quotation and save a concept, so it is not sent to the recipient yet.

POST /api/v1/quotations/
  "clientnr": 1234,
  "reference": {
    "line1": "Soundboard Setup",
    "line2": "Thank you for the inquiry",
    "line3": "Please contact us if you have any questions."
  "lines": [
      "amount": 50,
      "amount_desc": "panels",
      "description": "Sound buttons",
      "tax_rate": 21,
      "price": 5.952
      "amount": 1,
      "amount_desc": "",
      "description": "Wooden case",
      "tax_rate": 21,
      "dicount_pct": 25,
      "price": 500
      "amount": 10,
      "amount_desc": "hours",
      "description": "Support",
      "tax_rate": 9,
      "price": 62.5
      "description": "Everything is still in stock."
  "discount": 10,
  "discounttype": "percentage",
  "quotationperiod": "30",
  "notes": "Pete, make sure you handle this quotation with priority. VIP client.",
  "action": "save",
  "savename": "SoundBoard 1234",
  "overwrite_if_exist": true

If you don't want to save, but send it immediately, use these parameters instead of action "save".

"action": "send",
"sendmethod": "email" // or mail or printcenter

Example 2 - send a quotation that is already saved as a concept

It is possible to send a quotation that is is not sent yet.

Possible sendmethods are: email, mail, or printcenter.

The quotation will receive a new ID after the PUT command. Read the new ID in the response.

PUT /api/v1/quotations/{id}
  "action": "send",
  "sendmethod": "email"

Example 3 - mark a quotation as approved

In this example, we will mark a sent quotation as approved. (This is not needed when the client had signed the quotation through the sign url.). You cannot approve a quotation that isn't sent yet.

PUT /api/v1/quotations/{id}
  "approved": {
    "name": "Johnny Bravo",
    "date": "2020-12-06",
    "comments": "Quotation looks okay. Make sure the wooden case is painted purple."

You can also remove an approval.

PUT /api/v1/quotations/{id}
  "approved": false

Example 4 - change the status of a quotation

There are a few custom statusses a quotation can have. To provide one, this is how you do it.

PUT /api/v1/quotations/{id}
  "customstatus": "declined"

Example 5 - delete a quotation

DELETE /api/v1/quotations/{id}