externalSourceId field as the stable identifier, so you never need to store a Findity-internal id in your system. Read this guide alongside Users and Dimensions to complete a full onboarding flow.
Overview
An organization sits at the core of Findity’s data model. Each organization contains employees, expense categories, dimensions, and settings. Organizations are grouped under a partner, which is managed by a client application (your integration’s identity in Findity). ThePOST /organizations/externalid/{externalId}/ endpoint behaves as an upsert: if no organization with that externalSourceId exists it is created; if one already exists it is updated. This means you can run the same payload on a nightly schedule without risk of duplicates.
Use externalSourceId — the identifier from your ERP or HR system — as the primary key throughout. Findity assigns its own internal id, but you should never need to store or use it.
Prerequisites
- Complete Admin API — Getting started to obtain an access token with Admin API access.
- Note your
partnerCode— required when creating a new organization. - Note the
templateOrganizationIdof your default template organization (ask your Findity contact if unsure).
Key concepts
API endpoints
All endpoints are available under the Admin API base URL:Required headers
Include these headers with every request:Step 1 — List organizations
Retrieve all organizations the current API user is administrating. Use this to discover available organizations or to iterate over all of them when aggregating statistics. HTTPcURL
JSON
Step 2 — Create or update an organization
Create a new organization or update an existing one by sending aPOST request with the externalSourceId as the path parameter.
HTTP
Request body properties
Settings object
Example: Create a new organization
cURL
JSON
Example: Update an existing organization
When updating, include only the fields you want to change. TheclassName and partnerCode fields are not required for updates.
cURL
JSON
Step 3 — Get an organization
Retrieve a single organization by its external ID. HTTPcURL
JSON
Step 4 — Delete an organization
Delete an organization by its external ID. This operation is irreversible. HTTPDeleting an organization removes all associated data including employees, expense reports, and settings. This
action cannot be undone.
cURL
JSON
Lookup organization by VAT
Search for an organization using its VAT/registration number. This is useful for checking whether an organization already exists before creating a new one. HTTPcURL
result field has three possible values:
JSON
Report counters
Retrieve expense report statistics for an organization within a date range. BothfromDate and toDate are optional — omitting them returns counters for all time. Use ISO 8601 date format (YYYY-MM-DD).
HTTP
cURL
JSON
Common integration patterns
Onboarding new organizations
When onboarding a new organization from your external system:- Call
GET /organizations/externalid/lookup/?vat={vat}to check if the organization already exists. - If it does not exist, call
POST /organizations/externalid/{externalId}/withclassNameset tocom.findity.consumer.Companyand atemplateOrganizationIdinsettingsto inherit configuration from a template. - After creation, set up users, dimensions, and other configuration.
Syncing from ERP
To keep organization data in sync with your ERP:- Call
POST /organizations/externalid/{externalId}/on a schedule (e.g., nightly) for each organization. - Include only the fields that may have changed — the endpoint performs an upsert, creating or updating as needed.
- Use the same
externalSourceIdas your ERP’s identifier to maintain a consistent mapping.
Retrieving report statistics
To generate billing or usage reports:- Call
GET /organizations/to list all organizations. - For each organization, call
GET /organizations/externalid/{externalId}/reportcounters/with the desired date range. - Aggregate the counters across organizations as needed.
The
templateOrganizationId setting is only applied during organization creation. It copies categories, dimensions, and other configuration from the template. Supplying it on an update request has no effect.
