# Urentool
Integrates Urentool (opens new window) with the provisioning service by polling the Urentool API on a configurable schedule and syncing projects (matters) and client data to SharePoint.
DLL: Epona.Urentool.dll
# What it does
On each scheduled run, the plugin:
- Fetches all projects changed since the last run from the Urentool
/v2/projectsAPI endpoint, handling multi-page responses automatically. - Resolves the client code and client name from the project's client data using a prioritised fallback chain (see Client name resolution).
- Creates or updates the corresponding client and matter in SharePoint.
- Records the run timestamp so the next run fetches only changes since this run.
# Deployment
- Copy
Epona.Urentool.dllto the service's bin directory. - Restart the provisioning service.
- Open the Configurator, select the relevant
SharepointCfg, and configure the Urentool section.
# Configuration reference
# Connection
# Url
Type: string | Required: Yes
Base URL of the Urentool API. The plugin appends /v2/projects to this URL when fetching projects.
Example: https://yourfirm.api.urentool.nl/
# BearerToken
Type: string (secret) | Required: Yes
API key used to authenticate requests to the Urentool API. Configure this through the Secrets manager in the Configurator — it is stored encrypted and never in plain text.
# Scheduling
The plugin does not schedule any jobs if Url, BearerToken, or IntervalInMinutes is not configured.
# IntervalInMinutes
Type: integer | Required: Yes | Minimum: 1
How often the sync runs, in minutes. Must be at least 1.
# Disabled
Type: boolean | Required: No | Default: false
Set to true to prevent the plugin from scheduling sync jobs. Use this to temporarily disable the integration without removing configuration.
# StartTime
Type: TimeSpan | Required: No | Default: not set
Earliest time of day at which the sync may run. If the current time is before StartTime when a run is due, that run is skipped.
Format: HH:mm:ss — for example, 08:00:00.
# EndTime
Type: TimeSpan | Required: No | Default: not set
Latest time of day at which the sync may run. If the current time is after EndTime when a run is due, that run is skipped.
Format: HH:mm:ss — for example, 18:00:00.
# LastRunDateTime
Type: DateTime | Required: No
Timestamp of the last successful sync. The plugin fetches only projects with updated_at after this date. Updated automatically after each successful run.
Set this to a past date to force a full re-sync from that point forward.
# Fallback values
# DefaultClientCode
Type: string | Required: No
Client code used when the project's client has no number. If not set and no client number is present, ClientCode is left empty on the matter.
# DefaultClientName
Type: string | Required: No
Client name used when no name can be resolved from the project data (see Client name resolution). If not set and no name is found, ClientName is left empty on the matter.
# SharePoint column mapping
These properties control which SharePoint column receives each Urentool project field. When a property is left empty, that field is not written to SharePoint.
# ProjectStatusColumnName
Type: string | Required: No
SharePoint column to receive the project status field (e.g., "open", "closed").
# ProjectTypeColumnName
Type: string | Required: No
SharePoint column to receive the project project_type field.
# ProjectCalculationModelColumnName
Type: string | Required: No
SharePoint column to receive the project calculation_model field (e.g., "cost_based", "intern", "fixed").
# ProjectResponsibleEmployeeNameColumnName
Type: string | Required: No
SharePoint column to receive the name of the project's responsible employee.
# ProjectBillerEmployeeNameColumnName
Type: string | Required: No
SharePoint column to receive the name of the project's biller employee.
# CreatedAtColumnName
Type: string | Required: No
SharePoint column to receive the project's created_at timestamp.
# UpdatedAtColumnName
Type: string | Required: No
SharePoint column to receive the project's updated_at timestamp.
# Client name resolution
The client name is resolved from the project data in priority order — the first non-empty value is used:
client.name— the client's direct name fieldclient.invoice_name— the client's invoice namematter.invoice_name— the project's own invoice nameDefaultClientName— the configured fallback value
The client code follows the same pattern:
client.number— the client's code/numberDefaultClientCode— the configured fallback value
# Related links
- Plugins index — list of all available plugins
- Configuration reference — provisioning configuration reference