Draft · v1 preview

Developer docs

whitecontext turns any careers page into monitored, structured job data. Consume it two ways: a REST API for services and a MCP server for Claude and other agents. Both return the same structured job shape, so a role looks identical whether it came from Greenhouse, Lever, Ashby, or a hand-rolled careers page.

The API and MCP server require a paid plan. See pricing for quotas and limits. Endpoint paths below are an early draft and may change before general availability.

Quickstart

Every request is authenticated with a per-team API key passed as a bearer token. Create a key from your dashboard, then submit your first company to begin discovery and monitoring.

1. Authenticate
Authorization: Bearer wc_live_a1b2c3d4e5f6g7h8
2. Submit a company
curl https://api.whitecontext.com/v1/companies \
  -H "Authorization: Bearer wc_live_a1b2c3d4e5f6g7h8" \
  -H "Content-Type: application/json" \
  -d '{"name": "Acme", "url": "https://acme.com"}'
3. Response
{
  "id": "cmp_8f2a91",
  "name": "Acme",
  "url": "https://acme.com",
  "status": "pending"
}

Discovery runs asynchronously. Poll GET /v1/companies/{id} until status leaves pending.

The job schema

Every job, from every source, is normalized to this shape. Source-specific quirks are resolved before the role reaches you, so you write your integration once.

{
  "external_id": "gh-5582910",
  "title": "Senior Backend Engineer",
  "url": "https://acme.com/careers/5582910",
  "location": "Remote (US)",
  "department": "Engineering",
  "employmentType": "Full-time",
  "salary": "$180k–$220k",
  "description": "We are looking for…",
  "posted": "2026-06-14",
  "status": "open"
}
FieldTypeNotes
external_idstringStable id from the source ATS.
titlestringRole title.
urlstringCanonical link to the posting.
locationstring | nullFree-text location.
departmentstring | nullTeam or function.
employmentTypestring | nullFull-time, contract, intern, etc.
salarystring | nullCompensation, when the source discloses it.
descriptionstring | nullPlain-text body.
postedstring | nullISO 8601 date, when known.
status"open" | "closed"Current feed state.

REST API

Draft

Base URL https://api.whitecontext.com. All endpoints are JSON over HTTPS and require a Authorization: Bearer header. Examples below omit the auth header for brevity after the quickstart.

POST/v1/companies

Submit a company to discover and monitor. Discovery finds the careers portal, builds a scraper, and starts tracking the feed.

Request
curl -X POST .../v1/companies \
  -d '{"name": "Acme", "url": "https://acme.com"}'
Response
{
  "id": "cmp_8f2a91",
  "status": "pending"
}
GET/v1/companies/{id}

Fetch a company and its current discovery status: bound (monitoring), no_openings, no_careers, broken, or pending.

Request
curl .../v1/companies/cmp_8f2a91
Response
{
  "id": "cmp_8f2a91",
  "name": "Acme",
  "url": "https://acme.com",
  "status": "bound",
  "open_jobs": 23,
  "last_checked": "2026-06-21T09:00:00Z"
}
GET/v1/companies/{id}/jobs?status=open&limit=50

Read the current structured job feed. Filter with ?status=open and page with ?limit and ?cursor.

Request
curl ".../v1/companies/cmp_8f2a91/jobs?status=open&limit=50"
Response
{
  "data": [ { /* job object */ } ],
  "next_cursor": "eyJvIjo1MH0",
  "has_more": true
}
GET/v1/companies/{id}/jobs/diff?since=2026-06-20T00:00:00Z

The monitoring signal: roles opened or closed since a timestamp. Poll this to drive alerts and downstream syncs.

Request
curl ".../v1/companies/cmp_8f2a91/jobs/diff?since=2026-06-20T00:00:00Z"
Response
{
  "since": "2026-06-20T00:00:00Z",
  "opened": [ { /* job object */ } ],
  "closed": [ { "external_id": "gh-5500011" } ]
}
POST/v1/companies/{id}/repair

Request re-discovery when a source changes or a feed looks broken. Re-runs discovery and rebuilds the scraper.

Request
curl -X POST .../v1/companies/cmp_8f2a91/repair
Response
{
  "id": "cmp_8f2a91",
  "status": "pending"
}

MCP server

Draft

The whitecontext MCP server exposes the same monitoring surface as tools an agent can call directly. Point Claude — or any MCP client — at it, and an agent can submit companies, read feeds, and check what changed without writing HTTP code. It is the REST API, made callable from inside a model.

Tools

submit_company
Submit a company by name and URL to discover and monitor.
list_companies
List the companies your team monitors and their discovery status.
get_jobs
Read the current structured job feed for a company.
jobs_diff
Get roles opened or closed since a timestamp — the monitoring signal.

Connect a client

Add the server to your MCP client config with your API key as a bearer token. The endpoint below is a draft.

{
  "mcpServers": {
    "whitecontext": {
      "url": "https://mcp.whitecontext.com/sse",
      "headers": {
        "Authorization": "Bearer wc_live_a1b2c3d4e5f6g7h8"
      }
    }
  }
}

Rate limits and plans

API and MCP access is gated by plan. Quotas cover both surfaces — they share one team key and one budget. Responses include X-RateLimit-Remaining headers so you can back off cleanly.

PlanMonitored companiesAPI / MCP limitsFreshness
FreeDashboard onlyNo API / MCP access—
StarterUp to 5060 req/min · 50k/moDaily monitoring
GrowthUp to 500300 req/min · 1M/moHourly monitoring
ScaleCustomCustom limitsNear-real-time

Exact quotas are a draft and may change. See pricing for the current plan details.

Ready to build?

Create an API key, submit your first company, and start reading a monitored feed in minutes.