Interactive reference · v2.0

API reference

Complete API reference with interactive try-it-out feature. Browse every endpoint, see request/response schemas, and test calls against the live API.

API Version: 2.0.0 · OpenAPI Spec: /openapi.json · Base URL: https://api.verifiedworkflows.com

Authentication

All endpoints require a Bearer token in the Authorization header. Obtain keys from your Account Settings.

Authorization: Bearer vw_live_YOUR_API_KEY
Workspace-Id: default

Two authentication methods are supported:

  • API Keys: Long-lived keys for server-to-server integration
  • JWT Tokens: Short-lived tokens from /v1/auth/login for user sessions

Rate Limits

Sliding window: 5 requests per 10 seconds per API key. Freelancer.com endpoints enforce an additional 100ms minimum between requests with automatic retry on 429/5xx.

HeaderDescription
X-RateLimit-LimitMaximum requests per window (5)
X-RateLimit-RemainingRemaining requests in current window
Retry-AfterSeconds to wait (only on 429 responses)

Error Handling

All errors return a consistent JSON structure:

{
  "type": "https://api.verifiedworkflows.com/errors/{error-type}",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable error description",
  "instance": "/v1/tasks"
}
StatusTypeDescription
400bad-requestInvalid parameters
401unauthorizedMissing/invalid auth
403forbiddenKey revoked or insufficient scope
404not-foundResource not found
422validation-failedSchema validation error
429rate-limit-exceededToo many requests
500internal-errorServer error
502upstream-errorFreelancer.com API error

Tasks

POST/v1/tasks

Create a new task for human review. Supports idempotency via Idempotency-Key header.

Request Body

FieldTypeRequiredDescription
typestringyesTask type
prioritystringyesstandard | express
titlestringyesTask title
instructionsstringyesReviewer instructions
payloadobjectyesTask content
consensus_totalintegernoNumber of reviewers (default: 1)
required_skillsstring[]noRequired certifications
workflow_stepsstring[]noMulti-step workflow labels
GET/v1/tasks/{task_id}

Retrieve a specific task by ID including status, results, and metadata.

GET/v1/tasks

List all tasks in the workspace. Filtered by Workspace-Id header.

POST/v1/tasks/{task_id}/votes

Submit a consensus vote for a task. When all votes are collected, the task is resolved.

PUT/v1/tasks/{task_id}/resolve

Directly resolve a task with a result payload, bypassing the consensus flow.

Client Endpoints

GET/v1/client/dashboard

Dashboard statistics: task counts, quality scores, balance, and completion metrics.

GET/v1/client/tasks

List all tasks for the authenticated client workspace with filtering support.

POST/v1/client/tasks/batch

Submit multiple tasks in a single request. Max 100 tasks per batch.

GET/v1/client/analytics/summary

Analytics overview with time-series data for tasks, quality, and costs.

GET/v1/client/analytics/quality

Quality metrics broken down by task type, reviewer, and time period.

GET/v1/client/analytics/costs

Cost breakdown by task type, priority, and time period.

GET/v1/client/billing/usage

Usage statistics and billing transaction history.

Templates

POST/v1/client/templates

Save a task template for reuse. Body: { "name": string, "config": object }

GET/v1/client/templates

List all saved task templates.

Webhooks & Keys

GET/v1/webhooks/deliveries

List webhook delivery attempts with status and retry information.

GET/v1/keys

List all API keys for the workspace.

POST/v1/keys

Create a new API key. Body: { "name": string, "scope": string }

DELETE/v1/keys/{key_token}

Revoke an API key. The key will be marked as "Revoked" and can no longer be used.

Billing

GET/v1/billing

List billing transactions for the workspace.

POST/v1/billing/refill

Add credits to workspace balance. Body: { "amount": float }

Freelancer.com Integration

Freelancer
GET/v1/freelancer/status

Current connection status: configured, OAuth state, user ID.

GET/v1/freelancer/health

Comprehensive health check — tests all Freelancer.com API connections. Returns per-endpoint latency and success status.

{
  "status": "healthy",
  "total_ms": 847,
  "configured": true,
  "auth_method": "oauth",
  "checks": {
    "token": {"ok": true, "ms": 12},
    "user_info": {"ok": true, "ms": 156, "user": {"id": 8837087, "username": "nickaisbitt"}},
    "categories": {"ok": true, "count": 120, "ms": 234},
    "jobs": {"ok": true, "count": 500, "ms": 198},
    "projects": {"ok": true, "count": 2, "ms": 167},
    "threads": {"ok": true, "count": 5, "ms": 82},
    "freelancer_search": {"ok": true, "count": 3, "ms": 150}
  }
}
POST/v1/freelancer/hire

Create an hourly project and invite a freelancer. Returns project ID.

Request Body

FieldTypeRequiredDescription
freelancer_usernamestringyesFreelancer.com username
task_typestringnoReview task type (default: "general_review")
hourly_ratenumbernoHourly rate in USD (default: 3)
POST/v1/freelancer/onboard

Full reviewer onboarding: create project → invite → auto-award → first milestone. One-call setup for new reviewers.

Request Body

FieldTypeRequiredDescription
usernamestringyesFreelancer.com username
task_typestringnoReview task type (default: "general_review")
hourly_ratenumbernoHourly rate in USD (default: 3)
initial_milestone_amountnumbernoFirst payment amount (auto-released if set)
{
  "steps": [
    {"step": "project_created", "project_id": 85651476},
    {"step": "freelancer_found", "freelancer_id": 74580929},
    {"step": "invited", "ok": true},
    {"step": "auto_awarded", "bid_id": 98234561, "result": {"success": true}},
    {"step": "first_milestone", "milestone_id": 123456, "amount": 5.00, "status": "released"}
  ],
  "status": "complete",
  "project_id": 85651476,
  "freelancer_id": 74580929
}
GET/v1/freelancer/projects

