Skip to main content

Daily allowances (per diems) (API)

How daily allowances are handled in API

J
Written by Julia Winberg

A daily allowance is a tax-free payment to an employee for the additional living costs incurred during a business trip — typically meals and incidentals. The employee doesn't submit receipts; the amount is set by national tax law (and sometimes topped up by company policy).

In the Nordics, daily allowances are a major part of expense management. Finland, Sweden, and Norway each have their own rules — different rates, different rules about partial days, different deductions when meals are provided. Bezala has a calculator per country built in.

What's in a daily allowance

A daily allowance has:

  • A user — the employee taking the trip.

  • A destination country — chosen from /api/countries. Determines the daily rate and the calculation rules.

  • A list of entries — one per day or partial-day of the trip. Each entry has a date, a duration (full day, half day, "over six hours", etc., depending on country), and a list of free meals (deductions for meals the employee didn't have to pay for).

  • A description — the business purpose.

  • Optional cost centers — one per dimension.

Bezala calculates the cost: total compensation, deductions for free meals, and (for Sweden specifically) the taxable-with-tax portion.

Countries and conditional values

Daily allowance fields are conditional. The set of valid daily-rate options, the partial-day structures, the deduction percentages — all of these depend on the destination country, the year, and the company's settings. To get the right options for a specific allowance:

The response gives you the valid choices for each conditional field. If you're building a UI, drive your dropdowns from this. If you're doing batch import, the safer path is to call conditional_values after creating a draft and validate your import against what comes back.

Calculating the cost up-front

Before submitting, you can ask Bezala to compute the cost of a hypothetical allowance:

The response is the breakdown in cents:

total_cost_cents is what the employee gets paid. deduction_cost_cents is the amount that would have been paid if no meals were free — i.e. the deductions already taken. taxable_with_tax_cents is non-null only for Swedish allowances, and it's the part of the payment that's taxable for the employee in the year it's paid (Swedish rules treat amounts above the tax-free ceiling as a regular taxable salary).

This endpoint is great for showing an employee "your allowance will be €X" before they submit, and for letting integrations validate cost before pushing into Bezala.

Submitting a daily allowance

The structure mirrors calculate_cost, plus the standard fields:

The exact field names for entry type and free_meals depend on the country — they come from conditional_values. Don't hard-code them.

Lifecycle

Same lifecycle as receipts: draft → reviewing → unapproved/queue → accounted. The transition endpoints follow the same pattern:

The list endpoint takes the standard state, user_id, date_range, updated_after filters.

Action

Endpoint

Approve

PUT /api/daily_allowances/:id/approve

Approve with edits

same, with body

Disapprove with comment

POST /api/daily_allowances/:id/disapprove

Show details

GET /api/daily_allowances/:id

List

GET /api/daily_allowances

How daily allowances become accounting entries

When the accounting batch runs, daily allowances generate journal entries crediting the asset account "Reimbursable to employee" (or similar — depends on company config) and debiting the expense account configured per country. The SEPA file pays the employee.

The exact account configuration is set in the company-level allowance settings, not on each individual allowance. If you're integrating and want to override the asset account, you can't do it on the allowance itself — you'd be editing company config.

Country-specific notes

Finland. The daily allowance is structured around full and partial days, with the rate set by Verohallinto every year. Free meals reduce the allowance by 50% per meal up to a documented cap. The endpoints work as documented above.

Sweden. Skatteverket sets a tax-free ceiling per day. Above the ceiling, the allowance is taxable salary. Bezala's calculator tracks both the gross amount and the taxable_with_tax portion. There's also a separate endpoint, /api/skatteverket_declarations, that produces the year-end declaration files Swedish employers must submit.

Norway. Per Skatteetaten's rules. Distinguishes domestic (six-hour and over-twelve-hour) from foreign rates with country-specific multipliers. Same calculator pattern.

If your customer base is single-country, your integration can hard-code the country's specific structure. If it spans multiple countries, drive everything from conditional_values.

Common integration patterns

  • Travel platform → Bezala. When a trip is booked, your integration creates a draft daily allowance with the destination country and dates pre-filled. The employee opens Bezala, confirms the entries, and submits. This avoids the most error-prone part of allowance entry (typing in the country and dates).

  • Time-tracking → daily allowance. If your time-tracking system already records away-from-base days, post a daily allowance per business trip rather than per day. Group consecutive days in the destination country into a single allowance with multiple entries.

  • HR system → daily allowance. Payroll systems often need daily allowance data to calculate the year-end W-2 / KU / kontrolluppgift. Pull the list with GET /api/daily_allowances?state=accounted&date_range=... and feed it into payroll.

Did this answer your question?