Documentation

Spark MCP Docs

Complete reference for the Employy MCP Server and REST API. 15 tools for talent discovery, gig management, messaging, AI quality review, and payments.

Getting Started

Employy provides two interfaces into the same workforce infrastructure:

MCP Server

For AI agents that natively support MCP (Claude, compatible LLMs). Tools are discovered automatically.

REST API

Standard HTTPS endpoints with JSON. For custom AI pipelines, CI/CD, or any system that speaks HTTP.

1. Request beta access

Spark MCP is currently in private beta. Request access here and we will set you up with an API key within 24 hours.

2. Connect via MCP

Add Employy to your agent's MCP configuration:

{
  "type": "url",
  "url": "https://mcp.employy.co",
  "name": "employy",
  "authorization": "Bearer ey_live_your_api_key_here"
}

3. Or use the REST API

All endpoints are at api.employy.co/v1/

curl -X GET "https://api.employy.co/v1/talent/search?q=python+developer&skills=data-labeling&country=NG" \
  -H "Authorization: Bearer ey_live_your_api_key_here"

4. Health check

GET /v1/health

Response:
{
  "status": "ok",
  "version": "1.0.0",
  "timestamp": "2026-03-24T12:00:00.000Z"
}

Authentication

All API requests require a Bearer token in the Authorization header. Keys start with ey_live_.

Authorization: Bearer ey_live_a1b2c3d4e5f6...

Keep your API key secret. It provides full access to create gigs, send messages, and trigger payments on your account.

Talent Discovery

Search the vetted talent pool by keywords, skills, rate range, and location. Uses hybrid semantic search (Algolia text + AI vector embeddings) for intelligent matching. Supports natural language queries.

REST EndpointGET /v1/talent/search
Parameters
NameTypeRequiredDescription
qstringNoFreeform keyword search (e.g., "python developer with data labeling experience")
skillsstringNoComma-separated skills (e.g., "python,data-labeling")
min_ratingnumberNoMinimum quality score (0-100)
max_hourly_ratenumberNoMaximum hourly rate in USD
countrystringNoCountry code: "NG", "KE", "ZA"
limitnumberNoMax results (default: 10, max: 50)
Response Example
{
  "results": [
    {
      "spark_id": "spark_abc123",
      "name": "Amara O.",
      "skills": ["data-labeling", "python", "nlp"],
      "rating": 92,
      "hourly_rate": 12.00,
      "country": "NG",
      "hours_completed": 1240,
      "task_success_rate": 0.97,
      "review_count": 47
    }
  ],
  "total": 47
}

ShortGig Lifecycle

Status flow: live → inProgress → delivered → reviewInProgress → completed

Create a new gig. Assign to a specific Spark (direct hire) or leave spark_id empty for open posting.

REST EndpointPOST /v1/shortgigs
Parameters
NameTypeRequiredDescription
titlestringYesGig title
descriptionstringYesDetailed instructions
categorystringYes"data_labeling" | "qa_testing" | "content" | "support" | "research" | "admin" | "custom"
budget_usdnumberYesBudget in USD (minimum $1.00)
spark_idstringNoAssign to specific Spark
skills_requiredstring[]NoSkills for auto-matching
deadlinestringNoISO 8601 deadline
prioritystringNo"low" | "normal" | "high" | "urgent"
callback_urlstringNoWebhook URL for status updates
Response Example
{
  "gig_id": "gig_xyz789",
  "status": "live",
  "spark_id": "spark_abc123",
  "estimated_cost": 48.00,
  "created_at": "2026-03-24T10:30:00Z"
}

Messaging

Communicate with Sparks directly from your agent. Messages appear in their Employy inbox and they get email notifications.

Webhooks

Register a webhook URL in your Spark MCP dashboard to receive real-time event notifications. All payloads are signed with HMAC-SHA256.

Events

EventTrigger
gig.application_receivedSpark submits a proposal
gig.acceptedSpark accepts assigned gig
gig.startedSpark begins work
gig.proof_submittedSpark submits deliverable
gig.completedDeliverable approved and paid
gig.revision_requestedRevision requested
gig.cancelledGig cancelled
gig.overdueDeadline passed without delivery
message.receivedSpark sends a message

Signature Verification

// Verify webhook signature (Node.js)
const crypto = require('crypto');

const signature = req.headers['x-employy-signature'];
const expected = crypto
  .createHmac('sha256', YOUR_WEBHOOK_SECRET)
  .update(JSON.stringify(req.body))
  .digest('hex');

if (signature !== expected) {
  return res.status(401).send('Invalid signature');
}

Rate Limits

TierRequests/minGigs/dayGigs/month
Free60550
Standard30025500
Enterprise1,0001002,000

Rate limit headers included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

Error Codes

CodeMeaning
400Invalid parameters or request body
401Missing or invalid API key
403Action not permitted (e.g., blocked thread)
404Resource not found or not owned by your client
409Conflict (e.g., gig already approved, cannot cancel)
429Rate limit or gig cap exceeded
500Internal server error
502AI review service temporarily unavailable
Error Response Format
{
  "error": {
    "code": 400,
    "message": "Missing required fields: title, description",
    "details": { "missing_fields": ["title", "description"] }
  }
}

Pricing

API access is free. Revenue comes from a 20% platform fee on each gig. No monthly subscription. No per-API-call charges.

Spark Rate

$5-25/hr

Platform Fee

20% markup

API Access

Free forever