Skip to content

API Reference

Complete API reference for the pCloud SDK Python v2.0.

Table of Contents

PCloudSDK Class

The main SDK class that provides a convenient wrapper around all pCloud operations with integrated token management.

Constructor

PCloudSDK(
    app_key: str πŸ’Ύ"",
    app_secret: str πŸ’Ύ"",
    access_token: str πŸ’Ύ"",
    location_id: int πŸ’Ύ2,
    auth_type: str πŸ’Ύ"direct",
    token_manager: bool πŸ’ΎTrue,
    token_file: str πŸ’Ύ".pcloud_credentials"
)

Parameters: - app_key (str): Your pCloud app key (Client ID) - optional for direct login - app_secret (str): Your pCloud app secret (Client Secret) - optional for direct login - access_token (str): Access token (optional, can be set later) - location_id (int): Server location (1=US, 2=EU) - default EU - auth_type (str): Authentication type ("oauth2" or "direct") - default direct - token_manager (bool): Enable automatic token management (default True) - token_file (str): File to store credentials (default .pcloud_credentials)

Example:

from pcloud_sdk import PCloudSDK

# Default configuration (recommended)
sdk πŸ’ΎPCloudSDK()

# Custom configuration
sdk πŸ’ΎPCloudSDK(
    location_id=1,  # US servers
    token_file=".my_credentials",
    auth_type="oauth2"
)

Properties

user

Returns a User instance for user operations.

user: User

folder

Returns a Folder instance for folder operations.

folder: Folder

file

Returns a File instance for file operations.

file: File

Authentication Methods

login()

Login with email/password or use saved credentials.

login(
    email: str πŸ’Ύ"",
    password: str πŸ’Ύ"",
    location_id: int πŸ’Ύ2,
    force_login: bool πŸ’ΎFalse
) -πŸ”„ Dict[str, Any]

Parameters: - email (str): pCloud email (optional if credentials are saved) - password (str): pCloud password (optional if credentials are saved) - location_id (int): Server location (1=US, 2=EU) - force_login (bool): Force new login even if credentials exist

Returns: - Dict[str, Any]: Login information including access_token, locationid, email, etc.

Example:

# First time login
login_info πŸ’Ύsdk.login("user@example.com", "password")

# Subsequent logins (uses saved token)
login_info πŸ’Ύsdk.login()

# Force new login
login_info πŸ’Ύsdk.login("user@example.com", "password", force_login=True)

get_auth_url()

Get OAuth2 authorization URL.

get_auth_url(redirect_uri: str πŸ’Ύ"") -πŸ”„ str

Parameters: - redirect_uri (str): Redirect URI for OAuth2 callback

Returns: - str: Authorization URL

Example:

auth_url πŸ’Ύsdk.get_auth_url("http://localhost:8000/callback")
print(f"Visit: {auth_url}")

authenticate()

Exchange authorization code for access token.

authenticate(code: str, location_id: int πŸ’Ύ2) -πŸ”„ Dict[str, Any]

Parameters: - code (str): Authorization code from OAuth2 callback - location_id (int): Server location

Returns: - Dict[str, Any]: Token information

Example:

token_info πŸ’Ύsdk.authenticate("authorization_code_from_callback")

set_access_token()

Set access token directly.

set_access_token(access_token: str, auth_type: str πŸ’Ύ"direct")

Parameters: - access_token (str): Access token - auth_type (str): Authentication type ("direct" or "oauth2")

is_authenticated()

Check if SDK is authenticated.

is_authenticated() -πŸ”„ bool

Returns: - bool: True if authenticated

logout()

Logout and clear credentials.

logout()

Token Management Methods

clear_saved_credentials()

Clear saved credentials file.

clear_saved_credentials()

get_saved_email()

Get the email from saved credentials.

get_saved_email() -πŸ”„ Optional[str]

get_credentials_info()

Get information about current credentials.

get_credentials_info() -πŸ”„ Dict[str, Any]

Returns: - Dict[str, Any]: Credentials information including email, age, location, etc.

User Operations

Access via sdk.user property.

get_user_info()

Get complete user information.

