Xgodo API Documentation

API Reference for Jobs, Tasks, Payments, and User Management

Authentication

Bearer Token Authentication

All API endpoints require authentication using a Bearer token. Include the following header in your requests:

Authorization: Bearer <your_access_token>

Jobs API

Manage job postings, retrieve applicants, and handle job-related operations.

POST/api/v2/jobs/applicants
Retrieve job applicants

Retrieves a list of job applicants for a specified job. Allows for sorting, pagination, and searching within job applicants.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
job_idstringYesThe ID of the job for which to retrieve applicants-
task_idstringNoThe ID of the job task; used when only one task details is needed. If presend, the task result list array will contain only one task or empty array if task not found.-
sortbystringNoField by which to sort job applicants-
orderstringNoSort order. Can be 'asc' for ascending or 'desc' for descendingasc
pageintegerNoPage number for pagination1
limitintegerNoNumber of applicants per page10
hours_agointegerNoThe day interval, specified as the number of days starting from the given hours_ago up to today10
statusstringNoThe status of the task ('processing', 'confirmed', 'notcomplete', 'declined', 'pending')confirmed
searchstringNoSearch term to filter applicants based on worker name, job proof, job title, or worker IPdeveloper

Responses

Status CodeDescriptionResponse Body
200Successfully retrieved job applicantsReturns job details with applicant information including planned_task, job tasks, total tasks, job done count, pending tasks, satisfied tasks, declined tasks, and failed tasks
400Invalid request dataError message describing validation error
404Job not found or no applicants foundError message indicating job or applicants not found
PUT/api/v2/jobs/applicants
Update job applicants' task statuses

Updates the status of specified job tasks. It supports changing the status, adding comments, and handles referral bonuses if the task is confirmed.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
JobTasks_IdsarrayYesAn array of job task IDs to be updated["60d21b4667d0d8992e610c85", "60d21b4667d0d8992e610c86"]
statusstringYesThe new status to set for the job tasksconfirmed
job_idstringYesThe ID of the job to which the tasks belong60d21b4667d0d8992e610c85
commentstringNoOptional comment to add regarding the task updateTask successfully completed.

Responses

Status CodeDescriptionResponse Body
204Successfully updated job task statuses. No content is returned.-
400Bad request. Invalid input data or invalid status provided.-
404Job or job tasks not found.-
GET/api/v2/jobs/details
Get job details by ID

Returns job details for a specific job ID.

Query Parameters

ParameterTypeRequiredDescriptionExample
job_idstringNoUnique identifier for the job68910c4a5e1c7092a1fdc03a

Example Response

{
  "_id": "68910c4a5e1c7092a1fdc03a",
  "job_id": "68910c4a5e1c7092a1fdc03a",
  "job_type": "job",
  "payment_type": "action",
  "title": "Create a Google account",
  "category": ["Google"],
  "description": "Create a Google account. ...",
  "proof": "Google account email. ...",
  "Target_Workers": ["worldwide"],
  "few_times": true,
  "premium": false,
  "featured": false,
  "duration": "3",
  "positions": "3",
  "job_price": 0.06,
  "price": "0.30",
  "status": "active",
  "files": [...],
  "added": "2025-08-04T19:38:50.204Z",
  "user": {...},
  "totla_tasks_count": 1,
  "tasks_done_count": 0,
  "tasks_confirmed_count": 0,
  "tasks_running_count": 0,
  "tasks_pending_count": 0
}
POST/api/v2/jobs/check-uniquenes
Check for uniqueness of job proofs

This endpoint checks if a given search term exists in the job proofs. You can specify the search option to look for exact words or substrings.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
searchstringYesThe term to search for in job proofsdeveloper
optionstringNoThe search option to use. Can be "word" for exact word matching or "charactor" for substring matchingword

Responses

Status CodeDescriptionResponse Body
200Successfully checked for uniquenessReturns a boolean indicating if the search term is unique
400Bad request. Either the search term is missing, or an invalid search option is providedError message describing the validation error
POST/api/v2/jobs/myjobs
Retrieve a list of jobs that you have posted

This endpoint allows a user to retrieve a paginated list of jobs associated with their account. The results can be filtered and sorted based on various parameters.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
pageintegerNoPage number for pagination1
limitintegerNoNumber of items per page10
job_idstringNoFilter jobs by a specific job ID-
statusstringNoFilter jobs by status (e.g., 'active', 'completed')-
orientationstringNoThe orientation for the data sorting (e.g., 'asc' or 'desc')asc
QuerystringNoSearch query for job title or description-
SortBYstringNoField to sort the results by-
POST/api/v2/jobs/submit
Create a new job posting

