Visma Quote Drafts API

A preliminary version of a quote that can be edited and finalized before becoming an official quote. Overview of Quotes Functionality: [Quotes](https://support.spiris.se/bokforing-fakturering-plus/en-se/content/online-help/sales-quotes.htm) ___ Requires any of the following modules: * sales_standard Available in any of the following variants: * Pro * Standard * Invoicing

Operations 6

GET /quotedrafts Get all quote drafts #
POST /quotedrafts Create a quote draft #
GET /quotedrafts/{id} Get a specific quote draft based on id #
DELETE /quotedrafts/{id} Delete a quote draft #
PUT /quotedrafts/{id} Update a quote draft #
PUT /quotedrafts/{id}/convert Convert a quote draft to a quote #

Documentation

Specifications

Other Resources

Work with this as data

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-quotedrafts-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 Specification

visma-quotedrafts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bookkeeping & Invoicing/eAccounting API V2 Quote Drafts 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: QuoteDrafts
  description: 'A preliminary version of a quote that can be edited and finalized before becoming an official quote.

    Overview of Quotes Functionality: Quotes


    ___


    Requires any of the following modules:

    * sales_standard


    Available in any of the following variants:

    * Pro

    * Standard

    * Invoicing'
paths:
  /quotedrafts:
    get:
      tags:
      - QuoteDrafts
      summary: Get all quote drafts
      description: 'Get all quote drafts, or add query parameters to filter the results. The response will include a list of quote drafts 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: getQuotedrafts
      x-operation-id-source: derived
    post:
      tags:
      - QuoteDrafts
      summary: Create a quote draft
      description: 'Create a new quote draft.


        ___

        Requires any of the following scopes:

        * ea:sales'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteApi'
      responses:
        '201':
          description: Quote draft created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteApi'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommonExtendedBadRequest'
      operationId: postQuotedrafts
      x-operation-id-source: derived
  /quotedrafts/{id}:
    get:
      tags:
      - QuoteDrafts
      summary: Get a specific quote draft based on id
      description: 'Get a specific quote draft by its unique identifier. The response will include the quote draft''s 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 draft 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: getQuotedraftsById
      x-operation-id-source: derived
    delete:
      tags:
      - QuoteDrafts
      summary: Delete a quote draft
      description: 'Delete a quote draft.


        ___

        Requires any of the following scopes:

        * ea:sales'
      parameters:
      - name: id
        in: path
        description: This represents the Id of the quote draft you want to delete
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Quote draft deleted successfully
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommonExtendedBadRequest'
      operationId: deleteQuotedraftsById
      x-operation-id-source: derived
    put:
      tags:
      - QuoteDrafts
      summary: Update a quote draft
      description: 'Replace an existing quote draft''s data with the provided new data.


        ___

        Requires any of the following scopes:

        * ea:sales'
      parameters:
      - name: id
        in: path
        description: This represents the Id of the quote draft you want to update
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteApi'
      responses:
        '200':
          description: Quote draft updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteApi'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommonExtendedBadRequest'
      operationId: putQuotedraftsById
      x-operation-id-source: derived
  /quotedrafts/{id}/convert:
    put:
      tags:
      - QuoteDrafts
      summary: Convert a quote draft to a quote
      description: 'Converts a quote draft to a quote.


        ___

        Requires any of the following scopes:

        * ea:sales'
      parameters:
      - name: id
        in: path
        description: This represents the Id of the quote draft you want to convert
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Quote draft converted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteApi'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommonExtendedBadRequest'
      operationId: putQuotedraftsByIdConvert
      x-operation-id-source: derived
components:
  schemas:
    SalesDocumentRotRutReductionPersonApi:
      type: object
      properties:
        Id:
          type: string
          description: Unique Id provided by the system
          format: uuid
          readOnly: true
        Ssn:
          maxLength: 50
          minLength: 0
          type:
          - string
          - 'null'
          description: Social security number
        Amount:
          type: number
          format: double
      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
    CommonPaginationMetadata:
      required:
      - CurrentPage
      - PageSize
      - ServerTimeUtc
      - TotalNumberOfPages
      - TotalNumberOfResults
      type: object
      properties:
        CurrentPage:
          type: integer
          description: The current page number
          format: int32
        PageSize:
          type: integer
          description: The number of results per page
          format: int32
        TotalNumberOfPages:
          type: integer
          description: The total number of pages available
          format: int32
        TotalNumberOfResults:
          type: integer
          description: The total number of results available for the query
          format: int32
        ServerTimeUtc:
          type: string
          description: <strong>Possible values:</strong><br/>2017-07-21T17:32:28Z<br/><br/>The date-time notation as defined by RFC 3339, section 5.6.
          format: date-time
      additionalProperties: false
    CommonError:
      type: object
      properties:
        Field:
          type:
          - string
          - 'null'
        ErrorCode:
          type:
          - string
          - 'null'
        Message:
          type:
          - string
          - 'null'
        Key:
          type:
          - string
          - 'null'
      additionalProperties: false
    PaginatedResponseOfQuoteApi:
      required:
      - Data
      - Meta
      type: object
      properties:
        Meta:
          $ref: '#/components/schemas/CommonPaginationMetadata'
        Data:
          type: array
          items:
            $ref: '#/components/schemas/QuoteApi'
      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
    CommonExtendedBadRequest:
      type: object
      properties:
        ErrorCode:
          type: integer
          format: int32
        DeveloperErrorMessage:
          type:
          - string
          - 'null'
        ErrorId:
          type: string
          format: uuid
        Errors:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/CommonError'
      additionalProperties: false
    QuoteApi:
      required:
      - CustomerId
      - DueDate
      - QuoteDate
      type: object
      properties:
        ApprovedDate:
          type:
          - string
          - 'null'
          description: 'Default: null. Value will be set if the quote is approved'
          format: date-time
          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
        BuyersOrderReference:
          maxLength: 35
          minLength: 0
          type:
          - string
          - 'null'
          description: Reference for the customer of the quote
        CompanyReference:
          maxLength: 100
          minLength: 0
          type:
          - string
          - 'null'
          description: Equivalent for property OurReference in OrderApi and CustomerInvoiceApi models
        ContributionMargin:
          $ref: '#/components/schemas/ContributionMarginApi'
        CreatedUtc:
          type: string
          format: date-time
          readOnly: true
        CurrencyCode:
          type:
          - string
          - 'null'
          readOnly: true
        CurrencyRate:
          type: number
          format: double
          readOnly: true
        CustomerId:
          type: string
          description: Id of the customer for this quote
          format: uuid
        CustomerIsPrivatePerson:
          type: boolean
          description: True if the customer of this quote is a private individual, false otherwise
          readOnly: true
        CustomerName:
          type:
          - string
          - 'null'
          description: The selected customer's name
          readOnly: true
        CustomerNumber:
          type:
          - string
          - 'null'
          readOnly: true
        CustomerReference:
          maxLength: 100
          minLength: 0
          type:
          - string
          - 'null'
          description: Equivalent for property YourReference in OrderApi and CustomerInvoiceApi models
        DeliveryAddress1:
          type:
          - string
          - 'null'
          description: Takes the value from the selected customer
          readOnly: true
        DeliveryAddress2:
          type:
          - string
          - 'null'
          description: Takes the value from the selected customer
          readOnly: true
        DeliveryCity:
          type:
          - string
          - 'null'
          description: Takes the value from the selected customer
          readOnly: true
        DeliveryCountryCode:
          type:
          - string
          - 'null'
          description: Takes the value from the selected customer
          readOnly: true
        DeliveryCustomerName:
          type:
          - string
          - 'null'
          description: Takes the value from the selected customer
          readOnly: true
        DeliveryDate:
          type:
          - string
          - 'null'
          description: Expected date format YYYY-MM-DD. Default value is null
          format: date-time
        DeliveryMethodCode:
          type:
          - string
          - 'null'
          readOnly: true
        DeliveryMethodName:
          type:
          - string
          - 'null'
          readOnly: true
        DeliveryPostalCode:
          type:
          - string
          - 'null'
          description: Takes the value from the selected customer
          readOnly: true
        DeliveryTermCode:
          type:
          - string
          - 'null'
          readOnly: true
        DeliveryTermName:
          type:
          - string
          - 'null'
          readOnly: true
        QuoteDate:
          type: string
          description: Expected date format YYYY-MM-DD.
          format: date-time
        DueDate:
          type: string
          description: Expected date format YYYY-MM-DD.
          format: date-time
        EuThirdParty:
          type: boolean
          description: Indicates whether the transaction is an EU triangulation sale (resale of goods through an intermediary within the EU)
        Id:
          type: string
          description: Unique Id provided by the system
          format: uuid
          readOnly: true
        IncludesVat:
          type: boolean
          description: True if company settings checkbox "ShowPricesExclVatPC" is checked and customer type is "Private", otherwise false
          readOnly: true
        InvoiceAddress1:
          type:
          - string
          - 'null'
          description: If the value is null it will be filled with the value from the customer
          readOnly: true
        InvoiceAddress2:
          type:
          - string
          - 'null'
          description: If the value is null it will be filled with the value from the customer
          readOnly: true
        InvoiceCity:
          type:
          - string
          - 'null'
          description: Default value is the value from the selected customer
          readOnly: true
        InvoiceCountryCode:
          type:
          - string
          - 'null'
          description: Default value is the value from the selected customer
          readOnly: true
        InvoiceCustomerName:
          type:
          - string
          - 'null'
          readOnly: true
        InvoicePostalCode:
          type:
          - string
          - 'null'
          description: Default value is the value from the selected customer
          readOnly: true
        IsDomestic:
          type: boolean
          readOnly: true
        IsNotDelivered:
          type: boolean
          readOnly: true
        MessageThreads:
          type:
          - array
          - 'null'
          items:
            type: string
            format: uuid
          description: Fetch messages via GET /v2/messagethreads/{messageThreadId}
          readOnly: true
        ModifiedUtc:
          type:
          - string
          - 'null'
          description: Date and time of the last document modification
          format: date-time
          readOnly: true
        Notes:
          type:
          - array
          - 'null'
          items:
            type: string
            format: uuid
          description: Fetch notes via GET /v2/notes/{notesId}
          readOnly: true
        Number:
          type:
          - integer
          - 'null'
          format: int32
          readOnly: true
        Persons:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/SalesDocumentRotRutReductionPersonApi'
          description: Only available for ROT/RUT or Green Technology
        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
        RotReducedInvoicingAmount:
          type: number
          description: 'Format: 2 decimals'
          format: double
        MaxAllowedTaxReductionAmount:
          type: number
          description: 'Default: maximum allowed tax reduction amount'
          format: double
          readOnly: true
        RotReducedInvoicingAutomaticDistribution:
          type: boolean
          description: True if quote uses automatic distribution of rot/rut deduction, false otherwise
          readOnly: true
        RotReducedInvoicingOrgNumber:
          type:
          - string
          - 'null'
        RotReducedInvoicingPercent:
          type: number
          description: 'Format: 4 decimals'
          format: double
          readOnly: true
        RotReducedInvoicingPropertyName:
          type:
          - string
          - 'null'
        RotReducedInvoicingType:
          type: integer
          description: <strong>Possible values:</strong><br/>0 = Normal,<br/>1 = Rot,<br/>2 = Rut
          format: int32
        RoundingsAmount:
          type: number
          format: double
          readOnly: true
        Rows:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/QuoteRowApi'
        SalesDocumentAttachments:
          type:
          - array
          - 'null'
          items:
            type: string
            format: uuid
          description: Fetch SalesDocumentAttachments via GET /v2/salesdocumentattachments/{attachmentId}
          readOnly: true
        Status:
          type: integer
          description: <strong>Possible values:</strong><br/>0 = Draft,<br/>1 = Ongoing,<br/>2 = Approved,<br/>3 = Invoiced,<br/>4 = OrderCreated<br/><br/>Status of the quote. Possible values are.
          format: int32
          readOnly: true
        TermsOfPayment:
          $ref: '#/components/schemas/TermsOfPaymentApi'
        TotalAmount:
          type: number
          format: double
          readOnly: true
        UsesGreenTechnology:
          type: boolean
          description: <strong>Possible values:</strong><br/>True = This quote uses green technology<br/>False = Otherwise
        VatAmount:
          type: number
          format: double
          readOnly: true
      additionalProperties: false
    ContributionMarginApi:
      type: object
      properties:
        Amount:
          type:
          - number
          - 'null'
          description: Amount of contribution margin
          format: double
        Percentage:
          type:
          - number
          - 'null'
          description: Percentage of contribution margin
          format: double
      additionalProperties: false
x-tagGroups:
- name: Sales
  tags:
  - ArticleLabels
  - Articles
  - CustomerInvoiceDrafts
  - CustomerInvoiceOffsets
  - CustomerInvoices
  - CustomerInvoiceValuationHistories
  - CustomerLabels
  - CustomerLedgerItems
  - Customers
  - DeliveryMethods
  - DeliveryTerms
  - DiscountAgreements
  - Orders
  - QuoteDrafts
  - Quotes
  - SalesPriceLists
  - TermsOfPayment
  - WebshopOrders
- name: Purchase
  tags:
  - BankAccounts
  - ForeignPaymentCodes
  - PurchaseReceiptDrafts
  - SupplierInvoiceDrafts
  - SupplierInvoices
  - SupplierInvoiceValuationHistories
  - SupplierLedgerItems
  - Suppliers
- name: Common
  tags:
  - Approval
  - AppStoreActivationStatus
  - AttachmentLinks
  - Attachments
  - AutoInvoice
  - Bank
  - Charts
  - CompanySettings
  - Company
  - Countries
  - Currencies
  - Documents
  - IdentityLookup
  - MessageThreads
  - Mobile
  - Notes
  - PartnerResourceLinks
  - SalesDocumentAttachments
  - Trials
  - Units
  - Users
  - VoTokenValidation
  - WebHooks
  - Zapier
- name: Accounting
  tags:
  - AccountBalance
  - Accounts
  - AccountTypes
  - AllocationPeriods
  - ArticleAccountCodings
  - BankTransactions
  - CostCenterItems
  - CostCenters
  - FiscalYears
  - InventoryItems
  - PaymentVoucher
  - Projects
  - SieFileImportExport
  - VatCode
  - VatReport
  - VoucherDrafts
  - Vouchers
  - VoucherWithOverunderPayment