get_user_info() -πŸ”„ Dict[str, Any]

Returns: - Dict[str, Any]: Complete user information

Example:

user_info πŸ’Ύsdk.user.get_user_info()
print(f"Email: {user_info['email']}")
print(f"User ID: {user_info['userid']}")

get_user_id()

Get user ID.

get_user_id() -πŸ”„ int

Returns: - int: User ID

get_user_email()

Get user email.

get_user_email() -πŸ”„ str

Returns: - str: User email

get_used_quota()

Get used quota in bytes.

get_used_quota() -πŸ”„ int

Returns: - int: Used quota in bytes

get_quota()

Get total quota in bytes.

get_quota() -πŸ”„ int

Returns: - int: Total quota in bytes

Get public link quota.

get_public_link_quota() -πŸ”„ int

Returns: - int: Public link quota

Folder Operations

Access via sdk.folder property.

get_metadata()

Get folder metadata.

get_metadata(
    folder_id: Optional[int] πŸ’ΎNone,
    path: Optional[str] πŸ’ΎNone
) -πŸ”„ Dict[str, Any]

Parameters: - folder_id (Optional[int]): Folder ID - path (Optional[str]): Folder path

Returns: - Dict[str, Any]: Folder metadata

list_root()

List root folder contents.

list_root() -πŸ”„ Dict[str, Any]

Returns: - Dict[str, Any]: Root folder contents and metadata

Example:

root πŸ’Ύsdk.folder.list_root()
contents πŸ’Ύroot['contents']
for item in contents:
    if item.get('isfolder'):
        print(f"Γ°ΒŸΒ“Β {item['name']}/")
    else:
        print(f"Γ°ΒŸΒ“Β„ {item['name']} ({item['size']} bytes)")

get_content()

Get folder content.

get_content(
    folder_id: Optional[int] πŸ’ΎNone,
    path: Optional[str] πŸ’ΎNone
) -πŸ”„ List[Dict[str, Any]]

Parameters: - folder_id (Optional[int]): Folder ID - path (Optional[str]): Folder path

Returns: - List[Dict[str, Any]]: List of folder contents

create()

Create new folder.

create(name: str, parent: int πŸ’Ύ0) -πŸ”„ Union[int, Dict[str, Any]]

Parameters: - name (str): Folder name - parent (int): Parent folder ID (0 πŸ’Ύroot)

Returns: - Union[int, Dict[str, Any]]: Folder ID or response dict

Example:

folder_id πŸ’Ύsdk.folder.create("My New Folder", parent=0)
print(f"Created folder with ID: {folder_id}")

rename()

Rename folder.

rename(folder_id: int, name: str) -πŸ”„ Union[int, Dict[str, Any]]

Parameters: - folder_id (int): Folder ID - name (str): New name

Returns: - Union[int, Dict[str, Any]]: Folder ID or response dict

move()

Move folder to another parent.

move(folder_id: int, new_parent: int) -πŸ”„ Union[int, Dict[str, Any]]

Parameters: - folder_id (int): Folder ID to move - new_parent (int): New parent folder ID

Returns: - Union[int, Dict[str, Any]]: Folder ID or response dict

delete()

Delete folder.

delete(folder_id: int) -πŸ”„ Dict[str, Any]

Parameters: - folder_id (int): Folder ID

Returns: - Dict[str, Any]: Deletion result

delete_recursive()

Delete folder recursively.

delete_recursive(folder_id: int) -πŸ”„ Dict[str, Any]

Parameters: - folder_id (int): Folder ID

Returns: - Dict[str, Any]: Deletion result

File Operations

Access via sdk.file property.

upload()

Upload file to pCloud.

upload(
    file_path: str,
    folder_id: int πŸ’Ύ0,
    filename: Optional[str] πŸ’ΎNone,
    progress_callback: Optional[callable] πŸ’ΎNone
) -πŸ”„ Dict[str, Any]

Parameters: - file_path (str): Local file path - folder_id (int): Destination folder ID (0 πŸ’Ύroot) - filename (Optional[str]): Custom filename (optional) - progress_callback (Optional[callable]): Progress callback function

