# Visma eAccounting — Accounting API: gotchas

> Canonical URL: https://developers.apideck.com/apis/accounting/visma-eaccounting/gotchas

## GET /accounting/bills

Visma eAccounting does not expose per-payment detail on the bill response. To check whether a bill is paid, use the `balance` and `total` fields:

- `balance === 0` → fully paid
- `balance < total` → partially paid (reflected in `status: partially_paid`)
- `balance === total` → unpaid (reflected in `status: authorised`)

`status` is derived from Visma eAccounting's `Status` field combined with `RemainingAmount`, not from `Status` alone.

Per-payment records (payment date, amount, bank account) are scoped under `/supplierinvoices/{id}/payments` in the Visma eAccounting API and are not surfaced on the unified Bill. Bill payments can be created via `POST /bill-payments` but not listed or retrieved individually through the unified API.

## GET /accounting/fiscal-periods

Visma eAccounting exposes fiscal years only, so every record has `type: year` and `period_number` is null. `status` is `closed` when the year is locked for accounting (`IsLockedForAccounting`, "no longer possible to bookkeep on the year"), otherwise `open`; the lock applies to every user until it is removed. It exposes no lock date, so `locked_through` is null, and `locked` and `future` are never returned. `name` and `fiscal_year` are the year in which the fiscal year ends.

## GET /accounting/trial-balance

Built from Visma's account balances at `filter[end_date]` (today by default), following every page, with the fiscal year from the fiscal years endpoint. Visma documents `Balance` only as "the total account balance at the given date", without a sign convention or whether income statement accounts reset at the start of the fiscal year, and no live response has been checked yet. The connector reads `Balance` as debit minus credit, takes income and expense accounts as the fiscal year's figure and treats earlier results as already in equity through the opening balances. Two checks turn a wrong reading into a `502` instead of a plausible report: the lines must balance (half a cent, on the unrounded balances), and, for Swedish companies only (company country `SE`, BAS chart), asset accounts (class 1) must not net to a credit while class 2 nets to a debit, which is what a credit-positive feed would produce; other countries' charts use the class digits differently, so that check is skipped for them and when the country cannot be read. `account_id` is the account number, the id of `GET /ledger-accounts/{id}`; a balance row without an account number is returned with `line_type` `unmapped` and null `account_id`. Accounts with a zero balance are left out. The basis follows the fiscal year's bookkeeping method (invoicing is accrual, or cash); Visma does not convert between them, so `filter[accounting_method]` must match that year's method or the request returns a `400`, and without the filter the year's own method is used. A year set to no bookkeeping has no ledger and returns a `400`. Currency is not returned.

[API reference](https://developers.apideck.com/apis/accounting/reference.md) · [Coverage matrix](https://developers.apideck.com/apis/accounting/coverage)
