Visma Bookkeeping & Invoicing / eAccounting API

REST API for Bookkeeping & Invoicing / eAccounting (Spiris, formerly Visma Spcs) covering customers, suppliers, articles, customer and supplier invoices, orders, quotes, vouchers, accounts, projects, cost centres and attachments. 274 paths / 228 operations, OpenAPI 3.0.4, version 2, served from eaccountingapi.vismaonline.com.

Operations 228

GET /accountbalances/{date} Get account balances by date
GET /accountbalances/{accountNumber}/{date} Get account balance by account number and date
GET /accounts Get accounts
POST /accounts Create account
GET /accounts/standardaccounts Get standard accounts
GET /accounts/{fiscalyearId} Get accounts by fiscal year
GET /accounts/{fiscalyearId}/{accountNumber} Get single account
PUT /accounts/{fiscalyearId}/{accountNumber} Replace account
GET /accountTypes Get default account types
GET /allocationperiods Get allocation periods
POST /allocationperiods Add allocation periods for voucher or supplier invoice
PUT /allocationperiods Update allocation periods for voucher or supplier invoice
GET /allocationperiods/{allocationPeriodId} Get single allocation period
PUT /approval/vatreport/{id} Replace the approval status of a vat report
PUT /approval/supplierinvoice/{id} Replace the approval status of a supplier invoice draft
GET /appstore/status Get app store activation statuses
PUT /appstore/status Update app store activation status
GET /articleaccountcodings Get article account codings
GET /articleaccountcodings/{articleAccountCodingId} Get a specific article account coding
GET /articlelabels Gets all article labels
POST /articlelabels Create an article label
GET /articlelabels/{articlelabelid} Gets an article label by id
PUT /articlelabels/{articleLabelId} Replace an article label
DELETE /articlelabels/{articleLabelId} Delete an article label
GET /articles Gets articles
POST /articles Create a single article
GET /articles/{articleId} Gets an article by id
PUT /articles/{articleId} Replace an article
POST /attachmentlinks Create new links between an existing document and a set of attachments
DELETE /attachmentlinks/{attachmentId} Delete the link between an existing document and its attachment
GET /attachments Get attachments
POST /attachments Create an attachment
GET /attachments/{attachmentId} Get a specific attachment based on id
DELETE /attachments/{attachmentId} Delete an attachment
GET /bankaccounts Get bank accounts
POST /bankaccounts Create a bank account
GET /bankaccounts/{bankAccountId} Get a bank account
PUT /bankaccounts/{bankAccountId} Replace a bank account
DELETE /bankaccounts/{bankAccountId} Delete a bank account
GET /banktransactions/{bankAccountId}/matched Get a list of matched bank transactions
GET /banktransactions/{bankAccountId}/unmatched Get a list of unmatched bank transactions
GET /banktransactions/{bankAccountId}/{bankTransactionId} Get a specific bank transaction
GET /banks Get available banks
GET /companysettings Get company settings
PUT /companysettings Replace company settings
PUT /companysettings/accountinglocksettings Update accounting lock settings
PUT /companysettings/rotrut Update ROT/RUT settings
GET /costcenteritems/{itemId} Get a specific cost center item
POST /costcenteritems Create a single cost center item
PUT /costcenteritems/{costCenterItemId} Replace the data in a cost center item
GET /costcenters Get cost centers
PUT /costcenters/{id} Update a cost center
GET /countries Get countries
GET /countries/{countrycode} Get a specific country
GET /currencies Get a list of currencies
GET /currencies/exchangerate Get currency exchange rate
GET /customerinvoicedrafts Get all customer invoice drafts
POST /customerinvoicedrafts Create a single customer invoice draft
GET /customerinvoicedrafts/{invoiceDraftId} Get a customer invoice draft by id
PUT /customerinvoicedrafts/{customerInvoiceDraftId} Replace the data in a customer invoice draft
DELETE /customerinvoicedrafts/{customerInvoiceDraftId} Delete a customer invoice draft
POST /customerinvoicedrafts/{customerInvoiceDraftId}/convert Convert a CustomerInvoiceDraft to a CustomerInvoice
GET /customerinvoices Get all customer invoices
POST /customerinvoices Create a single customer invoice
GET /customerinvoices/{invoiceId} Gets a customer invoice with a specific id
GET /customerinvoices/{invoiceId}/pdf Gets a customer invoice in Portable Document Format (PDF)
POST /customerinvoices/{invoiceId}/payments Post a customer invoice payment
POST /customerinvoices/{invoiceId}/email Send an invoice via email
POST /customerinvoices/{invoiceId}/einvoice Send an invoice electronically
POST /customerinvoices/{invoiceId}/paymentreminders Send an a payment reminder for an invoice
GET /customerinvoices/{invoiceId}/print Get a pdf file for an invoice
POST /customerinvoices/{invoiceId}/void Void a customer invoice
GET /customerlabels Gets all customer labels
POST /customerlabels Create a customer label
GET /customerlabels/{customerlabelid} Gets a customer label by id
PUT /customerlabels/{customerlabelid} Replace a customer label
DELETE /customerlabels/{customerlabelid} Delete a customer label
GET /customerledgeritems Get customer ledger items
POST /customerledgeritems Create a customer ledger item
GET /customerledgeritems/{customerLedgerItemId} Get a customer ledger item
POST /customerledgeritems/customerledgeritemswithvoucher Create a customer ledger item with voucher
GET /customers Get customers
POST /customers Create a customer
GET /customers/{customerId} Get a specific customer based on id
PUT /customers/{customerId} Update a customer
DELETE /customers/{customerId} Delete a customer
GET /customers/{customerId}/autoinvoicerecipients Get autoinvoice recipients for a customer
GET /deliverymethods Get delivery methods
POST /deliverymethods Create a delivery method
GET /deliverymethods/{deliveryMethodId} Get a specific delivery method based on id
GET /deliveryterms Get delivery terms
POST /deliveryterms Create a delivery term
GET /deliveryterms/{deliveryTermId} Get a specific delivery term based on id
GET /discountagreements Gets all discount agreements
GET /discountagreements/{discountAgreementId} Gets a discount agreement by id
GET /documents/{id} Get a document by id
GET /backgrounds Get all available document backgrounds
GET /fiscalyears Get fiscal years
POST /fiscalyears Create a fiscal year
GET /fiscalyears/{id} Get a fiscal year
PUT /fiscalyears/{id} Update a fiscal year
GET /fiscalyears/openingbalances Get opening balances
PUT /fiscalyears/openingbalances Update opening balances
GET /foreignpaymentcodes Get foreign payment codes
GET /foreignpaymentcodes/{foreignpaymentcodeId} Get a foreign payment code
GET /inventoryitems Get inventory items
GET /inventoryitems/{id} Get an inventory item
GET /messagethreads/{messageThreadId} Get message thread
POST /messagethreads/{messageThreadId} Reply to message thread
PUT /messagethreads/{messageThreadId} Mark message thread
GET /messagethreads/{messageThreadId}/messages Get message thread messages
POST /messagethreads Create message thread
GET /messagethreads Get all message threads
GET /messagethreads/messages Get all messages
GET /notes Get all notes
POST /notes Create a new note
GET /notes/{noteId} Get a specific note
PUT /notes/{noteId} Update a note
GET /orders Get orders
POST /orders Create an order
GET /orders/{id} Get a specific order based on Id
PUT /orders/{id} Update an order
DELETE /orders/{id} Delete an order
POST /orders/{id}/converteddrafttoorder Convert order draft to order
POST /orders/{id}/completed Complete an order
POST /orders/{id}/voided Void an order
POST /orders/{id}/backorder Create a backorder
POST /orders/{id}/convert Convert an order to an invoice
GET /orders/{id}/print Print an order as pdf
GET /orders/{id}/deliverynote/print Print a delivery note for an order as pdf
POST /orders/{id}/email Send an order as email
GET /partnerresourcelinks Get partner resource links
POST /partnerresourcelinks Create a partner resource link
GET /partnerresourcelinks/{partnerResourceLinkId} Get a partner resource link
PUT /partnerresourcelinks/{partnerResourceLinkId} Update a partner resource link
DELETE /partnerresourcelinks/{partnerResourceLinkId} Delete a partner resource link
POST /paymentvoucher Create a payment voucher
GET /projects Get projects
POST /projects Create a project
GET /projects/{id} Get a project
PUT /projects/{id} Replace a project
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
GET /quotes Get quotes
POST /quotes Create a quote
GET /quotes/{id} Get a specific quote based on id
PUT /quotes/{id} Update a quote
DELETE /quotes/{id} Delete a quote
PUT /quotes/{id}/accept Accepts an ongoing quote
POST /quotes/{id}/converttoorder Convert a quote to an order
POST /quotes/{id}/previeworder Preview the result of converting a quote to an order
POST /quotes/{id}/converttocustomerinvoice Convert a quote to a customer invoice
GET /quotes/{id}/print Print a quote as pdf
POST /quotes/{id}/email Send a quote as email
GET /salesdocumentattachments/{attachmentId}.pdf Download sales document attachment
GET /salesdocumentattachments/{attachmentId} Get sales document attachment information by Id
GET /salesdocumentattachments Get all sales document attachments
POST /salesdocumentattachments Create sales document attachment
POST /salesdocumentattachments/customerinvoicedraft Create sales document attachment for customer invoice draft
POST /salesdocumentattachments/customerinvoice Create sales document attachment for customer invoice
POST /salesdocumentattachments/order Create sales document attachment for order
POST /salesdocumentattachments/quote Create sales document attachment for quote
DELETE /salesdocumentattachments/{customerInvoiceDraftId}/{attachmentId} Delete customer invoice draft attachment
DELETE /salesdocumentattachments/customerinvoicedraft/{customerInvoiceDraftId}/{attachmentId} Delete customer invoice draft attachment
DELETE /salesdocumentattachments/customerinvoice/{customerInvoiceId}/{attachmentId} Delete customer invoice attachment
DELETE /salesdocumentattachments/order/{orderId}/{attachmentId} Delete order attachment
DELETE /salesdocumentattachments/quote/{quoteId}/{attachmentId} Delete quote attachment
GET /salespricelists Get sales price lists
POST /salespricelists Create a sales price list
GET /salespricelists/{salesPriceListId} Get a specific sales price list based on id
PUT /salespricelists/{salesPriceListId} Update a sales price list
DELETE /salespricelists/{salesPriceListId} Delete a sales price list
GET /salespricelists/prices Get sales prices
GET /salespricelists/prices/{salesPriceListId} Get sales prices in a price list
GET /salespricelists/prices/{salesPriceListId}/{articleId} Get a specific sales price for an article in a price list
PUT /salespricelists/{salesPriceListId}/prices Update article prices in a sales price list
GET /sie4export/{fromDate}/{toDate} Export SIE4 file
POST /sie4import Import SIE4 file
GET /supplierinvoicedrafts Get supplier invoice drafts
POST /supplierinvoicedrafts Create a supplier invoice draft
GET /supplierinvoicedrafts/{id} Get a supplier invoice draft
PUT /supplierinvoicedrafts/{id} Update a supplier invoice draft
DELETE /supplierinvoicedrafts/{id} Delete a supplier invoice draft
DELETE /supplierinvoicedrafts/{id}/allocationperiods Delete allocation periods for a supplier invoice draft
POST /supplierinvoicedrafts/{id}/convert Convert a supplier invoice draft to a supplier invoice
GET /supplierinvoices Get supplier invoices
POST /supplierinvoices Create a supplier invoice
GET /supplierinvoices/{id} Get a supplier invoice
POST /supplierinvoices/{invoiceId}/payments Create a payment for a supplier invoice
POST /supplierinvoices/transactionalcosts Validate transactional costs for a supplier invoice
GET /supplierinvoices/{creditInvoiceId}/offsetcandidates Get available debit invoices that can be offset by a credit invoice
POST /supplierinvoices/{creditInvoiceId}/offset Create an offset between a credit invoice and one or more debit invoices
POST /supplierinvoices/{invoiceId}/offset/undo Undo an existing offset
GET /suppliers Get suppliers
POST /suppliers Create a supplier
GET /suppliers/{id} Get a supplier
DELETE /suppliers/{id} Delete a supplier
PUT /suppliers/{id} Replace a supplier
GET /termsofpayments Get all terms of payments
GET /termsofpayments/{id} Get a terms of payment based on id
GET /units Get units
GET /units/{id} Get unit
GET /users Get users
GET /vatcodes Get vat codes
GET /vatcodes/{id} Get a vat code by Id
GET /vatcodesrates Get vat codes with rates
GET /vatreports Get vat reports
GET /vatreports/{id} Get a vat report by Id
GET /voucherdrafts Get voucher drafts
POST /voucherdrafts Create voucher draft
GET /voucherdrafts/{voucherDraftId} Get voucher draft by id
PUT /voucherdrafts/{voucherDraftId} Update voucher draft
DELETE /voucherdrafts/{voucherDraftId} Delete voucher draft
POST /voucherdrafts/{voucherDraftId}/convert Convert voucher draft to voucher
GET /vouchers Get vouchers
POST /vouchers Create a voucher
GET /vouchers/{fiscalyearId} Get vouchers by fiscal year
GET /vouchers/{fiscalyearId}/{voucherId} Get a voucher
GET /voucherwithoverunderpayment/{voucherId} Get voucher relations
POST /voucherwithoverunderpayment Create over/under payment voucher
GET /warmup_wnkq2yfuzq
GET /webshoporders Get webshop orders
GET /webshoporders/{webshopOrderId} Get a specific webshop order
POST /webshoporders/{webshopOrderId}/convert Convert webshop order to invoice

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-eaccounting-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-eaccounting-api-openapi.json Raw ↑
{
  "openapi": "3.0.4",
  "info": {
    "title": "Bookkeeping & Invoicing/eAccounting API V2",
    "description": "Visit our complete [Bookkeeping & Invoicing/eAccounting API docs](https://developer.vismaonline.com) for how to get started, information about authentication, error handling, query customization and more.<br/><br/>✉ [API Support](https://developer.vismaonline.com/docs/lets-get-started#support)",
    "version": "v2"
  },
  "servers": [
    {
      "url": "https://eaccountingapi.vismaonline.com/v2/"
    }
  ],
  "paths": {
    "/accountbalances/{date}": {
      "get": {
        "tags": [
          "AccountBalance"
        ],
        "summary": "Get account balances by date",
        "description": "Get all account balances at a specific date. The response will include a list of account balances with their details, such as account number, name, and balance at the given date.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "description": "Date in format yyyy-MM-dd",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAccountBalanceApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/accountbalances/{accountNumber}/{date}": {
      "get": {
        "tags": [
          "AccountBalance"
        ],
        "summary": "Get account balance by account number and date",
        "description": "Get the balance for a specific account at a specific date. The response will include the account details and the balance at the given date.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly",
        "parameters": [
          {
            "name": "accountNumber",
            "in": "path",
            "description": "The account number",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "date",
            "in": "path",
            "description": "Date in format yyyy-MM-dd",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountBalanceApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          },
          "404": {
            "description": "Account not found"
          }
        }
      }
    },
    "/accounts": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get accounts",
        "description": "Get all accounts, or add query parameters to filter the results. The response will include a list of accounts with their details, such as account name, number, VAT code information, and fiscal year details.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly",
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAccountApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Accounts"
        ],
        "summary": "Create account",
        "description": "Create a new account to a specified fiscal year. Use the FiscalYearId property to specify the fiscal year. Account types can be set automatically or provided manually depending on the useDefaultAccountType parameter.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting",
        "parameters": [
          {
            "name": "useDefaultAccountType",
            "in": "query",
            "description": "If true, the system will provide the standard account type",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountApi"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Account created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountApi"
                }
              }
            }
          },
          "400": {
            "description": "Account can't be created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/standardaccounts": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get standard accounts",
        "description": "Get a list of the predefined standard accounts. This endpoint is only available for Dutch companies and returns the account types and their corresponding account numbers.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly",
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfStandardAccountApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{fiscalyearId}": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get accounts by fiscal year",
        "description": "Get a list of accounts for a specific fiscal year, or add query parameters to filter the results.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly",
        "parameters": [
          {
            "name": "fiscalyearId",
            "in": "path",
            "description": "The fiscal year Id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAccountApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/accounts/{fiscalyearId}/{accountNumber}": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get single account",
        "description": "Get a specific account from a given fiscal year by specifying the account number. The response includes detailed account information and description if available.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly",
        "parameters": [
          {
            "name": "fiscalyearId",
            "in": "path",
            "description": "The fiscal year Id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "accountNumber",
            "in": "path",
            "description": "The account number",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          },
          "404": {
            "description": "Account not found"
          }
        }
      },
      "put": {
        "tags": [
          "Accounts"
        ],
        "summary": "Replace account",
        "description": "Replace an existing account's data in a given fiscal year, with the provided new data. \r\nThis operation will only update the account in the specified fiscal year.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting",
        "parameters": [
          {
            "name": "fiscalyearId",
            "in": "path",
            "description": "The fiscal year ID",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "accountNumber",
            "in": "path",
            "description": "The account number",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountApi"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Account replaced",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountApi"
                }
              }
            }
          },
          "400": {
            "description": "Account can't be replaced",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          },
          "404": {
            "description": "Account not found"
          }
        }
      }
    },
    "/accounts/batch": { },
    "/accountTypes": {
      "get": {
        "tags": [
          "AccountTypes"
        ],
        "summary": "Get default account types",
        "description": "Get the default account types. The response will include a list of account types and their descriptions.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly",
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAccountTypesApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/allocationperiods": {
      "get": {
        "tags": [
          "AllocationPeriods"
        ],
        "summary": "Get allocation periods",
        "description": "Get all allocation periods, or add query parameters to filter the results. The response includes details such as the period's name, start and end dates, and its active status.\r\n\r\n**Note**: This endpoint returns only active (non-deleted) allocation periods. If you need to retrieve deleted allocation periods for synchronization purposes, use the separate `/v2/allocationperiods/deleted` endpoint.\r\n\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:purchase\r\n* ea:purchase_readonly",
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAllocationPeriodApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "AllocationPeriods"
        ],
        "summary": "Add allocation periods for voucher or supplier invoice",
        "description": "Creates new allocation periods from allocation plans for vouchers or supplier invoices.\n\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:purchase",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AllocationPlan"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Allocation periods created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AllocationPeriodApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AllocationPeriods"
        ],
        "summary": "Update allocation periods for voucher or supplier invoice",
        "description": "Updates existing allocation periods from modified allocation plans for vouchers or supplier invoices.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:purchase",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AllocationPlan"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Allocation periods updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AllocationPeriodApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/allocationperiods/deleted": { },
    "/allocationperiods/{allocationPeriodId}": {
      "get": {
        "tags": [
          "AllocationPeriods"
        ],
        "summary": "Get single allocation period",
        "description": "Get a specific allocation period by its unique identifier. The response includes details such as the period's name, start and end dates, and its active status.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:purchase\r\n* ea:purchase_readonly",
        "parameters": [
          {
            "name": "allocationPeriodId",
            "in": "path",
            "description": "The Id of the allocation period to retrieve",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AllocationPeriodApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/approval/vatreport/{id}": {
      "put": {
        "tags": [
          "Approval"
        ],
        "summary": "Replace the approval status of a vat report",
        "description": "Update the approval status of a VAT report.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The Id of the vat report",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApprovalApi"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VatReportApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/approval/supplierinvoice/{id}": {
      "put": {
        "tags": [
          "Approval"
        ],
        "summary": "Replace the approval status of a supplier invoice draft",
        "description": "Update the approval status of a supplier invoice draft.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:purchase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The Id of the invoice draft",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApprovalApi"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApprovalResponseApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/appstore/status": {
      "get": {
        "tags": [
          "AppStoreActivationStatus"
        ],
        "summary": "Get app store activation statuses",
        "description": "Get app store activation status. Each status indicates whether a specific third-party application is activated or deactivated for the user.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly\r\n* ea:sales\r\n* ea:sales_readonly\r\n* ea:purchase\r\n* ea:purchase_readonly",
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfAppStoreActivationStatusApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AppStoreActivationStatus"
        ],
        "summary": "Update app store activation status",
        "description": "Update the activation status for a third-party application in the app store.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:accounting\r\n* ea:accounting_readonly\r\n* ea:sales\r\n* ea:sales_readonly\r\n* ea:purchase\r\n* ea:purchase_readonly",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppStoreActivationStatusApi"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Status updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppStoreActivationStatusApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/articleaccountcodings": {
      "get": {
        "tags": [
          "ArticleAccountCodings"
        ],
        "summary": "Get article account codings",
        "description": "Get all article account codings, or add query parameters to filter the results. The response will include a list of article account codings with their accounting rules, VAT settings, and account numbers for different sales scenarios.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:sales\r\n* ea:sales_readonly",
        "parameters": [
          {
            "name": "vatRateDate",
            "in": "query",
            "description": "Date to get VAT rates for. Defaults to today",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfArticleAccountCodingApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/articleaccountcodings/{articleAccountCodingId}": {
      "get": {
        "tags": [
          "ArticleAccountCodings"
        ],
        "summary": "Get a specific article account coding",
        "description": "Get a specific article account coding by its unique identifier. The response will include the article account coding's details such as name, type, VAT rate information, and account numbers for different sales scenarios.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:sales\r\n* ea:sales_readonly",
        "parameters": [
          {
            "name": "articleAccountCodingId",
            "in": "path",
            "description": "The ID of the article account coding to retrieve",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "vatRateDate",
            "in": "query",
            "description": "Date to get VAT rates for. Defaults to today",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleAccountCodingApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/articlelabels": {
      "get": {
        "tags": [
          "ArticleLabels"
        ],
        "summary": "Gets all article labels",
        "description": "Get all article labels, or add query parameters to filter the results. The response will include a list of article labels with their details, such as name and description information.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:sales\r\n* ea:sales_readonly",
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfArticleLabelApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "ArticleLabels"
        ],
        "summary": "Create an article label",
        "description": "Create a new article label.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:sales",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleLabelApi"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The created article label",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleLabelApi"
                }
              }
            }
          },
          "400": {
            "description": "The article label can't be created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/articlelabels/{articlelabelid}": {
      "get": {
        "tags": [
          "ArticleLabels"
        ],
        "summary": "Gets an article label by id",
        "description": "Get a specific article label by its unique identifier. The response will contain the aricle label's details, including the article's name and description information.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:sales\r\n* ea:sales_readonly",
        "parameters": [
          {
            "name": "articleLabelId",
            "in": "path",
            "description": "This represents the Id of the article label.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleLabelApi"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      }
    },
    "/articlelabels/batch": { },
    "/articlelabels/{articleLabelId}": {
      "put": {
        "tags": [
          "ArticleLabels"
        ],
        "summary": "Replace an article label",
        "description": "Replace an existing article label's data with the provided new data. The article label must already exist in the system.\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:sales",
        "parameters": [
          {
            "name": "articleLabelId",
            "in": "path",
            "description": "This represents the Id of the article label",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArticleLabelApi"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated article label",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleLabelApi"
                }
              }
            }
          },
          "400": {
            "description": "The article label can't be updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonExtendedBadRequest"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "ArticleLabels"
        ],
        "summary": "Delete an article label",
        "description": "Deletes a specified article label. \r\n\r\n<br><br>\r\n___\r\n Requires any of the following scopes: \r\n* ea:sales",
        "parameters": [
       

# --- truncated at 32 KB (912 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/visma/refs/heads/main/openapi/visma-eaccounting-api-openapi.json