> For the complete documentation index, see [llms.txt](https://docs.migration-center.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.migration-center.com/importers/d.velop-importer.md).

# d.velop Importer

## Introduction

The d.velop Importer imports document objects processed by migration-center into a d.velop documents repository by using the d.velop DMS and migration bulk APIs.

The importer supports:

* Document import with content, common attributes, and category attributes including datasets
* Multi-version document trees
* Document updates for already imported objects
* Optional content integrity verification
* Optional assignment to one or more parent Dossiers
* Retry and backoff handling for transient API errors, including throttling responses

## Known issues and limitations

* No error thrown when importing dataset attributes with invalid value (#80136)
* Document is imported with value that breaks attribute limits (#80132)
* Unreported deletion of previous imported versions when a versions down the tree throws an error and is not reimported (#80148)
* Intermediate version update document triggers rollback of the other versions that are newer (#80182)
* Access date attribute is set to 'Jan 1, 1 1:44:24 AM' in target system when no value is set in MC (#80393)

## Prerequisites

### Java version

The d.velop importer requires a minimum of Java 17.

### API Key

An API Key needs to be created in d.velop from Configuration -> Infrastructure and security -> API Key. This API Key will be used to run the d.velop Importer.

## Importer Configuration

The common adaptor parameters are described in [Common Parameters](https://docs.migration-center.com/common-parameters#common-adaptor-details).

The configuration parameters available for the d.velop importer are described below:

### Importer Parameters

* **serverUrl\***  \
  URL of the d.velop server.  \
  Example: <https://my-tenant.d-velop.cloud/dms/r>

* **apiKey\***  \
  API key used to connect to d.velop.

* **repositoryName\***  \
  Name of the target repository in d.velop.

* **checkContentIntegrity**  \
  Enables content integrity verification during import. RIPEMD256 algorithm required for the scanned objects.\
  See [Content](#content).

* **automaticDossierCreation**\
  Flag indicating if dossiers will be created automatically based on the structure configuration in the target system. \
  When dissabled no Dossiers will be created even if a structure is configured to create Dossiers.\
  When enabled, if any existing Structure is configured to use the attributes present on the Document then the Dossiers will be created.\\

* **batchSize**  \
  The number of Documents/Version Trees that can be added to a bulk import request. The default value is 50.  \\

* **numberOfThreads**  \
  Number of parallel importer threads. \
  Maximum allowed threads across all running import jobs per d.velop server is 10.

* **loggingLevel\***  \
  See [Common Parameters](https://docs.migration-center.com/common-parameters#logging-level).

### Throttling Configuration

When importing very large version trees or objects with large content, getting multiple **400, 423, and 504 errors** indicate that the import is being **throttled** by d.velop.

The solution in this case, as recommended by d.velop, is to lower the **batchSize** parameter value. This batch size indicates the number of Version Trees in a batch, not individual objects, so importing large version trees with a large **batchSize** can result in throttling.

In case the import is being throttled and requests are timing out you can find the **dvelop-importer-config.properties** file in \<Your Jobserver Installation Folder>/lib/mc-dvelop-importer.

This file allows you to configure several parameters that will change the importer behavior.&#x20;

```
# HTTP connection timeout in milliseconds (default: 1800000)
timeout=1800000

# Maximum number of retry attempts for API calls (default: 4)
max_retries=4

# Initial backoff time (in seconds) in seconds before retrying a failed API call (default: 5)
initial_backoff=5

# Delay in seconds between starting each thread during ramp-up (default: 1)
ramp_up_delay=1
```

## Migset System Rules

* **alterationText**  \
  Version change reason text sent for a document version.
* **filename\***  \
  File name including extension.  \
  Example: contract\_2026.pdf  \
  Required.
* **mc\_content\_location**\
  Absolute path to content file used for import.  \
  If empty, importer uses the object content location from scan data.
* **parentDossiers**  \
  Multivalue list of parent dossier IDs to link the document to one or more dossiers.  \
  Each ID must exist in d.velop and be a dossier type.
* **target\_type\***  \
  Multivalue rule with exactly 2 values.  \
  Value 1 must be dvelop\_document  \
  Value 2 must be the d.velop category name  \
  Example values: dvelop\_document and Invoices

## Features

### Common Attributes

You need to use the **dvelop\_document** object type as the first value in target\_type for all documents you are importing.\
This object type has the following common d.velop attributes:

* **Owner\***
* **Created\***
* **Last Modified**
* **File Changed On**
* **Access Date**
* **Comments**
* **Document Number**
* **End of Retention Period**
* **Variant Number**

{% hint style="info" %}
The **Document Number** needs to be unique per document. \
**Multiple documents** can be imported under the **same Document Number** only if their **Variant Number is unique per document.**
{% endhint %}

### Categories

You need to set a Category as the second value in target\_type.&#x20;

Your category can have any number of custom attributes. All available d.velop attribute types are supported, including attributes with Datasets.

{% hint style="warning" %}
d.velop allows a Category to contain multiple attributes with the same name. This is not supported in migration-center. \
Setting attributes which are not unique in the d.velop Category will result in an error.
{% endhint %}

### Content

d.velop requires that all documents have content and that their content is not 0 kb.

If **checkContentIntegrity** is enabled your source objects need to have had their checksum values calculated during the scanning process. \
This checksum value needs to have been calculated using **RIPEMD256** algorithm. Using any other algorithm will result in an error on import.&#x20;

### Dossiers

You can use the parentDossiers system attribute to assign documents to one or more Dossiers.&#x20;

You need to use the Dossier's ID, setting one value for each Dossier. \
Any Dossier set here needs to already exist in d.velop. If a set Dossier does not exist an error will be thrown on import.

### Versions and Updates

Document versions and updates are supported.

Because of how the d.velop API works, when new versions are imported for an existing version tree, the previously imported versions are deleted and the whole version tree is reimported. There are certain scenarios where this can result in unintuitive behavior in migration-center.

For throtling issues related to large version trees see: [Throttling Configuration](#throttling-configuration)

#### A version tree is imported in different migsets

When importing new versions for an existing version tree in a separate migset, if the second import throws an error, the previously imported version tree will be deleted in d.velop but will still show up as imported in migration-center.

The solution is to reset the entire version tree and reimport it.

#### An update for an intermediate version is imported after the full version tree

After importing a full version tree, if an update for an intermediate version is imported (Ex. Update for version 3 out of 6), the version tree in d.velop will now only show the state of the version tree for that intermediate update. So only versions 1 to 3.&#x20;


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.migration-center.com/importers/d.velop-importer.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
