This is an n8n community node. It lets you use d.velop documents in your n8n workflows. This is a community node and not affiliated with n8n GmbH. Use at your own risk.
This project provides a gateway for hyperautomation by enabling seamless integration between the d.velop platform (https://www.d-velop.de) and external applications using n8n. The d.velop actions Node allows users to execute d.velop actions directly within n8n workflows, making it possible to automate document management, user operations, and custom process integrations. This enables powerful, flexible, and scalable automation across the entire d.velop ecosystem.
n8n is a fair-code licensed workflow automation platform.
Installation Operations Credentials Documentation Compatibility Resources
Follow the installation guide in the n8n community nodes documentation.
- Download documents automatically
- Import documents automatically to the DMS
- Retrieve the metadata from documents
- Retrieve user information
For every Action Node you want to execute, you need to have your credentials set up. Without them, the API would not have the required information to execute calls.
3.1 Base URL
- This is just the Base URL of your instance, marked in blue (don't copy the last /)
3.2 Authentication Method
- The Bearer Token is nothing else except the API key you can find in the d.velop instance configuration, under Login -> API key
- There you have to create an API key. Keep in mind that the key only shows once, therefore you should save the key somewhere safe. Also keep this key for yourself and do NOT hand it out.
3.3 Allowed HTTP Request
- For the node to work you need to allow the HTTP requests.
To use this node in a workflow you need to open the Nodes Panel and search for d.velop Actions
4.1 Pick an Action Mode
- Here you can choose between 4 stable actions or your volatile actions.
4.2 Stable Actions
Stable actions are predefined, and they will always be the same.
They are the standard features such as:
- Download a document
- Get document info
- Get user info
- Import document
4.3 Volatile Actions
- Volatile actions aren't predefined and differ from d.velop user to user. They are actions that are not hard-coded and aren't a standard.
- These actions can also be created in the Process Studio script tab, and can be used in this node.
As an example:
- Those are standard volatile Salesforce actions, and the Hello_World action is a script from the Process Studio.
- These actions are dynamic and the payload that they carry isn't displayed.
This is going to showcase how the stable Actions work in detail.
5.1 Download Document
- To set up the download node manually, you just need to fill in the mandatory fields and you are ready to download the file.
- To find out what the Repository string and the Document_ID are, you need to open the document and copy the marked section.
- The output will be displayed on the right side of the node.
5.1.2 Workflow
Webhook
A webhook listens for responses from the Discord bot that has been set up. If the user requests a document, he can fulfill three parameters, two of which are mandatory.
- Document ID:
- Repository
- Email (optional).
AI-Agent
- The Agent connected to the Ollama Chat Model is trained to convert these inputs into a string and filter out the important information.
- The agent received the following prompt:
You are a strict extraction engine.
Your only task is to extract two or three values from the user message:
- repositoryId
- documentId
- Email
Rules:
- Output ONLY valid JSON.
- No explanations.
- No markdown.
- No extra text.
- Always output both keys.
- If a value is missing, use null.
- Never invent values.
- Extract exact values only from the input.
Output format:
{
"repositoryId": "...",
"documentId": "...",
"email": "..."
}Code in Java Script This is a compact code node for custom JavaScript. The node's content is as follows:
const parsed = JSON.parse($json.output);
return [
{
json: parsed
}
];This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.
d.velop Actions - Download Document
- This action facilitates the download of the document using the repository and document ID.
- Please note that neither of these is set manually, they are both set using a simple JavaScript expression.
IF-Statment
- The IF statement is used to determine whether an email is given.
Send a Message - Email = True
- The truePath system will send an email when an email exists, containing the data from the d.velop action.
- If the email is successful, the user will receive a Discord verification message confirming the request.
Send a Message - Email = False
- This simply delegates the email aspect, ensuring that the message is transmitted directly to the intended Discord user.
5.2. Get Document Info
This action shows all the Information the Document has attached to it, for example:
- Document ID
- Document Location (URL)
- Self Link
- Delete Link
- Main content Link
- PDF Content Link
- Update Link
- Update with Content Link
- Versions Link
- LAs Modified Date
- Last Alteration Date
- Editor ID
- Editor Name
- Owner ID
- Owner Name
- Document CAption
- File Name
- File Type
- Fike MINE Type
- Document Number
- Creation Date
- File Size
- Document State
- Variant Number
- Last Access Date
- Document Categoty ID
- Documnet Category Name
- Retenition Date
- Custom Properties
- Source Categories
5.2.1 Setting up the Action
- To setup the Node manually, you just need to fill in the mandatory fields and you are ready to get the Document Info.
-
To find out what the Repository string is, you need to open the Document you want to get the Information from, via. the n8n node and copy the red Marked Link section.
-
To identify the Document ID you can, open te Details and Look for Document_Nr. This is also circled with a rectangle
- The output will be Display in the Rightside of the Node:
- This is a lot of JSON, so the whole Output wont be shown.
5.2.2 Workflow
Webhook
A webhook listens for responses from the Discord bot that has been set up. If the user requests a document, he can fulfill three parameters, two of which are mandatory.
- Document ID:
- Repository
- Specific_Metatada
- Email (optional).
AI-Agent
- The Agent connected to the Ollama Chat Model is trained to convert these inputs into JSON and filter out the important information.
- The agent received the following prompt:
You are a strict extraction engine.
Your only task is to extract the following values from the USER MESSAGE ONLY:
repositoryId
documentId
email
Metadata_Specific (user requested metadata fields)
CRITICAL OUTPUT RULES:
Output EXACTLY one valid JSON object.
The output MUST start with { and MUST end with }.
Do NOT output anything before {.
Do NOT output anything after }.
Do NOT output explanations.
Do NOT output markdown.
Do NOT output text outside the JSON.
The JSON MUST be complete and properly closed.
EXTRACTION RULES:
Never invent values.
Extract exact values only from the USER MESSAGE.
Do NOT extract values from system data, API responses, or metadata objects.
Only extract what the USER explicitly writes.
METADATA RULES:
Metadata = true if the user requests metadata.
Metadata = false if the user does NOT request metadata.
Metadata_Specific = null if the user did not request specific metadata fields.
Metadata_Specific = array of strings if specific metadata fields are requested.
If Metadata_Specific is not null, Metadata MUST be true.
If a value is missing, use null.
OUTPUT FORMAT (STRICT SCHEMA):
{
"repositoryId": "...",
"documentId": "...",
"email": "...",
"Metadata_Specific": "..."
}Code in Java Script
This is a compact code node for custom JavaScript. The node's content is as follows:
const parsed = JSON.parse($json.output);
return [
{
json: parsed
}
];This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.
d.velop Actions - Get Document Information
- This action facilitates the download of the document using the repository and document ID.
- Please note that neither of these is set manually, they are both set using a simple JavaScript expression.
AI-Agent1
- This Agent is responsible for Filtering out the Information that the Get Document Information is providing.
- The Promt the the AI got is filled with all the Metadata that the Action Produces, so the AI has access to it
- If the
{{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}is set to null the whole Metadata conerning the document will be shown The Prompt:
You are a metadata summarization engine.
Your task is to summarize metadata values coming from the node input.
The metadata source is:
{{ $json.response.sourceProperties[0].key }} : {{ $json.response.sourceProperties[0].value }},
{{ $json.response.sourceProperties[2].key }} : {{ $json.response.sourceProperties[2].displayValue }},
{{ $json.response.sourceProperties[3].key }} : {{ $json.response.sourceProperties[3].value }},
{{ $json.response.sourceProperties[4].key }} : {{ $json.response.sourceProperties[4].value }},
{{ $json.response.sourceProperties[5].key }} : {{ $json.response.sourceProperties[5].value }},
{{ $json.response.sourceProperties[6].key }} : {{ $json.response.sourceProperties[6].value }},
{{ $json.response.sourceProperties[7].key }} : {{ $json.response.sourceProperties[7].value }},
{{ $json.response.sourceProperties[8].key }} : {{ $json.response.sourceProperties[8].value }},
{{ $json.response.sourceProperties[9].key }} : {{ $json.response.sourceProperties[9].value }},
{{ $json.response.sourceProperties[10].key }} : {{ $json.response.sourceProperties[10].value }},
{{ $json.response.sourceProperties[11].key }} : {{ $json.response.sourceProperties[11].value }},
{{ $json.response.sourceProperties[12].key }} : {{ $json.response.sourceProperties[12].value }},
{{ $json.response.sourceProperties[13].key }} : {{ $json.response.sourceProperties[13].value }},
{{ $json.response.sourceProperties[14].key }} : {{ $json.response.sourceProperties[14].value }},
{{ $json.response.sourceProperties[15].key }} : {{ $json.response.sourceProperties[15].value }},
{{ $json.response.sourceProperties[16].key }} : {{ $json.response.sourceProperties[16].value }},
{{ $json.response.sourceProperties[17].key }} : {{ $json.response.sourceProperties[17].value }},
{{ $json.response.sourceProperties[18].key }} : {{ $json.response.sourceProperties[18].value }},
{{ $json.response.sourceProperties[19].key }} : {{ $json.response.sourceProperties[19].displayValue }},
{{ $json.response.sourceProperties[20].key }} : {{ $json.response.sourceProperties[20].value }},
{{ $json.response.sourceProperties[21].key }} : {{ $json.response.sourceProperties[21].value }},
{{ $json.response.sourceProperties[22].key }} : {{ $json.response.sourceProperties[22].value }},
{{ $json.response.sourceProperties[23].key }} : {{ $json.response.sourceProperties[23].value }};
User requested specific metadata:
{{ $('Code in JavaScript').item.json.Metadata_Specific }}
Rules:
If Metdata is = null : {{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}
Print out Everything
If Metadata_Specific is set: {{ $('Code in JavaScript').item.json.Metadata_Specific[0] }}
Only summarize the requested metadata fields.
Ignore all other metadata.
If Metadata_Specific is null:
Summarize ALL metadata fields.
Only use the metadata provided above.
Do NOT invent metadata.
Do NOT explain anything.
Output only the summary.IF-Statment
- The IF statement is used to determine whether an email is given.
Send a Message - Email = True
- The truePath system will send an email when an email exists, containing the data from Agents Output.
- If the email is successful, the user will receive a Discord verification message confirming the request.
Send a Message - Email = False
- This simply delegates the email aspect, ensuring that the message is transmitted directly to the intended Discord user.
5.3. Get User Info
This action displays all the information associated with the user. Please find below a list of all the functions that this action returns:
- getUserId – Returns the unique internal user ID
- getExternalId – Returns the external user ID (if available)
- getUserName – Returns the user's login username
- getDisplayName – Returns the user's full display name
- getGivenName – Returns the user's first name
- getFamilyName – Returns the user's last name
- getFormattedName – Returns the user's formatted full name
- getPrimaryEmail – Returns the user's primary email address
- getEmails – Returns all email addresses of the user
- getProfileUrl – Returns the user's profile URL
- getUserTitle – Returns the user's job title or position
- getPhotos – Returns the user's profile photo information
- getPhoneNumbers – Returns the user's phone numbers
- getGroups – Returns all groups the user belongs to
- getGroupIds – Returns the IDs of the user's groups
- getGroupDisplayNames – Returns the names of the user's groups
5.3.1 Setting up the Action
- To set this Action up you just need the User_ID.
- To Acquire the User_ID of a DMS User, you need to go in to the Configuration -> Administration -> User account and group management
- From there you just need to click the User you want the ID From, and Copy the red marked section from the URL
The output will be Displayed on the Output Tab:
5.3.2 Workflow
- This Workflow is a bit bigger and also Includes 2 Other Actions and a d.velop custom API Call. The Get User Info Action cant be utilized to demonstrate a good Usecase alone. Senariao:
If a User of the DMS Wants to download a specific Document, the Owner of that Document gets a E-Mail. To Approve or denie the Download request.
Webhook
A webhook listens for responses from the Discord bot that has been set up. If the user requests a document, he can fulfill 2 parameters, both of them are mandatory:
- Document ID
- Repository
AI-Agent
- The Agent connected to the Ollama Chat Model is trained to convert these inputs into a string and filter out the important information.
- The agent received the following prompt:
You are a strict extraction engine.
Your only task is to extract two or three values from the user message:
- repositoryId
- documentId
Rules:
- Output ONLY valid JSON.
- No explanations.
- No markdown.
- No extra text.
- Always output both keys.
- If a value is missing, use null.
- Never invent values.
- Extract exact values only from the input.
Output format:
{
"repositoryId": "...",
"documentId": "...",
}Code in Java Script This is a compact code node for custom JavaScript. The node's content is as follows:
const parsed = JSON.parse($json.output);
return [
{
json: parsed
}
];This small code block is responsible for parsing the string into individual objects. Therefore, they can be used subsequently.
d.velop Actions - Get Document Info
- Here the repository and the Document ID's are enterd with a Statment
- This node is Important because here you can get the DisplayValue from the Document Owner. This will be Utalised in the netxt node
HTTP-Request
-
THis node is Basicly just a Custom api Call to the identityprivider API
-
The Variable is the Name of the Document Owner
https://connect-for-n8n-test.d-velop.cloud/identityprovider/scim/users?filter=DisplayName eq "{{ $json.response.sourceProperties[2].displayValue }}"
- If you run this call, you can get the ID, of the Document Owner
d.velop Actions - Get User Info
- In this Node the User_ID is being user to get the E-Mail from the Document Owner
G-Mail Send a Message
- With the E-Mail we got from the Get User Info Action, we now can send a Approve request to the Document Owner
- Tis E-Mail also Displays who is Requesting this Document
IF True - Approved
- If the Document Owner Approved the download the Workflow procceds to Download the Document using the Download Document Action.
- And the Discord Bot replies to the User who sent the request with the File attatched to the Message.
IF False - Denied
- If the Download Request was denied by the Owner, the bot sends a message that you request was denied.
5.4. Import Document
This Action Allows you to Upload files directly to your DMS, using d.velop Inbound. The Action does not return Any Values, it just Uploads Files, so they can be Indexed.
5.4.1 Setting up the Wokflow
- To work with this Action, you need a Minimal Workflow:
- In order to Upload a file with the d.velop Action, you need a File in your Workflow.
- As an small example the "Read/Write Files from Disk" Node is Used to get a file in to the Workflow.
5.4.2 Setting up the Node
- This node in Paticular has an Input from The node before
File Name
-
The File name can either be set manually every Time, or you write a simple Java Script Expression:
{{ $json.fileName }}File Source
-
When configuring the node, set the File Source to From N8n Binary. This means the file will be taken from the binary data of a previous node in your workflow.
-
Alternatively, you can use From Base64/String as the File Source. This option allows you to upload a file using its Base64-encoded content instead of binary data.
Input Binary Property
- The Input Binary Property defines the name of the binary field that contains the file. In most cases, this property is called: binary.
Import Profile
- In order to get the Import Profile you need to navigate to configuration -> Document Managment -> Import -> Importoption -> Importprofile
- In this setting you can Copy the red Marked Import Profile
5.4.3 DMS Inbound
- This action submits a file to d.velop Inbound for automatic import into the Document Management System (DMS).
- Unlike the Download Document action, this action does not return any document data, it sends the file to d.velop and lets the configured import profile handle archiving and indexing.
- The following is an instructional guide to setting up volatile actions and loading the payload correctly.
6.1. Choose from your Actions
- If you chose your action you need to fill the Payload
6.2. Payload of an Action
-
To ascertain the payload of an action, it is necessary to utilize an API client, such as Bruno. -> https://www.usebruno.com
-
To retrieve all volatile actions, run this API call with the base URL and the API key (token).

-
If you execute this API call, you will receive a list of all the volatile actions.
-
In terms of testing, we will examine the Salesforce_getRecord action.
{
"id": "salesforce_get-record",
"display_name": "Salesforce - Get Record",
"tags": null,
"description": "This operation gets a record.",
"endpoint": "/actions/api/execute/salesforce_get-record",
"execution_mode": "Synchron",
"input_properties": [
{
"id": "objectApiName",
"type": "String",
"title": "Object API Name",
"description": "",
"required": true,
"visibility": "Standard",
"initial_value": "",
"object_properties": null,
"fixed_value_set": null,
"data_query_url": "",
"data_query_parameter": null
},
{
"id": "recordId",
"type": "String",
"title": "Record ID",
"description": "",
"required": true,
"visibility": "Standard",
"initial_value": "",
"object_properties": null,
"fixed_value_set": null,
"data_query_url": "",
"data_query_parameter": null
},
{
"id": "orgUrl",
"type": "String",
"title": "Salesforce Org URL",
"description": "",
"required": true,
"visibility": "Advanced",
"initial_value": "",
"object_properties": null,
"fixed_value_set": null,
"data_query_url": "/salesforce/process/actions/values/orgs",
"data_query_parameter": null
}
],
"output_properties": [
{
"id": "record",
"type": "Object",
"title": "Record",
"description": "",
"object_properties": null
}
],
"volatile": true- The payload consists of the input_properties. So in this instance the payload is:
{
"objectApiName": "Account",
"recordId": "001XXXXXXXXXXXXXXX",
"orgUrl": "https://your-org.salesforce.com"
}6.3 Assamble the Node
- The last step is to Paste the Payload in the Node of your desire, fill the properties wirh values and Execute the Node!
- This section describes the most common error code that may occur when using the d.velop Actions Node
7.1 Authentication Errors
| Error Code | Message | Cause | Solution |
|---|---|---|---|
| 401 | Unauthorized | Invalid or missing Bearer Token | Verify API key in credentials |
| 403 | Forbidden | Insufficient permissions | Check user permissions in d.velop |
| 400 | Bad Request | Invalid Base URL or headers | Verify Base URL and credentials |
Example response:
{
"error": "Unauthorized"
}7.2 Document Errors
| Error Code | Message | Cause | Solution |
|---|---|---|---|
| 404 | Document not found | Invalid document ID | Verify document ID |
| 404 | Repository not found | Invalid repository ID | Verify repository string |
| 400 | Invalid parameters | Missing required fields | Check node configuration |
7.3 Import Errors
| Error Code | Message | Cause | Solution |
|---|---|---|---|
| 400 | Invalid import profile | Wrong import profile | Verify import profile |
| 400 | Missing binary data | Binary property empty | Verify input binary property |
| 413 | Payload too large | File too large | Reduce file size |
7.4 Volatile Action Errors
| Error Code | Message | Cause | Solution |
|---|---|---|---|
| 400 | Invalid payload | Missing payload fields | Verify payload structure |
| 404 | Action not found | Invalid action ID | Verify action exists |
| 500 | Internal server error | Server-side issue | Check d.velop system |
Tested with n8n@2.12.1.