This endpoint allows users to create a new job posting. It requires specific details about the job, including title, description, category, number of positions, job price, and duration.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
titlestringYesThe title of the job postingSoftware Developer
categorystringYesCategory of the jobEngineering
descriptionstringYesDetailed description of the jobWe are looking for a skilled software developer...
proofstringYesProof or evidence related to the job postingSample proof text.
is_proof_filebooleanNoIndicates if the proof is a file or textfalse
auto_ratebooleanNoWhether the job should be automatically ratedtrue
vcodestringNoVerification code for the job postingcdcdc
Target_WorkersarrayNoList of target workers or countries["worldwide"]
few_timesbooleanNoIndicates if the job can be posted a few timesfalse
premiumbooleanNoIndicates if the job is premiumfalse
featuredbooleanNoWhether the job is featured or notfalse
durationintegerYesDuration for which the job is posted (in days)60
positionsintegerYesNumber of available positions for the job3
daily_limitintegerNoDaily limit for the job posting0
job_pricenumberYesPrice for posting the job100

Responses

Status CodeDescriptionResponse Body
201Job created successfullySuccess message indicating job creation
400Bad request. Invalid or missing required fieldsList of validation error messages
PUT/api/v2/jobs/update-status
Update job status

Updates the status of a specific job.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
job_idstringYesThe ID of the job60c72b2f9b1e8c001c8e4d8a
statusstringYesNew status for the job (active, inactive)active

Responses

Status CodeDescriptionResponse Body
204Job status updated successfully-
400Invalid request body or status-
401Unauthorized action-
404Job not found or invalid job_id-

Tasks API

Manage job tasks, apply for tasks, and submit task completions.

GET/api/v2/tasks/apply
Apply for task submission to a job

This API must be called before tasks/submit API for jobs that have job variables. This endpoint allows workers to apply to an active job. Job variables (if any) will be returned.

Query Parameters

ParameterTypeRequiredDescriptionExample
job_idstringYesUnique identifier for the job68868530c189957861cd698a

Example Response

{
  "_id": "68910c4a5e1c7092a1fdc03c",
  "var1": "Custom variable value 1",
  "var2": "Custom variable value 2"
}
POST/api/v2/tasks/details
Get recent tasks or details of a specific job task

Returns the list of recent tasks of the user. If task_id query param is provided, it will return details of a single task.

Query Parameters

ParameterTypeRequiredDescriptionExample
task_idstringNoThe ID of the job task to fetch details for686f668db9c27eea026e60c7

Request Body Parameters

ParameterTypeRequiredDescriptionExample
pageintegerNoPage number for pagination (starts from 1)1
limitintegerNoNumber of tasks to return per page10

Example Response

{
  "_id": "686f668db9c27eea026e60c7",
  "job_task_id": "686f668db9c27eea026e60c7",
  "worker_id": "676d3525e618d4ad99dae7ff",
  "job_id": "686f44cf8abf68ace53ebc8f",
  "job_title": "Create a Google account",
  "job_price": 0.06,
  "job_proof": "",
  "comment": "",
  "country_code": "IN",
  "worker_ip": "192.168.249.223",
  "status": "confirmed",
  "failureReason": null,
  "reviewed": null,
  "device_owner_share": null,
  "added": "2025-07-10T07:06:53.631Z",
  "updated": "2025-07-10T07:06:53.631Z",
  "proof_files_info": []
}
POST/api/v2/tasks/submit
Submit a task to a job

This endpoint allows workers to submit a task to an active job.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
job_idstringYesID of the job68868530c189957861cd698a
job_proofstringYesProof of the task doneirjfoirf@gmail.com:iejowiedj:ehiuehwd@outlook.com:wuehuidhewd
custom_varsobjectNoCustom vars obtained from tasks/apply. Required for jobs with variables{"_id": "68910c4a5e1c7092a1fdc03c", "var1": "value1"}
proof_files_base64arrayNoArray of required and optional proof files in base64 format[{"fieldName": "screenshot", "fileName": "image.jpg", "base64": "..."}]

Responses

Status CodeDescriptionResponse Body
201Job task submitted successfullySuccess message indicating task submission, job task id and job id
404Job not foundError message indicating job not found
POST/api/v2/tasks/submitAutomationTask
Submit automation job task

This endpoint allows automation agents to submit task proofs. It handles task status updates, proof submission, automation iteration lifecycle management, and implements blacklisting for failed or declined tasks. Comments can be included in the job_proof JSON and will be extracted automatically.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
job_proofstringYesProof of task completion. Should be a JSON string containing task results and optional comments field{"result": "completed", "comments": "Task finished successfully"}
job_task_idstringYesThe ID of the job task being submitted60c72b2f9b1e8c001c8e4d8a
statusstringNoOptional status to set for the task (failed, declined, running, success). If the task is currently running, it will be updated to this status or 'pending' if not specifiedfailed
finishbooleanNoWhether this submission marks the task as finished. If true and status is failed/declined/pending, the automation iteration will be deletedtrue

