{"openapi":"3.1.0","info":{"title":"People Analytics — Data API","version":"1.0.0","description":"Posted, metered, agent-commerce data API: minimum-wage lookups, roster compliance, wage datasets, and pay benchmarks. Free tier (1,000 minimum-wage lookups/mo per IP); then a `pa_…` API key (Authorization: Bearer). Over the free ceiling, an unkeyed call returns 402 with a Stripe Checkout link for inline purchase."},"servers":[{"url":"https://compensationtoolbox.com/api/v1"}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"pa_…","description":"Authorization: Bearer pa_…"}}},"x-pricing":{"metered-lookup":{"id":"metered-lookup","unit":"lookup","label":"$0.005 / lookup","freeAllowancePerMonth":1000,"volume":[{"upToPerMonth":100000,"unitAmountCents":0.5},{"upToPerMonth":null,"unitAmountCents":0.2}]},"metered-roster":{"id":"metered-roster","unit":"row","label":"$0.05 / employee-row","volume":[{"upToPerMonth":10000,"unitAmountCents":5},{"upToPerMonth":100000,"unitAmountCents":3},{"upToPerMonth":null,"unitAmountCents":1}]},"metered-benchmark":{"id":"metered-benchmark","unit":"query","label":"$3 / query","volume":[{"upToPerMonth":100,"unitAmountCents":300},{"upToPerMonth":null,"unitAmountCents":200}]},"dataset":{"id":"dataset","unit":"dataset","label":"$258 one-time snapshot (or $79/mo · $790/yr maintained feed)","volume":[{"upToPerMonth":null,"unitAmountCents":25800}]},"metered-resolve":{"id":"metered-resolve","unit":"call","label":"$0.01 / resolve (1,000/mo free)","freeAllowancePerMonth":1000,"volume":[{"upToPerMonth":null,"unitAmountCents":1}]},"metered-match":{"id":"metered-match","unit":"call","label":"$0.05 / match","volume":[{"upToPerMonth":null,"unitAmountCents":5}]},"metered-bulk-map":{"id":"metered-bulk-map","unit":"row","label":"$0.02 / employee-row","volume":[{"upToPerMonth":null,"unitAmountCents":2}]}},"paths":{"/minimum-wage":{"get":{"operationId":"getMinimumWage","summary":"Applicable minimum wage for a jurisdiction (+ variants + scheduled increases).","description":"Free ≤ 1000/mo per IP, then $0.005 / lookup.","parameters":[{"name":"jurisdiction","in":"query","required":true,"schema":{"type":"string"},"description":"e.g. \"San Francisco, CA\" or \"WA\""},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"security":[{},{"ApiKey":[]}],"responses":{"200":{"description":"OK"},"402":{"description":"Over free ceiling — body carries checkoutUrl"},"404":{"description":"Unknown jurisdiction"}}}},"/minimum-wage/dataset":{"get":{"operationId":"getMinimumWageDataset","summary":"Full minimum-wage jurisdiction dataset (CSV/JSON). Entitlement-gated.","description":"$258 one-time snapshot (or $79/mo · $790/yr maintained feed)","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["csv","json"]}},{"name":"token","in":"query","required":false,"schema":{"type":"string"},"description":"commerce entitlement token (alternative to an entitled API key)"}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Dataset"},"402":{"description":"Entitlement required — body carries checkoutUrl"}}}},"/roster/evaluate":{"post":{"operationId":"evaluateRoster","summary":"Evaluate a roster against the applicable minimum-wage floors.","description":"Keyed; $0.05 / employee-row (volume-tiered).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["employees"],"properties":{"employees":{"type":"array","items":{"type":"object","required":["id","location","payRate"],"properties":{"id":{"type":"string"},"location":{"type":"string"},"payRate":{"type":"number"},"periodHours":{"type":"number"}}}},"date":{"type":"string","format":"date"}}}}}},"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Per-row results + summary"},"402":{"description":"API key required — body carries checkoutUrl"}}}},"/resolve":{"get":{"operationId":"resolveTitle","summary":"Resolve a messy job title to ranked JobFrame canonical candidates (3-state).","description":"Free ≤ 1000/mo per IP, then $0.01/call. Deterministic — no LLM in the serving path. Method: /jobframe/matching.","parameters":[{"name":"title","in":"query","required":true,"schema":{"type":"string"},"description":"free text, e.g. \"Senior Software Engineer\""}],"security":[{},{"ApiKey":[]}],"responses":{"200":{"description":"Ranked candidates + recommendedAction"},"402":{"description":"Over free ceiling — body carries checkoutUrl"}}}},"/match":{"get":{"operationId":"matchProfiles","summary":"Coordinate distance + 3-state band between two canonical profiles, or nearest neighbors.","description":"Keyed; $0.05 / match. Computed over frozen coordinate editions (structural/content/pay/semantic). Method: /jobframe/matching.","parameters":[{"name":"a","in":"query","required":false,"schema":{"type":"string"},"description":"profileKey (pairwise mode, with b)"},{"name":"b","in":"query","required":false,"schema":{"type":"string"},"description":"profileKey (pairwise mode, with a)"},{"name":"profileKey","in":"query","required":false,"schema":{"type":"string"},"description":"neighbors mode"},{"name":"space","in":"query","required":false,"schema":{"type":"string","enum":["structural","content","pay","semantic"]}},{"name":"neighbors","in":"query","required":false,"schema":{"type":"integer","maximum":25}}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Distance + band (or neighbor list)"},"402":{"description":"API key required — body carries checkoutUrl"},"404":{"description":"Unknown profileKey"}}}},"/bulk-map":{"post":{"operationId":"bulkMapTitles","summary":"Map a batch of titles to JobFrame canonical candidates in one call.","description":"Keyed; $0.02 / employee-row. Distinct titles resolve once; every row carries the honest 3-state action. The Snapshot Map product adds deliverable files + the review workflow on top of this meter.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["rows"],"properties":{"rows":{"type":"array","maxItems":5000,"items":{"type":"object","required":["title"],"properties":{"title":{"type":"string"},"ref":{"type":"string"}}}}}}}}},"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Per-row results + summary"},"402":{"description":"API key required — body carries checkoutUrl"}}}},"/benchmark":{"get":{"operationId":"getBenchmark","summary":"Hourly market pay benchmark for a role × geography.","description":"Keyed; $3 / query (volume-tiered).","parameters":[{"name":"role","in":"query","required":true,"schema":{"type":"string"},"description":"SOC code (NN-NNNN); title→SOC resolution coming"},{"name":"geo","in":"query","required":false,"schema":{"type":"string"},"description":"USPS state, OEWS metro code, or \"national\" (default)"}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Benchmark estimate"},"402":{"description":"API key required — body carries checkoutUrl"}}}},"/prior":{"get":{"operationId":"getBenchmarkPrior","summary":"Cross-client benchmark prior for a function × level cell (n-weighted mean + honest CI).","description":"Keyed; $3 / query (volume-tiered). The error range is WIDE with little data and tightens as observations + contributing tenants accumulate. A cell with zero contributions returns prior: null (never a fabricated number) and is not billed.","parameters":[{"name":"function","in":"query","required":true,"schema":{"type":"string"},"description":"canonical function slug"},{"name":"level","in":"query","required":true,"schema":{"type":"string"},"description":"level code"},{"name":"geo","in":"query","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["compensation","hr-metric"]},"description":"default \"compensation\""},{"name":"metric","in":"query","required":false,"schema":{"type":"string"},"description":"default \"base-median\" (compensation) / \"rate\" (hr-metric)"},{"name":"segment","in":"query","required":false,"schema":{"type":"string"}}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Prior (or prior: null for an empty cell — unbilled)"},"402":{"description":"API key required — body carries checkoutUrl"}}}},"/metrics":{"get":{"operationId":"getMetrics","summary":"Canonical HR metrics catalog — search, or look one metric up by id.","description":"Free ≤ 1000/mo per IP, then $0.005 / lookup (volume-tiered). Returns id, name, definition, formula, and category as the catalog carries them; search results cap at 25.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"search over name / definition / slug"},{"name":"id","in":"query","required":false,"schema":{"type":"string"},"description":"stable metric id, e.g. \"hr-metric.<category>.<metric>\""}],"security":[{},{"ApiKey":[]}],"responses":{"200":{"description":"Metric (id mode) or metric list (search mode)"},"402":{"description":"Over free ceiling — body carries checkoutUrl"},"404":{"description":"Unknown metric id"}}}}}}