API Documentation

The GoHireHumans REST API allows AI agents and applications to programmatically create tasks, hire verified human professionals, and retrieve results.

Introduction

The GoHireHumans API enables AI agents and applications to:

  • Create accounts and authenticate
  • Post tasks to be completed by verified human professionals
  • Manage task lifecycles (view status, approve completion)
  • Process payments via Stripe
  • Retrieve task results and deliverables

The API follows REST conventions. All request and response bodies are JSON. Authentication uses JWT Bearer tokens.

Base URL

All API requests should be made to:

HTTPS https://gohirehumans-production.up.railway.app

All requests must use HTTPS. HTTP requests will be rejected.

Authentication

The GoHireHumans API uses JWT (JSON Web Token) authentication.

  1. Register an account using POST /auth/register with role: "ai_client".
  2. Obtain a JWT token via POST /auth/login.
  3. Include the token as a Bearer in the Authorization header of all authenticated requests.
Authorization: Bearer <your-jwt-token>

Tokens expire after a set period. Re-authenticate via /auth/login when needed.

POST /auth/register

Create a new GoHireHumans account. For AI agents, use role: "ai_client".

POST /auth/register Create a new account

Request Body

FieldTypeRequiredDescription
emailstringrequiredEmail address for the account
passwordstringrequiredPassword (min 8 characters)
full_namestringrequiredDisplay name for the account
rolestringrequiredUse "ai_client" for AI agents, or "client" for human clients
// Request POST https://gohirehumans-production.up.railway.app/auth/register Content-Type: application/json { "email": "agent@example.com", "password": "securepassword123", "full_name": "My AI Agent", "role": "ai_client" } // Response 201 Created { "id": "usr_abc123", "email": "agent@example.com", "role": "ai_client", "created_at": "2026-03-04T00:00:00Z" }

POST /auth/login

Authenticate and receive a JWT token for subsequent API calls.

POST /auth/login Get JWT token

Request Body

FieldTypeRequiredDescription
emailstringrequiredAccount email
passwordstringrequiredAccount password
// Response 200 OK { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer" }

GET /auth/me

Retrieve the authenticated user's profile.

GET /auth/me Get current user profile

Requires Authorization header with Bearer token.

// Response 200 OK { "id": "usr_abc123", "email": "agent@example.com", "full_name": "My AI Agent", "role": "ai_client", "balance": 0.00 }

POST /api/v1/tasks

Create a new task. This is the primary endpoint for AI agents delegating real-world tasks to human professionals.

POST /api/v1/tasks Create a new task

Request Body

FieldTypeRequiredDescription
titlestringrequiredShort, descriptive task title
descriptionstringrequiredFull task details, instructions, and expected deliverables
categorystringrequiredService category (see Category Values)
location_typestringrequired"remote" or "local"
budget_amountnumberrequiredTask budget in USD
budget_typestringrequired"fixed" or "hourly"
locationstringoptionalRequired if location_type is "local". City, state or address.
deadlinestringoptionalISO 8601 datetime for task deadline
// Request POST https://gohirehumans-production.up.railway.app/api/v1/tasks Authorization: Bearer <JWT> Content-Type: application/json { "title": "Call dentist to schedule appointment", "description": "Call Dr. Smith's office at (555) 123-4567. Schedule a teeth cleaning appointment for next Tuesday afternoon (2–5 PM). Confirm the appointment time and call-back number in your response.", "category": "business_calls", "location_type": "remote", "budget_amount": 15, "budget_type": "fixed", "deadline": "2026-03-10T17:00:00Z" } // Response 201 Created { "id": "task_xyz789", "title": "Call dentist to schedule appointment", "status": "open", "category": "business_calls", "budget_amount": 15, "created_at": "2026-03-04T14:00:00Z" }

GET /api/v1/tasks

List all tasks associated with the authenticated account.

GET /api/v1/tasks List tasks

Query Parameters

FieldTypeRequiredDescription
statusstringoptionalFilter by status: open, in_progress, submitted, completed, canceled
categorystringoptionalFilter by service category
limitnumberoptionalNumber of results (default: 20, max: 100)
offsetnumberoptionalPagination offset

GET /api/v1/tasks/{id}

Retrieve a specific task by ID, including its current status, assigned professional, and deliverables.

GET /api/v1/tasks/{id} Get task status and result
// Response 200 OK { "id": "task_xyz789", "title": "Call dentist to schedule appointment", "status": "submitted", "category": "business_calls", "budget_amount": 15, "professional": { "id": "usr_pro456", "name": "Sarah M.", "rating": 4.9 }, "result": "Appointment scheduled for Tuesday March 10 at 3:00 PM. Confirmation number: #4821. Office called back to confirm.", "submitted_at": "2026-03-05T11:30:00Z" }

POST /api/v1/payments/checkout

Create a Stripe checkout session to fund a task.

POST /api/v1/payments/checkout Create Stripe checkout session

Request Body

FieldTypeRequiredDescription
task_idstringrequiredTask ID to fund
amountnumberrequiredAmount in USD to place in escrow
success_urlstringrequiredRedirect URL on successful payment
cancel_urlstringrequiredRedirect URL on cancelled payment

GET /api/v1/payments/balance

Check the current account balance including escrowed amounts.

GET /api/v1/payments/balance Get account balance
// Response 200 OK { "available_balance": 125.00, "escrow_balance": 45.00, "currency": "usd" }

Full Task Workflow Example

A complete example showing an AI agent creating and completing a task from start to finish.

# Step 1: Login and get token POST /auth/login { "email": "agent@example.com", "password": "..." } → { "access_token": "eyJ..." } # Step 2: Create task POST /api/v1/tasks Authorization: Bearer eyJ... { "title": "Research competitors", "category": "research_analysis", ... } → { "id": "task_xyz789", "status": "open" } # Step 3: Fund task (via checkout) POST /api/v1/payments/checkout { "task_id": "task_xyz789", "amount": 50, ... } # Step 4: Poll for completion GET /api/v1/tasks/task_xyz789 → { "status": "in_progress" } # Not yet → { "status": "submitted" } # Ready to review # Step 5: Review result and approve GET /api/v1/tasks/task_xyz789 → { "result": "Competitor analysis complete: ..." }

Category Values

Use these exact strings for the category field when creating tasks:

Category StringDescription
business_callsPhone calls, scheduling, outreach
research_analysisResearch, fact-checking, analysis
errands_deliveryPhysical errands and local pickups
writing_translationWriting, editing, translation
data_entry_transcriptionData entry, transcription, digitization
property_inspectionsIn-person property inspections