Responses

Status CodeDescriptionResponse Body
201Task updated successfully{"msg": "task has been updated successfully"}
400Bad request - Invalid job proof{"error": "invalid job proof"}
404Task or iteration not found - The task must be an automation task with valid iteration and device IDs{"error": "task not found"} or {"error": "iteration not found"}
500Internal server error{"error": "Internal server error"}
POST/api/v2/planned_tasks/submit
Submit planned tasks for a job

This endpoint allows users to submit multiple planned tasks for a specific job. Planned tasks are pre-defined inputs that will be used when workers apply for the job.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
job_idstringYesThe ID of the job to submit planned tasks for60c72b2f9b1e8c001c8e4d8a
inputsarrayYesArray of input strings for planned tasks (usually JSON strings, minimum 1, maximum 10,000 characters per string)["{\"fname\":\"John\",\"lname\":\"Doe\",\"email\":\"john@example.com\"}", "{\"fname\":\"Jane\",\"lname\":\"Smith\",\"email\":\"jane@example.com\"}"]

Responses

Status CodeDescriptionResponse Body
200Planned tasks submitted successfully{"success": true}
400Bad request - Invalid input data, exceeds available positions, or validation errors{"success": false, "error": "Invalid job id"} or {"success": false, "message": "No enough positions left. Received X tasks in excess."}
404Job not found or user doesn't own the job{"success": false, "error": "Job not found"}
500Internal server error{"success": false, "message": "Internal Server Error"}
DELETE/api/v2/tasks/delete
Delete a job task by ID

This endpoint allows employers to delete a job task. Only tasks with certain statuses can be deleted to maintain data integrity (failed, declined).

Request Body Parameters

ParameterTypeRequiredDescriptionExample
task_idstringYesThe ID of the job task to delete60c72b2f9b1e8c001c8e4d8a

Responses

Status CodeDescriptionResponse Body
200Job task deleted successfully{"success": true, "message": "Job task deleted successfully"}
400Bad request - Invalid task ID or task cannot be deleted due to status restrictions{"success": false, "error": "Invalid task id"} or {"success": false, "message": "Cannot delete job task with status 'confirmed'. Only tasks with status: pending, failed, declined, notcomplete can be deleted."}
403Forbidden - User doesn't have permission to delete this job task{"success": false, "message": "You don't have permission to delete this job task"}
404Job task not found{"success": false, "message": "Job task not found"}
500Internal server error{"success": false, "message": "Internal Server Error"}
POST/api/v2/planned_tasks/reinitiate
Re-initiate a single failed/declined task

This endpoint allows employers to re-initiate a single failed or declined task. This makes the planned task available again for workers to apply.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
task_idstringYesThe ID of the job task to re-initiate60c72b2f9b1e8c001c8e4d8a

Responses

Status CodeDescriptionResponse Body
200Task re-initiated successfully{"success": true, "message": "Task successfully reinitiated"}
400Bad request - Invalid task ID or task cannot be reinitiated due to status restrictions{"success": false, "error": "Invalid task id"} or {"success": false, "message": "Cannot reinitiate task with status 'confirmed'. Only failed or declined tasks can be reinitiated."}
403Forbidden - User doesn't have permission to reinitiate this task{"success": false, "message": "You don't have permission to reinitiate this task"}
404Job task not found or no planned task associated with this job task{"success": false, "message": "Job task not found"}
500Internal server error{"success": false, "message": "Internal Server Error"}

Payments API

Handle payment operations including withdrawals.

POST/api/v2/payments/withdraw
Withdraw user balance

Initiate a withdrawal to a wallet address.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
amountnumberYesAmount to withdraw10
wallet_addressstringYesWallet address to receive the withdrawal0x1234567890abcdef

Responses

Status CodeDescriptionResponse Body
200Withdrawal successful{"msg": "withdraw done"}
400Insufficient balance, below minimum payout, or invalid requestError message with specific reason
401Unauthorized or missing token-
500Server error-
GET/api/v2/payments/withdrawals
Get recent withdrawal details

Returns the list & details of recent withdrawals made by the user.

Query Parameters

ParameterTypeRequiredDescriptionExample
pageintegerNoPage number for pagination (starts from 1)1
limitintegerNoNumber of withdrawals to return per page10

Responses

Status CodeDescriptionResponse Body
200Details of the withdrawals made by the user-
401Unauthorized or missing token-
404No transactions found-
500Server error-

Example Response

