# 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:

  1. Fetches all projects changed since the last run from the Urentool /v2/projects API endpoint, handling multi-page responses automatically.
  2. Resolves the client code and client name from the project's client data using a prioritised fallback chain (see Client name resolution).
  3. Creates or updates the corresponding client and matter in SharePoint.
  4. Records the run timestamp so the next run fetches only changes since this run.

# Deployment

  1. Copy Epona.Urentool.dll to the service's bin directory.
  2. Restart the provisioning service.
  3. 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:

  1. client.name — the client's direct name field
  2. client.invoice_name — the client's invoice name
  3. matter.invoice_name — the project's own invoice name
  4. DefaultClientName — the configured fallback value

The client code follows the same pattern:

  1. client.number — the client's code/number
  2. DefaultClientCode — the configured fallback value
Last Updated: 5/11/2026, 2:44:29 PM