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 or planned task. Accepts either a job_task_id or planned_task_id - if a planned_task_id is provided, it will be resolved to its associated job_task_id. Used when only one task details is needed. If present, 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, comment, 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 data or planned task exists but has no associated job task{"error": "Invalid task_id format"} or {"error": "Planned task {id} exists but has no associated job task (job_task_id is null)"}
404Job not found, task_id is neither a valid job task ID nor a planned task ID{"error": "Job with this Id not found"} or {"error": "task_id {id} is neither a valid job task ID nor a planned task ID"}
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 or planned task IDs to be updated. Accepts a mix of job_task_ids and planned_task_ids - planned task IDs will be resolved to their associated job_task_ids.["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
200Successfully updated job task statuses.Returns the updated job task details
400Bad request. Invalid input data, invalid status provided, or planned task exists but has no associated job task.{"error": "Invalid status..."} or {"error": "Planned task {id} exists but has no associated job task (job_task_id is null)"}
404Job or job tasks not found, or ID is neither a valid job task ID nor a planned task ID.{"error": "Job Task with this Id not found"} or {"error": "ID {id} is neither a valid job task ID nor a planned task ID"}
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/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, "inserted_ids": [{"planned_task_id": "60c72b2f9b1e8c001c8e4d8a", "input": "{\"fname\":\"John\",\"email\":\"john@example.com\"}"}, ...]}
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. Accepts either a job_task_id or planned_task_id. Only tasks with certain statuses can be deleted to maintain data integrity (failed, declined). When deleting via a planned_task_id, the planned task is preserved (with job_task_id set to null) so it can be reused, while only the job task is deleted.

Request Body Parameters

ParameterTypeRequiredDescriptionExample
task_idstringYesThe ID of the job task or planned task to delete. Accepts either a job_task_id or planned_task_id - if a planned_task_id is provided, it will be resolved to its associated job_task_id. When using a planned_task_id, the planned task is preserved (with job_task_id set to null) while the job task is deleted.60c72b2f9b1e8c001c8e4d8a

Responses

Status CodeDescriptionResponse Body
200Job task deleted successfully. If resolved from a planned_task_id, the planned task is preserved with job_task_id set to null.{"success": true, "message": "Job task deleted successfully"}
400Bad request - Invalid task ID, task cannot be deleted due to status restrictions, or planned task exists but has no associated job task{"success": false, "error": "Invalid task id"} or {"success": false, "message": "Cannot delete job task with status 'confirmed'. Only tasks with status: failed, declined can be deleted."} or {"success": false, "error": "Planned task {id} exists but has no associated job task (job_task_id is null)"}
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, or task_id is neither a valid job task ID nor a planned task ID{"success": false, "message": "Job task not found"} or {"success": false, "error": "task_id {id} is neither a valid job task ID nor a planned task ID"}
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, active balance and pending earnings.

Responses

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

Example Response

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

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"
  }
]

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" }