Returns: - Dict[str, Any]: Upload result with file metadata

Example:

def progress(bytes_transferred, total_bytes, percentage, speed, **kwargs):
    print(f"Upload: {percentage:.1f}% ({speed/1024/1024:.1f} MB/s)")

result πŸ’Ύsdk.file.upload(
    "/path/to/file.txt",
    folder_id=0,
    progress_callback=progress
)
file_id πŸ’Ύresult['metadata'][0]['fileid']

download()

Download file from pCloud.

download(
    file_id: int,
    destination: str πŸ’Ύ"",
    progress_callback: Optional[callable] πŸ’ΎNone
) -πŸ”„ bool

Parameters: - file_id (int): File ID - destination (str): Download destination directory - progress_callback (Optional[callable]): Progress callback function

Returns: - bool: True if successful

Example:

success πŸ’Ύsdk.file.download(
    file_id=123456,
    destination="./downloads/",
    progress_callback=progress
)

Get download link for file.

get_link(file_id: int) -πŸ”„ str

Parameters: - file_id (int): File ID

Returns: - str: Download URL

get_info()

Get file information.

get_info(file_id: int) -πŸ”„ Dict[str, Any]

Parameters: - file_id (int): File ID

Returns: - Dict[str, Any]: File information including checksum

rename()

Rename file.

rename(file_id: int, name: str) -πŸ”„ Dict[str, Any]

Parameters: - file_id (int): File ID - name (str): New filename

Returns: - Dict[str, Any]: Operation result

move()

Move file to another folder.

move(file_id: int, folder_id: int) -πŸ”„ Dict[str, Any]

Parameters: - file_id (int): File ID - folder_id (int): Destination folder ID

Returns: - Dict[str, Any]: Operation result

copy()

Copy file to another folder.

copy(file_id: int, folder_id: int) -πŸ”„ Dict[str, Any]

Parameters: - file_id (int): File ID - folder_id (int): Destination folder ID

Returns: - Dict[str, Any]: Operation result

delete()

Delete file.

delete(file_id: int) -πŸ”„ Dict[str, Any]

Parameters: - file_id (int): File ID

Returns: - Dict[str, Any]: Deletion result

Progress Utilities

Built-in progress tracking utilities for upload and download operations.

Factory Functions

create_progress_bar()

Create a simple progress bar.

create_progress_bar(
    title: str πŸ’Ύ"Transfer",
    width: int πŸ’Ύ50,
    show_speed: bool πŸ’ΎTrue,
    show_eta: bool πŸ’ΎTrue
) -πŸ”„ SimpleProgressBar

Parameters: - title (str): Progress bar title - width (int): Progress bar width in characters - show_speed (bool): Show transfer speed - show_eta (bool): Show estimated time remaining

create_detailed_progress()

Create detailed progress tracker with logging.

create_detailed_progress(log_file: Optional[str] πŸ’ΎNone) -πŸ”„ DetailedProgress

Parameters: - log_file (Optional[str]): Optional log file path

create_minimal_progress()

Create minimal progress tracker (milestones only).

create_minimal_progress() -πŸ”„ MinimalProgress

create_silent_progress()

Create silent progress tracker (CSV logging only).

create_silent_progress(log_file: str) -πŸ”„ SilentProgress

Parameters: - log_file (str): CSV log file path

Progress Callback Interface

All progress callbacks receive these parameters:

def progress_callback(
    bytes_transferred: int,
    total_bytes: int,
    percentage: float,
    speed: float,
    **kwargs
):
    """
    Args:
        bytes_transferred: Bytes transferred so far
        total_bytes: Total bytes to transfer
        percentage: Transfer percentage (0-100)
        speed: Transfer speed in bytes per second
        **kwargs: Additional information:
            - operation: "upload" or "download"
            - filename: File name
            - status: "starting", "progress", "saving", "completed", "error"
            - error: Error message (if status="error")
    """
    pass

Core Classes

Advanced users can use core classes directly.

App Class

Main application configuration class.

from pcloud_sdk import App

