Complete API reference with interactive try-it-out feature. Browse every endpoint, see request/response schemas, and test calls against the live API.
/openapi.json · Base URL: https://api.verifiedworkflows.comAll 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:
/v1/auth/login for user sessionsSliding 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.
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per window (5) |
X-RateLimit-Remaining | Remaining requests in current window |
Retry-After | Seconds to wait (only on 429 responses) |
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"
}
| Status | Type | Description |
|---|---|---|
400 | bad-request | Invalid parameters |
401 | unauthorized | Missing/invalid auth |
403 | forbidden | Key revoked or insufficient scope |
404 | not-found | Resource not found |
422 | validation-failed | Schema validation error |
429 | rate-limit-exceeded | Too many requests |
500 | internal-error | Server error |
502 | upstream-error | Freelancer.com API error |
Create a new task for human review. Supports idempotency via Idempotency-Key header.
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | yes | Task type |
| priority | string | yes | standard | express |
| title | string | yes | Task title |
| instructions | string | yes | Reviewer instructions |
| payload | object | yes | Task content |
| consensus_total | integer | no | Number of reviewers (default: 1) |
| required_skills | string[] | no | Required certifications |
| workflow_steps | string[] | no | Multi-step workflow labels |
Retrieve a specific task by ID including status, results, and metadata.
List all tasks in the workspace. Filtered by Workspace-Id header.
Submit a consensus vote for a task. When all votes are collected, the task is resolved.
Directly resolve a task with a result payload, bypassing the consensus flow.
Dashboard statistics: task counts, quality scores, balance, and completion metrics.
List all tasks for the authenticated client workspace with filtering support.
Submit multiple tasks in a single request. Max 100 tasks per batch.
Analytics overview with time-series data for tasks, quality, and costs.
Quality metrics broken down by task type, reviewer, and time period.
Cost breakdown by task type, priority, and time period.
Usage statistics and billing transaction history.
Save a task template for reuse. Body: { "name": string, "config": object }
List all saved task templates.
List webhook delivery attempts with status and retry information.
List all API keys for the workspace.
Create a new API key. Body: { "name": string, "scope": string }
Revoke an API key. The key will be marked as "Revoked" and can no longer be used.
List billing transactions for the workspace.
Add credits to workspace balance. Body: { "amount": float }
Current connection status: configured, OAuth state, user ID.
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}
}
}
Create an hourly project and invite a freelancer. Returns project ID.
| Field | Type | Required | Description |
|---|---|---|---|
| freelancer_username | string | yes | Freelancer.com username |
| task_type | string | no | Review task type (default: "general_review") |
| hourly_rate | number | no | Hourly rate in USD (default: 3) |
Full reviewer onboarding: create project → invite → auto-award → first milestone. One-call setup for new reviewers.
| Field | Type | Required | Description |
|---|---|---|---|
| username | string | yes | Freelancer.com username |
| task_type | string | no | Review task type (default: "general_review") |
| hourly_rate | number | no | Hourly rate in USD (default: 3) |
| initial_milestone_amount | number | no | First 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
}
List all Freelancer.com projects owned by the authenticated user.
List all bids on a project with bidder details, amounts, and status.
Award a specific bid. Requires { "bid_id": integer } in body.
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}
}
Revoke an accepted bid. Frees the project for new bids.
Settle multiple reviewers in one call. Batch payout for efficiency.
| Field | Type | Required | Description |
|---|---|---|---|
| freelancer_ids | integer[] | yes | Array of Freelancer.com user IDs |
| amounts | number[] | yes | Corresponding payout amounts |
List all Freelancer.com project categories. Useful for mapping task types to categories.
List all Freelancer.com skill/job types. Useful for project tagging.
Search Freelancer.com projects by query, category, or job type.
| Query | Type | Description |
|---|---|---|
| query | string | Search query (default: "review") |
| limit | integer | Results limit (default: 20) |
Start a conversation about a project. Requires { "project_id": integer, "user_id": integer }.
List all messaging threads for the authenticated user.
Read all messages in a thread. Supports pagination via offset and limit query params.
Send a text message or file attachment. Use multipart/form-data for attachments.
| Field | Type | Description |
|---|---|---|
| message | string | Text message content |
| file | binary | File attachment (optional) |
Search for freelancers by skill or job keywords.
| Query | Type | Description |
|---|---|---|
| query | string | Search query (e.g. "python", "qa") |
| limit | integer | Results limit (default: 20) |
Check a freelancer's quality score, earnings history, and job completion rate. Pass multiple IDs as comma-separated: ?user_ids=123,456
Check milestone status: pending, active, reviewed, completed, cancelled, paid, expired, disputed.
Cancel a milestone before release. Returns the cancelled milestone details.
Request milestone release (reviewer-initiated). Employer must approve.
Reviewer-initiated payment request. Employer receives notification to approve/reject.
| Field | Type | Required | Description |
|---|---|---|---|
| milestone_id | integer | yes | Milestone to request payment for |
| amount | number | no | Override amount (optional) |
Check request status: pending, approved, rejected.
Employer accepts the payment request. Milestone is released to freelancer.
Employer rejects the payment request. Reviewer is notified.
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
}
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
}
Handle a payment dispute: cancel milestone + notify via messaging + log to audit.
| Field | Type | Required | Description |
|---|---|---|---|
| milestone_id | integer | yes | Milestone to dispute |
| reason | string | no | Why the payment is disputed |
| thread_id | integer | no | Messaging thread to notify freelancer |
{
"steps": [
{"step": "cancel_milestone", "success": true, "result": {"status": "cancelled"}},
{"step": "notify_freelancer", "success": true}
],
"status": "resolved",
"milestone_id": 123456
}
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"
}
Spin up a sandbox in 60 seconds, or grab a live API key to send your first task to a certified reviewer.