Pterodactyl API v1
File Manager

Upload file

Uploading a file is a two-step flow.

Step 1 - Get a signed URL

GET this endpoint to receive a short-lived signed URL (valid ~5 minutes) that points at the node's daemon, not the panel. The returned attributes.url already contains the auth token, so the upload in step 2 does not need an Authorization header.

Step 2 - POST the file(s) to that URL

Send the file(s) to the signed URL as a multipart/form-data request.

PropertyInRequiredDescription
filesform-datayesThe file to upload. Repeat the field (files) to upload several files in one request.
directoryquerynoDestination folder relative to the server root, e.g. /plugins. Defaults to the server root.
tokenqueryyesAuth token. Already included in the signed URL returned by step 1; do not add it yourself.

A successful upload returns 200 with an empty body. Do not send an Authorization header to the daemon URL.

# Step 1: get the signed URL from the panel
URL=$(curl -s "{panel}/api/client/servers/1a7ce997/files/upload" \
  -H "Authorization: Bearer ptlc_xxx" -H "Accept: application/json" | jq -r .attributes.url)

# Step 2: POST the file(s) to the daemon (no auth header needed)
curl -X POST "$URL&directory=/plugins" \
  -F "files=@./myplugin.jar" \
  -F "files=@./config.yml"
GET/api/client/servers/{server}/files/upload

Authorization

ClientToken
AuthorizationBearer <token>

Client API key (generated at /account/api)

In: header

Path Parameters

server*string

Server identifier (short 8-character ID)

Response Body

application/json

curl -X GET "https://pterodactyl.file.properties/api/client/servers/1a7ce997/files/upload" \  -H "Authorization: Bearer ptlc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \  -H "Accept: application/json"
{
  "object": "signed_url",
  "attributes": {
    "url": "https://pterodactyl.file.properties:8080/upload/file?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjdkYzAxNzVjODU4MTE5MDRlMjJjNTcxNjBhMjkwMjgwZGFjMDMzM2I2ZmJhMTE3YTI4YjdhMDM5Y2U1OTg0YzcifQ.eyJpc3MiOiJodHRwczpcL1wvcHRlcm9kYWN0eWwuZmlsZS5wcm9wZXJ0aWVzIiwiYXVkIjoiaHR0cHM6XC9cL3B0ZXJvZGFjdHlsLmZpbGUucHJvcGVydGllczo4MDgwIiwianRpIjoiN2RjMDE3NWM4NTgxMTkwNGUyMmM1NzE2MGEyOTAyODBkYWMwMzMzYjZmYmExMTdhMjhiN2EwMzljZTU5ODRjNyIsImlhdCI6MTU5ODIyMTMyMSwibmJmIjoxNTk4MjIxMDIxLCJleHAiOjE1OTgyMjIyMjEsInNlcnZlcl91dWlkIjoiMWE3Y2U5OTctMjU5Yi00NTJlLThiNGUtY2VjYzQ2NDE0MmNhIiwidW5pcXVlX2lkIjoiNmM2OFdkSkJTVzg0RlBsUiJ9.GJ5681K9ehhPCcXevyxw-RO1jhv4UWg5T8b_P7r6s8Q"
  }
}