app πŸ’ΎApp()
app.set_app_key("client_id")
app.set_app_secret("client_secret")
app.set_access_token("token")
app.set_location_id(2)

Methods:

  • set_app_key(app_key: str)
  • set_app_secret(app_secret: str)
  • set_access_token(access_token: str, auth_type: str πŸ’Ύ"oauth2")
  • set_location_id(location_id: Union[str, int])
  • get_authorize_code_url() -πŸ”„ str
  • get_token_from_code(code: str, location_id: Union[str, int]) -πŸ”„ Dict[str, Any]
  • login_with_credentials(email: str, password: str, location_id: Union[str, int] πŸ’Ύ1) -πŸ”„ Dict[str, Any]

Request Class

HTTP request handler.

from pcloud_sdk import Request

request πŸ’ΎRequest(app)
response πŸ’Ύrequest.get("userinfo")

Response Class

HTTP response wrapper.

from pcloud_sdk import Response

response πŸ’ΎResponse(raw_response)
data πŸ’Ύresponse.json()

Configuration

Server Locations

# EU servers (default)
sdk πŸ’ΎPCloudSDK(location_id=2)

# US servers
sdk πŸ’ΎPCloudSDK(location_id=1)

Timeouts

# Set request timeout (seconds)
app πŸ’ΎApp()
app.set_curl_execution_timeout(1800)  # 30 minutes

File Upload Chunk Size

from pcloud_sdk.config import Config

# Default is 10MB chunks
Config.FILE_PART_SIZE πŸ’Ύ5 * 1024 * 1024  # 5MB chunks

Exception Handling

PCloudException

Main exception class for pCloud SDK errors.

from pcloud_sdk import PCloudException

try:
    result πŸ’Ύsdk.file.upload("nonexistent.txt")
except PCloudException as e:
    print(f"pCloud error: {e}")
    print(f"Error code: {e.code}")
except Exception as e:
    print(f"General error: {e}")

Attributes: - message (str): Error message - code (int): Error code (default: 5000)

Common Error Codes

  • 1000: Authentication failed
  • 2000: File not found
  • 2001: Folder not found
  • 2003: Access denied
  • 2005: Folder already exists
  • 2008: File name too long
  • 2009: File or folder name is invalid
  • 5000: General error (default)

Error Handling Best Practices

import logging
from pcloud_sdk import PCloudSDK, PCloudException

# Set up logging
logging.basicConfig(level=logging.INFO)
logger πŸ’Ύlogging.getLogger(__name__)

def safe_upload(file_path: str) -πŸ”„ bool:
    """Upload with comprehensive error handling"""
    try:
        sdk πŸ’ΎPCloudSDK()
        sdk.login()  # May raise authentication error

        result πŸ’Ύsdk.file.upload(file_path)
        logger.info(f"Upload successful: {file_path}")
        return True

    except PCloudException as e:
        if e.code =πŸ’Ύ1000:
            logger.error("Authentication failed - check credentials")
        elif e.code =πŸ’Ύ2000:
            logger.error(f"File not found: {file_path}")
        else:
            logger.error(f"pCloud error {e.code}: {e}")
        return False

    except FileNotFoundError:
        logger.error(f"Local file not found: {file_path}")
        return False

    except Exception as e:
        logger.error(f"Unexpected error: {e}")
        return False

Rate Limiting

The pCloud API has rate limits. The SDK includes automatic retry logic for rate-limited requests:

# Automatic retry with exponential backoff
# No additional configuration needed
result πŸ’Ύsdk.file.upload("large_file.zip")

Thread Safety

The SDK is not thread-safe. For concurrent operations, create separate SDK instances:

import threading
from pcloud_sdk import PCloudSDK

def worker_thread(file_path: str):
    # Create separate SDK instance per thread
    sdk πŸ’ΎPCloudSDK()
    sdk.login("user@example.com", "password")
    sdk.file.upload(file_path)

# Start multiple threads
threads πŸ’Ύ[]
for file_path in file_list:
    thread πŸ’Ύthreading.Thread(target=worker_thread, args=(file_path,))
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

This completes the API reference. For more examples, see the Examples Guide.