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
| Pipeline Name | Source Endpoint | Destination Endpoint | Scenario | Description |
|---|---|---|---|---|
| Local Filesystem to Remote AS2 Server | Local Filesystem | Remote AS2 Server | Push | Transfers messages from the local filesystem to a remote AS2 server. |
| Local Filesystem to Remote FTP(S) Server | Local Filesystem | Remote FTP(S) Server | Push | Transfers files from the local filesystem to a remote FTP(S) server. |
| Remote FTP(S) Server to Local Filesystem | Remote FTP(S) Server | Local Filesystem | Pull | Transfers files from a remote FTP(S) server to the local filesystem. |
| Local Filesystem to Remote SFTP Server | Local Filesystem | Remote SFTP Server | Push | Transfers files from the local filesystem to a remote SFTP server. |
| Remote SFTP Server to Local Filesystem | Remote SFTP Server | Local Filesystem | Pull | Transfers files from a remote SFTP server to the local filesystem. |
| Local Filesystem to Remote Cloud Storage | Local Filesystem | Remote Cloud Storage | Push | Transfers files from the local filesystem to remote cloud storage. |
| Remote Cloud Storage to Local Filesystem | Remote Cloud Storage | Local Filesystem | Pull | Transfers files from remote cloud storage to the local filesystem. |
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. Each retry starts the transfer again from the beginning.
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 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.
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 cancelled before or during execution. |
Viewing a Scheduled Transfer
Scheduled Transfers can be viewed through 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 username and password.
Permissions
The authenticated User must have one of the following Roles:
- System Administrator (within its Domain)
- Domain Administrator (within its Domain)
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
}
Cancelling a Scheduled Transfer
Scheduled Transfers can only be cancelled 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 username and password.
Permissions
The authenticated User must have one of the following Roles:
- System Administrator (within its Domain)
- Domain Administrator (within its Domain)
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 cancelled 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"
}
}
Wildcards
Wildcard support allows a single Schedule 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 Schedule 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.
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.
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(s) Record(s).
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
}
}