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
ThePUT /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
Update settings
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
- Request a verification code:
bash
- Verify with the code:
bash
Change phone number
Follows the same two-step pattern using/v1/expense/me/phone:
POST /me/phone?action=changewith{ "phoneNumber": "+46701234567" }POST /me/phone?action=verifywith{ "verificationCode": "123456" }
DELETE /v1/expense/me/phone
Phone numbers must be in international format with a plus-code prefix (e.g.,
+46701234567).Change password
Example request
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
impersonatorType indicates the scope of impersonation:
Integration best practices
Fetch user context immediately after authentication
Fetch user context immediately after authentication
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.Use counters for badge notifications
Use counters for badge notifications
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.Cache user profile data
Cache user profile data
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.
Respect the fields format for settings
Respect the fields format for settings
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.Handle verification flows gracefully
Handle verification flows gracefully
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.