List all Freelancer.com projects owned by the authenticated user.

GET/v1/freelancer/projects/{project_id}/bids

List all bids on a project with bidder details, amounts, and status.

POST/v1/freelancer/projects/{project_id}/award

Award a specific bid. Requires { "bid_id": integer } in body.

POST/v1/freelancer/projects/{project_id}/auto-award

Auto-award to the cheapest qualified bidder. Filters by rating ≥ 70%, sorts by price ascending. No body required.

// Response
{
  "bid_id": 98234561,
  "freelancer": {"id": 74580929, "username": "reviewer1"},
  "amount": "12.00",
  "result": {"success": true, "id": 98234561}
}
POST/v1/freelancer/projects/{project_id}/bids/{bid_id}/revoke

Revoke an accepted bid. Frees the project for new bids.

POST/v1/freelancer/projects/{project_id}/settle-batch

Settle multiple reviewers in one call. Batch payout for efficiency.

Request Body

FieldTypeRequiredDescription
freelancer_idsinteger[]yesArray of Freelancer.com user IDs
amountsnumber[]yesCorresponding payout amounts
GET/v1/freelancer/categories

List all Freelancer.com project categories. Useful for mapping task types to categories.

GET/v1/freelancer/jobs

List all Freelancer.com skill/job types. Useful for project tagging.

Messaging

Freelancer
POST/v1/freelancer/threads

Start a conversation about a project. Requires { "project_id": integer, "user_id": integer }.

GET/v1/freelancer/threads

List all messaging threads for the authenticated user.

GET/v1/freelancer/threads/{thread_id}/messages

Read all messages in a thread. Supports pagination via offset and limit query params.

POST/v1/freelancer/threads/{thread_id}/messages

Send a text message or file attachment. Use multipart/form-data for attachments.

FieldTypeDescription
messagestringText message content
filebinaryFile attachment (optional)

Freelancer Discovery

Freelancer
GET/v1/freelancer/freelancers/search

Search for freelancers by skill or job keywords.

QueryTypeDescription
querystringSearch query (e.g. "python", "qa")
limitintegerResults limit (default: 20)
GET/v1/freelancer/freelancers/{user_id}/reputation

Check a freelancer's quality score, earnings history, and job completion rate. Pass multiple IDs as comma-separated: ?user_ids=123,456

Milestones

Freelancer
GET/v1/freelancer/milestones/{milestone_id}

Check milestone status: pending, active, reviewed, completed, cancelled, paid, expired, disputed.

POST/v1/freelancer/milestones/{milestone_id}/cancel

Cancel a milestone before release. Returns the cancelled milestone details.

POST/v1/freelancer/milestones/{milestone_id}/request-release

Request milestone release (reviewer-initiated). Employer must approve.

Milestone Requests

New
POST/v1/freelancer/milestone-requests

Reviewer-initiated payment request. Employer receives notification to approve/reject.

FieldTypeRequiredDescription
milestone_idintegeryesMilestone to request payment for
amountnumbernoOverride amount (optional)
GET/v1/freelancer/milestone-requests/{request_id}

Check request status: pending, approved, rejected.

POST/v1/freelancer/milestone-requests/{request_id}/accept

Employer accepts the payment request. Milestone is released to freelancer.

POST/v1/freelancer/milestone-requests/{request_id}/reject

Employer rejects the payment request. Reviewer is notified.

Admin Dashboard

New
GET/v1/freelancer/admin/projects

Admin view: all Freelancer.com projects with bids and milestones.

{
  "projects": [
    {
      "id": 85651476,
      "title": "Text QA Reviewer",
      "status": "active",
      "type": "hourly",
      "budget": "3.00",
      "bids": [
        {"id": 98234561, "username": "reviewer1", "amount": "12.00", "status": "awarded"}
      ],
      "milestones": [
        {"id": 123456, "amount": "5.00", "status": "completed", "description": "Weekly review"}
      ],
      "bid_count": 3,
      "milestone_count": 2
    }
  ],
  "total": 1
}
GET/v1/freelancer/admin/reviewers

Admin view: all linked reviewers from our DB with Freelancer.com quality scores.

{
  "reviewers": [
    {
      "id": "user_abc123",
      "freelancer_user_id": 74580929,
      "freelancer_project_id": 85651476,
      "tier": "standard",
      "earned_tokens": 15000,
      "paid_tokens": 10000,
      "ready_for_payout": 5000,
      "reviewer_score": 82.5,
      "freelancer_quality_score": 88.2
    }
  ],
  "total": 1
}

Operations

New
POST/v1/freelancer/dispute

Handle a payment dispute: cancel milestone + notify via messaging + log to audit.

FieldTypeRequiredDescription
milestone_idintegeryesMilestone to dispute
reasonstringnoWhy the payment is disputed
thread_idintegernoMessaging thread to notify freelancer
{
  "steps": [
    {"step": "cancel_milestone", "success": true, "result": {"status": "cancelled"}},
    {"step": "notify_freelancer", "success": true}
  ],
  "status": "resolved",
  "milestone_id": 123456
}
POST/v1/freelancer/webhooks

Webhook receiver for Freelancer.com events. Events are logged to audit table and routed internally.

Supported events: bid.accepted, bid.revoked, milestone.paid, milestone.released, milestone.cancelled, project.awarded, messaging.message_created

{
  "status": "received",
  "event": "bid.accepted"
}

Ready to integrate?

Spin up a sandbox in 60 seconds, or grab a live API key to send your first task to a certified reviewer.