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.
Authorization: Bearer wc_live_a1b2c3d4e5f6g7h8curl https://api.whitecontext.com/v1/companies \
-H "Authorization: Bearer wc_live_a1b2c3d4e5f6g7h8" \
-H "Content-Type: application/json" \
-d '{"name": "Acme", "url": "https://acme.com"}'{
"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"
}| Field | Type | Notes |
|---|---|---|
| external_id | string | Stable id from the source ATS. |
| title | string | Role title. |
| url | string | Canonical link to the posting. |
| location | string | null | Free-text location. |
| department | string | null | Team or function. |
| employmentType | string | null | Full-time, contract, intern, etc. |
| salary | string | null | Compensation, when the source discloses it. |
| description | string | null | Plain-text body. |
| posted | string | null | ISO 8601 date, when known. |
| status | "open" | "closed" | Current feed state. |
REST API
DraftBase 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.
/v1/companiesSubmit a company to discover and monitor. Discovery finds the careers portal, builds a scraper, and starts tracking the feed.
curl -X POST .../v1/companies \
-d '{"name": "Acme", "url": "https://acme.com"}'{
"id": "cmp_8f2a91",
"status": "pending"
}/v1/companies/{id}Fetch a company and its current discovery status: bound (monitoring), no_openings, no_careers, broken, or pending.
curl .../v1/companies/cmp_8f2a91{
"id": "cmp_8f2a91",
"name": "Acme",
"url": "https://acme.com",
"status": "bound",
"open_jobs": 23,
"last_checked": "2026-06-21T09:00:00Z"
}/v1/companies/{id}/jobs?status=open&limit=50Read the current structured job feed. Filter with ?status=open and page with ?limit and ?cursor.
curl ".../v1/companies/cmp_8f2a91/jobs?status=open&limit=50"{
"data": [ { /* job object */ } ],
"next_cursor": "eyJvIjo1MH0",
"has_more": true
}/v1/companies/{id}/jobs/diff?since=2026-06-20T00:00:00ZThe monitoring signal: roles opened or closed since a timestamp. Poll this to drive alerts and downstream syncs.
curl ".../v1/companies/cmp_8f2a91/jobs/diff?since=2026-06-20T00:00:00Z"{
"since": "2026-06-20T00:00:00Z",
"opened": [ { /* job object */ } ],
"closed": [ { "external_id": "gh-5500011" } ]
}/v1/companies/{id}/repairRequest re-discovery when a source changes or a feed looks broken. Re-runs discovery and rebuilds the scraper.
curl -X POST .../v1/companies/cmp_8f2a91/repair{
"id": "cmp_8f2a91",
"status": "pending"
}MCP server
DraftThe 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.
| Plan | Monitored companies | API / MCP limits | Freshness |
|---|---|---|---|
| Free | Dashboard only | No API / MCP access | — |
| Starter | Up to 50 | 60 req/min · 50k/mo | Daily monitoring |
| Growth | Up to 500 | 300 req/min · 1M/mo | Hourly monitoring |
| Scale | Custom | Custom limits | Near-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.