{
  "total_count": 3,
  "transactions": [
    {
      "_id": "67d9f0b57131be1625d301c4",
      "reference_id": "26795145",
      "user_id": "676d3619e618d4ad99dae899",
      "recipient_id": null,
      "crypto_uuid": null,
      "payment_type": "Withdrawal",
      "payment_method": "cryptomus",
      "payment_details": "",
      "transaction_fee": "0",
      "currency": "USD",
      "amount": "-10",
      "wallet_address": "2w",
      "status": "paid",
      "reason": null,
      "created": "2025-03-18T22:16:21.895Z",
      "updated": "2025-03-18T22:16:21.895Z",
      "process_date": "2025-03-18T22:16:21.895Z",
      "transaction_id": "67d9f0b57131be1625d301c4",
      "transaction_proof": "2ca560b36dcdd7c8",
      "__v": 0
    }
  ],
  "page": 1,
  "balance": 3.54,
  "total_withdraw": -30,
  "total_deposit": 0
}

User API

User account management and balance information.

GET/api/v2/user/balance
Get user balance

Returns the user's current balance and active balance.

Responses

Status CodeDescriptionResponse Body
200User balance information retrieved successfully-
401Unauthorized or missing token-
500Server error-

Example Response

{
  "balance": 4.434,
  "active_balance": 4.434
}

Devices API

Device management and information retrieval endpoints.

GET/api/v2/devices
Get debuggable devices

Retrieves a list of devices that are either owned by the user or rented with live payment type.

Responses

Status CodeDescriptionResponse Body
200Successfully retrieved devices list-
401Unauthorized or missing token-
500Server error-

Example Response

[
  {
    "remote_device_id": "device_123456",
    "added": "2025-08-19T10:00:00Z",
    "automations": [],
    "brand": "Samsung",
    "country": "US",
    "isEmulator": false,
    "model": "Galaxy S21",
    "name": "Galaxy S21 Ultra",
    "networkType": "wifi",
    "numberOfCores": 8,
    "online": true,
    "processor": "Snapdragon 888",
    "ramMb": 8192,
    "sdkVersion": "31",
    "version": "12"
  }
]
POST/api/v2/devices/launchAutomation
Launch device automation

Submits a device automation request and launches automation on the specified device.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
device_idstringYesThe ID of the device to run automation ondevice_123456
commandstringYesCommand to execute (start or stop)start
codestringYesAutomation code to execute on the deviceconsole.log('hello')

Responses

Status CodeDescriptionResponse Body
200Automation launched successfully-
400Bad request or invalid parametersError message describing the validation error
401Unauthorized or missing tokenAuthentication error message
POST/api/v2/devices/stopAllAutomations
Stop all device automations

Submits an automation stop request and stopps all the automations running on a perticular device.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
device_idstringYesThe ID of the device where all the automations will be stoppeddevice_123456

Responses

Status CodeDescriptionResponse Body
200All automations stopped successfully-
400Bad request or invalid parametersError message describing the validation error
401Unauthorized or missing tokenAuthentication error message
POST/api/v2/devices/automationLogs
Get automation logs

Retrieves automation logs. Only returns logs from the last 10 minutes. When 'from' parameter is provided, only logs that appear after the specified log ID will be returned.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
device_idstringYesThe ID of the device to get logs fromdevice_123456
automation_idsarrayYesArray of automation IDs to get logs for["83ba7359-d8eb-4374-8ecb-055af01fddfe"]
fromstringNoLog ID to get logs after this pointe0e1a3ef-7b2a-42b5-8f21-b845fa41c8b9

Responses

Status CodeDescriptionResponse Body
200Automation logs retrieved successfully-
400Bad request or invalid parametersError message describing the validation error
401Unauthorized or missing tokenAuthentication error message

Example Response

{
  "logs": [
    {
      "id": "e0e1a3ef-7b2a-42b5-8f21-b845fa41c8b9",
      "automationId": "83ba7359-d8eb-4374-8ecb-055af01fddfe",
      "message": "test testValue",
      "lineNumber": 1,
      "messageLevel": "log",
      "timestamp": 1755811585870
    }
  ]
}

Other API

File upload and temporary file access endpoints.

POST/api/v2/files/upload
Upload temporary file

Uploads a file to temporary storage. Files are automatically deleted after 15 minutes. Maximum file size is 50 MB. Use multipart/form-data with 'file' field name.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
filefileYesFile to upload (multipart/form-data)Binary file data

Responses

Status CodeDescriptionResponse Body
200File uploaded successfully{ "success": true, "message": "File uploaded successfully", "data": { "filename": "1234567890_example.pdf", "originalName": "example.pdf", "size": 1024000, "url": "https://api.example.com/temp/1234567890_example.pdf", "expiresAt": "2025-10-08T12:15:00.000Z" } }
400No file uploaded{ "success": false, "message": "No file uploaded" }
401Unauthorized or missing tokenAuthentication error message
500Server error during upload{ "success": false, "message": "Error uploading file", "error": "Error details" }

Example Response

