User Sync
Keeping Flowcase users in sync with your HR system or identity provider ensures that people have access from day one, permissions stay correct, and leavers are deactivated promptly.
There are three supported approaches:
- SCIM v2 (recommended): automatic provisioning from your identity provider. Works with Microsoft Entra/Azure AD, Okta and all main enterprise identity providers that support the SCIM standard.
- Users API: build custom sync logic for anything SCIM does not cover.
- CSV upload: send Flowcase updated user lists as CSV files and we work out which changes to make.
Read through all three before you decide how to synchronise your users with Flowcase.
SCIM v2 Provisioning
SCIM (System for Cross-domain Identity Management) is an open standard for automating user provisioning. Flowcase supports SCIM v2, allowing you to synchronise users directly from identity providers such as:
- Microsoft Entra / Azure AD
- Okta
With SCIM, your identity provider pushes changes to Flowcase automatically. When a user is created, updated, or deactivated in your directory, the change is reflected in Flowcase without any custom code.
SCIM also supports mapping roles and permissions, so you can control the level of access users have in Flowcase directly from your identity provider.
Getting started with SCIM
- See the SCIM API reference for the full specification.
- Follow the SCIM - Microsoft Entra guide for step-by-step setup instructions with Microsoft Entra / Azure AD.
What SCIM handles
- Creating users when they are assigned to the Flowcase application
- Updating user attributes (name, email, department, etc.)
- Deactivating users when they are unassigned or soft-deleted
- Assigning roles via App Roles in your identity provider
Users API
The Users API gives you full control over user lifecycle management via REST. Use it when you need to integrate with systems that do not support SCIM, or when you need fine-grained control that goes beyond what SCIM provides.
Lookup users
Search users
GET https://<subdomain>.flowcase.com/api/v2/users/search
| Parameter | Type | Description |
|---|---|---|
from |
integer | Starting index for pagination. |
size |
integer [1-500] | Maximum results per page. |
sort_by |
string | Sort field: name (default), relevance, country. |
deactivated |
boolean | Include deactivated users when true. |
role |
string | Filter by role (e.g. consultant, external, internationalmanager). |
name |
string | Filter by name, email, or external ID. |
office_ids |
array of strings | Filter by one or more office IDs. |
Find user by ID
GET https://<subdomain>.flowcase.com/api/v1/users/<user_id>
Find user by email, external ID, or UPN
GET https://<subdomain>.flowcase.com/api/v1/users/find?email=<value>
GET https://<subdomain>.flowcase.com/api/v1/users/find?external_unique_id=<value>
GET https://<subdomain>.flowcase.com/api/v1/users/find?upn=<value>
Create a user
POST https://<subdomain>.flowcase.com/api/v1/users
{
"user": {
"country_id": "<country_id>",
"email": "<email>",
"upn": "<upn>",
"external_unique_id": "<employee_id>",
"office_id": "<office_id>",
"role": "<role>",
"extra_roles": [],
"name": "<name>",
"telephone": "<telephone>",
"landline": "<landline>",
"born_year": 1990,
"title": { "no": "<title>", "int": "<title>" },
"nationality": { "no": "<nationality>", "int": "<nationality>" },
"ensure_unique_custom_tag_ids_by_category": {
"<category_id>": "<tag_id>"
},
"send_email": false
}
}
Set send_email to true to send a welcome email to the new user.
Update a user
PUT https://<subdomain>.flowcase.com/api/v1/users/<user_id>
Only include the fields you want to change. When changing office_id, you must also provide the country_id of the new office's country.
Deactivate a user
PUT https://<subdomain>.flowcase.com/api/v1/users/<user_id>
{
"user": {
"deactivated": true
}
}
Reactivate a user
PUT https://<subdomain>.flowcase.com/api/v1/users/<user_id>
{
"user": {
"deactivated": false,
"send_email": false
}
}
Set send_email to true to send a welcome email on reactivation.
Delete a user
DELETE https://<subdomain>.flowcase.com/api/v1/users/<user_id>
Deleting a user permanently removes them from Flowcase. This cannot be easily undone.
CSV upload
Flowcase can ingest a CSV file listing your current users. You can upload the file to the user sync API, or to an SFTP folder we provide. Synchronisations of this kind usually run nightly, but the frequency is up to you.
When Flowcase processes the file we will:
- Create users that have a row in the file but are missing in Flowcase.
- Update any users that have changed (including changing department).
- Optionally remove or deactivate any users that are missing from the file.
- Notify a user via email whenever their email address has changed.
You should note that:
- Users are matched on
external_unique_idfirst, falling back to theemailfield. - External users are not deactivated even if they are not in the list.
- External users in the account are promoted to normal users if they are in the list, provided they match on
external_unique_idoremailand the default role is for a normal user.
If you are considering this option, please contact your Customer Success Manager.
CSV file fields
You can supply the following fields in the CSV file. If the file is exported from a user directory and you do not control the column headings, we can map those columns to ours. We need an example file in that case, so that we can set up the correct mappings in advance.
| Field | CSV column title (default) | Description | Required |
|---|---|---|---|
email |
The email address of the user. | yes | |
| External ID | external_unique_id |
The ID of the user in your user directory. | no (but recommended) |
| Country | country_code |
The name or 2 letter code of the country the user's department is in. | yes, unless a default country is configured |
| Department | office_name |
The name of the department the user belongs to. | yes, unless a default department is configured |
| Name | name |
The user's full name. | no |
| UPN | upn |
The unique email address used to identify a user when they log in via SSO. Only used if email or external_unique_id are not guaranteed to be present or stay consistent. |
no |
| Telephone | telephone |
The user's telephone number, to appear at the top of their CV. | no |
| Landline | landline |
The user's landline number, to appear at the top of their CV. | no |
| Title | title |
The user's job title, to appear at the top of their CV. | no |
| Birth year | born_year |
The user's year of birth, to appear at the top of their CV. | no |
| Nationality | nationality |
The user's nationality, to appear at the top of their CV. | no |
| Place of residence | place_of_residence |
The place the user lives, to appear at the top of their CV. | no |
| Roles | roles |
The roles the user should be assigned. Defaults to consultant if left blank. |
no |
Roles in the CSV
Roles are assigned through the roles column (or a custom column you map roles to). The column takes a space-separated list, where the first value is the base role for the user, followed by any extra roles.
Format: base_role extra_role extra_role
Example:
...,email,roles,...
...,foo@bar.com,consultant countrymanager,...
This gives the user foo@bar.com the consultant base role and the countrymanager extra role.
Roles are a single list within the roles column, so you must enter a single base role along with any extra roles together. See User roles for what each base and extra role can do.
departmentmanager role is only partially supported by the CSV import. You will need to manually assign users with any custom tag or department associations via the Users API.
Additional fields for custom tags
As well as the fields listed above, you can provide extra columns that map to custom tags in Flowcase. If a user has a value for a custom tag specified in the CSV, that tag is applied during the import. Custom tags can carry things like extra department or hierarchical information, or show the user's line manager. See Custom tags, and ask your Customer Success Manager for more on setting up custom tags in Flowcase.
Things we need to know
Before you upload a CSV file, Flowcase needs to enable and configure this feature for your account. Once you have decided on the format of your CSV file, contact techsupport@flowcase.com or your Customer Success Manager to set things up for you.
Some things we need to know:
| Topic | Guidelines |
|---|---|
| Will the file contain all users for the account? | There may be some users (administrators, for example) whose accounts are managed manually and so do not appear in the CSV. |
| Should we deactivate absent users? | Whether to deactivate users that exist in Flowcase but are not in the CSV. This can also be configured per country or per department. |
| Will you be providing external unique IDs? | We need to match users on the email address or external unique ID. |
| Default country (optional) | The country to use if none is specified in the CSV. |
| Default department (optional) | The department or office to use if none is specified in the CSV. |
| Default user access role | The default access level to use when creating new users. This is typically normal or external. Normal users can edit their own CV and see other users' CVs. External users can only see their own CV. |
| Separator | You can use a comma , or a semi-colon ; as the column separator. |
| Custom tags | Do any of the columns in the CSV need to map to custom tags in Flowcase? |
There are two ways to upload the CSV file to Flowcase: to our API, or to our SFTP server.
Upload via the API
You need an API key with administrator-level access. If you cannot create one yourself, ask someone with administrator access to Flowcase to create it for you. Include the key in the Authorization header of your HTTP requests. See Authentication & Security for the header format.
POST the file to:
POST https://<subdomain>.flowcase.com/api/v1/users/import/csv/<config_name>?dry_run=true
Parameters
| Parameter | Type | Description |
|---|---|---|
subdomain |
string | Replace <subdomain> with the subdomain you use to access Flowcase. |
config_name |
string | The import setting to use for the import. Use default for the default account setting. Contact customer support to configure a named setting for your account. |
dry_run |
boolean | Lets you check an import during the testing phase without committing any changes. Set this to true until you are satisfied everything is working. |
Request body
- The body of the request should be the CSV file encoded with UTF-8.
- Set the
Content-Typeheader totext/csv. - When using
curlto upload data to the API, use the--data-binaryflag when pointing to a CSV file. Other data flags such as--dataor-dcan transform the payload unexpectedly (trimming line breaks, for example), while--data-binaryperforms no transformation.
Response
The API responds with HTTP 200 for success, and 4xx for input errors. A successful response means the file upload finished and synchronisation has started. The changes may not be visible straight after the upload, and can take some time before an end user sees them.
{
"import_task": "85549c4c-31fb-44b4-bb70-da9wwc2b07a3",
"dry_run": false
}
cURL example
curl --location 'https://<subdomain>.flowcase.com/api/v1/users/import/csv/default?dry_run=true' \
--header 'Content-Type: text/csv' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--data-binary '@/Users/john/flowcase/user_list.csv'
Upload via SFTP
You can upload the file to our SFTP server. The file is processed shortly after it is uploaded.
Filename
Include the date of the upload in the name of the file, for example users_20220922.csv, so that the various uploads are easy to tell apart over time.
Required details
To enable the SFTP user sync, Flowcase needs the following information:
| Detail | Description |
|---|---|
| IP address or IP range | The IP address or IP range of the machine(s) which will connect to our SFTP server. Use the prefix format (for example 8.8.8.8/32) if possible. If in doubt, visit http://icanhazip.com from the server or workstation you will use to start the transfer. This gives you your current IP address. We can accommodate at most three addresses or ranges. |
| SSH public key | A copy of the SSH public key you would like to use to authenticate with us. |
SFTP server details
| Setting | Value |
|---|---|
| Server | sftp.flowcase.com |
| Username | The same as the subdomain you use to connect to Flowcase |
The connection should succeed, provided you connect from the IP ranges you gave us and use the same public key you provided. A 'connection timed out' error can mean you are connecting from an IP address we have not allowed.
User roles
Each user has exactly one base role and may also have additional extra roles.
Base roles
| Role | Description |
|---|---|
external |
Can only see and edit their own CV. Logs in with email/password. |
limited_access |
Like a normal user, but cannot read or download other CVs. |
consultant |
Can edit their own CV, read other CVs, and view official reference projects. |
internationalmanager |
Administrator with access to company-wide settings. |
Extra roles
| Role | Description |
|---|---|
referencemanager |
Can edit all reference projects in the account. |
countrymanager |
Can edit all CVs and users in their own country. |
departmentmanager |
Can edit CVs and references for specific departments or custom tags. |
bidmanager is also accepted as an extra role. Its permissions are not documented here; ask your Customer Success Manager before assigning it.
When assigning the departmentmanager role, also include role_allowed_office_ids and/or role_allowed_tag_ids to specify which departments or tags the manager has access to.
Example: assign department manager role
PUT https://<subdomain>.flowcase.com/api/v1/users/<user_id>
{
"user": {
"role": "consultant",
"extra_roles": ["departmentmanager"],
"role_allowed_office_ids": ["<office_id_1>", "<office_id_2>"],
"role_allowed_tag_ids": ["<tag_id_1>", "<tag_id_2>"]
}
}
Custom tags
You can assign custom tags to users during creation or update using the ensure_unique_custom_tag_ids_by_category field. This sets one tag per category and removes any previous tag in that category.
To list available custom tag categories and tags:
GET https://<subdomain>.flowcase.com/api/v1/masterdata/custom_tags/custom_tag_category
See the Integrations API reference for full details.