Skip to main content
Manage user profiles, preferences, settings, and account details in the Expense API Retrieve and manage the authenticated user’s profile, preferences, settings, and account details — the starting point for any Expense API integration.

Overview

The Expense API user endpoints operate through the /me context, meaning all operations apply to the currently authenticated user. After authenticating with a user-scoped token (via the authorization_code grant), the /me endpoint is your first call — it returns the user’s identity, preferences, and capabilities. The user context is essential because most Expense API endpoints (expenses, reports, approvals) are scoped to the authenticated user’s permissions and organization memberships.

Key concepts

Get current user

Retrieve the authenticated user’s profile. This is typically the first call after obtaining a user-scoped access token.

Query parameters

Example request

bash

Example response

Update current user

Update the authenticated user’s profile information.

Example request

bash

Updatable fields

Action parameter

The PUT /me endpoint also supports an action query parameter instead of a request body:

User settings (fields format)

User settings can also be fetched and updated using the fields format — the same dynamic form system used for expenses. This is useful when building a full settings UI.

Fetch settings

Returns a fields structure with grouped settings:

Update settings

Send the full fields structure back with updated values. Fields with requiresUpdate: true trigger server-side recalculation — follow the same update loop pattern described in the Fields system guide.

Counters

Retrieve badge counts across all organizations the user belongs to. Use this to show notification badges in your UI.

Example response

Counter fields

Profile image

Manage the user’s profile picture. When uploading, set the Content-Type header to the image format (e.g., image/jpeg, image/png). The request body should be the binary image data.

Email and phone management

Email and phone number changes require a two-step verification process to prevent unauthorized changes.

Change email

  1. Request a verification code:
bash
  1. Verify with the code:
bash

Change phone number

Follows the same two-step pattern using /v1/expense/me/phone:
  1. POST /me/phone?action=change with { "phoneNumber": "+46701234567" }
  2. POST /me/phone?action=verify with { "verificationCode": "123456" }
To remove a phone number entirely: DELETE /v1/expense/me/phone
Phone numbers must be in international format with a plus-code prefix (e.g., +46701234567).

Change password

Example request

A successful response returns new access and refresh tokens, since the password change invalidates the previous session:
Passwords must be at least eight characters long with at least one number, one uppercase letter, and one lowercase letter.
After a successful password change, immediately replace your stored access and refresh tokens with the new ones returned in the response. The old tokens are invalidated and will no longer work.

Extra recipients

Extra recipients are additional email addresses that receive expense-related notifications alongside the user’s primary email. Each extra recipient has a status of CONFIRMED or NOT_CONFIRMED — they must complete email verification before receiving notifications.

Impersonation

Users with impersonation privileges can search for and act as other users. This is used for admin tools, support scenarios, and delegated expense management.

Search impersonation targets

Example response

The impersonatorType indicates the scope of impersonation:
Impersonation requires special permissions. Check meta.capabilities.canImpersonate on the /me response before showing impersonation features in your UI.

Integration best practices

Call GET /me?include=meta.capabilities as the first request after obtaining a user-scoped token. This confirms the token is valid, identifies the user, and reveals system-level capabilities like impersonation access.
Poll GET /me/counters periodically to update badge counts in your UI. This single endpoint returns counts across all organizations, so you don’t need to query each organization separately.
User profile data (name, currency, language) changes rarely. Fetch it once at login and store it in your session. Only refresh when the user explicitly edits their profile.
When building a settings screen, use the fields format (GET /me/settings/fields) rather than constructing the UI manually. This ensures your settings UI stays in sync with any new settings Findity adds, and handles the requiresUpdate loop for interdependent settings.
Email and phone changes are asynchronous — the user receives a verification code externally. Design your UI to handle the two-step flow: show an input for the verification code after requesting the change, and handle error codes like EXPIRED_VERIFICATION_CODE by prompting the user to request a new code.

Error handling

Common errors when working with user endpoints:

Next steps

Last modified on August 31, 2026