{
  "success": true,
  "message": "File uploaded successfully",
  "data": {
    "filename": "1234567890_example.pdf",
    "originalName": "example.pdf",
    "size": 1024000,
    "url": "https://api.example.com/temp/1234567890_example.pdf",
    "expiresAt": "2025-10-08T12:15:00.000Z"
  }
}
GET/api/v2/files/temp/:filename
Get uploaded file

Retrieves a previously uploaded temporary file. Files expire after 15 minutes from upload time.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
filenamestringYesFilename returned from the upload endpoint (path parameter)1234567890_example.pdf

Responses

Status CodeDescriptionResponse Body
200File retrieved successfullyBinary file data
400Filename is required{ "success": false, "message": "Filename is required" }
404File not found or expired{ "success": false, "message": "File not found or expired" }
401Unauthorized or missing tokenAuthentication error message
500Server error during retrieval{ "success": false, "message": "Error retrieving file", "error": "Error details" }

Automation Functions & API

Range of functions and APIs available to use when creating an automation

System Navigation

goHome

Returns to the home screen

Returns:

Promise<void>

 - Promise that resolves when navigation is complete

Examples:

Go to home screen

await goHome();

recents

Opens the recent apps view

Returns:

Promise<void>

 - Promise that resolves when recents view is opened

Examples:

Show recent apps

await recents();

goBack

Simulates pressing the back button

Returns:

Promise<void>

 - Promise that resolves when back action is complete

Examples:

Go back

await goBack();

hideKeyboard

Hides the software keyboard if it is visible

Returns:

Promise<void>

 - Promise that resolves when keyboard is hidden

Examples:

Hide keyboard

await hideKeyboard();

Device Info & Control

getDeviceInfo

Gets information about the current device

Returns:

{ id: string, brand: string, model: string, sdkVersion: number, processor: string, numberOfCores: number, ramMb: number, country: string, isEmulator: boolean, width: number, height: number }

 - Device information object

Examples:

Get device info

const deviceInfo = getDeviceInfo();
console.log(`Device: ${deviceInfo.brand} ${deviceInfo.model}`);

airplane

Toggles airplane mode

Returns:

Promise<void>

 - Promise that resolves when airplane mode is turned on and then off

Examples:

Toggle airplane mode

await airplane();

File Operations

saveFile

Saves data to a file

Parameters:
  • fileName (string): Name of the file to save
  • data (string): Content to save in the file
  • base64 (boolean): Whether the data is base64 encoded (optional)
Returns:

Promise<void>

 - Promise that resolves when file is saved

Examples:

Save text file

await saveFile('example.txt', 'Hello World');

fileExists

Checks if a file or directory exists at the given path

Parameters:
  • path (string): Path to check
Returns:

boolean

 - true if the path exists, false otherwise

Examples:

Check if file exists

if (fileExists('/storage/emulated/0/example.txt')) {
  console.log('File exists!');
}

getFileSize

Gets the size of a file in bytes

Parameters:
  • filePath (string): Path to the file
Returns:

number

 - File size in bytes, or -1 if file doesn't exist or is not a file

Examples:

Get file size

const size = getFileSize('/storage/emulated/0/example.txt');
if (size >= 0) {
  console.log(`File size: ${size} bytes`);
}

readFullFileBase64

Reads entire file as Base64-encoded string. WARNING: Loads entire file into memory. Use streaming methods for large files.

Parameters:
  • filePath (string): Path to the file
Returns:

string

 - Base64-encoded file content, or empty string if file doesn't exist

Examples:

Read image as base64

const base64 = readFullFileBase64('/storage/emulated/0/image.png');
if (base64) {
  console.log('Image loaded as base64');
  // Use with recognizeText or other functions
  const textData = await recognizeText(base64);
}

readFullFile

Reads entire file as UTF-8 text string. WARNING: Loads entire file into memory. Use streaming methods for large files.

Parameters:
  • filePath (string): Path to the file
Returns:

string

 - File content as UTF-8 string, or empty string if file doesn't exist

Examples:

Read text file

const content = readFullFile('/storage/emulated/0/notes.txt');
if (content) {
  console.log('File content:', content);
  const lines = content.split('\n');
  console.log(`File has ${lines.length} lines`);
}

listFiles

Lists all files and directories in a directory

Parameters:
  • dirPath (string): Path to the directory
Returns:

FileInfo[]

 - Array of FileInfo objects containing:
- name: File or directory name
- path: Absolute path
- isDirectory: Whether this is a directory
- isFile: Whether this is a file
- size: File size in bytes (0 for directories)
- lastModified: Last modified timestamp in milliseconds
Returns empty array if directory doesn't exist or is not accessible

Examples:

List files in directory

const files = listFiles('/storage/emulated/0/Download');
for (const file of files) {
  console.log(file.name, file.isFile ? 'file' : 'dir', file.size);
}

