Developers

Talengineer API v1

A stable, versioned REST API for enterprise integration. Post demands, browse the engineer directory, track milestones, and receive signed webhooks.

Authentication

All v1 endpoints require an API key. Create one on the Enterprise page, then send it as a Bearer token. Keys are only issued to employer / enterprise accounts.

Base URL: https://talengineer.us/api/v1/ent

Auth header: Authorization: Bearer TE_your_key_here

Endpoints

MethodPathDescription
GET/api/v1/ent/demandsList your enterprise demands (paginated: page, limit).
POST/api/v1/ent/demandsCreate a demand. Body: title, description, budget, region.
GET/api/v1/ent/talentsBrowse the public engineer directory (no PII). Query: region, skills, page, limit.
GET/api/v1/ent/demands/:id/milestonesList milestones for a demand you own.

Webhooks

Configure a webhook URL per API key on the Enterprise page. When you save it, we generate a signing secret (shown once). We POST a signed JSON body to your URL on these events:

EventDescription
milestone.fundedAn employer funded a milestone into escrow.
milestone.releasedEscrowed funds were released to the engineer.
demand.assignedAn engineer was assigned to your demand.

Payload

Every delivery is a JSON body with this shape. The signature is computed over the exact bytes of this body.

{
  "event": "milestone.funded",
  "payload": { "milestone_id": 123, "demand_id": 45 },
  "timestamp": "2026-07-17T12:00:00.000Z"
}

Signature verification

Each request carries an X-TalEngineer-Signature header: the hex HMAC-SHA256 of the raw body, keyed by your webhook secret. Recompute it and compare in constant time:

const crypto = require('crypto');

// Express: capture the RAW body for this route (e.g. express.raw),
// then verify before trusting the payload.
function verifyTalengineerWebhook(rawBody, headerSignature, webhookSecret) {
  const expected = crypto
    .createHmac('sha256', webhookSecret)
    .update(rawBody)                // the exact bytes we sent
    .digest('hex');

  // Constant-time compare to avoid timing attacks.
  const a = Buffer.from(headerSignature || '', 'hex');
  const b = Buffer.from(expected, 'hex');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

// Usage inside your handler:
//   const sig = req.headers['x-talengineer-signature'];
//   if (!verifyTalengineerWebhook(req.rawBody, sig, process.env.TE_WEBHOOK_SECRET)) {
//     return res.status(401).end();
//   }
Manage API keys & webhooks

MCP — Connect Your AI Agent

Talengineer is the first industrial-automation talent platform that AI agents can call directly.

POST /api/mcp is a stateless JSON-RPC 2.0 endpoint implementing the Model Context Protocol (MCP): initialize, tools/list and tools/call. Point Claude Desktop, an IDE agent, or any MCP-compatible client at it, and your agent can search engineers, check rate benchmarks, and prepare demand drafts for you.

Base URL: https://talengineer.us/api/mcp

Auth header: Authorization: Bearer TE_your_key_here

Authentication reuses your v1 API key — send it as a Bearer token, exactly like the REST endpoints above.

ToolDescription
search_engineersSearch the public engineer directory (no PII). Filters: track, region, skill, maxRate, limit.
get_ratesRegional rate benchmarks, optionally filtered by region / specialty.
get_certification_infoThe certification system: 4 tracks × levels L1–L3, exam rules and validity.
parse_demandParse a free-form project need (any language) into a structured demand draft. Nothing is saved.
get_my_projectsList the projects owned by the API key account.
get_milestone_statusMilestone / escrow status for a project you participate in.
create_demand_draftSave a demand as a private draft (status = draft) — never auto-published.

Every tool is read-only except create_demand_draft, which only saves a private draft (status = draft). Drafts are never listed publicly, and publishing always requires a human click in the UI.

Example: tools/call

curl -X POST https://talengineer.us/api/mcp \
  -H "Authorization: Bearer TE_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "search_engineers",
      "arguments": { "region": "Monterrey", "skill": "Siemens S7", "limit": 3 }
    }
  }'