Skip to main content
Version: 3.3

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 NameSource EndpointDestination EndpointScenarioDescription
Local Filesystem to Remote AS2 ServerLocal FilesystemRemote AS2 ServerPushTransfers messages from the local filesystem to a remote AS2 server.
Local Filesystem to Remote FTP(S) ServerLocal FilesystemRemote FTP(S) ServerPushTransfers files from the local filesystem to a remote FTP(S) server.
Remote FTP(S) Server to Local FilesystemRemote FTP(S) ServerLocal FilesystemPullTransfers files from a remote FTP(S) server to the local filesystem.
Local Filesystem to Remote SFTP ServerLocal FilesystemRemote SFTP ServerPushTransfers files from the local filesystem to a remote SFTP server.
Remote SFTP Server to Local FilesystemRemote SFTP ServerLocal FilesystemPullTransfers files from a remote SFTP server to the local filesystem.
Local Filesystem to Remote Cloud StorageLocal FilesystemRemote Cloud StoragePushTransfers files from the local filesystem to remote cloud storage.
Remote Cloud Storage to Local FilesystemRemote Cloud StorageLocal FilesystemPullTransfers 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.

info

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

StatusDescription
PendingThe Scheduled Transfer was created and is waiting to be picked up for execution. Also set when retrying after failure.
RunningThe Transfer associated with this Scheduled Transfer is currently being executed.
CompletedThe Transfer associated with this Scheduled Transfer finished successfully.
FailedAny 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.
CancelledThe 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

ParameterDescription
domainNameThe name of the Domain that owns the Scheduled Transfer.
scheduleIdThe 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

ParameterDescription
domainNameThe name of the Domain that owns the Scheduled Transfer.
scheduleIdThe 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.

info

Transfer retries are disabled for Transfers that were created using a Wildcard.

Supported Patterns

Wildcard matching follows the supported filter syntax.

info

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.

DescriptionPatternMatchesDoes not match
Wildcard*.jpg
  • /file.jpg
  • /dir/file.jpg (skipped)
  • /file.png
  • /dir/file.png
Alternates*.{jpg,png}
  • /file.jpg
  • /dir/file.png (skipped)
  • /file.gif
  • /dir/file.gif
Path Wildcard**
  • /anyfile
  • /subdir/dir/subsubdir/anyfile (skipped)
  • file.png
  • /subdir/file.png
Any Char*.t?t
  • /file.txt
  • /dir/file.tzt (skipped)
  • /file.qxt
  • /dir/file.png
Range*.[a-z]
  • /file.a
  • /dir/file.b (skipped)
  • /file.0
  • /dir/file.1
Class*.\d\d\d
  • /file.012
  • /dir/file.345 (skipped)
  • /file.abc
  • /dir/file.def
Regexp*.{{jpe?g}}
  • /file.jpeg
  • /dir/file.jpg (skipped)
  • /file.png
  • /dir/file.jpeeg

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:

  1. A Scheduled Transfer is created.
  2. UDMG searches the /inbound/ directory following the configured paths.
  3. All files matching report-*.csv are selected.
  4. One Transfer is created for each matching file with a scheduleId property that matches the Scheduled Transfer in step 1.
  5. 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.
danger

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

ParameterDescription
domainNameThe name of the Domain that owns the Scheduled Transfer.

Query Parameter

ParameterDescription
scheduleIdIdentifier 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
}
}

Listing

A Listing is a snapshot of the files available at the Source Endpoint of a UDMG as Client Pipeline. Listings are returned through the UDMG REST API.

Listings use a Dry-Run API that simulates a Scheduled Transfer without executing it. UDMG resolves the Pipeline, Endpoints, and Credentials, lists the files matched at the Source Endpoint, and returns the result. No transfer is performed, no Scheduled Transfer Record or Transfer Record is created, and nothing is written to the database. The Dry-Run API is synchronous; the result are returned right away, unlike the Scheduled Transfer API which is asynchronous (registers an action whose result must be polled later).

The Scheduled Transfer Dry-Run API applies to all UDMG as Client Pipelines, including both push and pull scenarios. In every case, the files returned are those at the Pipeline's Source Endpoint:

  • For push scenarios, this is the Local Filesystem.
  • For pull scenarios, this is a Remote FTP(S) Server, Remote SFTP Server, or Remote Cloud Storage Endpoint.

The request body used to create a Listing is identical to the one used to create a Scheduled Transfer. This makes it easy to preview the files a transfer would affect, and then submit the same request to the Scheduled Transfer API when you are ready to run it.

