UDMG as Client
When UDMG acts as a Client, it initiates file transfers to or from remote systems using supported protocols.
In this model, UDMG establishes outbound connections to remote endpoints, such as partner servers or cloud storage providers, and executes transfers based on a defined Pipeline configuration.
Client Pipelines support both push scenarios (sending files to a remote system) and pull scenarios (retrieving files from a remote system). In all cases, the Local Filesystem is involved as either the source or destination of the transfer.
Unlike other Pipeline types, where an external partner action initiates the file transfer, in UDMG as Client Pipelines, each transfer must be explicitly initiated through a request to the UDMG REST API.
Supported Pipelines
Push Scenarios
| Pipeline Name | Source Endpoint | Destination Endpoint | Description |
|---|---|---|---|
| Local Filesystem to Remote AS2 Server | Local Filesystem | Remote AS2 Server | Transfers messages from the local filesystem to a remote AS2 server. |
| Local Filesystem to Remote FTP(S) Server | Local Filesystem | Remote FTP(S) Server | Transfers files from the local filesystem to a remote FTP(S) server. |
| Local Filesystem to Remote SFTP Server | Local Filesystem | Remote SFTP Server | Transfers files from the local filesystem to a remote SFTP server. |
| Local Filesystem to Remote Cloud Storage | Local Filesystem | Remote Cloud Storage | Transfers files from the local filesystem to remote cloud storage. |
Pull Scenarios
| Pipeline Name | Source Endpoint | Destination Endpoint | Description |
|---|---|---|---|
| Remote FTP(S) Server to Local Filesystem | Remote FTP(S) Server | Local Filesystem | Transfers files from a remote FTP(S) server to the local filesystem. |
| Remote SFTP Server to Local Filesystem | Remote SFTP Server | Local Filesystem | Transfers files from a remote SFTP server to the local filesystem. |
| Remote Cloud Storage to Local Filesystem | Remote Cloud Storage | Local Filesystem | Transfers files from remote cloud storage to the local filesystem. |
Scheduled Transfers
A Scheduled Transfer is a transfer request created through the UDMG REST API for a UDMG as Client Pipeline.
When a Scheduled Transfer is submitted, UDMG creates a Scheduled Transfer Record, waits until the specified execution time, and then starts the transfer using the selected Pipeline.
Scheduled Transfers are used for both immediate transfers and transfers scheduled to run in the future.
Each Scheduled Transfer can be monitored through the UDMG REST API.
If the Scheduled Transfer uses a Wildcard, multiple Transfer Records can be created from a single Scheduled Transfer request.
Scheduled Transfer Statuses
| Status | Description |
|---|---|
Pending | The Scheduled Transfer was created and is waiting to be picked up for execution. Also set when retrying after failure. |
Running | The Transfer associated with this Scheduled Transfer is currently being executed. |
Completed | The Transfer associated with this Scheduled Transfer finished successfully. |
Failed | Any of the Transfers associated with this Scheduled Transfer failed and the maximum number of retries was exceeded. Also used when a wildcard Scheduled Transfer matches no files. |
Cancelled | The Scheduled Transfer was canceled before or during execution. |
Viewing a Scheduled Transfer
Scheduled Transfers can be viewed through the Scheduled Transfers Dashboard (in the UDMG Admin UI) or the UDMG REST API.
API Endpoint
Returns the details of the specified Scheduled Transfer.
GET /api/v1/domains/{domainName}/transfers/schedules/{scheduleId}
Authentication
This endpoint requires authentication using a valid UDMG User username and password.
Permissions
The authenticated User must have one of the following Roles:
- System Administrator (only for Primary Domain)
- Domain Administrator
Path Parameters
| Parameter | Description |
|---|---|
domainName | The name of the Domain that owns the Scheduled Transfer. |
scheduleId | The identifier of the Scheduled Transfer to view. |
Response
Returns the Scheduled Transfer Record.
Example
JSON
{
"scheduleId": 22,
"transferId": 81,
"pipeline": "push_lfs_2_gcp",
"username": "udmg.sys-admin",
"source": "/as2.txt",
"destination": "/virtual/transfer/pushed_file2.txt",
"schedule": "2026-04-27T17:03:59.384Z",
"status": "Completed",
"executedAt": "2026-04-28T08:12:02.041009Z",
"completedAt": "2026-04-28T08:12:02.045332Z",
"transferAttempt": [
{
"attemptNumber": 1,
"transferId": 81,
"startedAt": "2026-04-28T08:12:02.04102155Z",
"completedAt": "2026-04-28T08:12:02.045331793Z"
}
],
"matchFiles": 1
}
Canceling a Scheduled Transfer
Scheduled Transfers can only be canceled through the UDMG REST API.
API Endpoint
Cancels the specified Scheduled Transfer.
PUT /api/v1/domains/{domainName}/transfers/schedules/cancel/{scheduleId}
Authentication
This endpoint requires authentication using a valid UDMG User username and password.
Permissions
The authenticated User must have one of the following Roles:
- System Administrator (only for Primary Domain)
- Domain Administrator
Path Parameters
| Parameter | Description |
|---|---|
domainName | The name of the Domain that owns the Scheduled Transfer. |
scheduleId | The identifier of the Scheduled Transfer to cancel. |
Response
Returns the canceled Scheduled Transfer Record.
Example
JSON
{
"scheduleId": 48,
"pipeline": "ok-pull",
"username": "udmg.domain-admin",
"source": "/",
"destination": "partner/inbound/archive",
"schedule": "2024-01-01T00:00:00Z",
"status": "Cancelled",
"errorMessage": "cancel by user",
"statusMessage": "Request cancelled by user.",
"completedAt": "2026-04-23T20:30:26.286420081Z",
"options": {
"includeFilter": "*.txt"
}
}
Canceling All Scheduled Transfers
Cancels all Scheduled Transfers for the specified Domain.
API Endpoint
PUT /api/v1/domains/{domainName}/transfers/schedules/cancel-all
Authentication
This endpoint requires authentication using a valid UDMG User username and password.
Permissions
The authenticated User must have one of the following Roles:
- System Administrator (only for Primary Domain)
- Domain Administrator
Path Parameter
| Parameter | Description |
|---|---|
domainName | The name of the Domain whose Scheduled Transfers will be canceled. |
Request Body
| Property | Description | Type | Required | Default |
|---|---|---|---|---|
reason | Optional reason for the cancellation. | string | No | n/a |
Response
Returns a summary of the cancellation result.
Example
JSON
{
"cancel-all": {
"count": 3,
"message": "Successfully cancelled 3 schedules",
"status": "success"
}
}
Cancellation Behavior
When a Scheduled Transfer has been triggered, cancellation may require calling more than one endpoint depending on how far the transfer lifecycle has progressed. This applies whether canceling a single Scheduled Transfer or all Scheduled Transfers at once.
No Transfers Created Yet
If the Scheduled Transfer has been triggered but no Transfer Records have been created, cancel it using Cancel a Scheduled Transfer or Cancel All Scheduled Transfers. Since no active Transfers exist, no additional cancellation is needed.
Transfers Running
If the Scheduled Transfer has been triggered and Transfer Records have been created, both must be canceled independently:
- Cancel the Scheduled Transfer(s) using Cancel a Scheduled Transfer or Cancel All Scheduled Transfers to prevent new Transfers from being triggered.
- Cancel the active Transfer(s) using Cancel a Transfer or Cancel All Transfers to stop Transfers that are already in progress.
Canceling active Transfers without first canceling the Scheduled Transfers may allow new Transfers to be triggered immediately after.
Transfers vs. Scheduled Transfers
A Transfer must not be confused with a Scheduled Transfer, as they are related but distinct Records in UDMG.
A Transfer is a single execution: one file moved through a Pipeline. Each execution produces exactly one Transfer Record with its own status lifecycle.
A Scheduled Transfer only applies to UDMG as Client Pipelines. A Scheduled Transfer is a transfer request created through the UDMG REST API for a UDMG as Client Pipeline.
When a Scheduled Transfer is submitted, UDMG creates a Scheduled Transfer Record, waits until the specified execution time, and then starts the transfer using the selected Pipeline, creating one or more Transfer Records.
Scheduled Transfers are used for both immediate transfers and transfers scheduled to run in the future.
One Transfer Record
In a standard and successful case, one Scheduled Transfer creates exactly one Transfer Record.
The Scheduled Transfer Record includes:
scheduleId: unique ID of this Scheduled Transfer Record.transferId: ID of the Transfer Record created for this transfer.transferAttempt[0].transferId: matches the top-leveltransferId.matchFiles: number of files transferred (1in this case).
{
"scheduleId": 22,
"transferId": 81,
"pipeline": "push_lfs_2_sftp",
"username": "udmg.sys-admin",
"source": "/outbound/report-2026-07.csv",
"destination": "partner/inbound/report-2026-07.csv",
"schedule": "2026-07-01T06:00:00Z",
"status": "Completed",
"executedAt": "2026-07-01T06:00:01.041009Z",
"completedAt": "2026-07-01T06:00:02.045332Z",
"transferAttempt": [
{
"attemptNumber": 1,
"transferId": 81,
"startedAt": "2026-07-01T06:00:01.041009Z",
"completedAt": "2026-07-01T06:00:02.045332Z"
}
],
"matchFiles": 1
}
The corresponding Transfer Record includes:
transferId: matches thetransferIdon the Scheduled Transfer Record.isSchedule: set totrue, indicating this Transfer was triggered by a Scheduled Transfer.scheduleId: ID of the parent Scheduled Transfer Record.
{
"uuid": "3c481a2e-e2a7-474e-8d2d-2907a14e41a8",
"updatedAt": "2026-07-01T06:00:02.609389957Z",
"transferId": 81,
"sessionId": 134,
"sessionUUID": "2c10b7c2-f57a-419c-810d-2750d8e24c26",
"accountName": "udmg.sys-admin",
"protocol": "SFTP",
"pipeline": "push_lfs_2_sftp",
"endpointSource": "local-lfs",
"endpointSourceType": "local::filesystem",
"endpointDestination": "partner-sftp",
"endpointDestinationType": "remote:sftp:server",
"source": "/outbound/report-2026-07.csv",
"destination": "partner/inbound/report-2026-07.csv",
"workDirectory": "/tmp/udmg",
"progress": 0,
"fileSize": 0,
"isSend": true,
"isSchedule": true,
"scheduleId": 22,
"status": "Completed",
"startedAt": "2026-07-01T06:00:01.041009Z",
"completedAt": "2026-07-01T06:00:02.045332Z"
}
Multiple Transfer Records
One Scheduled Transfer can result in multiple Transfer Records if it uses a Wildcard or if the transfer is retried due to a failure. Unlike the single-file case, the Scheduled Transfer Record has no transferId.
The Scheduled Transfer Record includes:
scheduleId: unique ID of this Scheduled Transfer Record.transferAttempt[0].transferId:0, because there is no single Transfer Record to reference.matchFiles: number of files that matched (2here).
{
"scheduleId": 4,
"pipeline": "push_lfs_2_sftp",
"username": "udmg.sys-admin",
"source": "/outbound/",
"schedule": "2026-07-01T06:00:00Z",
"status": "Completed",
"executedAt": "2026-07-01T06:00:01.018080Z",
"completedAt": "2026-07-01T06:00:02.201716Z",
"transferAttempt": [
{
"attemptNumber": 1,
"transferId": 0,
"startedAt": "2026-07-01T06:00:01.018080Z",
"completedAt": "2026-07-01T06:00:02.201716Z"
}
],
"matchFiles": 2
}
Each corresponding Transfer Record includes:
isSchedule: set totrue, indicating this Transfer was triggered by a Scheduled Transfer.scheduleId: ID of the parent Scheduled Transfer Record.
- Transfer Record (File 1)
- Transfer Record (File 2)
{
"transferId": 10,
"accountName": "udmg.sys-admin",
"pipeline": "push_lfs_2_sftp",
"source": "/outbound/report-2026-07-01.csv",
"destination": "partner/inbound/report-2026-07-01.csv",
"isSend": true,
"isSchedule": true,
"scheduleId": 4,
"status": "Completed",
"startedAt": "2026-07-01T06:00:01.036160Z",
"completedAt": "2026-07-01T06:00:01.070308Z"
}
{
"transferId": 11,
"accountName": "udmg.sys-admin",
"pipeline": "push_lfs_2_sftp",
"source": "/outbound/report-2026-07-02.csv",
"destination": "partner/inbound/report-2026-07-02.csv",
"isSend": true,
"isSchedule": true,
"scheduleId": 4,
"status": "Completed",
"startedAt": "2026-07-01T06:00:01.039553Z",
"completedAt": "2026-07-01T06:00:01.073216Z"
}
For more details, refer to Transfers.
Transfer Scheduling via UDMG REST API
Transfers for UDMG as Client Pipelines must be scheduled through the UDMG REST API, using the following endpoint:
POST /api/v1/domains/{domainName}/transfers/schedules
For details about the request structure and available body request parameters, see the Transfer Scheduling via UDMG REST API section in each UDMG as Client Pipeline page.
Wildcards
Wildcard support allows a single Scheduled Transfer API request to match and transfer multiple source files using a filename pattern.
When a wildcard is used, UDMG evaluates the resolved source directory, identifies all files whose names match the pattern, and creates an individual Transfer Record for each match.
Wildcard matching applies only to filenames, not directories. UDMG searches within the source directory resolved from the combination of the Endpoint configuration, the Pipeline configuration, and the Schedule Transfer API request.
The exact path structure depends on the Pipeline type and the source Endpoint being used.
Wildcards are useful when transferring recurring files such as daily reports, batch exports, or groups of files that follow a naming convention.
Transfer retries are disabled for Transfers that were created using a Wildcard.
Supported Patterns
Wildcard matching follows the supported filter syntax.
In UDMG, wildcard matching applies only to filenames in the resolved source directory. It does not expand or select directories.
If a pattern matches a file in a subdirectory, that file is skipped and the subdirectory is logged with the skip_directory key.
| Description | Pattern | Matches | Does not match |
|---|---|---|---|
| Wildcard | *.jpg |
|
|
| Alternates | *.{jpg,png} |
|
|
| Path Wildcard | ** |
|
|
| Any Char | *.t?t |
|
|
| Range | *.[a-z] |
|
|
| Class | *.\d\d\d |
|
|
| Regexp | *.{{jpe?g}} |
|
|
Using Wildcards in the Scheduled Transfer REST API Endpoint
To use a wildcard, submit the standard Schedule Transfer API request and provide the pattern in options.includeFilter.
Note that the source property can include a subdirectory, but must not include a filename.
API Endpoint
POST /api/v1/domains/{domainName}/transfers/schedules
Request Body Example
{
"pipeline": "remote-sftp-pull",
"scheduled": "2026-05-01T10:00:00Z",
"source": "/inbound/",
"destination": "/archive/",
"options": {
"includeFilter": "report-*.csv"
}
}
In this example:
- A Scheduled Transfer is created.
- UDMG searches the
/inbound/directory following the configured paths. - All files matching
report-*.csvare selected. - One Transfer is created for each matching file with a
scheduleIdproperty that matches the Scheduled Transfer in step 1. - The Scheduled Transfer completes after all child Transfers finish.
Validating a Wildcard Pattern
Before submitting a Scheduled Transfer with a wildcard, you can use the Dry-Run API endpoint to preview which files the pattern would match. Although the request uses the POST method, the endpoint is read-only: no transfer is performed, no Scheduled Transfer Record or Transfer Record is created, and nothing is written to the database.
If the Pipeline is disabled, the Dry-Run endpoint cannot be used.
API Endpoint
POST /api/v1/domains/{domainName}/transfers/schedules/dry-run
Authentication
This endpoint requires authentication using a valid UDMG User username and password.
Permissions
Any authenticated User has permission to use this API endpoint.
Path Parameters
| Parameter | Description |
|---|---|
domainName | The name of the Domain that the Pipeline belongs to. |
Request Body
| Property | Description |
|---|---|
pipeline | Name of the Pipeline whose Source Endpoint will be searched for files matching the pattern. |
source | Directory at the Source Endpoint to list. Can include a subdirectory, but must not include a filename. Subdirectories of the resolved directory are not traversed. The directory must exist on the Source Endpoint, or the request will fail. To list the root directory, use Unlike the Scheduled Transfer endpoint, |
options.includeFilter | Wildcard pattern used to filter the returned files. Accepts the same patterns as a Wildcard Scheduled Transfer. An empty string returns no files. |
scheduled | Accepted for compatibility with the Scheduled Transfer endpoint, but ignored. |
destination | Accepted for compatibility with the Scheduled Transfer endpoint, but ignored. |
Example
{
"pipeline": "sftp-lfs-pipeline",
"source": "/inbound/reports/",
"options": {
"includeFilter": "report-*.csv"
}
}
Response
Returns the list of files matched at the Source Endpoint, along with metadata about the resolved Pipeline and request.
| Property | Description |
|---|---|
files | The files matched at the Source Endpoint. Each entry has the structure described in File Properties below. |
matchFiles | Number of files matched. |
includeFilter | The wildcard pattern used to match files. Not returned if no wildcard was specified or if an empty string was used. |
source | The directory that was searched at the Source Endpoint. |
pipeline | Name of the Pipeline used for this request. |
endpointSrc | Name of the Pipeline's Source Endpoint. |
endpointDst | Name of the Pipeline's Destination Endpoint. |
credentialSrc | Name of the Credential used at the Source Endpoint. Not returned if not applicable. |
credentialDst | Name of the Credential used at the Destination Endpoint. Not returned if not applicable. |
File Properties
Each entry in the files array has the following structure:
| Property | Description |
|---|---|
path | Path of the file relative to the Source Endpoint root. |
filename | File name and extension. |
size | File size, in bytes. |
modTime | Last modification time of the file. |
permissions | For Linux, standard 3-digit octal permission code (e.g., Included only when the Source Endpoint is a Local Filesystem or Remote SFTP Server; omitted for Remote FTP(S) and Remote Cloud Storage Endpoints. |
Example
JSON
{
"files": [
{
"path": "inbound/reports/report-2026-07-28.csv",
"filename": "report-2026-07-28.csv",
"size": 204800,
"modTime": "2026-07-28T08:15:00.000Z",
"permissions": "644"
},
{
"path": "inbound/reports/report-2026-07-29.csv",
"filename": "report-2026-07-29.csv",
"size": 198144,
"modTime": "2026-07-29T08:12:30.000Z",
"permissions": "644"
},
{
"path": "inbound/reports/report-2026-07-30.csv",
"filename": "report-2026-07-30.csv",
"size": 210432,
"modTime": "2026-07-30T08:10:45.000Z",
"permissions": "644"
}
],
"matchFiles": 3,
"includeFilter": "report-*.csv",
"source": "/inbound/reports/",
"pipeline": "sftp-lfs-pipeline",
"endpointSrc": "remote-sftp",
"endpointDst": "lfs",
"credentialSrc": "remote-sftp-cred"
}
Once a Dry-Run returns the files you expect, you can submit the same request body to the Scheduled Transfer endpoint (filling in the scheduled and destination fields, if you haven't included them already).
Scheduled Transfer Results
- If all matched files complete successfully, the Scheduled Transfer is marked
Completed. - If no files match the pattern, the Scheduled Transfer is marked
Failed. - If any child Transfer fails, the Scheduled Transfer is marked
Failed.
Using Wildcards can create a large number of Transfers simultaneously. Broad patterns or large source directories may significantly increase CPU, memory, disk, and network usage.
UDMG limits the number of file transfers that run concurrently within a single wildcard expansion. This limit is controlled by transfer.scheduler_max_concurrent_transfers in the configuration file (default: 10).
Viewing All Transfers Created by a Wildcard Schedule
When using a wildcard, each matched file creates its own Transfer Record. To view all Transfers generated by one wildcard schedule, filter the Transfers by the Scheduled Transfer ID.
API Endpoint
GET /api/v1/domains/{domainName}/transfers?scheduleId={scheduleId}
Path Parameter
| Parameter | Description |
|---|---|
domainName | The name of the Domain that owns the Scheduled Transfer. |
Query Parameter
| Parameter | Description |
|---|---|
scheduleId | Identifier of the Scheduled Transfer used to filter the returned Transfer Records. Only Transfers created by the specified Scheduled Transfer are included in the response. |
Response
Returns the Transfer Records.
Example
This is the response including every Transfer created from the Scheduled Transfer with ID 15.
JSON
{
"transfers": {
"items": [
{
"uuid": "3c481a2e-e2a7-474e-8d2d-2907a14e41a8",
"updatedAt": "2026-03-16T17:22:00.609389957Z",
"transferId": 75,
"sessionId": 134,
"sessionUUID": "2c10b7c2-f57a-419c-810d-2750d8e24c26",
"accountName": "udmg.domain-admin",
"protocol": "SFTP",
"pipeline": "ok-push",
"endpointSource": "test",
"endpointSourceType": "local::filesystem",
"endpointDestination": "ok-sftp",
"endpointDestinationType": "remote:sftp:server",
"source": "/test.bin.tar.gz",
"destination": "test.bin.tar.gz",
"workDirectory": "/tmp/v3/development",
"progress": 0,
"fileSize": 0,
"isSend": true,
"isSchedule": true,
"scheduleId": 15,
"status": "Completed",
"startedAt": "2026-03-16T17:22:00.49802568Z",
"completedAt": "2026-03-16T17:22:00.609389214Z"
},
{
"uuid": "585c3f55-0351-4b82-9465-70085883ca66",
"updatedAt": "2026-03-16T17:22:00.496934539Z",
"transferId": 74,
"sessionId": 133,
"sessionUUID": "7202cb91-31ad-4d3a-ad0d-d9e12a499a11",
"accountName": "udmg.domain-admin",
"protocol": "SFTP",
"pipeline": "ok-push",
"endpointSource": "test",
"endpointSourceType": "local::filesystem",
"endpointDestination": "ok-sftp",
"endpointDestinationType": "remote:sftp:server",
"source": "/test.exe",
"destination": "test.exe",
"workDirectory": "/tmp/v3/development",
"progress": 0,
"fileSize": 0,
"isSend": true,
"isSchedule": true,
"scheduleId": 15,
"status": "Completed",
"startedAt": "2026-03-16T17:22:00.392807948Z",
"completedAt": "2026-03-16T17:22:00.49693381Z"
},
{
"uuid": "2f7801f5-dccc-442f-8b88-1cb3e2803485",
"updatedAt": "2026-03-16T17:22:00.389704295Z",
"transferId": 73,
"sessionId": 132,
"sessionUUID": "8b7e883b-c04d-4cc5-974f-6d01309b7988",
"accountName": "udmg.domain-admin",
"protocol": "SFTP",
"pipeline": "ok-push",
"endpointSource": "test",
"endpointSourceType": "local::filesystem",
"endpointDestination": "ok-sftp",
"endpointDestinationType": "remote:sftp:server",
"source": "/test.png",
"destination": "test.png",
"workDirectory": "/tmp/v3/development",
"progress": 0,
"fileSize": 0,
"isSend": true,
"isSchedule": true,
"scheduleId": 15,
"status": "Completed",
"startedAt": "2026-03-16T17:22:00.286565833Z",
"completedAt": "2026-03-16T17:22:00.389703415Z"
},
{
"uuid": "2e3915cf-656f-4d0a-934c-4138cdca314a",
"updatedAt": "2026-03-16T17:22:00.284418903Z",
"transferId": 72,
"sessionId": 131,
"sessionUUID": "37f422b4-fd0e-47a1-8581-c8f6f4e23295",
"accountName": "udmg.domain-admin",
"protocol": "SFTP",
"pipeline": "ok-push",
"endpointSource": "test",
"endpointSourceType": "local::filesystem",
"endpointDestination": "ok-sftp",
"endpointDestinationType": "remote:sftp:server",
"source": "/test-1.txt",
"destination": "test-1.txt",
"workDirectory": "/tmp/v3/development",
"progress": 0,
"fileSize": 0,
"isSend": true,
"isSchedule": true,
"scheduleId": 15,
"status": "Completed",
"startedAt": "2026-03-16T17:22:00.178582307Z",
"completedAt": "2026-03-16T17:22:00.284418002Z"
},
{
"uuid": "9b81a9b0-0b4d-4426-8091-ba93338aef3f",
"updatedAt": "2026-03-16T17:22:00.176800809Z",
"transferId": 71,
"sessionId": 130,
"sessionUUID": "6591d478-1e0b-434e-bc23-b0012e66a1cf",
"accountName": "udmg.domain-admin",
"protocol": "SFTP",
"pipeline": "ok-push",
"endpointSource": "test",
"endpointSourceType": "local::filesystem",
"endpointDestination": "ok-sftp",
"endpointDestinationType": "remote:sftp:server",
"source": "/test.txt",
"destination": "test.txt",
"workDirectory": "/tmp/v3/development",
"progress": 0,
"fileSize": 0,
"isSend": true,
"isSchedule": true,
"scheduleId": 15,
"status": "Completed",
"startedAt": "2026-03-16T17:22:00.064556178Z",
"completedAt": "2026-03-16T17:22:00.176799846Z"
}
],
"totalItems": 5,
"page": 1,
"pageSize": 10,
"totalPages": 1
}
}
Move
Move is a Scheduled Transfer feature that transfers a file from the source to the destination and then removes the source file, effectively moving it rather than copying it.
The source file is deleted only after the transfer and all post-transfer processing (including ICAP scanning) have completed successfully.
- For push Pipelines: the local source file is deleted after the file is successfully uploaded to the remote server and all post-transfer steps have completed.
- For pull Pipelines: the remote source file is deleted after the file is downloaded, written to the local filesystem, and all post-transfer steps have completed.
If an error occurs at any point during the transfer or post-transfer processing (including ICAP scanning), the source file is not deleted.
If deletion fails, the Transfer status is set as Failed.
Using Move in the Scheduled Transfer REST API Endpoint
To use move, submit the standard Scheduled Transfer API request and set options.move to true.
Request Body Example
The following example transfers a single file and deletes it from the source after a successful transfer:
{
"pipeline": "remote-sftp-to-data",
"scheduled": "2026-08-04T09:15:00Z",
"source": "/inbound/report.csv",
"destination": "/archive/report.csv",
"options": {
"move": true
}
}
options.move can be combined with options.includeFilter to move multiple files matched by a wildcard pattern. The source file is deleted after each individual Transfer completes:
{
"pipeline": "remote-sftp-to-data",
"scheduled": "2026-08-11T14:30:00Z",
"source": "/inbound/",
"destination": "/archive/",
"options": {
"includeFilter": "*.csv",
"move": true
}
}
Listing Files at the Source Endpoint
Use the Dry-Run endpoint to list the files available at the Source Endpoint of a UDMG as Client Pipeline. Although the request uses the POST method, the endpoint is read-only: no transfer is performed, no Scheduled Transfer Record or Transfer Record is created, and nothing is written to the database.
If the Pipeline is disabled, the Dry-Run endpoint cannot be used.
API Endpoint
POST /api/v1/domains/{domainName}/transfers/schedules/dry-run
Authentication
This endpoint requires authentication using a valid UDMG User username and password.
Permissions
Any authenticated User has permission to use this API endpoint.
Path Parameters
| Parameter | Description |
|---|---|
domainName | The name of the Domain that the Pipeline belongs to. |
Request Body
| Property | Description |
|---|---|
pipeline | Name of the Pipeline whose Source Endpoint files will be listed. |
source | Directory at the Source Endpoint to list. Can include a subdirectory, but must not include a filename. Subdirectories of the resolved directory are not traversed. The directory must exist on the Source Endpoint, or the request will fail. |
scheduled | Accepted for compatibility with the Scheduled Transfer endpoint, but ignored. |
destination | Accepted for compatibility with the Scheduled Transfer endpoint, but ignored. |
Example
{
"pipeline": "sftp-lfs-pipeline",
"source": "/inbound/"
}
Response
Returns the list of files matched at the Source Endpoint, along with metadata about the resolved Pipeline and request.
| Property | Description |
|---|---|
files | The files matched at the Source Endpoint. Each entry has the structure described in File Properties below. |
matchFiles | Number of files matched. |
includeFilter | The wildcard pattern used to match files. Not returned if no wildcard was specified or if an empty string was used. |
source | The directory that was searched at the Source Endpoint. |
pipeline | Name of the Pipeline used for this request. |
endpointSrc | Name of the Pipeline's Source Endpoint. |
endpointDst | Name of the Pipeline's Destination Endpoint. |
credentialSrc | Name of the Credential used at the Source Endpoint. Not returned if not applicable. |
credentialDst | Name of the Credential used at the Destination Endpoint. Not returned if not applicable. |
File Properties
Each entry in the files array has the following structure:
| Property | Description |
|---|---|
path | Path of the file relative to the Source Endpoint root. |
filename | File name and extension. |
size | File size, in bytes. |
modTime | Last modification time of the file. |
permissions | For Linux, standard 3-digit octal permission code (e.g., Included only when the Source Endpoint is a Local Filesystem or Remote SFTP Server; omitted for Remote FTP(S) and Remote Cloud Storage Endpoints. |
Example
JSON
{
"files": [
{
"path": "inbound/orders-2026-07-28.xml",
"filename": "orders-2026-07-28.xml",
"size": 45312,
"modTime": "2026-07-28T06:30:00.000Z",
"permissions": "644"
},
{
"path": "inbound/orders-2026-07-29.xml",
"filename": "orders-2026-07-29.xml",
"size": 51200,
"modTime": "2026-07-29T06:31:15.000Z",
"permissions": "644"
},
{
"path": "inbound/invoice-2026-07-29.pdf",
"filename": "invoice-2026-07-29.pdf",
"size": 1048576,
"modTime": "2026-07-29T09:45:00.000Z",
"permissions": "644"
},
{
"path": "inbound/inventory-snapshot.csv",
"filename": "inventory-snapshot.csv",
"size": 327680,
"modTime": "2026-07-30T00:05:00.000Z",
"permissions": "644"
}
],
"matchFiles": 4,
"source": "/inbound/",
"pipeline": "sftp-lfs-pipeline",
"endpointSrc": "remote-sftp",
"endpointDst": "lfs",
"credentialSrc": "remote-sftp-cred"
}
Transfer Retries
For UDMG as Client Pipelines, transfer retry behavior is controlled by the transfer block in the UDMG Server configuration file.
When a transfer fails because of a connection or transfer error, UDMG can retry it automatically. For Pipeline types that support transfer resume, retries automatically continue from the last checkpoint rather than restarting from the beginning. For other Pipeline types, each retry starts from the beginning. For more information, see Transfer Resume.
The retry behavior is controlled by the following configuration arguments:
transfer.retry_delay: Base wait time before the first retry.transfer.retry_backoff: Exponential backoff factor applied after each failed attempt.transfer.max_retry_delay: Maximum wait time allowed between retries.transfer.max_retries: Maximum number of retry attempts before the transfer is marked as failed.
Once the number of retries reaches transfer.max_retries, the transfer is marked as Failed.
For configuration details and default values, see transfer block.
Transfer retries are disabled for Transfers that were created using a Wildcard.
Transfer Resume
Transfer resume allows an interrupted Transfer to continue from where it left off, rather than restarting from the beginning. No user action is required. On each Transfer retry, UDMG automatically detects a partial file at the destination and picks up from the last transferred byte.
For pull Pipeline types, transfer resume requires the destination Local Filesystem Endpoint to have Stage Files in a Temporary Folder disabled.
For push Pipeline types, no configuration is required. UDMG automatically checks the remote destination for a partial file on each retry and resumes from where it left off. If there is no partial file, the transfer starts from the beginning.
Each resumed transfer creates a new Transfer Record with a new transfer ID. The file continues from where it left off at the byte level, but a separate entry appears in the Transfers Dashboard for each attempt.
Tracking a Resumed Transfer
In UDMG as Client Pipelines, all Transfer Records from retries of the same Scheduled Transfer share the same Schedule ID. To track a resumed transfer:
- From the Sidebar, click Monitoring > Transfers.
- If not already visible, enable the Schedule ID column using the Columns button.
- Enter
scheduleId::<value>in the Search bar, replacing<value>with the Schedule ID. - All related Transfer Records appear in the results, including both the interrupted and resumed records.
Once you have the results, you can identify the interrupted and resumed Transfer Records by their Status and Bytes Transferred / File Size values:
- Uploads (Push Scenario)
- Downloads (Pull Scenario)
Original (interrupted) transfer
| Status | Bytes Transferred | File Size | Cause |
|---|---|---|---|
| Failed | Partial bytes sent (less than File Size). | Full file size. | The transfer failed due to a network failure, remote server error, source file error, or UDMG instance issue. |
| Stopped | Same as Failed. | Same as Failed. | Stopped by an Admin through the UDMG REST API. |
| Cancelled | Same as Failed. | Same as Failed. | Canceled by an Admin or by UDMG due to a cluster state change. |
Resumed transfer
| Status | Bytes Transferred | File Size |
|---|---|---|
| Completed | Only bytes transferred in this session (less than File Size). | Full file size. |
Original (interrupted) transfer
| Status | Bytes Transferred | File Size | Cause |
|---|---|---|---|
| Failed | Partial bytes received (less than File Size). | Full file size. | The transfer failed due to a network failure, remote server error, source file error, or UDMG instance issue. |
| Stopped | Same as Failed. | Same as Failed. | Stopped by an Admin through the UDMG REST API. |
| Cancelled | Same as Failed. | Same as Failed. | Canceled by an Admin or by UDMG due to a cluster state change. |
Resumed transfer
| Status | Bytes Transferred | File Size |
|---|---|---|
| Completed | Only bytes transferred in this session (less than File Size). | Full file size. |