Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/visma-quotes-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Bookkeeping & Invoicing/eAccounting API V2 Quotes API
description: 'Visit our complete Bookkeeping & Invoicing/eAccounting API docs for how to get started, information about authentication, error handling, query customization and more.
✉ API Support'
version: v2
servers:
- url: https://eaccountingapi.vismaonline.com/v2/
tags:
- name: Quotes
description: 'A proposed price for products or services before an order.
Overview of Quotes Functionality: Quotes
___
Requires any of the following modules:
* sales_standard
Available in any of the following variants:
* Pro
* Standard
* Invoicing'
paths:
/quotes:
get:
tags:
- Quotes
summary: Get quotes
description: 'Get all quotes, or add query parameters to filter the results. The response will include a list of quotes with their details, such as customer information, rows, totals, and status.
___
Requires any of the following scopes:
* ea:sales
* ea:sales_readonly'
responses:
'200':
description: Request successful
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponseOfQuoteApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: getQuotes
x-operation-id-source: derived
post:
tags:
- Quotes
summary: Create a quote
description: 'Create a new quote.
___
Requires any of the following scopes:
* ea:sales'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteApi'
responses:
'201':
description: Quote created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: postQuotes
x-operation-id-source: derived
/quotes/{id}:
get:
tags:
- Quotes
summary: Get a specific quote based on id
description: 'Get a specific quote by its unique identifier. The response will include the quote details, such as customer information, rows, totals, and status.
___
Requires any of the following scopes:
* ea:sales
* ea:sales_readonly'
parameters:
- name: id
in: path
description: This represents the id of the quote you want to get
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Request successful
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: getQuotesById
x-operation-id-source: derived
put:
tags:
- Quotes
summary: Update a quote
description: 'Replace an existing quote''s data with the provided data.
___
Requires any of the following scopes:
* ea:sales'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteApi'
responses:
'200':
description: Quote updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: putQuotesById
x-operation-id-source: derived
delete:
tags:
- Quotes
summary: Delete a quote
description: 'Delete a quote.
___
Requires any of the following scopes:
* ea:sales'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Quote deleted successfully
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: deleteQuotesById
x-operation-id-source: derived
/quotes/{id}/accept:
put:
tags:
- Quotes
summary: Accepts an ongoing quote
description: 'Set the status of an ongoing quote to accepted.
___
Requires any of the following scopes:
* ea:sales'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Quote accepted successfully
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: putQuotesByIdAccept
x-operation-id-source: derived
/quotes/{id}/converttoorder:
post:
tags:
- Quotes
summary: Convert a quote to an order
description: 'Convert a quote to an order.
___
Requires any of the following scopes:
* ea:sales'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteConversionApi'
responses:
'200':
description: Quote converted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/OrderApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: postQuotesByIdConverttoorder
x-operation-id-source: derived
/quotes/{id}/previeworder:
post:
tags:
- Quotes
summary: Preview the result of converting a quote to an order
description: 'Preview the result of converting a quote to an order.
___
Requires any of the following scopes:
* ea:sales'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteConversionApi'
responses:
'200':
description: Request successful
content:
application/json:
schema:
$ref: '#/components/schemas/OrderApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: postQuotesByIdPrevieworder
x-operation-id-source: derived
/quotes/{id}/converttocustomerinvoice:
post:
tags:
- Quotes
summary: Convert a quote to a customer invoice
description: 'Convert a quote to an invoice.
___
Requires any of the following scopes:
* ea:sales'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteConversionApi'
responses:
'200':
description: Quote converted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerInvoiceApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: postQuotesByIdConverttocustomerinvoice
x-operation-id-source: derived
/quotes/{id}/print:
get:
tags:
- Quotes
summary: Print a quote as pdf
description: 'Print a quote as PDF.
___
Requires any of the following scopes:
* ea:sales
* ea:sales_readonly'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Request successful
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerInvoiceApi'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: getQuotesByIdPrint
x-operation-id-source: derived
/quotes/{id}/email:
post:
tags:
- Quotes
summary: Send a quote as email
description: 'Send a quote as email.
___
Requires any of the following scopes:
* ea:sales
* ea:sales_readonly'
parameters:
- name: id
in: path
description: This represents the Id of the quote.
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EmailApi'
responses:
'200':
description: Request successful
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/CommonExtendedBadRequest'
operationId: postQuotesByIdEmail
x-operation-id-source: derived
components:
schemas:
EmailApi:
type: object
properties:
Email:
maxLength: 255
minLength: 0
type:
- string
- 'null'
description: Default value is the customer's email address
CcRecipients:
type:
- array
- 'null'
items:
type: string
description: Default value is the customer's cc email addresses (if omitted or empty list). Set to null to skip using any CC addresses.
Subject:
type:
- string
- 'null'
description: 'The default email subject found in the system followed by the company''s name.The special pattern #### in the subject text will be replaced by the sales document number (quote, order or invoice).This allows you to create a subject that contains the sales document number without querying for the document first'
Message:
type:
- string
- 'null'
description: Default value is the the domestic or foreign company text from /v2/companysettings
additionalProperties: false
QuoteRowApi:
type: object
properties:
Id:
type: string
description: Unique Id provided by the system for every row
format: uuid
readOnly: true
ArticleId:
type:
- string
- 'null'
description: 'Source: Get from /v2/articles'
format: uuid
IsServiceArticle:
type: boolean
description: True if the sales category of the article on the row is goods, false otherwise
readOnly: true
UnitId:
type:
- string
- 'null'
description: 'Source: Get from /v2/units/{id}'
format: uuid
readOnly: true
Text:
maxLength: 2000
minLength: 0
type:
- string
- 'null'
description: For non text rows, default value will be the article's name; for text rows, there should be at least one character in place
UnitPrice:
type: number
description: 'Format: 2 decimals allowed if the customer and currency are domestic or 4 decimals if customer or currency is foreign'
format: double
Amount:
type: number
description: 'Total amount of row. Format: 2 decimals'
format: double
IsDiscountInFixedAmount:
type: boolean
description: True if the discount on the row is a fixed amount, false otherwise
readOnly: true
DiscountFixedAmount:
type:
- number
- 'null'
description: 'Fixed amount discount on the row. Only applicable if IsDiscountInFixedAmount is true. Format: 2 decimals'
format: double
readOnly: true
DiscountPercentage:
maximum: 1
minimum: 0
type: number
description: 'Percentage discount n the row. Format: 4 decimals'
format: double
Quantity:
type: number
description: 'Format: 4 decimals'
format: double
WorkCostType:
type: integer
description: <strong>Possible values:</strong><br/>None = 0,<br/>RotConstructionWork = 1,<br/>RotElectricalWork = 2,<br/>RotGlassSheetMetalWork = 3,<br/>RotGroundWork = 4,<br/>RotBrickWork = 5,<br/>RotPaintDecorateWork = 6,<br/>RotPlumbWork = 7,<br/>RutCleanJobWork = 9,<br/>RutCareClothTextile = 10,<br/>RutSnowRemove = 12,<br/>RutGarden = 13,<br/>RutBabySitting = 14,<br/>RutOtherCare = 15,<br/>RutRemovalServices = 18,<br/>RutITServices = 19,<br/>RotHeatPump = 20,<br/>RotHeatPump2 = 21,<br/>RutHomeAppliances = 22,<br/>RotSolarHeatingSystem = 23,<br/>RotWoodBoiler = 24,<br/>RotFuelBoiler = 25,<br/>RutLaundry = 26,<br/>RutFurnishing = 27,<br/>RutGoodsTransport = 28,<br/>RutHomeSupervision = 29<br/><br/>Only used for Rot/Rut.
format: int32
IsWorkCost:
type: boolean
description: Only used for Rot/Rut
readOnly: true
WorkHours:
type:
- number
- 'null'
description: Only used for Rot/Rut
format: double
MaterialCosts:
type:
- number
- 'null'
description: Only used for Rot/Rut
format: double
IsVatFree:
type: boolean
description: True if the row has been marked VAT free
VatRate:
type:
- number
- 'null'
description: When row is a text row the value is null. Default value is also null
format: double
readOnly: true
LineNumber:
type: integer
description: Unique line number for this row
format: int32
readOnly: true
CostCenterItemId1:
type:
- string
- 'null'
description: 'Source: Get from /v2/costcenters'
format: uuid
CostCenterItemId2:
type:
- string
- 'null'
description: 'Source: Get from /v2/costcenters'
format: uuid
CostCenterItemId3:
type:
- string
- 'null'
description: 'Source: Get from /v2/costcenters'
format: uuid
ProjectId:
type:
- string
- 'null'
description: Get from /v2/projects
format: uuid
IsTextRow:
type: boolean
description: True if this is a text row. False otherwise
readOnly: true
ArticleNumber:
type:
- string
- 'null'
description: Article number on the row
readOnly: true
GreenTechnologyType:
maximum: 3
minimum: 0
type: integer
description: <strong>Possible values:</strong><br/>None = 0,<br/>SolarCellInstallation = 1,<br/>ElectricEnergyStorageInstallation = 2,<br/>ElectricVehicleChargingPointInstallation = 3<br/><br/>Type of green technology for the row.
format: int32
ContributionMargin:
$ref: '#/components/schemas/ContributionMarginApi'
PurchasePrice:
type: number
description: Purchase price for the article on this row, valid only if it is an article row
format: double
readOnly: true
FreightCosts:
type: number
description: Freight costs for the article on this row, valid only if it is an article row
format: double
readOnly: true
additionalProperties: false
QuoteRowConversionApi:
type: object
properties:
Id:
type: string
description: Id of the quote row
format: uuid
WorkHours:
type: number
description: Number of worked hours for Rot/Rut and green technonlogy
format: double
additionalProperties: false
OrderApi:
required:
- CurrencyCode
- CustomerId
- EuThirdParty
- OrderDate
- ReverseChargeOnConstructionServices
- RotReducedInvoicingType
- Status
type: object
properties:
Id:
type: string
description: Unique Id provided by the system
format: uuid
readOnly: true
Amount:
type: number
description: 'Format: 2 decimals'
format: double
CustomerId:
type: string
description: Id of the customer for this order
format: uuid
CurrencyCode:
maxLength: 3
minLength: 0
type: string
CreatedUtc:
type: string
format: date-time
readOnly: true
VatAmount:
type: number
format: double
RoundingsAmount:
type: number
format: double
DeliveredAmount:
type: number
description: 'Format: 2 decimals'
format: double
DeliveredVatAmount:
type: number
description: 'Format: 2 decimals'
format: double
DeliveredRoundingsAmount:
type: number
description: 'Format: 2 decimals'
format: double
DeliveryCustomerName:
maxLength: 100
minLength: 0
type:
- string
- 'null'
description: Takes the value from the selected customer
DeliveryAddress1:
maxLength: 50
minLength: 0
type:
- string
- 'null'
description: Takes the value from the selected customer
DeliveryAddress2:
maxLength: 50
minLength: 0
type:
- string
- 'null'
description: Takes the value from the selected customer
DeliveryPostalCode:
maxLength: 10
minLength: 0
type:
- string
- 'null'
description: Takes the value from the selected customer
DeliveryCity:
maxLength: 50
minLength: 0
type:
- string
- 'null'
description: Takes the value from the selected customer
DeliveryCountryCode:
maxLength: 2
minLength: 0
type:
- string
- 'null'
description: Takes the value from the selected customer
YourReference:
maxLength: 100
minLength: 0
type:
- string
- 'null'
description: Equivalent for property YourReference in CustomerInvoiceApi models
OurReference:
maxLength: 100
minLength: 0
type:
- string
- 'null'
description: Equivalent for property OurReference in CustomerInvoiceApi models
BuyersOrderReference:
maxLength: 35
minLength: 0
type:
- string
- 'null'
description: Reference for the customer of the order
InvoiceAddress1:
maxLength: 50
minLength: 0
type:
- string
- 'null'
description: If the value is null it will be filled with the value from the customer
InvoiceAddress2:
maxLength: 50
minLength: 0
type:
- string
- 'null'
description: If the value is null it will be filled with the value from the customer
InvoiceCity:
type:
- string
- 'null'
description: Default value is the value from the selected customer
InvoiceCountryCode:
maxLength: 2
minLength: 0
type:
- string
- 'null'
description: Default value is the value from the selected customer
InvoiceCustomerName:
maxLength: 50
minLength: 0
type:
- string
- 'null'
CustomerNumber:
type:
- string
- 'null'
readOnly: true
CustomerName:
type:
- string
- 'null'
description: The selected customer's name
readOnly: true
InvoicePostalCode:
maxLength: 10
minLength: 0
type:
- string
- 'null'
description: Default value is the value from the selected customer
DeliveryMethodName:
maxLength: 50
minLength: 0
type:
- string
- 'null'
DeliveryMethodCode:
maxLength: 20
minLength: 0
type:
- string
- 'null'
DeliveryTermName:
maxLength: 50
minLength: 0
type:
- string
- 'null'
DeliveryTermId:
type:
- string
- 'null'
format: uuid
readOnly: true
DeliveryMethodId:
type:
- string
- 'null'
format: uuid
readOnly: true
DeliveryTermCode:
maxLength: 20
minLength: 0
type:
- string
- 'null'
TermsOfPaymentId:
type:
- string
- 'null'
format: uuid
EuThirdParty:
type: boolean
description: Indicates whether the transaction is an EU triangulation sale (resale of goods through an intermediary within the EU)
CustomerIsPrivatePerson:
type: boolean
description: True if the customer of this order is a private individual, false otherwise
readOnly: true
IncludesVat:
type: boolean
description: True if company settings checkbox "ShowPricesExclVatPC" is checked and customer type is "Private", otherwise false
readOnly: true
OrderDate:
type: string
description: Expected date format YYYY-MM-DD
format: date-time
Status:
maximum: 4
minimum: 1
type: integer
description: <strong>Possible values:</strong><br/>Draft = 1,<br/>Ongoing = 2,<br/>Shipped = 3,<br/>Invoiced = 4<br/><br/>Status of the order.
format: int32
Number:
type:
- integer
- 'null'
format: int32
readOnly: true
ModifiedUtc:
type:
- string
- 'null'
description: Date and time of the last document modification
format: date-time
readOnly: true
DeliveryDate:
type:
- string
- 'null'
description: Expected date format YYYY-MM-DD. Default value is null
format: date-time
HouseWorkAmount:
type: number
description: Amount of Rot/Rut deduction on the order
format: double
HouseWorkAutomaticDistribution:
type: boolean
description: True if the order uses automatic distribution of tax deduction. False otherwise
HouseWorkCorporateIdentityNumber:
maxLength: 20
minLength: 0
type:
- string
- 'null'
description: Corporate identity number used for deduction
HouseWorkPropertyName:
maxLength: 100
minLength: 0
type:
- string
- 'null'
description: Name of the property used for deduction if applicable
SalesDocumentAttachments:
type:
- array
- 'null'
items:
type: string
format: uuid
description: Fetch SalesDocumentAttachments via GET /v2/salesdocumentattachments/{attachmentId}
readOnly: true
MessageThreads:
type:
- array
- 'null'
items:
type: string
format: uuid
description: Fetch messages via GET /v2/messagethreads/{messageThreadId}
readOnly: true
Notes:
type:
- array
- 'null'
items:
type: string
format: uuid
description: Fetch notes via GET /v2/notes/{notesId}
readOnly: true
Rows:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/OrderRowApi'
ShippedDateTime:
type:
- string
- 'null'
description: Expected date format YYYY-MM-DD. Default value is null
format: date-time
RotReducedInvoicingType:
type: integer
description: <strong>Possible values:</strong><br/>0 = Normal,<br/>1 = Rot,<br/>2 = Rut
format: int32
MaxAllowedTaxReductionAmount:
type: number
description: 'Default: maximum allowed tax reduction amount'
format: double
readOnly: true
RotReducedInvoicingPercent:
type: number
description: 'Format: 4 decimals'
format: double
readOnly: true
RotPropertyType:
type:
- integer
- 'null'
description: <strong>Possible values:</strong><br/>1 = Apartment,<br/>2 = Property<br/><br/>Leave blank or set to null if you do not intend to use ROT or Green Technology functionality.
format: int32
Persons:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/SalesDocumentRotRutReductionPersonApi'
ReverseChargeOnConstructionServices:
type: boolean
description: <strong>Possible values:</strong><br/>True = this order contains reverse charge on construction services<br/>False = otherwise
UsesGreenTechnology:
type: boolean
description: <strong>Possible values:</strong><br/>True = This order uses green technology<br/>False = Otherwise
IsNotDelivered:
type: boolean
readOnly: true
ContributionMargin:
$ref: '#/components/schemas/ContributionMarginApi'
CreatedFromQuoteId:
type:
- string
- 'null'
description: Id of the quote this order was created from. Is null if order wasn't created by converting a quote
format: uuid
readOnly: true
BackgroundId:
type:
- string
- 'null'
description: Represents the identifier for the background image or template used on the PDF printout
format: uuid
readOnly: true
additionalProperties: false
TermsOfPaymentApi:
type: object
properties:
Id:
type: string
description: Unique Id provided by the system. For v2/quotes and v2/quotedrafts endpoints Id is editable
format: uuid
readOnly: true
Name:
type:
- string
- 'null'
description: Name of the terms of payment
NameEnglish:
type:
- string
- 'null'
description: English name of the terms of payment
NumberOfDays:
type: integer
description: Number of days to pay
format: int32
TermsOfPaymentTypeId:
type: integer
description: <strong>Possible values:</strong><br/>0 = Normal,<br/>1 = CurrentMonth,<br/>2 = Cash,<br/>3 = CardPayment,<br/>4 = DigitalWallet,<br/>5 = PaymentServiceProvider<br/><br/>Type of terms of payment, possible values are.
format: int32
TermsOfPaymentTypeText:
type:
- string
- 'null'
AvailableForSales:
type: boolean
description: True if this terms of payment can be used on sales documents, false otherwise
AvailableForPurchase:
type: boolean
description: True if this terms of payment can be used on purchase documents, false otherwise
additionalProperties: false
CustomerInvoiceApi:
required:
- CustomerId
- EuThirdParty
- RotReducedInvoicingType
- Rows
type: object
properties:
Id:
type: string
description: Unique Id provided by the system
format: uuid
readOnly: true
EuThirdParty:
type: boolean
description: Default is false. True only if EU intermediary, VAT triangulation rules apply. Only if EU company is invoicing to a company from a different EU country, may set to True if desired.
IsCreditInvoice:
type: boolean
CurrencyCode:
type:
- string
- 'null'
readOnly: true
CurrencyRate:
type:
- number
- 'null'
description: 'Default: Automatic calculation of the currency rate. Enter this value to provide a custom rate'
format: double
CreatedByUserId:
type:
- string
- 'null'
format: uuid
readOnly: true
TotalAmount:
type: number
description: Total amount on this invoice expressed in base currency
format: double
readOnly: true
TotalVatAmount:
type: number
description: Total VAT amount on this invoice expressed in base currency
format: double
readOnly: true
TotalRoundings:
type: number
description: Total roundings amount on this invoice expressed in base currency
format: double
readOnly: true
TotalAmountInvoiceCurrency:
type: number
description: Total amount on this invoice expressed in the invoice currecy
format: double
readOnly: true
TotalVatAmountInvoiceCurrency:
type: number
description: Total VAT amount on this invoice expressed in the invoice currency
format: double
readOnly: true
SetOffAmountInvoiceCurrency:
type: number
description: Total credited amount on this invoice expressed in the invoice currency
format: double
readOnly: true
CustomerId:
type: string
format: uuid
Rows:
type: array
items:
$ref: '#/components/schemas/CustomerInvoiceRowApi'
VatSpecification:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CustomerInvoiceVatApi'
description: Contains a summary of amounts for each VAT rate
readOnly: true
InvoiceDate:
typ
# --- truncated at 32 KB (73 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/visma/refs/heads/main/openapi/visma-quotes-api-openapi.yml