// Filter to only get files
const onlyFiles = files.filter(f => f.isFile);

// Sort by last modified
files.sort((a, b) => b.lastModified - a.lastModified);

getPathInfo

Gets detailed information about a file or directory

Parameters:
  • path (string): Path to check
Returns:

DirectoryInfo | FilePathInfo | PathNotFoundInfo

 - Path information object:
For directories (DirectoryInfo):
- exists: true
- path, name: Path and name
- isDirectory: true, isFile: false
- lastModified: Timestamp
- canRead, canWrite: Permission flags
- fileCount, directoryCount, totalItems: Content counts

For files (FilePathInfo):
- exists: true
- path, name: Path and name
- isDirectory: false, isFile: true
- lastModified: Timestamp
- canRead, canWrite: Permission flags
- size: File size in bytes

For non-existent paths (PathNotFoundInfo):
- exists: false
- error: Optional error message

Examples:

Get file/directory info

const info = getPathInfo('/storage/emulated/0/Download');

if (info.exists) {
  console.log('Path:', info.path);
  console.log('Name:', info.name);
  console.log('Can write:', info.canWrite);

  if (info.isDirectory) {
    console.log('Directory with', info.totalItems, 'items');
    console.log('Files:', info.fileCount, 'Dirs:', info.directoryCount);
  } else if (info.isFile) {
    console.log('File size:', info.size, 'bytes');
  }
} else {
  console.log('Path does not exist');
}

getStorageRoot

Gets the root directory of main storage (typically /storage/emulated/0)

Returns:

string

 - Absolute path to storage root, or empty string on error

Examples:

Get storage root

const root = getStorageRoot();
console.log('Storage root:', root);

// Use it to construct paths
const downloadPath = root + '/Download';
const files = listFiles(downloadPath);

getFileHashes

Calculates MD5, SHA-1, and SHA-256 hashes of a file (up to 100MB)

Parameters:
  • filePath (string): Path to the file
Returns:

FileHashes | FileHashError

 - On success (FileHashes):
- md5: MD5 hash in hexadecimal
- sha1: SHA-1 hash in hexadecimal
- sha256: SHA-256 hash in hexadecimal
- size: File size in bytes

On error (FileHashError):
- error: Error message

Examples:

Calculate file hashes

const result = getFileHashes('/storage/emulated/0/document.pdf');

if ('error' in result) {
  console.log('Error:', result.error);
} else {
  console.log('MD5:', result.md5);
  console.log('SHA-1:', result.sha1);
  console.log('SHA-256:', result.sha256);
  console.log('Size:', result.size, 'bytes');
}

base64ToBytes

Converts Base64 string to Uint8Array

Parameters:
  • base64 (string): Base64-encoded string
Returns:

Uint8Array

 - Byte array representation

Examples:

Convert base64 to bytes

const base64 = readFullFileBase64('/storage/emulated/0/data.bin');
const bytes = base64ToBytes(base64);
console.log('Byte array length:', bytes.length);

// Access individual bytes
console.log('First byte:', bytes[0]);

bytesToBlob

Converts byte array to Blob

Parameters:
  • bytes (number[]): Array of bytes
  • mimeType (string): MIME type (optional, e.g., 'image/png', 'application/pdf')
Returns:

Blob | null

 - Blob object or null on error

Examples:

Convert bytes to blob

const bytes = [137, 80, 78, 71, 13, 10, 26, 10]; // PNG header
const blob = bytesToBlob(bytes, 'image/png');

if (blob) {
  console.log('Blob created, size:', blob.size);
  console.log('Type:', blob.type);
}

readFileAsBlob

Reads file as Base64 and converts to Blob

Parameters:
  • filePath (string): Path to the file
  • mimeType (string): MIME type (optional)
Returns:

Blob | null

 - Blob object or null on error

Examples:

Read file as blob

const blob = readFileAsBlob('/storage/emulated/0/image.png', 'image/png');

if (blob) {
  console.log('Image blob created, size:', blob.size);
  // Can be used with APIs that accept Blob objects
}

Intent & Browser

launchIntent

Launches an Android intent

Parameters:
  • intentName (string): Name of the intent
  • packageName (string | null): Target package name
  • data (string | null): Intent data
  • type (string | null): MIME type
  • extras (object | null): Extra data for intent
  • flags (number): Intent flags
  • component ('activity' | 'service' | 'broadcast'): Component type
  • isDataLocal (boolean | null): Is the provided data a local file
Examples:

Launch activity intent

await launchIntent(
  'android.intent.action.VIEW',
  'com.example.app',
  null,
  null,
  null,
  0,
  'activity'
  false
);

browse

Opens a URL in the default browser

Parameters:
  • url (string): URL to open
  • clearExistingData (boolean): Whether to clear existing browser data (optional)
