Skip to main content
Version: 3.3

Transfers

A transfer is the upload or download (either successful or failed) of one file through a Pipeline, from its Source Endpoint to its Destination Endpoint.

Whenever a transfer is initiated, UDMG creates a Transfer Record that contains information about the transfer, including its status, protocol, and other metadata.

Transfer Records are used to track the progress of transfers and to provide visibility into their execution. You can monitor and manage Transfer Records through the Transfers Dashboard and the UDMG REST API.

UDMG supports transfers in both directions: UDMG as Server and UDMG as Client.

In UDMG as Server Pipelines, transfers are initiated by external partners who connect to UDMG and start a transfer through one of the supported protocols:

Meanwhile, in UDMG as Client Pipelines, transfers are always initiated by UDMG Admins through an API request (see Transfers vs. Scheduled Transfers).

Transfer Statuses​

Transfer Records can have one of the following statuses:

StatusDescription
PendingFor UDMG as Client Pipeline transfers only. The transfer was scheduled via the UDMG REST API, but its scheduled execution time has not yet been reached.
StartedThe file transfer was initiated.
RunningThe file transfer is in progress.
ProcessingThe file transfer is currently being processed, such as during ICAP scanning or Tasks execution.
UploadingFor Microsoft Azure Files transfers only. The file is currently in a temporary directory during upload. See Microsoft Azure Files Exception.
CompletedThe file transfer completed successfully.
FailedThe file transfer failed due to a system failure, task failure, or because it was aborted.
CancelledThe file transfer was canceled by an Admin.
StoppedThe file transfer was stopped.

Managing Transfers​

Canceling a Transfer​

Users can cancel an existing Transfer through the UDMG REST API.

warning

If the Transfer was created by a Scheduled Transfer, canceling it without also canceling the Scheduled Transfer may allow new Transfers to be triggered immediately after. See Cancellation Behavior.

API Endpoint​

PUT /api/v1/domains/{domainName}/transfers/cancel/{transferId}

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 (only for primary Domain)
  • Domain Administrator

Path Parameters​

ParameterDescription
domainNameThe name of the Domain that owns the Transfer.
transferIdThe UUID of the Transfer to cancel.

Example​

curl -X PUT \
"https://<server-host>/api/v1/domains/<domain-name>/transfers/cancel/<transfer-id>" \
-u "<username>:<password>"

Response​

Returns 200 OK with the updated Transfer Record.

Example​
JSON
{
"uuid": "a1a4aa99-1ef2-4779-87a2-049af0255666",
"updatedAt": "2026-04-23T20:34:12.276365357Z",
"version": 1,
"transferId": 285544,
"sessionId": 285479,
"sessionUUID": "7a23faf3-9d8d-42a7-bb31-c686cc234e43",
"accountName": "partner-user",
"protocol": "SFTP",
"pipeline": "inbound-files",
"endpointSource": "partner-sftp",
"endpointSourceType": "local:sftp:server",
"endpointDestination": "shared-storage",
"endpointDestinationType": "local::filesystem",
"source": "/uploads/report.csv",
"destination": "/var/data/inbound/report.csv",
"workDirectory": "/var/udmg/work",
"progress": 3129344,
"fileSize": 0,
"isSend": false,
"isSchedule": false,
"scheduleId": 0,
"status": "Cancelled",
"cancelReason": "action: cancel by user: udmg.domain-admin",
"startedAt": "2026-04-23T20:33:56.246752686Z",
"completedAt": "2026-04-23T20:34:12.276364569Z"
}

Canceling All Transfers​

Cancels all in-progress Transfers for the specified Domain.

warning

If the Transfers were created by Scheduled Transfers, canceling active Transfers without also canceling the Scheduled Transfers may allow new Transfers to be triggered immediately after. See Cancellation Behavior.

API Endpoint​

PUT /api/v1/domains/{domainName}/transfers/cancel-all

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 (only for primary Domain)
  • Domain Administrator

Path Parameters​

ParameterDescription
domainNameThe name of the Domain whose Transfers will be canceled.

Request Body​

PropertyDescriptionTypeRequiredDefault
reasonOptional reason for the cancellation.stringNon/a

Example​

curl -X PUT \
"https://<server-host>/api/v1/domains/<domain-name>/transfers/cancel-all" \
-u "<username>:<password>" \
-d '{"reason":"<reason>"}'

Response​

Returns 200 OK with a summary of the cancellation result.

Example​
JSON
{
"cancel-all": {
"count": 3,
"message": "Successfully cancelled 3 transfers",
"status": "success"
}
}

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-level transferId.
  • matchFiles: number of files transferred (1 in this case).
Scheduled Transfer Record
{
"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 the transferId on the Scheduled Transfer Record.
  • isSchedule: set to true, indicating this Transfer was triggered by a Scheduled Transfer.
  • scheduleId: ID of the parent Scheduled Transfer Record.
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 (2 here).
Scheduled Transfer Record
{
"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 to true, indicating this Transfer was triggered by a Scheduled Transfer.
  • scheduleId: ID of the parent Scheduled Transfer Record.
{
"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"
}

For more details, refer to Scheduled Transfers.