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.
GET /v1/talent/search| Name | Type | Required | Description |
|---|---|---|---|
| q | string | No | Freeform keyword search (e.g., "python developer with data labeling experience") |
| skills | string | No | Comma-separated skills (e.g., "python,data-labeling") |
| min_rating | number | No | Minimum quality score (0-100) |
| max_hourly_rate | number | No | Maximum hourly rate in USD |
| country | string | No | Country code: "NG", "KE", "ZA" |
| limit | number | No | Max results (default: 10, max: 50) |
{
"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.
POST /v1/shortgigs| Name | Type | Required | Description |
|---|---|---|---|
| title | string | Yes | Gig title |
| description | string | Yes | Detailed instructions |
| category | string | Yes | "data_labeling" | "qa_testing" | "content" | "support" | "research" | "admin" | "custom" |
| budget_usd | number | Yes | Budget in USD (minimum $1.00) |
| spark_id | string | No | Assign to specific Spark |
| skills_required | string[] | No | Skills for auto-matching |
| deadline | string | No | ISO 8601 deadline |
| priority | string | No | "low" | "normal" | "high" | "urgent" |
| callback_url | string | No | Webhook URL for status updates |
{
"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
| Event | Trigger |
|---|---|
| gig.application_received | Spark submits a proposal |
| gig.accepted | Spark accepts assigned gig |
| gig.started | Spark begins work |
| gig.proof_submitted | Spark submits deliverable |
| gig.completed | Deliverable approved and paid |
| gig.revision_requested | Revision requested |
| gig.cancelled | Gig cancelled |
| gig.overdue | Deadline passed without delivery |
| message.received | Spark 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
| Tier | Requests/min | Gigs/day | Gigs/month |
|---|---|---|---|
| Free | 60 | 5 | 50 |
| Standard | 300 | 25 | 500 |
| Enterprise | 1,000 | 100 | 2,000 |
Rate limit headers included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
Error Codes
| Code | Meaning |
|---|---|
| 400 | Invalid parameters or request body |
| 401 | Missing or invalid API key |
| 403 | Action not permitted (e.g., blocked thread) |
| 404 | Resource not found or not owned by your client |
| 409 | Conflict (e.g., gig already approved, cannot cancel) |
| 429 | Rate limit or gig cap exceeded |
| 500 | Internal server error |
| 502 | AI review service temporarily unavailable |
{
"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