Examples:

Open URL

await browse('https://example.com');

Random Actions

randomClick

Clicks at a random point within a specified rectangle

Parameters:
  • x1 (number): Left boundary
  • y1 (number): Top boundary
  • x2 (number): Right boundary
  • y2 (number): Bottom boundary
Examples:

Random click in area

randomClick(100, 100, 300, 400);

randomSwipe

Performs a random swipe within a specified rectangle

Parameters:
  • x1 (number): Left boundary
  • y1 (number): Top boundary
  • x2 (number): Right boundary
  • y2 (number): Bottom boundary
  • direction ('up' | 'down' | 'left' | 'right'): Swipe direction
Examples:

Random swipe up

randomSwipe(100, 100, 300, 400, 'up');

HTML Display

displayHTMLCode

Displays HTML content in a specified area of the screen

Parameters:
  • htmlCode (string): HTML content to display
  • x1 (number): Left position
  • y1 (number): Top position
  • x2 (number): Right position
  • y2 (number): Bottom position
  • opacity (number): Opacity of the display
Examples:

Display HTML

displayHTMLCode(
  '<div>Hello World</div>',
  100, 100, 300, 200,
  0.8
);

hideHTMLCode

Hides any displayed HTML content

Examples:

Hide HTML

hideHTMLCode();

Basic Actions

tap

Performs a tap action at the specified coordinates

Parameters:
  • x (number): The x coordinate where the tap should occur
  • y (number): The y coordinate where the tap should occur
Returns:

Promise<void>

 - Promise that resolves when tap is complete

Examples:

Simple tap

await tap(100, 200);

Tap center of screen

const device = getDeviceInfo();
await tap(device.width / 2, device.height / 2);

swipe

Performs a swipe gesture from one point to another

Parameters:
  • x1 (number): Starting x coordinate
  • y1 (number): Starting y coordinate
  • x2 (number): Ending x coordinate
  • y2 (number): Ending y coordinate
  • duration (number): Duration of swipe in milliseconds
Returns:

Promise<void>

 - Promise that resolves when swipe is complete

Examples:

Swipe up

// Swipe up from bottom to top
await swipe(500, 1500, 500, 500, 300);

hold

Performs a long press at specified coordinates

Parameters:
  • x (number): The x coordinate
  • y (number): The y coordinate
  • duration (number): Duration in milliseconds
Examples:

Long press

await hold(100, 200, 1000); // Hold for 1 second

Advanced Actions

multiTap

Performs multiple taps in sequence at specified coordinates

Parameters:
  • sequence ([number, number][]): Array of coordinate pairs
  • intervalFrom (number): Minimum interval between taps
  • intervalTo (number): Maximum interval between taps
Examples:

Multi-tap sequence

// Tap three times at different positions
await multiTap([
    [100, 200],
    [150, 250],
    [200, 300]
], 100, 200);

swipePoly

Performs a complex swipe gesture following multiple points

Parameters:
  • startX (number): Starting x coordinate
  • startY (number): Starting y coordinate
  • sequence ([number, number][]): Path points
  • duration (number): Total duration
  • bezier (boolean): Use bezier curve interpolation
Examples:

Complex pattern

// Draw a triangle
await swipePoly(100, 100, [
    [200, 100],
    [150, 200],
    [100, 100]
], 1000, true);

Text Operations

writeText

Types the specified text

Parameters:
  • text (string): Text to type
Returns:

Promise<void>

 - Promise that resolves when text is written

Examples:

Type text

// Find input field first
const inputField = findNode(await screenContent(), f => f.isEditText());
if (inputField) {
    await nodeAction(inputField, ACTION_FOCUS);
    await writeText("Hello World!");
}

reverseCopy

Gets content currently in the clipboard including text, raw data, and files

Returns:

Promise<{ text: string, data: any, files?: { uri: string, mimeType: string, name: string, dataBase64?: string }[] }>

 - The clipboard content including text, raw data dump, and any files with their metadata and base64 encoded data

Examples:

Read clipboard text

const { text } = await reverseCopy();
console.log("Clipboard content:", text);

Read clipboard files

const { text, data, files } = await reverseCopy();
if ((files?.length || 0) > 0) {
  console.log("Clipboard contains files:", files.map(f => f.name));
}

paste

Pastes text from clipboard

Returns:

Promise<void>

 - Promise that resolves when paste is complete

Examples:

Paste text

await copyText("Hello");
await paste();

copyText

Copies text to clipboard

Parameters:
  • text (string): Text to copy
Returns:

Promise<void>

 - Promise that resolves when text is copied

Examples:

Copy and paste

await copyText("Text to copy");
await paste();

recognizeText

Performs text recognition on a base64 encoded image using OCR. Returns hierarchical text data with blocks, lines, elements, and individual symbols