Listings are useful when you want to:

  • Discover which files are available at a Source Endpoint before scheduling a transfer.
  • Validate a Wildcard pattern by previewing the files it would match before submitting an actual Scheduled Transfer.
info

If the Pipeline is disabled, the Listing API cannot be used.

Dry-Running a Scheduled Transfer

Returns the list of files that would be selected if the supplied request were submitted as a Scheduled Transfer.

API Endpoint

POST /api/v1/domains/{domainName}/transfers/schedules/dry-run

Authentication

This endpoint requires authentication using a valid UDMG username and password.

Permissions

Any authenticated User has permission to use this endpoint.

Although the request uses the POST method, the endpoint is treated as a read-only action: no Transfer is executed, no Scheduled Transfer Record is created, and nothing is written to the database. The endpoint only reads and returns the files available at the Source Endpoint, so it requires no additional Role-based permissions.

Path Parameters

ParameterDescription
domainNameThe name of the Domain that owns the Pipeline.

Request Body

PropertyDescription
pipelineName of the Pipeline whose Source Endpoint files will be listed.
source

Directory at the Source Endpoint to list. Can include a subdirectory. Subdirectories of the resolved directory are not traversed.

If options.includeFilter is not specified (i.e. no wildcard is used to filter the returned files), source must be the name of a single file.

The directory must exist on the Source Endpoint, or the Listing will fail.

options.includeFilterOptional. Wildcard pattern used to filter the returned files. Accepts the same patterns as a Wildcard Scheduled Transfer.
scheduledAccepted for compatibility with the Scheduled Transfer request body, but ignored. Listings are always executed immediately.
destinationAccepted for compatibility with the Scheduled Transfer request body, but ignored. Listings only read from the Source Endpoint.
tip

The request body uses the same schema as a Scheduled Transfer. Any request body that is valid for a Scheduled Transfer can be reused as-is; the scheduled and destination fields are accepted but ignored by this endpoint, so no edits are required to copy a Scheduled Transfer request into a Dry-Run request.

Example
{
"pipeline": "sftp-lfs-pipeline",
"scheduled": "2026-05-20T12:30:55.196Z", // optional; not used
"source": "/QA/",
"destination": "/", // optional; not used
"options": {
"includeFilter": "*"
}
}

Response

Returns the list of files matched at the Source Endpoint, along with metadata about the resolved Pipeline and request.

Response Properties
PropertyDescription
filesThe files matched at the Source Endpoint. Each entry has the structure described in File Properties below.
matchFilesNumber of files matched.
includeFilterThe wildcard pattern used to match files. Empty for single-file requests.
sourceThe directory that was searched at the Source Endpoint.
pipelineName of the Pipeline used for the listing.
endpointSrcName of the Pipeline's Source Endpoint.
endpointDstName of the Pipeline's Destination Endpoint.
credentialSrcName of the Credential used at the Source Endpoint. Empty if not applicable.
credentialDstName of the Credential used at the Destination Endpoint. Empty if not applicable.
File Properties

Each entry in the files array has the following structure:

PropertyDescription
pathPath of the file relative to the Source Endpoint root.
filenameFile name.
sizeFile size, in bytes.
modTimeLast modification time of the file.
permissions

For Linux, standard 3-digit octal permission code (e.g., 644). For Windows, the permissions value is either 444 for read-only or 666 for writable files.

Included only when the Source Endpoint is a Local Filesystem or Remote SFTP Server; omitted for Remote FTP(S) and Remote Cloud Storage sources.

Example
JSON
{
"files": [
{
"path": "QA/101 (1).txt",
"filename": "101 (1).txt",
"size": 3,
"modTime": "2026-05-11T17:14:18.0589109+03:00",
"permissions": "644"
},
{
"path": "QA/2 (1).pdf",
"filename": "2 (1).pdf",
"size": 14393417,
"modTime": "2026-05-11T17:08:23.5474617+03:00",
"permissions": "244"
},
{
"path": "QA/55246-1.gif",
"filename": "55246-1.gif",
"size": 1586796,
"modTime": "2026-04-20T08:26:25.414169154Z",
"permissions": "444"
},
{
"path": "QA/USP-Features_3.3.0.csv",
"filename": "USP-Features_3.3.0.csv",
"size": 11965,
"modTime": "2026-05-08T20:40:50.0709077+03:00",
"permissions": "600"
}
],
"matchFiles": 4,
"includeFilter": "*",
"source": "/QA/",
"pipeline": "sftp-lfs-pipeline",
"endpointSrc": "remote-sftp",
"endpointDst": "lfs",
"credentialSrc": "remote-sftp-cred"
}
tip

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) to run the transfer for real.