Move or rename a DAM asset
Moves or renames a DAM asset without changing its stored object.
https://api2.transloadit.com/ dam/ assets/ {assetId}Before calling this endpoint, obtain the IDs of existing assets in the same Workspace as the Auth Key used for the request.
For files stored with /transloadit/store, retrieve their Assembly Status and wait for ASSEMBLY_COMPLETED. In the returned results[stepName] arrays, retain each stored file’s asset_id, not its ordinary file id. Use these values for ASSET_ID or params.asset_ids in the examples below.
For a non-root destination, you must already know the existing folder’s ID in the same Workspace. A previously saved move or rename response can provide this ID: folder_id from a single-asset response or assets[].folder_id from a bulk-move response. These responses describe the folder after that operation; they are not a folder-discovery API.
There is currently no public endpoint for looking up a DAM folder ID by path. If you do not already have the destination folder ID, contact support before attempting a non-root move. To move to the root, use destination_folder_id: null.
Include at least one of filename or destination_folder_id inside params. A filename must be a name without a folder path.
To rename an asset in its current folder, send only filename inside params, as in the request example below.
To move the asset to the root instead, explicitly include destination_folder_id: null:
{ "destination_folder_id": null, "filename": "renamed.jpg" }
For another folder, replace null with its folder ID. Omission and null are different operations.
Asset path limits
The complete destination path (folders plus filename) must fit within 512 Unicode code points and 1024 UTF-8 bytes after normalization. A filename that fits on its own can still exceed these limits in a nested folder.
Request example
Set ASSET_ID to your resource value without percent-encoding it.
Run this request in a server-side shell with curl and a suitable bearer token in TRANSLOADIT_TOKEN. If you need a token, expand the setup below.
Need a bearer token?
In a trusted server-side shell with curl and jq, set TRANSLOADIT_KEY and TRANSLOADIT_SECRET to your Auth Key and Auth Secret. Keep both credentials and the resulting token secret; never run this setup in browser code.
First, create a token with this endpoint’s required scopes. Your Auth Key must already grant those scopes.
if ! TOKEN_RESPONSE="$(curl --fail-with-body -sS \
--request POST \
--url 'https://api2.transloadit.com/token' \
--user "${TRANSLOADIT_KEY:?Set TRANSLOADIT_KEY}:${TRANSLOADIT_SECRET:?Set TRANSLOADIT_SECRET}" \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'aud=api2' \
--data-urlencode 'scope=dam:write')"; then
printf '%s\n' "$TOKEN_RESPONSE" >&2
exit 1
fi
TRANSLOADIT_TOKEN="$(printf '%s' "$TOKEN_RESPONSE" |
jq -er '.access_token | strings | select(length > 0)')" || exit 1
Keep this shell open and run the request below. Reuse the token while it remains valid.
curl --fail-with-body -sS --request PATCH \
--url "https://api2.transloadit.com/dam/assets/${ASSET_ID:?Set ASSET_ID}" \
--header "Authorization: Bearer ${TRANSLOADIT_TOKEN:?Set TRANSLOADIT_TOKEN}" \
--data-urlencode 'params={"filename":"renamed.jpg"}'
Authentication
This endpoint accepts signed params or a bearer token. See Authentication for setup instructions.
Required scope for the Auth Key or bearer token: dam:write.
Signed requests require both a signature and a future params.auth.expires timestamp. Bearer tokens do not require either.
Path parameters
assetId(path segment), required. pattern:^[A-Za-z0-9_-]{21}[AQgw]$, minimum length: 22, maximum length: 22
Form fields
Content type: application/x-www-form-urlencoded
params(JSON string), required. A JSON-encoded object whose supported keys are listed below.signature(string). Required for signed requests. Omit this field when using a bearer token.
Supported keys inside the params field
Authentication fields in this list apply to signed requests. With a bearer token, you can omit params.auth and the separate signature field. Compare the authentication-specific request parameters below.
Complete JSON Schema
params: Only the fields listed for this object are accepted.
| Field | Type and description |
|---|---|
params.required for signed requests; optional with a bearer token | Contains the Transloadit API key and signature-authentication metadata for a DAM mutation.
|
params.required | stringISO 8601 expiration timestamp in the future. Required when a request is signed or requires signature authentication; bearer-authenticated requests may omit it. |
params.required | stringTransloadit API key used to authenticate requests |
params. | string | integerUnique, random value included in signed request params to make each signature unique and prevent accidental signature reuse. |
params. | string | nullDestination folder ID. Set to Any of the following schemas may apply: stringstringCase-sensitive, canonical 22-character Base64URL DAM identifier. Validation pattern (regular expression)^[A-Za-z0-9_-]{21}[AQgw]$nullnull |
params. | string (minimum length: 1, maximum length: 255)New filename without a folder path. Names are normalized to Unicode NFC and remain case-sensitive. Whitespace-only names, |
Request parameters by authentication method
With signed params
Include your Auth Key as params.auth.key. When signing the request, include a future params.auth.expires timestamp and send the signature in the separate signature field. The field definitions below use paths inside params.
Complete JSON Schema
params: Only the fields listed for this object are accepted.
Uses the field definitions above: params.auth, params.destination_folder_id, params.filename
With a bearer token
Send the bearer token in the Authorization header. You can omit params.auth and the separate signature field. Other required parameters still apply. The field definitions below use paths inside params.
Complete JSON Schema
params: Only the fields listed for this object are accepted.
Uses the field definitions above: params.destination_folder_id, params.filename
| Field | Type and description |
|---|---|
params. | Contains the Transloadit API key and signature-authentication metadata for a DAM mutation.
|
params. | stringISO 8601 expiration timestamp in the future. Required when a request is signed or requires signature authentication; bearer-authenticated requests may omit it. |
params. | stringTransloadit API key used to authenticate requests |
params. | string | integerUnique, random value included in signed request params to make each signature unique and prevent accidental signature reuse. |
Response
Here’s an example response body:
{
"asset_id": "AAAAAAAAAAAAAAAAAAAAAA",
"deleted_at": null,
"filename": "renamed.jpg",
"folder_id": null,
"message": "The DAM asset was successfully moved.",
"ok": "DAM_ASSET_MOVED",
"path": "renamed.jpg",
"updated_at": "2026-09-12T10:00:00.000Z"
}2xx success
JSON response body. application/json text/plain; charset=utf-8
Response body schema
Complete JSON Schema
The response contains only the fields listed for this object.
| Field | Type and description |
|---|---|
asset_idrequired | stringCase-sensitive, canonical 22-character Base64URL DAM identifier. Validation pattern (regular expression)^[A-Za-z0-9_-]{21}[AQgw]$ |
deleted_atrequired | string | nullValidation pattern (regular expression)^(([0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-8])))T([01][0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9](\.[0-9]+)?)?(Z)$ |
filenamerequired | string (minimum length: 1) |
folder_idrequired | string | nullCase-sensitive, canonical 22-character Base64URL DAM identifier. Validation pattern (regular expression)^[A-Za-z0-9_-]{21}[AQgw]$ |
messagerequired | string (minimum length: 1) |
okrequired | string (always: "DAM_ASSET_MOVED") |
pathrequired | string (minimum length: 1) |
updated_atrequired | stringValidation pattern (regular expression)^(([0-9][0-9][2468][048]|[0-9][0-9][13579][26]|[0-9][0-9]0[48]|[02468][048]00|[13579][26]00)-02-29|[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-8])))T([01][0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9](\.[0-9]+)?)?(Z)$ |
Error response
JSON response body. application/json text/plain; charset=utf-8
Response body schema
Complete JSON Schema
The response may contain additional fields.
| Field | Type and description |
|---|---|
assembly_id | string |
error | string (minimum length: 1) |
http_code | number | string
|
message | stringHuman-readable explanation of the error. Its wording can vary; use the |
reason | null | string | number | boolean | Array<any value> | objectAny of the following schemas may apply: nullnullstringstringnumbernumberbooleanbooleanArray<any value>Array<any value>Array item schemaany valueobjectobjectAdditional property schemaany value |
HTTP 400
JSON response body. application/json text/plain; charset=utf-8
Response body schema
Complete JSON Schema
Named errors and the general error format
error: "DAM_INVALID_REQUEST"
The DAM mutation parameters are invalid.
The response may contain additional fields.
General error format
HTTP 404
JSON response body. application/json text/plain; charset=utf-8
Response body schema
Complete JSON Schema
Named errors and the general error format
error: "DAM_RESOURCE_NOT_FOUND"
The requested DAM resource was not found.
The response may contain additional fields.
General error format
HTTP 409
JSON response body. application/json text/plain; charset=utf-8
Response body schema
Complete JSON Schema
Named errors and the general error format
error: "DAM_MUTATION_CONFLICT"
The DAM mutation conflicts with an existing resource.
The response may contain additional fields.
General error format
HTTP 500
JSON response body. application/json text/plain; charset=utf-8
Response body schema
Complete JSON Schema
Named errors and the general error format
error: "DAM_MUTATION_FAILED"
The DAM mutation could not be completed. Please try again.
The response may contain additional fields.