Parameters:
  • imageBase64 (string): Base64 encoded image to recognize text from
Returns:

Promise<TextJSON>

 - 
Hierarchical text recognition data with the following structure:
- text: Complete recognized text
- textBlocks: Array of text blocks, each containing:
  - text: Block text
  - recognizedLanguage: Detected language
  - boundingBox: {left, top, right, bottom}
  - lines: Array of text lines, each containing:
    - text: Line text
    - angle: Text angle
    - confidence: Recognition confidence
    - recognizedLanguage: Language
    - boundingBox: Line coordinates
    - elements: Array of text elements (words), each containing:
      - text: Element text
      - angle: Element angle
      - confidence: Recognition confidence
      - recognizedLanguage: Language
      - boundingBox: Element coordinates
      - symbols: Array of individual characters with:
        - text: Character
        - angle: Character angle
        - confidence: Recognition confidence
        - recognizedLanguage: Language
        - boundingBox: Character coordinates

Examples:

Recognize text with full hierarchy

// Take a screenshot and recognize text
const { screenshot } = await screenshot(1080, 1920, 80);
if (screenshot) {
  const textData = await recognizeText(screenshot);
  console.log("Complete text:", textData.text);

  // Access hierarchical text data
  for (const block of textData.textBlocks) {
    console.log("Block:", block.text);

    // Iterate through lines in the block
    for (const line of block.lines) {
      console.log("  Line:", line.text, "Confidence:", line.confidence);

      // Iterate through elements (words) in the line
      for (const element of line.elements) {
        console.log("    Word:", element.text, "Confidence:", element.confidence);

        // Iterate through symbols (characters) in the element
        for (const symbol of element.symbols) {
          console.log("      Char:", symbol.text, "Confidence:", symbol.confidence);
        }
      }
    }
  }
}

Find text at specific coordinates

const { screenshot } = await screenshot(1080, 1920, 80);
if (screenshot) {
  const textData = await recognizeText(screenshot);

  // Find text at specific coordinates
  const x = 500, y = 300;

  for (const block of textData.textBlocks) {
    for (const line of block.lines) {
      if (line.boundingBox &&
          x >= line.boundingBox.left && x <= line.boundingBox.right &&
          y >= line.boundingBox.top && y <= line.boundingBox.bottom) {
        console.log("Text at position:", line.text);
      }
    }
  }
}

Screen Content

screenContent

Gets current screen UI hierarchy

Returns:

Promise<Node>

 - Screen content tree

Examples:

Analyze screen

const screen = await screenContent();

allScreensContent

Gets UI hierarchy for all visible screens

Returns:

Promise<{ allScreensContent: Node[] }>

 - Array of screen content trees

Examples:

Get all screens

const { allScreensContent } = await allScreensContent();

nodeAction

Performs an action on a specific UI node

Parameters:
  • node (object): The node to act on
  • actionInt (number): The action to perform (e.g., ACTION_CLICK)
  • data (object): Additional action data (optional)
  • fieldsToIgnore (string[]): Fields to ignore when comparing nodes (optional)
Returns:

Promise<{ actionPerformed: boolean }>

 - Whether the action was successful

Examples:

Click a node

const node = findNodesByText(await screenContent(), "Submit")[0];
if (node) {
  await nodeAction(node, ACTION_CLICK);
}

screenshot

Takes a screenshot with optional cropping

Parameters:
  • maxWidth (number): Maximum width
  • maxHeight (number): Maximum height
  • quality (number): Image quality (0-100)
Examples:

Take screenshot

const { screenshot, originalWidth, originalHeight } = 
    await screenshot(1080, 1920, 80);

Automation Info

getAutomationInfo

Gets information about the current automation script

Returns:

{ name: string, description: string, id: string, revisionId: string, revision: string, timestamp: string }

 - Current automation script information

Examples:

Get automation info

const info = getAutomationInfo();
console.log(`Running automation: ${info.name}`);

stopCurrentAutomation

Stops the currently running automation script

Examples:

Stop automation

stopCurrentAutomation();

App Management

launchApp

Launches an application

Parameters:
  • packageName (string): Package name
  • clearExisting (boolean): Clear existing instances
Examples:

Launch app

// Launch fresh instance
await launchApp("com.example.app", true);

listApps

Lists installed applications

Returns:

Promise<{appList: {[packageName: string]: string}}>

 - Map of package names to app names

Examples:

List apps

const { appList } = await listApps();
const packages = Object.keys(appList);
console.log("Installed apps:", packages.length);

Notifications

showNotification

Shows a notification on the device

Parameters:
  • title (string): Notification title
  • message (string): Notification message
Returns:

Promise<void>

 - Promise that resolves when notification is shown

Examples:

Show notification

await showNotification(
  "Task Complete", 
  "Your automation has finished running"
);