API quickstart

Two transports. Same algorithms. Pick one.

Every is callable over plain HTTP and over the Model Context Protocol gateway. 119 read endpoints are public; 202 write endpoints are service-key gated. AI agents call the same tools over . The list below is registry-driven — when a spoke ships a new contract, it shows up here automatically.

Dev Console

Or skip the curl — try it in the browser.

The Dev Console wraps every endpoint below in a form + live call inspector. Same transports, same auth model, zero setup.

Representative API Explorer view — the live console at /console issues real calls.

Public read endpoints

No key needed. Paste in any terminal.

Every GET on the toolbox is publicly reachable in production (PAT-11). Every snippet below is a runnable command — paste it into a terminal and you'll get JSON back. Discovery endpoints (/api/registry, /api/health) and per-spoke reads return real data from the running system. Use them to confirm the toolbox is live before integrating.

reincarnation

contract v1.3.0

reincarnation.psychometric-feed

GET

Per-galaxy psychometric statistics feed (Cronbach alpha, IRT, virtues).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/reincarnation/psychometric-feed"

performance-calibration

contract v1.0.0

performance-calibration.health

GET

Per-spoke Postgres reachability shim on `performance_calibration` (heartbeat table probe against shared Supabase).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/performance-calibration/health"

performance-calibration.cycles.summary

GET

Side-by-side cycle stats: bumped up/down/unchanged + percentages (pct unchanged ≡ calibration-room accuracy among complete parses) plus per-leader aggregates at elt/l3/l4/l5 layers.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/performance-calibration/summary"

performance-calibration.employees.trajectory

GET

Dedup latest row per calibration cycle then return the trailing N cycles for one employee (`lastNCycles`, default 6) with deltas + attribution to elt/l3 leaders captured at ingest time.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/performance-calibration/trajectory"

performance-validity

contract v1.3.0

performance-validity.health

GET

Postgres heartbeat on `performance_validity` proving the diagnostics spoke DDL is reachable in the shared project.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/health"

preference-modeler

contract v1.6.0

preference-modeler.surveys.get

GET

Fetch the full survey package by ID.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/surveys/:id"

preference-modeler.surveys.preferences

GET

Aggregated preference weights, anonymity-gated by minimumResponseThreshold. Optional ?bySegment=true adds bySegment[] (per-segment weights + anonymity); cohorts below threshold omitted.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/surveys/:id/preferences"

program-evaluation

contract v0.2.0

program-evaluation.health

GET

Per-spoke heartbeat shim for Postgres reachability on `program_evaluation`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/program-evaluation/health"

program-evaluation.experiments.get

GET

Public read of experiment detail (arms + optional pre-registration). Returns 409 when stored pre-registration digest fails verification.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/program-evaluation/experiments/:id"

talent-value

contract v0.5.0

talent-value.health

GET

Per-spoke heartbeat shim for Postgres reachability on `talent_value`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/talent-value/health"

talent-value.elv.compute

GET

ELV (Employee Lifetime Value) per segment from HCROI × avg annual cost × tenure-at-exit, inputs exposed as a drill-down + optional seeded-MC uncertainty. Relative/prioritization, not GAAP. Falls back to seeded examples when the tenant has no stored inputs.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/talent-value/elv"

talent-value.nav.compute

GET

NA% (share activated), NAV (NA% × ELV), and Opportunity (ELV − NAV) per segment, sorted by Opportunity descending with portfolio totals. NA% denominator headcount (canonical) or survey-response (labeled). The capital-allocation prioritization signal.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/talent-value/nav"

leadership-quality

contract v0.2.0

leadership-quality.health

GET

Per-spoke heartbeat shim for Postgres reachability on `leadership_quality`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/leadership-quality/health"

leadership-quality.score.read

GET

Leadership Quality (0–100, decomposable) per stored subject — composite over performance-program / activation-CAMS / comp-stewardship component sub-indexes, each independently retrievable. Falls back to seeded examples.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/leadership-quality/score"

linkage-models

contract v0.1.0

linkage-models.health

GET

Per-spoke heartbeat shim for Postgres reachability on `linkage_models`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/health"

linkage-models.models.list

GET

List registered linkage models (the Models layer / linkage design graph — PAT-198 crown-jewel Brief 1): name, outcome, status, variable count.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/models"

linkage-models.models.get

GET

Read one model with its full variable set.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/models/:id"

linkage-models.models.grounding

GET

Resolve each variable's Principia prior via principia-connector (honest three-state per variable: found / none / error, + ungrounded). Never fabricated (PAT-150 rule).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/models/:id/grounding"

linkage-models.edges.query

GET

Query linkage routing edges (persona × priority-dimension → construct/model → measure/metric → analytic/spoke), optionally filtered to a node.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/edges"

linkage-models.allocations.list

GET

List recorded executive allocation sets for a model.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/allocations"

linkage-models.importance.read

GET

Read persisted importance snapshots (stated / empirical / overall / divergence per item; eltStated on elt-scope rows), newest first — divergence is trendable.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/importance"

forecast-strength

contract v0.1.0

forecast-strength.health

GET

Per-spoke heartbeat shim for Postgres reachability on `forecast_strength`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/forecast-strength/health"

forecast-strength.forecasts.list

GET

List logged leader forecasts (?leaderId= optional).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/forecast-strength/forecasts"

forecast-strength.scores.read

GET

A leader's forecast scores + accuracy summary + QUARTERLY calibration trend (hit rates vs nominal coverage; negative gap = overconfident). Computed on read — never stale.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/forecast-strength/scores"

forecast-strength.rollup.read

GET

ELT roll-up: per-leader accuracy summaries + the team aggregate + team trend.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/forecast-strength/rollup"

survey-orchestrator

contract v0.15.0

survey-orchestrator.health

GET

Per-spoke heartbeat shim for Postgres reachability on `survey_orchestrator`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/health"

survey-orchestrator.programs.list

GET

Public read of a tenant's survey program catalog.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/programs"

survey-orchestrator.journey.read

GET

Public per-respondent longitudinal journey across a program's waves (14d→90d→quarterly→yearly), ordered, with response pointers.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/journey"

survey-orchestrator.programs.trend

GET

Public per-wave participation/response trend for a program — a cohort aggregate, min-N suppressed (privacy floor).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/trend"

survey-orchestrator.attrition.analyze

GET

Public from-to attrition analysis: talent-competitor map (win-from / lose-to + why), regretted + avoidable rates, movement drivers — segment-aligned, min-N suppressed (PAT-183).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/attrition/analysis"

survey-orchestrator.activation.battery

GET

Public read of the canonical CAMS / Activation item battery (12-item on-hand set: 8 validated core C/A/M/S × team/individual + 4 cited extensions; 0–10 scale; Activated≥70 / At-Risk<60). The instrument fielded through reincarnation (PAT-CAMS-INSTRUMENT).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/activation/battery"

survey-orchestrator.pay-satisfaction.battery

GET

Public read of the canonical Pay Satisfaction battery (8-item, four-facet set — Pay Level / Raises / Benefits / Structure & Administration — paraphrased after the PSQ (Heneman & Schwab, 1985) + cited; 0–10 scale). The pay-sat pulse for the Comp Toolbox; fielded through reincarnation (PAT-JFE-PAY-3).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/pay-satisfaction/battery"

survey-orchestrator.pay-fairness-perception.battery

GET

Public read of the Pay Fairness & Equity perceptions battery (11 items across the three organizational-justice dimensions — distributive w/ internal/external/individual equity referents · procedural · interactional — Colquitt 2001 + Adams 1965, paraphrased + cited; 0–10). Measures what KIND of (un)fair, not contentment (PAT-JFE-PAY-6).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/pay-fairness-perception/battery"

survey-orchestrator.pay-elements.bank

GET

Public read of the canonical comp pay-element bank (8 total-rewards elements: base · bonus · equity · benefits · flexibility · growth · security · recognition) fed to preference-modeler's MaxDiff/conjoint/penny machinery (M5–M7, PAT-JFE-PAY-7).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/pay-elements/bank"

survey-orchestrator.entrepreneurial-energy.battery

GET

Public read of the canonical Entrepreneurial Energy vital-sign battery (10-item set: 4 EO posture core — Innovativeness/Proactiveness/Autonomy/Risk-Tolerance, paraphrased after Covin-Slevin & Lumpkin-Dess EO — plus 6 cited CEAI extensions across five dimensions; 0–10 scale; Energized≥65 / At-Risk<50). The instrument fielded through reincarnation (PAT-EE-INSTRUMENT).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/entrepreneurial-energy/battery"

survey-orchestrator.culture-of-innovation.battery

GET

Public read of the canonical Culture of Innovation vital-sign battery (10-item set: 5 TCI/KEYS-anchored core — Shared Vision/Participative Safety/Support for Innovation/Task Orientation/Challenge — plus 5 cited validated extensions including two reverse-coded obstacle items (Edmondson mistake-punishment, KEYS workload-pressure); 0–10 scale; Thriving≥70 / Stalling<40). The innovation-CLIMATE instrument fielded through reincarnation (PAT-COI-INSTRUMENT).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/culture-of-innovation/battery"

survey-orchestrator.leadership-mistake-risk.battery

GET

Public read of the canonical Leadership Mistake-Risk / Derailment battery (10 items across five derailment dimensions: hubris / dissent-suppression / institutional-imperative / volatility / judgment-lapses, grounded in Hayward-Hambrick / Edmondson / Buffett / Hogan / Schyns-Schilling, paraphrased + cited; two reverse-coded good-behavior items). The ACUTE 'mistake' axis (PAT-MISTAKE-RISK-INSTRUMENT).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/leadership-mistake-risk/battery"

network-analysis

contract v0.2.0

network-analysis.health

GET

Per-spoke Postgres reachability shim on `network_analysis` (heartbeat table probe against shared Supabase).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/network-analysis/health"

network-analysis.networks.read

GET

Read a stored network (header + edges) plus its computed Connectivity read. Tenant via `?tenantId=`. 404 when absent.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/network-analysis/networks/:networkId"

research-methods

contract v0.4.0

research-methods.health

GET

Per-spoke Postgres reachability shim on `research_methods` (heartbeat probe; the capability is stateless compute).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/health"

research-methods.catalog

GET

Public read of the research-methods catalog — the declarative rigor library (statistical tests · assumptions · remedies · sampling methods · the 16 PRN-095 study-design archetypes), each cited to canon + linked to the compute that runs it and the viz that renders it. Optional `?kind=` / `?tag=` filters. The consumer face of the rigor capability (fly the flag).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/catalog"

data-anonymizer

contract v1.2.0

data-anonymizer.pii-rules

GET

List active PII detection rules (header + content patterns).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/data-anonymizer/pii-rules"

data-anonymizer.strategies

GET

List supported anonymization strategies for discovery (name, category, description).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/data-anonymizer/strategies"

segmentation-studio

contract v2.13.0

segmentation-studio.canonical-fields

GET

Active canonical HRIS field definitions: global catalog, or merged with tenant-specific rows (tenant wins at the same key) when ?tenantId= is set.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/canonical-fields"

segmentation-studio.packs-latest

GET

Fetch the most recently published segmentation pack (published_at DESC).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/packs/latest"

segmentation-studio.packs-version

GET

Fetch a historical segmentation pack by its immutable version string.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/packs/:version"

segmentation-studio.canonical-segments.list

GET

Canonical Segments Catalog (Catalog 2; PAT-41 / PAT-61): list canonical segment definitions. Optional `dimension`, `category`, and non-negative integer `depth` (roots = 0) query params.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/canonical-segments"

segmentation-studio.canonical-segments.lookup

GET

Canonical Segments Catalog (Catalog 2; PAT-41): fetch one canonical segment by its stable composite id ("segment.<dimension>.<slug>").

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/canonical-segments/:id"

segmentation-studio.canonical-segments.resolve

GET

Canonical Segments Catalog (Catalog 2; PAT-41): evaluate a canonical segment's predicate (eq / in / gte / lt / between + and / or / not) against the optionally tenant-scoped employee universe and return matched member ids + counts.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/canonical-segments/:id/resolve"

segmentation-studio.canonical-segments.ancestors

GET

PAT-61 — Ordered ancestor chain (root-first) for a canonical segment id; 404 when missing.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/canonical-segments/:id/ancestors"

segmentation-studio.canonical-segments.descendants

GET

PAT-61 — Breadth-first descendant subtree with optional `maxDepth` query param (default 10, cap 50).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/canonical-segments/:id/descendants"

segmentation-studio.org.reporting-chain.resolve

GET

Org reporting-chain resolver (PAT-53): walks the manager-employee graph downstream from a focal person and returns everyone reporting up to them, with optional depth cap + tenant scoping. Reads `segmentation_studio.employee_directory`; returns empty arrays when the directory is unseeded.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/org/reporting-chain/resolve"

segmentation-studio.custom-segments.list

GET

Tenant custom segments (PAT-58): list the latest version of every distinct (tenantId, name) for a tenant. Requires `?tenantId=` query param.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/custom-segments"

segmentation-studio.custom-segments.get

GET

Tenant custom segments (PAT-58): fetch a single segment by id plus the full version history for its (tenantId, name) pair.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/custom-segments/:id"

segmentation-studio.workforce-datasets.get

GET

Workforce dataset status + summaries.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id"

segmentation-studio.workforce-datasets.rows

GET

Paged normalized rows including normalized._segments canonical segment ids.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id/rows"

segmentation-studio.workforce-datasets.profile-card

GET

Source profile card for wizard PROFILE step.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id/profile-card"

segmentation-studio.schemas.list

GET

PAT-122: Paginated SegmentationSchemaVersion discovery with optional tenant + purpose filtering + opaque cursor paging.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/schemas"

segmentation-studio.schemas.getByVersionId

GET

PAT-137: Fetch SegmentationSchemaVersion by immutable `schemaVersionId` row id (paired with PAT-122 composite GET for schema authoring UX).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/schemas/version/:schemaVersionId"

segmentation-studio.schemas.get

GET

PAT-122: Fetch a single SegmentationSchemaVersion by `{schemaId, version}` semantic key.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/schemas/:schemaId/:version"

segmentation-studio.declarative-segmentation.rules.get

GET

PAT-160: Loads per-tenant declarative segmentation rules (Config_Segmentation workbook parity — ordered rules, first match wins).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/declarative-segmentation/rules"

calculus

contract v1.17.0

calculus.regression-surrogate.get

GET

Reads a persisted surrogate snapshot (requires tenantId query parameter for scoping).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/regression-surrogate/:modelId"

calculus.metric-keys.unknown

GET

PAT-40 diagnostic: recent envelope metricKeys that failed metrics-catalog soft-validation. In-process buffer; lost on cold start.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/metric-keys/unknown"

factor-models

contract v0.6.0

factor-models.health

GET

Per-spoke heartbeat for Postgres `factor_models` reachability.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/health"

factor-models.models.get

GET

Fetch the model row including optional currentVersionId pointer.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/models/:id"

forecasting

contract v1.4.0

forecasting.decision-models.get

GET

Fetch a stored decision tree by id.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/decision-models/:id"

forecasting.measurement-catalog

GET

PA Instrument — Catalog of available measurement methods and ranges.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/measurement-catalog"

workforce-planning

contract v0.6.0

workforce-planning.health

GET

Per-spoke aggregate heartbeat shim for Postgres reachability.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/health"

workforce-planning.positions.list

GET

List canonical toolbox positions keyed by `(tenant × source × source row id)` plus Greenhouse-aligned status filters.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/positions"

workforce-planning.allocations.list

GET

Read the position-cost / budget envelope: per-allocation rows (native + FX-snapshot reporting amounts) plus an aggregated envelope grouped by reporting currency over the full filtered set.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/allocations"

workforce-planning.forecast.snapshots.list

GET

Read immutable forecast_snapshots sorted newest-first (`TrailingAverageForecaster` v1; window = 30d|60d|90d JSON field).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/forecast/snapshots"

workforce-planning.reconciliation.snapshots.list

GET

Historical cross-system deltas (HR filled vs ATS open vs finance budgeted HC JSON per PAT-D1 scout).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/reconciliation/snapshots"

workforce-planning.matches.get

GET

Read ranked candidates + tenant prior snapshot for one ATS requisition key.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/matches/:requisitionId"

anycomp

contract v1.54.0

anycomp.models.get

GET

Fetch a comp model with all bands.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/models/:id"

anycomp.engagements.get

GET

Reload a persisted engagement (strategy + its scenarios/impacts) by strategyId, tenant-scoped.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/engagements/:strategyId"

metrics-catalog

contract v1.1.0

metrics-catalog.list

GET

List canonical HR metric definitions (6 categories, 102 metrics). Optional ?categoryId=&limit=&offset= for filtering / pagination.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/metrics-catalog/metrics"

metrics-catalog.lookup

GET

Fetch a single MetricDefinition by stable composite id 'hr-metric.<category-slug>.<metric-slug>'.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/metrics-catalog/metrics/:id"

metrics-catalog.search

GET

Case-insensitive substring search across name / description / slug. Optional ?categoryId=&limit= (default 20, max 100).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/metrics-catalog/metrics/search"

metrics-catalog.list-categories

GET

List the 6 catalog categories (workforce-composition, compensation-benefits, talent-acquisition, performance-development, engagement-retention, workforce-planning).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/metrics-catalog/categories"

org-graph

contract v1.1.0

org-graph.health

GET

Per-spoke heartbeat for Postgres reachability on `org_graph`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/health"

job-family-agent

contract v1.6.0

job-family-agent.soc.list

GET

Paginated list of canonical SOC codes (O*NET 28.3 / SOC 2018). 1,016 occupations across 23 SOC major groups; default 100/page, max 500.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/soc/list"

job-family-agent.soc.lookup

GET

Fetch a single SOC code by canonical id (e.g., '15-1252.00'). Accepts compact ('15-1252') or full forms.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/soc/:code"

job-family-agent.families.list

GET

List 23 canonical job families with hierarchy + alternative strings + resolved SOC codes (by major-group alignment).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/families/list"

job-family-agent.families.lookup

GET

Fetch a single job family by stable id (e.g., 'jf.computer-mathematical') with resolved SOC codes.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/families/:id"

job-family-agent.functions.list

GET

List 26 canonical job functions with parent-family links + alternative strings + SOC codes (parsed from source definitions).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/functions/list"

job-family-agent.functions.lookup

GET

Fetch a single job function by stable id (e.g., 'jfn.engineering') with parent family + alt-strings + SOC codes.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/functions/:id"

job-family-agent.resolve-title

GET

JobFrame canon (PAT-JF1): resolve a messy observed title to ranked Family×Focus×Level profile candidates (profileKey e.g. 'SWE.GEN.P6') with confidence band, evidence, and recommendedAction. Alias-exact in MVP; public + also an MCP tool.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/resolve-title"

job-family-agent.construct

GET

JobFrame canon: assemble a draft profile top-down from family/focus/level (+ context modifiers) — no blank-page JD. Returns a canonical_job_profile draft.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/construct"

job-family-agent.export

GET

JobFrame canon: export a canonical profile as JSON or Markdown (?profileKey=&format=). Plus HRIS bulk-mapping + single-JD analysis + mapping-decision (tenant-overlay) write routes — see the spoke README surface table.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/export"

manager-effectiveness

contract v1.2.0

manager-effectiveness.health

GET

Per-spoke Postgres reachability shim on `manager_effectiveness` (heartbeat + tenant weight profile table presence).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/manager-effectiveness/health"

manager-effectiveness.tenant.weights.get

GET

Return merged MEI pillar weights for a tenant (Postgres profile when present, otherwise toolbox defaults mirroring the FiveTran MQI mix).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/manager-effectiveness/weights"

manager-effectiveness.archetype.classify

GET

Classify team staffing archetype from net growth, exit rate, and headcount (defaults align with toolbox workforce analytics cut points).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/manager-effectiveness/archetype"

wage-benchmark

contract v0.4.0

wage-benchmark.benchmark.query

GET

Median hourly wage + p10/p25/p75/p90 + a confidence interval for an SOC × geography. National cells are observed (BLS OEWS, tight CI); sub-national cells are projected from the national anchor with an honestly wide CI until OEWS metro/state tables are ingested. Flags: basis / confidence / observedForCell.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-benchmark/benchmark"

wage-benchmark.benchmark.coverage

GET

Honest dataset coverage: occupation count, data year, observed vs. projected geo levels, sources, and the widest-error-bars-first widening roadmap.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-benchmark/coverage"

wage-benchmark.health

GET

Per-spoke Postgres reachability shim on `wage_benchmark` (heartbeat probe).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-benchmark/health"

wage-compliance

contract v0.17.0

wage-compliance.jurisdictions.rules

GET

Return the active applied rule_version for a known jurisdiction_id + rule family + classification + evaluation date.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/jurisdictions/:id/rules"

wage-compliance.alerts.list

GET

List compliance alerts (law change / new failure / expiring rule / conflict / refresh failure). Filterable by organizationId, status, severity, alertType. v0 read surface; PAT-87 temporal diff agent populates rows.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/alerts"

wage-compliance.rule-changes.recent

GET

Temporal diff feed of rule-version changes (increase / decrease / correction / expiration / override). Filterable by `since` + `changeType`. v0 read surface; PAT-87 temporal diff agent populates rows.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/rule-changes/recent"

wage-compliance.review-queue.list

GET

PAT-94 — List review-queue items for an organization. Filterable by status + assigned_to; cursor-paginated newest-first.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/review-queue"

wage-compliance.review-queue.get

GET

PAT-94 — Fetch a single review-queue item with embedded recent notes + recent audit events. One call powers the operator item-detail view.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/review-queue/:id"

wage-compliance.review-queue.audit

GET

PAT-94 — Paginated audit history for a single review-queue item (created / assigned / unassigned / status_changed / note_added / exported). Newest-first.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/review-queue/:id/audit"

wage-compliance.diff-agent.run

GET

PAT-87 — Run the temporal diff agent. Scans pending `rule_versions` added in the lookback window, classifies the change vs the current canonical version, emits one `rule_change_events` row per change + tiered `compliance_alerts` per affected organization (informational ≥90d / warning ≥30d / critical ≥7d / immediate <7d or active). Scheduled daily at 09:00 UTC via vercel.ts; MCP tool is the manual trigger.

curl -sS "https://people-analytics-toolbox.vercel.app/api/cron/wage-compliance/run-diff-agent"

wage-compliance.jurisdiction-discovery.scan

GET

PAT-102 — Jurisdiction-discovery AI agent (third toolbox AI consumer). Scans curated US government sources for new minimum-wage ordinances or statutes not yet represented in `wage_compliance.jurisdictions`. Official-domain trust scoring (.gov / state.xx.us → high; HR aggregators → medium; everything else → low). Persists every candidate to `wage_compliance.discovery_candidates`; high-trust + confidence ≥ 0.9 candidates auto-escalate to the PAT-94 review queue. Scheduled weekly at 10:00 UTC Tuesdays via vercel.ts; MCP tool is the operator override for ad-hoc scans.

curl -sS "https://people-analytics-toolbox.vercel.app/api/cron/wage-compliance/jurisdiction-discovery"

wage-compliance.rules.get

GET

PAT-84-FU-B — Drill-down read of a single rule_version: version row + jurisdiction_rule + rule_family + full jurisdiction chain + source citations.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/rules/:ruleVersionId"

wage-compliance.jurisdictions.list

GET

PAT-84-FU-B-LIST — Paginated jurisdictions hierarchy fetch. Filterable by parentJurisdictionId, jurisdictionType, stateCode; cursor-paginated (canonical_name asc).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/jurisdictions"

wage-compliance.evaluations.aggregate

GET

PAT-84-FU-D — Dashboard KPI aggregate. Returns total/failure/pending-review/upcoming-rule-change counts, estimated annual payroll exposure (|discrepancy| × 2080), per-state failure + exposure rollup, and the last 10 compliance_alerts for an organization. Counts + aggregates only — no PII.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/evaluations/aggregate"

wage-compliance.conflicts.list

GET

PAT-95-FU-A — List source-citation conflicts: tuples (jurisdictionId × ruleFamilyId × effectiveStart) where ≥2 rule_versions exist. Returns candidate rule_versions, their citations, and the wage disagreement span.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/conflicts"

wage-compliance.ai-source-validation.scan

GET

PAT-103 — Source-validation AI agent. Re-scores wage_compliance.data_sources rows on the high/medium/low trust ladder using a deterministic domain heuristic (`.gov` → high, aggregators → medium) plus AI judgment for the unclassified tail. Writes audit rows to `source_validations` and updates `data_sources.trust_level` in place. Weekly cron + MCP operator tool.

curl -sS "https://people-analytics-toolbox.vercel.app/api/cron/wage-compliance/source-validation"

wage-compliance.ai-conflict-detection.scan

GET

PAT-104 — Conflict-detection AI agent. Reads the PAT-95-FU-A conflict list and writes one draft resolution per conflict tuple to `conflict_resolution_drafts` for operator approval. Drafts never mutate rule_versions directly — committing routes through PAT-95-FU-B. Weekly cron + MCP operator tool.

curl -sS "https://people-analytics-toolbox.vercel.app/api/cron/wage-compliance/ai-conflict-detection"

wage-compliance.ai-confidence-scoring.score

GET

PAT-105 — Confidence-scoring agent. 4-factor model (0.40 source / 0.20 extraction / 0.20 temporal / 0.20 cross-source) over each rule_version; writes `rule_versions.confidence_score` in place. Daily cron + inline hook from PAT-85 refresh + MCP operator tool.

curl -sS "https://people-analytics-toolbox.vercel.app/api/cron/wage-compliance/ai-confidence-scoring"

worker-resolution

contract v1.0.0

worker-resolution.health

GET

Per-spoke Postgres heartbeat shim on `worker_resolution`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/worker-resolution/health"

principia-connector

contract v0.12.0

principia-connector.health

GET

Per-spoke heartbeat shim for Postgres reachability on `principia_connector`.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/health"

principia-connector.priors.get

GET

Look up Principia's synthesized Bayesian prior for `from --predicate--> to`. Returns the typed three-state PriorResult (found/none/error) — distribution + r/CI + k + n + grade + provenance/effects URLs. Never fabricates: 'no prior available' is first-class.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/priors/{from}/{predicate}/{to}"

principia-connector.items.norms

GET

Item norm lookup (PRN-068) — is an item score typical/high/low? Three-state ItemNormResult (found/none/error); norm:null is an honest cold-start, never fabricated.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/items/{id}/norms"

principia-connector.open-text-codings.read

GET

Read batch-produced open-text codings (PRN-143, HO-058): verbatims auto-coded to canonical construct ids. Customer-derived free text → service-key gated even as a GET. Empty until the live scorer batch runs.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/open-text-codings"

glass-ox

contract v1.0.0

glass-ox.health

GET

Per-spoke Postgres reachability shim on `glass_ox` (heartbeat probe). Also seeds the reference `companalyst-coding` plan on first hit so the plans list is never empty on a fresh deploy.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/glass-ox/health"

glass-ox.runs.list

GET

List persisted `RunReport` summaries, newest-reported-first. Query params: planSlug, overallStatus (ok|warn|halt), organizationId, limit (cap 200), offset.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/glass-ox/runs"

glass-ox.runs.get

GET

Fetch a single persisted RunReport by `runId` — rehydrates the full StepManifest DAG (assertions + field profiles + drops-by-reason + joins).

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/glass-ox/runs/:runId"

glass-ox.plans.list

GET

List registered Glass Ox plans. Seeded with the reference `companalyst-coding` plan so the list is never empty on a fresh deploy.

curl -sS "https://people-analytics-toolbox.vercel.app/api/spokes/glass-ox/plans"

Service-key write endpoints

Authorization: Bearer $TOOLBOX_SERVICE_KEY

POST endpoints require the toolbox service key (PAT-11). Set TOOLBOX_SERVICE_KEY in your shell first; key issuance is covered in your operator briefing. Both header forms are accepted: Authorization: Bearer <key> or x-toolbox-service-key: <key>.

reincarnation

contract v1.3.0

reincarnation.adaptive-selection

POST

SERVICE KEY REQUIRED

Information-gain-weighted adaptive item selection from a galaxy's pools.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/reincarnation/adaptive-selection" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

reincarnation.responses-ingest

POST

SERVICE KEY REQUIRED

Bulk-ingest respondent answers for psychometric scoring.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/reincarnation/responses/ingest" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

reincarnation.galaxies.register

POST

SERVICE KEY REQUIRED

Idempotent consumer bootstrap: register a pool galaxy, universal items (RIDs), and study items (SIDs) in one atomic transaction.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/reincarnation/galaxies" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

reincarnation.galaxies.items-append

POST

SERVICE KEY REQUIRED

Append RIDs and/or study items to an existing galaxy (404 if galaxy_id is unknown); same idempotency semantics as galaxies.register.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/reincarnation/galaxies/:id/items" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

diagnostic-coaching

contract v0.1.0

diagnostic-coaching.adaptive-select

POST

SERVICE KEY REQUIRED

Next adaptive coaching cards for a respondent (effectiveness-ranked, weaker-competency-targeted), each grounded in matched corpus advisory.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/diagnostic-coaching/adaptive-select" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

diagnostic-coaching.responses-ingest

POST

SERVICE KEY REQUIRED

Bulk-ingest respondent reactions to delivered cards (rubric / committed / not-applicable).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/diagnostic-coaching/responses/ingest" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

diagnostic-coaching.register

POST

SERVICE KEY REQUIRED

Idempotent bootstrap of competencies + coaching cards for a tenant.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/diagnostic-coaching/register" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

diagnostic-coaching.batch

POST

SERVICE KEY REQUIRED

Population pass: score cards by effectiveness, move pools, rebuild capability profiles.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/diagnostic-coaching/batch" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-calibration

contract v1.0.0

performance-calibration.pairs.ingest

POST

SERVICE KEY REQUIRED

UPSERT `{ employeeId × cycleId }` calibration rows per tenant (`parseRating` normalization; optional ELT/L3/L4/L5 leader chain persisted for rollups).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-calibration/pairs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity

contract v1.3.0

performance-validity.analyze.rating-ops-convergence

POST

SERVICE KEY REQUIRED

Q1: Pearson convergence between normalized ratings + operational composites with structured diagnostic-chain rankings.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/rating-ops-convergence" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.analyze.validity-scorecard

POST

SERVICE KEY REQUIRED

Q2: Reliability facets (test–retest, optional ICC inter-rater, cross-cycle stability) plus convergent / predictive / discriminant correlations.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/validity-scorecard" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.analyze.criterion-validity

POST

SERVICE KEY REQUIRED

Predictor→criterion validity in situ (HO-036 #3): observed validity coefficient + Fisher-z CI, plus operational validity after range-restriction (Thorndike II) and criterion-unreliability corrections. Predictor & criterion join on subjectId.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/criterion-validity" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.analyze.predictability-decomposition

POST

SERVICE KEY REQUIRED

Q3: Stacked additive OLS R² deltas using shared inference primitives (baseline → progressively richer covariates).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/predictability-decomposition" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.analyze.trajectory-slope

POST

SERVICE KEY REQUIRED

Q4: Per-employee longitudinal slope/regression diagnostics with pooled-mean regression-to-mean heuristics.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/trajectory-analysis" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.analyze.calibration-value-add

POST

SERVICE KEY REQUIRED

Q5: Five-test calibration ROI panel inferred from PAT-159 rollups fetched over HTTP — validity/reliability/convergence/noise probes.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/calibration-value-add" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.analyze.change-attribution

POST

SERVICE KEY REQUIRED

Q6: Ranked explanatory factors comparing two calibration cycles via performance-calibration trajectories fetched over HTTP.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/change-attribution" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.mei.evidence.upsert

POST

SERVICE KEY REQUIRED

Persist univariate predictive r² summaries (per MEI domain × analytic cycle × outcome) that feed manager-effectiveness empirical weight blends.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/mei-predictive-evidence" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.alignment

POST

SERVICE KEY REQUIRED

PA Instrument — Rater alignment diagnostics: per-item convergence between observed ratings.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/alignment" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

performance-validity.directional-alignment

POST

SERVICE KEY REQUIRED

PA Instrument — Up/down/lateral directional alignment between a focal rater and each cohort.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/performance-validity/directional-alignment" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

preference-modeler

contract v1.6.0

preference-modeler.surveys.create

POST

SERVICE KEY REQUIRED

Create a survey definition with sections + questions in one bundle.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/surveys" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

preference-modeler.surveys.responses

POST

SERVICE KEY REQUIRED

Submit respondent answers; per-question rejection reasons returned alongside accepts.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/surveys/:id/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

preference-modeler.surveys.tasks

POST

SERVICE KEY REQUIRED

Materialize deterministic MaxDiff / Conjoint task assignments for one survey respondent.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/surveys/:id/respondents/:respondentId/tasks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

preference-modeler.maxdiff.generate

POST

SERVICE KEY REQUIRED

PA Instrument — Generate deterministic MaxDiff task sets from an item list.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/maxdiff/generate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

preference-modeler.maxdiff.score

POST

SERVICE KEY REQUIRED

PA Instrument — Score MaxDiff responses into per-item and per-variable preference weights.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/maxdiff/score" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

preference-modeler.present-future

POST

SERVICE KEY REQUIRED

PA Instrument — Present-vs-future dimension gap analysis from marker responses.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/preference-modeler/present-future" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

program-evaluation

contract v0.2.0

program-evaluation.experiments.create

POST

SERVICE KEY REQUIRED

Service-key gated experiment metadata + treatment arms (normalized randomization weights) under PAT-N7 tenant context.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/program-evaluation/experiments" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

program-evaluation.experiments.pre-register

POST

SERVICE KEY REQUIRED

Immutable pre-registration bundle with SHA-256 digest (409 if an operator attempts to rewrite an existing row).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/program-evaluation/experiments/:id/pre-register" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

program-evaluation.assignments.resolve

POST

SERVICE KEY REQUIRED

Deterministic HMAC-weighted arm selection for `(experimentId, subjectId)` with lazy assignment persistence.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/program-evaluation/assignments/resolve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

program-evaluation.lift.estimate

POST

SERVICE KEY REQUIRED

Difference-in-means vs baseline with bootstrap CI; requires successful pre-registration digest verification first.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/program-evaluation/experiments/:id/lift" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

talent-value

contract v0.5.0

talent-value.inputs.upsert

POST

SERVICE KEY REQUIRED

Service-key gated upsert of a tenant's per-segment ELV inputs (HCROI, avg annual cost, tenure-at-exit + provenance) keyed by segmentation-studio segment id.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/talent-value/inputs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

talent-value.activation.upsert

POST

SERVICE KEY REQUIRED

Service-key gated upsert of a tenant's per-segment activation readings (activated/eligible headcount or precomputed NA% + basis + provenance) — the NA% basis for NAV.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/talent-value/activation" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

leadership-quality

contract v0.2.0

leadership-quality.score.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless compute of a Leadership Quality index from a supplied component-reading set (no persistence).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/leadership-quality/score" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

leadership-quality.readings.upsert

POST

SERVICE KEY REQUIRED

Service-key gated upsert of a subject's component readings (sub-index + drill-down + provenance) keyed by component.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/leadership-quality/readings" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

leadership-quality.alignment.compute

POST

SERVICE KEY REQUIRED

PA Instrument — the Executive Alignment dispersion analytic (PAT-199, crown-jewel Brief 3): per-dimension spread + exec-vs-ELT-centroid distance (pennies moved) + level-aware tight/scattered verdicts over N executives' elicited priority allocations. Stateless; pairs with linkage-models stated allocations.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/leadership-quality/alignment" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

linkage-models

contract v0.1.0

linkage-models.models.upsert

POST

SERVICE KEY REQUIRED

Service-key gated register/replace of a causal model: variables with coefficient weights + provenance (the old CoefficientSource enum) + Principia construct/prior grounding hooks.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/models" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

linkage-models.edges.upsert

POST

SERVICE KEY REQUIRED

Service-key gated upsert of routing edges, idempotent on (from, to).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/edges" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

linkage-models.allocations.record

POST

SERVICE KEY REQUIRED

Service-key gated record of an executive's elicited penny-allocation joined to a model's variables → persisted stated importance (normalized to 100); unmatched keys reported, never dropped.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/allocations" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

linkage-models.reconcile.run

POST

SERVICE KEY REQUIRED

Service-key gated stated-vs-empirical reconciliation per executive or cross-exec ELT (the lost elt_* aggregation), blended via calculus.importance-reconcile (reused over HTTP, never rebuilt) and persisted as an importance snapshot.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/linkage-models/reconcile" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecast-strength

contract v0.1.0

forecast-strength.battery.build

POST

SERVICE KEY REQUIRED

PA Instrument — builds the forecast-elicitation battery (numeric point + 80/90% interval bounds + confidence per measure; elicitation-kit renderable, joinable answer ids). Stateless.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecast-strength/battery" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecast-strength.forecasts.log

POST

SERVICE KEY REQUIRED

Service-key gated log of a leader's forecasts (point + 80/90 intervals + confidence); re-forecasting a (measure, period) replaces the prior estimate.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecast-strength/forecasts" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecast-strength.actuals.record

POST

SERVICE KEY REQUIRED

Service-key gated record of observed actuals — every matching forecast auto-(re)scores (PAT-200 crown-jewel Brief 2: Winkler interval score, abs error, hit flags).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecast-strength/actuals" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator

contract v0.15.0

survey-orchestrator.item-benchmarks

POST

SERVICE KEY REQUIRED

PAT-151 Part B — classify item scores typical/above/below their Principia norm (via principia-connector). No fabricated norms: no-norm/unavailable are first-class.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/item-benchmarks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.programs.upsert

POST

SERVICE KEY REQUIRED

Service-key gated upsert of a survey program (cadence/engine/status + optional triggers + fatigue policy).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/programs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.waves.schedule

POST

SERVICE KEY REQUIRED

Service-key gated wave scheduling/materialization with an audience snapshot hash.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/waves" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.triggers.ingest

POST

SERVICE KEY REQUIRED

Service-key gated ATS/HRIS event ingestion → matching-trigger evaluation → wave scheduling (fatigue-respecting).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/triggers/ingest" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.responses.link

POST

SERVICE KEY REQUIRED

Service-key gated wave invite/response record linked to the program's longitudinal respondent (same person across waves) + fatigue decision.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.attrition.records.upsert

POST

SERVICE KEY REQUIRED

Service-key gated from-to movement records (reverse-exit 'from' + key-talent-exit 'to') — the attrition-analysis substrate (PAT-183).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/attrition/records" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.attraction.analyze

POST

SERVICE KEY REQUIRED

Service-key gated stateless Attraction analysis: funnel-stage yields + offer-accept rate + 0–100 brand/consideration index per segment, min-N suppressed (PAT-185, low priority).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/attraction/analyze" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.attraction.compare

POST

SERVICE KEY REQUIRED

Service-key gated reverse-exit↔exit SAME-ITEM comparison (the signature Attraction analytic): per-item + per-dimension in-vs-out deltas → advantage / disadvantage / parity over the canonical battery, min-N suppressed on both sides (PAT-185-FU-A). Performix debut consumer.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/attraction/compare" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.activation.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless CAMS / Activation analysis: per-segment NA% (activated÷eligible, min-N suppressed), additive 0–80 mean index, per-dimension means + the min-condition binding constraint, and a talent-value-ready activation reading (PAT-CAMS-INSTRUMENT — the CAMS instrument shared into the toolbox).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/activation/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.pay-satisfaction.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless Pay Satisfaction analysis: per-segment facet means + overall + the weakest facet (the binding pay-sat complaint), all min-N suppressed, plus the per-item-per-wave item-mean trend when respondents carry waveIds (PAT-JFE-PAY-3).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/pay-satisfaction/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.pay-fairness-perception.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless Pay Fairness & Equity analysis: per-segment justice-dimension means + distributive referent breakdown (internal/external/market) + weakest dimension, min-N suppressed, item-mean trend, and the perceived-vs-actual equity read when an actual gap (calculus /oaxaca) is supplied (PAT-JFE-PAY-6).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/pay-fairness-perception/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.pay-elements.importance

POST

SERVICE KEY REQUIRED

Service-key gated, method-agnostic pay-element importance aggregation: per-segment mean score + normalized importance share + rank per element (top element surfaced), min-N suppressed. Accepts MaxDiff utilities / conjoint part-worths / penny-allocation shares (estimation owned by preference-modeler); this is the comp-interpretation/segmentation layer (PAT-JFE-PAY-7).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/pay-elements/importance" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.pay-program-scorecard

POST

SERVICE KEY REQUIRED

Service-key gated comp program-lever scorecard (the pay-survey capstone): rolls the M1–M7 fairness/equity + PSQ reads into per-lever 'is program X landing?' readings (0–100 + status + weakest segment + perceived-vs-actual flags) and player-ready InsightCards. Maps each survey signal to the comp lever it diagnoses (PAT-JFE-PAY-9).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/pay-program-scorecard" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.entrepreneurial-energy.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless Entrepreneurial Energy analysis: per-segment EE% (energized÷eligible, min-N suppressed), additive 0–100 mean EE index, per-dimension means + the min-condition binding constraint, and a 0–100 → protective-P reading for the org-metabolism model (PAT-EE-INSTRUMENT — the EE vital sign on the CAMS machinery).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/entrepreneurial-energy/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.culture-of-innovation.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless Culture of Innovation (innovation-CLIMATE) analysis: per-segment 0–100 climate index (min-N suppressed), per-dimension means across V/S/R/T/O (reverse-coded obstacle items flipped to high-is-healthy) + the min-condition binding constraint, and a 0–100 → protective-P reading for the org-metabolism model (PAT-COI-INSTRUMENT — the sibling of Entrepreneurial Energy; climate vs action).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/culture-of-innovation/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.leadership-mistake-risk.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless Leadership Mistake-Risk analysis: per-LEADER (subjectId) risk index 0–100 (HIGH = dangerous, min-N suppressed) from direct-report feedback, per-dimension means + the dominant risk facet (HIGHEST dimension), and the → `M_mistake` ACUTE HAZARD MULTIPLIER (≥1) for the org-metabolism model (PAT-MISTAKE-RISK-INSTRUMENT — the inverse of the protective vital signs).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/leadership-mistake-risk/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

survey-orchestrator.activation-diversity.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless Activation-Diversity (P8) analysis — the DERIVED protective vital sign. From activation-by-segment readings (the CAMS per-segment output shape) returns ONE org-level diversity index 0–100 = √(coverage × evenness): coverage = eligible-weighted share of the workforce in activated segments; evenness = normalized entropy of activation mass across segments. The diversity-of-activation component of the org-metabolism protective term `P` (West's `diversity_innovation → mortality (−)`; broad/decentralized activation is anti-fragile, concentrated activation is a fragile monoculture). Compute-only — derived, no survey battery (PAT-ACTIVATION-DIVERSITY-INSTRUMENT).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/survey-orchestrator/activation-diversity/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

network-analysis

contract v0.2.0

network-analysis.connectivity.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless Connectivity vital-sign analysis (PAT-ONA-CONNECTIVITY). From an org collaboration edge list (treated undirected) returns ONE org-level connectivity index 0–100 = 0.5·reach + 0.25·cohesion + 0.25·robustness (reach = share of the org in the largest connected component; cohesion = average local clustering; robustness = 1 − articulation-points÷nodes), the binding sub-dimension, component + single-point-of-failure counts, and a 0–100 → protective-`P` reading for the org-metabolism model. West's `Scale` connectivity made measurable. Aggregate-only (no per-node / subgraph emitted — nothing to re-identify).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/network-analysis/connectivity" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

network-analysis.measures.compute

POST

SERVICE KEY REQUIRED

Service-key gated stateless ONA summary-measures analysis (PAT-ONA-MEASURES). Boils a collaboration network (treated undirected) down to the headline interpretable measures — reach, density, average distance, cohesion, broker-dependency (betweenness Gini → key-person risk), community structure (modularity), and per-attribute siloing (E-I index) + informal-vs-formal alignment — each benchmark-bearing + display-ready (viz.bullet-bar / viz.forest-plot). Product steer: leaders can't read node-link 'hairball' graphs, so this returns scalars + benchmarks + one-line interpretations, not a graph. Aggregate-only (no per-node export — nothing to re-identify). Inject peer/prior benchmarks via `benchmarks`; never fabricated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/network-analysis/measures" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

network-analysis.networks.upsert

POST

SERVICE KEY REQUIRED

UPSERT a network header + its edge list, tenant-scoped + idempotent (re-ingest replaces the edge set). Read it back with its connectivity at GET /networks/{networkId}.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/network-analysis/networks" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

research-methods

contract v0.4.0

research-methods.compare

POST

SERVICE KEY REQUIRED

Service-key gated rigorous two-group comparison (PAT-RM-SPOKE). From two de-identified numeric vectors: checks assumptions (normality via skew/kurtosis + QQ; homoscedasticity via Brown-Forsythe Levene), with test:"auto" picks the rigorous test (Mann-Whitney on severe non-normality, Welch on unequal variance, else pooled independent-samples t), runs it, computes Cohen's d, and returns the naïve-pooled-vs-applied 'remedy moment' diff plus catalog-linked assumption remedies. The toolbox owns the math (no Principia round-trip for compute); Principia supplies the cited evidence layer.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/compare" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

research-methods.check-assumptions

POST

SERVICE KEY REQUIRED

Service-key gated severity-aware assumption checks (effect-size based, not bare p): normality (skew/kurtosis + QQ points) + homoscedasticity (Brown-Forsythe Levene) across groups, each with its catalog remedies + a proceed/apply_remedy recommendation.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/check-assumptions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

research-methods.sample

POST

SERVICE KEY REQUIRED

Service-key gated seeded participant sample (PRN-101). From a de-identified frame [{id,stratum?}]: simple_random | stratified (proportional, largest-remainder); reproducible (same frame+seed → same draw). Returns the sample + per-stratum counts. Empty body → seeded example.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/sample" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

research-methods.balance

POST

SERVICE KEY REQUIRED

Service-key gated covariate-balance diagnostics: per-covariate standardized mean difference + variance ratio + a severity-tagged verdict (balanced / over- / under-represented) between a group and a reference. The study-designer balance screen.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/balance" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

research-methods.allocate

POST

SERVICE KEY REQUIRED

Service-key gated allocation to comparison arms (PRN-101): randomized | block_random (balanced at every block boundary). Reproducible. Returns the assignment + per-arm audit. Empty body → seeded example.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/allocate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

research-methods.recommend-design

POST

SERVICE KEY REQUIRED

Service-key gated design-recommendation engine (Cluster 1 P2, the 'shit dizzle'). From a question (construct relationship) + constraints (can-randomize / comparison-group / time-budget / inference-goal / cutoff / instrument / qualitative / synthesizing), returns a ranked, cited research-DESIGN recommendation over the 16 PRN-095 archetypes — each with X–O–R notation, typical analyses (linked to the test catalog), dominant validity threat, and the canon. With withPrior + a question, attaches the Principia effect-size prior (never fabricated). Empty body → seeded example.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/research-methods/recommend-design" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

data-anonymizer

contract v1.2.0

data-anonymizer.redact

POST

SERVICE KEY REQUIRED

Redact PII spans from text; returns redacted text + flagged spans with category/risk.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/data-anonymizer/redact" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{
  "text": "Please contact Jane Doe at jane@acme.example for details.",
  "tenantId": "demo"
}'

data-anonymizer.tokenize

POST

SERVICE KEY REQUIRED

Deterministic HMAC-keyed tokenization with per-tenant cache.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/data-anonymizer/tokenize" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

data-anonymizer.min-n-check

POST

SERVICE KEY REQUIRED

Cohort-size privacy gate.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/data-anonymizer/min-n-check" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

data-anonymizer.transform

POST

SERVICE KEY REQUIRED

Apply a deterministic anonymization strategy to a scalar value (faker + keyed hashing; tenant-scoped).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/data-anonymizer/transform" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio

contract v2.13.0

segmentation-studio.hris-ingest

POST

SERVICE KEY REQUIRED

Raw HRIS rows → normalized rows + suggested field mappings against the canonical-field priority catalog.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/hris/ingest" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.hris.sync.workday

POST

SERVICE KEY REQUIRED

PAT-65 — Workday SOAP (`Get_Workers`) OR PAT-92 OAuth + Reports-as-a-Service pull mapped through canonical-fields and persisted into tenant-scoped `segmentation_studio.workforce_*` plus `segmentation_studio.ingestion_jobs` audit (returns `runId`, `datasetId`, counts).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/hris/sync/workday" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.hris.sync.bamboo

POST

SERVICE KEY REQUIRED

PAT-65-FU-A — BambooHR REST (+ Basic auth via env-referenced api key pull) persisted into tenant-scoped workforce datasets plus `segmentation_studio.ingestion_jobs` audit (`runId`), matching the Workday PAT-65 loop. Toolbox tenant context required.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/hris/sync/bamboo" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.segments-define

POST

SERVICE KEY REQUIRED

Register a SegmentDefinition (criteria-based) into custom_segments.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/segments/define" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.cohorts-resolve

POST

SERVICE KEY REQUIRED

Multi-membership cohort resolution: criteria → memberIds + segmentNodeIds.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/cohorts/resolve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{
  "tenantId": "demo",
  "criteria": {
    "any": [
      { "field": "function", "op": "eq", "value": "engineering" }
    ]
  }
}'

segmentation-studio.identity-resolve

POST

SERVICE KEY REQUIRED

Batch union-find identity clustering on normalized email + exact/fuzzy name (Levenshtein-backed); returns clusters, deduplication rate, and conflict strings.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/identity/resolve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.recipes-define

POST

SERVICE KEY REQUIRED

Register a derived-dimension recipe (bin breakpoints, key map, or template string) against normalized HRIS fields.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/recipes/define" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.recipes-run

POST

SERVICE KEY REQUIRED

Execute a stored recipe on normalized rows; persists recipe_runs audit row and returns synthetic dimension nodes + memberships.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/recipes/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.packs-publish

POST

SERVICE KEY REQUIRED

Snapshot current dimensions, nodes, and memberships into a versioned segmentation_packs row; returns the full pack envelope.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/packs/publish" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.data-join.run

POST

SERVICE KEY REQUIRED

Anchor-supplemental data join: merge an anchor HRIS file with N supplemental files using per-column FieldAction policy (OVERWRITE / IGNORE / FILL_HOLES). Returns joinedData, column lineage, overlap conflict report, and unjoined records (PAT-20-FU-A; sequel to identity-resolve).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/data-join/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.hris-ingest.onemodel

POST

SERVICE KEY REQUIRED

Ingest a OneModel admin-export ZIP (base64-encoded). Parses the four required catalogs (metrics / dimensions / tables / entity_relationships), runs canonical-field detection on dimension labels, and persists a semantic_profiles row (PAT-20-FU-B; donor conductor `/api/import/onemodel-zip`).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/hris/ingest/onemodel" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.custom-segments.author

POST

SERVICE KEY REQUIRED

Tenant custom segments (PAT-58): author a new logical segment (v1) or append a new version when (tenantId, name) already exists. Predicate uses the same JSON-tree language as canonical segments.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/custom-segments" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.workforce-datasets.upload

POST

SERVICE KEY REQUIRED

Multipart HRIS file upload; creates tenant-scoped workforce_dataset with content-hash idempotency (409 returns existingDatasetId). Requires x-toolbox-tenant-id.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/upload" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.workforce-datasets.parse

POST

SERVICE KEY REQUIRED

Parse uploaded CSV (skips vendor metadata rows); stages workforce_dataset_rows.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id/parse" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.workforce-datasets.recognize

POST

SERVICE KEY REQUIRED

Multi-signal column recognition Pass 1-4 with Bayesian-weighted aggregation.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id/recognize" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.workforce-datasets.map

POST

SERVICE KEY REQUIRED

Operator mapping confirmations; updates signal_accuracy_priors and lynchpin cascade.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id/map" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.workforce-datasets.review

POST

SERVICE KEY REQUIRED

Identity resolution, value-level segment mapping, source profile card generation.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id/review" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.workforce-datasets.persist

POST

SERVICE KEY REQUIRED

Mark dataset persisted (idempotent).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/workforce-datasets/:id/persist" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.schemas.create

POST

SERVICE KEY REQUIRED

PAT-122: Persist a SegmentationSchemaVersion (hash + UUID assigned server-side; draft default unless caller passes active). Comparable groups mirrored into segmentation_comparable_groups.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/schemas" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.schemas.branch

POST

SERVICE KEY REQUIRED

PAT-122: Cut a descendant draft schema off a validated SchemaRef (`version` increments `-branchName.<n>` per schema_id family).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/schemas/branch" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.schemas.diff

POST

SERVICE KEY REQUIRED

PAT-122: Compute `SchemaDiff` between two stored schema refs (`computeSchemaDiff` PAT-121) — unsalted read path without service keys.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/schemas/diff" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.schemas.snapshot

POST

SERVICE KEY REQUIRED

PAT-122: Idempotently freeze a `{schemaVersionId,schemaHash}` row into segmentation_schema_snapshots (201 on first insert; 200 on repeat).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/schemas/snapshot" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.declarative-segmentation.rules.put

POST

SERVICE KEY REQUIRED

PAT-160: Replace the entire declarative ruleset for a tenant (optional donor sheet rows appended). Service-key gated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/declarative-segmentation/rules" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

segmentation-studio.declarative-segmentation.evaluate

POST

SERVICE KEY REQUIRED

PAT-160: Evaluate declarative rules over a workforce record batch; uses tenant store and/or inline rules plus optional donor sheet overlays. Service-key gated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/segmentation-studio/declarative-segmentation/evaluate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus

contract v1.17.0

calculus.oaxaca

POST

SERVICE KEY REQUIRED

Oaxaca–Blinder mean outcome gap decomposition (pooled / two-fold / three-fold) between two cohorts.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/oaxaca" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.diagnostics

POST

SERVICE KEY REQUIRED

OLS regression diagnostics (leverage, Cook's D, residuals, fitted) plus optional 1-D DBSCAN on residuals.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/diagnostics" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.stats-enrich

POST

SERVICE KEY REQUIRED

Enrich a metric envelope with confidence intervals, z-score, percentile, and change-rate.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/stats/enrich" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.stats-trend

POST

SERVICE KEY REQUIRED

Classify a periods array as rising / stable / falling with OLS slope and change rate.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/stats/trend" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{
  "periods": [
    { "period": "2025-Q1", "value": 70 },
    { "period": "2025-Q2", "value": 75 },
    { "period": "2025-Q3", "value": 80 }
  ]
}'

calculus.stats-impute

POST

SERVICE KEY REQUIRED

Expand an irregular period grid (monthly/quarterly cadence) with forward-fill, linear interpolation, or gap flagging.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/stats/impute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.stats-anomaly

POST

SERVICE KEY REQUIRED

Flag time-series points via z-score threshold, IQR fences, and step-change outliers on first differences.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/stats/anomaly" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.factory-build

POST

SERVICE KEY REQUIRED

Combinatorial metric × segment × period grid: build envelopes from a values array, enrich each, return ranked list (impact / significance / change / recency / sample-size). Optional ?persist=true writes envelopes to metric_envelopes.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/factory/build" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.governance.check

POST

SERVICE KEY REQUIRED

Governance-flag layer over a record set: distribution-equity, harshness-bias, recency-bias, calibration-spread (PAT-6-FU).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/governance/check" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.monte-carlo.run

POST

SERVICE KEY REQUIRED

PAT-147-C: deterministic Monte Carlo batches with JSONB persistence (per-tenant idempotent run_key) plus numeric column summaries.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/monte-carlo/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.regression-surrogate.fit

POST

SERVICE KEY REQUIRED

PAT-147-C: fits an OLS surrogate (ridge ε=1e-6 fallback when singular) from inline trials or a stored MC run id and inserts `surrogate_models`.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/regression-surrogate/fit" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.regression-surrogate.forward

POST

SERVICE KEY REQUIRED

PAT-147-C surrogate forward prediction with t-based 95% mean-response interval.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/regression-surrogate/forward" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.regression-surrogate.inverse

POST

SERVICE KEY REQUIRED

PAT-147-C surrogate inverse payout solver (interaction-aware) with linearized CI propagation from mean-response SE.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/regression-surrogate/inverse" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.distribution-fit

POST

SERVICE KEY REQUIRED

PA Instrument — Fit a sample distribution and report goodness-of-fit diagnostics.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/distribution-fit" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.importance-reconcile

POST

SERVICE KEY REQUIRED

PA Instrument — Reconcile stated vs derived importance weights across items.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/importance-reconcile" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

calculus.unit-linkage

POST

SERVICE KEY REQUIRED

Unit-linkage analysis (Gelade/Harter service-profit-chain): per-condition unit-level Pearson r + Fisher-z CI + significance + outcome-oriented direction, with optional segment cuts. Build-once for constraint × delivery / CSAT / churn.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/calculus/unit-linkage" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models

contract v0.6.0

factor-models.models.create

POST

SERVICE KEY REQUIRED

Create a tenant-scoped factor model header (latent factors + outcome) before registering weight versions.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/models" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.versions.register

POST

SERVICE KEY REQUIRED

Append an immutable model_version row plus relational factor_weights edges.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/models/:id/versions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.versions.validate

POST

SERVICE KEY REQUIRED

Compute holdout correlation / MAE / R² and persist segment fairness snapshots for publish gating.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/models/:id/versions/:versionId/validate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.publish

POST

SERVICE KEY REQUIRED

Advance models.current_version_id only when a passing validation_report exists (409 otherwise).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/models/:id/publish" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.scores.compute

POST

SERVICE KEY REQUIRED

Score a subject against the published current version; lazily memoizes `(versionId × subject × factor)` rows for deterministic repeat reads.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/scores/:modelId/:subjectId" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.analytics-plan

POST

SERVICE KEY REQUIRED

PA Instrument — Analytics-Plan Generator: rank candidate models by exec-priority relevance + emit a value-of-information-ranked measurement plan.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/analytics-plan" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.empirical-importance

POST

SERVICE KEY REQUIRED

PA Instrument — Empirical importance from observed-outcome variance (√variance × priority weight, normalized 0–100); feeds calculus.importance-reconcile.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/empirical-importance" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.program-portfolio

POST

SERVICE KEY REQUIRED

HR program-portfolio prioritization (PAT-177): rank HR programs by weighted outcome-linkage × stakeholder preference, flag low-driver / unreviewed spend as waste, recommend cull/keep/grow + reallocation of the recoverable pool. Service-key gated, stateless. DISTINCT from compensation waste (anycomp).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/program-portfolio" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

factor-models.program-portfolio.scenarios

POST

SERVICE KEY REQUIRED

HR program-budget scenario / optimizer (PAT-177-FU-C): over the prioritized portfolio + recoverable pool, generate a few budget-neutral reallocation scenarios (hold / targeted-cull / aggressive) each with a projected portfolioAlignment lift + moved spend, plus a PAT-171 exec narrative. Service-key gated, stateless. Sibling of the AnyComp scenario layer — HR programs, not pay.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/factor-models/program-portfolio/scenarios" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecasting

contract v1.4.0

forecasting.monte-carlo.run

POST

SERVICE KEY REQUIRED

Run a deterministic seeded Monte Carlo over named distributions and a closed-form expression.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/monte-carlo/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecasting.decision-models.create

POST

SERVICE KEY REQUIRED

Register a reusable decision tree (VOI / EVPI substrate).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/decision-models" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecasting.voi.compute

POST

SERVICE KEY REQUIRED

Compute baseline EV, perfect-information EV, EVPI, and optional discrete EVSI for aligned shared uncertainty.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/voi/compute" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecasting.interval-scoring

POST

SERVICE KEY REQUIRED

PA Instrument — Score interval estimates against realized outcomes (coverage + sharpness).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/interval-scoring" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecasting.bayesian-combine

POST

SERVICE KEY REQUIRED

PA Instrument — Bayesian combination of multiple estimate sources into a posterior.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/bayesian-combine" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

forecasting.measurement-recommend

POST

SERVICE KEY REQUIRED

PA Instrument — Recommend a measurement method given a construct and constraints.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/forecasting/measurement-recommend" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning

contract v0.6.0

workforce-planning.positions.upsert

POST

SERVICE KEY REQUIRED

Service-key gated batch upsert that writes append-only audit events feeding denormalized `positions` totals.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/positions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.forecast.run

POST

SERVICE KEY REQUIRED

Materialize a persisted forecast_snapshot using rolling-average hires/exits heuristics bounded by toolbox position_events.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/forecast/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.forecast.exits

POST

SERVICE KEY REQUIRED

Segment-aware trailing exit-rate forecast (defaults to ~12-month lookback) with optional regretted attribution from structured position_events taxonomy.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/forecast/exits" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.forecast.funnelThroughput

POST

SERVICE KEY REQUIRED

ATS funnel throughput forward hires from cohort conversion rates (application_status + offer_states) with persisted forecast_snapshot telemetry.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/forecast/funnel-throughput" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.forecast.projection

POST

SERVICE KEY REQUIRED

Combined head-count balance sheet marrying exit pacing + ATS funnel hires; persists a composite forecast_snapshot envelope.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/forecast/projection" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.reconciliation.run

POST

SERVICE KEY REQUIRED

Freezes reconciliation_snapshots capturing HR/Budget/ATS variance using live `positions` grain inputs.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/reconciliation/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.ats.webhook.greenhouse

POST

SERVICE KEY REQUIRED

Signature-verified Greenhouse webhook ingest that upserts ATS rows + optional hire/exit deltas when JOB→POSITION env map is wired.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/ats/webhook/greenhouse" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.matches.propose

POST

SERVICE KEY REQUIRED

PAT-D1-B-FU-C batch Conductor matcher — Beta prior + feature likelihood ratios over open HRIS slots; persists requisition_matches + audit rows.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/matches/propose" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.matches.accept

POST

SERVICE KEY REQUIRED

Operator accepts a ranked slot; flips HRIS lifecycle to reconciled-by-operator + updates conjugate Beta on success ledger insert.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/matches/:requisitionId/accept" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.matches.rejectAndCreateNew

POST

SERVICE KEY REQUIRED

Operator rejects all suggestions and mints `open-newly-created`; ledger bumps Beta "reject" atomically once.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/matches/:requisitionId/reject-and-create-new" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.matches.override

POST

SERVICE KEY REQUIRED

Operator binds an off-list toolbox position without diluting conjugate Beta (explicit override semantics + audited reason).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/matches/:requisitionId/override" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

workforce-planning.matches.reconcileExpiredExits

POST

SERVICE KEY REQUIRED

Idempotent TTL job — flips stale `open-from-exit` rows to `open-newly-created` when exit_date + exit_ttl_days has elapsed.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/workforce-planning/matches/reconcile-expired-exits" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp

contract v1.54.0

anycomp.models.create

POST

SERVICE KEY REQUIRED

Register a compensation model and its market bands (dimensions × pay mix).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/models" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.evaluate

POST

SERVICE KEY REQUIRED

Stateless evaluation: employees × model → recommendations (percentile, target pay, confidence).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/evaluate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.cycles.run

POST

SERVICE KEY REQUIRED

Bulk evaluation with persistence to comp_evaluations (audit trail per cycle).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/cycles/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.market.labor-rate

POST

SERVICE KEY REQUIRED

Look up a BLS-derived labor-market rate (voluntary attrition / hire / opening / employment) for (socCode, geo, period). Geo/period fallback supplied (PAT-18-FU-A; donor market-data-backend).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/market/labor-rate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{
  "metric": "voluntary_attrition",
  "socCode": "15-1252",
  "geo": "national",
  "period": "2024"
}'

anycomp.market.exit-risk-prior

POST

SERVICE KEY REQUIRED

BLS-baseline exit-risk prior for a segment, with optional compensation-percentile opportunity adjustment (PAT-18-FU-A).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/market/exit-risk-prior" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.market.tier-classify

POST

SERVICE KEY REQUIRED

Classify a value into Low / Mid / High tier using 33rd / 66th cohort-percentile thresholds (BLS labor metrics; PAT-18-FU-A).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/market/tier-classify" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.market-movement.history.ingest

POST

SERVICE KEY REQUIRED

PAT-147-G — Batch append canonical or tenant-overlay market midpoint history for (job family, job level); tenant context required.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/market-movement/history/ingest" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.market-movement.fit

POST

SERVICE KEY REQUIRED

PAT-147-G — YoY derivation + lag surrogate fit (pooled fallback &lt;10 rows) persisted to calculus.surrogate_models.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/market-movement/fit" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.market-movement.forecast

POST

SERVICE KEY REQUIRED

PAT-147-G — MC envelope + surrogate mean CI forward movement percentiles for configured horizon.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/market-movement/forecast" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.engines.merit.run

POST

SERVICE KEY REQUIRED

PAT-147-B CompEngine merit matrix on shared enriched population; optional per-cycle JSON config persistence.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/engines/merit/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.engines.variable-pay.run

POST

SERVICE KEY REQUIRED

PAT-147-B variable-pay / annual incentive engine (Mode A v0; Mode B placeholder) with per-unit aggregates.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/engines/variable-pay/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.engines.equity.run

POST

SERVICE KEY REQUIRED

PAT-147-B equity pool allocator — proportional split of per–decision-unit budgets by rating multipliers.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/engines/equity/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.engines.discretionary.run

POST

SERVICE KEY REQUIRED

PAT-147-B discretionary cash engine keyed by rating with optional population-status adjustments.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/engines/discretionary/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.eib.generate

POST

SERVICE KEY REQUIRED

PAT-147-E — Build Workday-style EIB CSV from persisted CompEngine outputs (merit / variable-pay / equity / discretionary). Optional download=1 as text/csv attachment.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/eib/generate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.eib.diff

POST

SERVICE KEY REQUIRED

PAT-147-E — Compare two prior Workday EIB CSV strings and summarize added / removed / changed award lines (employeeId or lineKey join).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/eib/diff" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.analytics.vs-plan

POST

SERVICE KEY REQUIRED

Consulting vs.Plan variance: merges area × function × geo actual increments vs budgets (+ optional FY merit % targets) with rollup totals.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/analytics/vs-plan" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.analytics.pool-metrics

POST

SERVICE KEY REQUIRED

Pool merit / promo / adj spend versus payroll denominator with optional weighted geo-average splits.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/analytics/pool-metrics" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.analytics.hr-finance-crossover

POST

SERVICE KEY REQUIRED

Tenant-config HR↔finance bridge ratios (comp per FTE, comp % revenue proxy, comp % EBITDA) from explicit payroll + FP&A assumptions.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/analytics/hr-finance-crossover" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.analytics.comp-lifecycle

POST

SERVICE KEY REQUIRED

Seven-column comp lifecycle workbook vector (hourly detect ×2080, pre/post merit TC vs band-mid promo-isolated ratios).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/analytics/comp-lifecycle" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.analytics.cr-drift-histogram

POST

SERVICE KEY REQUIRED

Fine-grained comp-ratio histogram with paired employee pre/post counts and configurable bucket windows.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/analytics/cr-drift-histogram" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.analytics.dual-nine-box

POST

SERVICE KEY REQUIRED

Perf × Pay-Equity dual nine-box matrices (pre/post) + movement arcs using segmentation-stable bucket IDs.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/analytics/dual-nine-box" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.scenarios.generate

POST

SERVICE KEY REQUIRED

Decision layer (PAT-AC1): priority weights + budget → several distinct scenarios scored on every three-value measure, plus a tradeoff radar (the 'never one option' loop).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/scenarios" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

anycomp.engagements.run

POST

SERVICE KEY REQUIRED

Persisted engagement: save strategy + priorities, run the decision loop, persist scenarios + impacts + audit in one transaction; returns the bundle.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/anycomp/engagements" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph

contract v1.1.0

org-graph.graph.build

POST

SERVICE KEY REQUIRED

Idempotent graph rebuild — materializes org nodes + typed temporal edges for `(tenantId, snapshotId)` from worker-resolution rows.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/graph/build" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph.query.resolve-ancestor

POST

SERVICE KEY REQUIRED

As-of supervisory (or typed hierarchy) parent chain for a single worker node.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/query/resolve-ancestor" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph.query.ancestor-chains

POST

SERVICE KEY REQUIRED

Memoized ancestor stacks for many leaf nodes in one call.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/query/ancestor-chains" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph.elt.substring-match

POST

SERVICE KEY REQUIRED

Stateless substring roster match for ELT workbook-style HRIS strings.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/elt/substring" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph.inference.dominant-dept

POST

SERVICE KEY REQUIRED

Dominant dept→ELT empirical edges with fractional confidence.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/inference/dominant-dept" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph.consistency.report

POST

SERVICE KEY REQUIRED

Orphans, cycles, multi-parent clashes, dangling manager edges.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/consistency/report" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph.snapshot.diff

POST

SERVICE KEY REQUIRED

Diff two snapshots — mover map, subtree graft heuristic, span-of-control deltas with optional magnitude threshold.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/snapshot/diff" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

org-graph.rollup.leader-metrics

POST

SERVICE KEY REQUIRED

Leader-per-layer rollup of leaf measures mirroring workbook leader-metrics passes.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/org-graph/rollup/leaders" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

job-family-agent

contract v1.6.0

job-family-agent.classify

POST

SERVICE KEY REQUIRED

Token-overlap heuristic classifier: free text → up to 8 SOC matches with confidence + best-guess job family + job function. Direct SOC matches detected in text override the heuristic. Stateless; public + IP-rate-limited at 100 req/min.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/classify" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

job-family-agent.level-equivalency

POST

SERVICE KEY REQUIRED

Map external comp-source levels to the canonical JobFrame universal level by pay (preferred) or ordinal signal — the stateless core of the survey mapper. Honest 3-state (confident/review/no_match); no_match abstains with a null canonicalLevel, never a fabricated equivalence (PAT-JFE-PAY-5 #1a).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/level-equivalency" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

job-family-agent.source-level-mappings.propose

POST

SERVICE KEY REQUIRED

Survey-mapper persistence (#1b): propose source→canonical level mappings (runs the #1a equivalency per item) into the review queue (`source_level_mappings`, review_status=needs_review). Crosswalk-licensing enforced — a LICENSED source's mappings require a tenantId (tenant-segregated, never the shared canon). Service-key gated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/source-level-mappings/propose" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

job-family-agent.source-level-mappings.query

POST

SERVICE KEY REQUIRED

Survey-mapper review queue (#1b): gated list of source→canonical level mappings filtered by tenant (+ global canon), source, and review status. Service-key gated (tenant-scoped licensed mappings are sensitive).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/source-level-mappings/query" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

job-family-agent.source-level-mappings.review

POST

SERVICE KEY REQUIRED

Survey-mapper review-correct loop (#1b): confirm or reject a proposed source→canonical level mapping (optional canonical-level override on confirm). Service-key gated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/source-level-mappings/:id/review" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

job-family-agent.crosswalk-licensing.gate

POST

SERVICE KEY REQUIRED

The IP-clean crosswalk guard over HTTP: honest 3-state READ gate per source (open|licensed|not_licensed, never a fabricated match) + a WRITE cleanliness check over candidate crosswalk rows. Enforces the §33 storage rule (licensed survey-house structures stay tenant-segregated, never in the shared canon).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/job-family-agent/crosswalk-licensing/gate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

manager-effectiveness

contract v1.2.0

manager-effectiveness.composite.compute

POST

SERVICE KEY REQUIRED

Nine-domain hierarchical Manager Effectiveness Index (MEI) composite (0–100) with optional measure ladder payload, flight-risk penalty, and tenant-persisted pillar weights.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/manager-effectiveness/composite" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

manager-effectiveness.tenant.weights.upsert

POST

SERVICE KEY REQUIRED

UPSERT the nine canonical pillar weights per tenant (service key; sum-to-one validation via Zod).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/manager-effectiveness/weights" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

manager-effectiveness.tenant.weights.recalibrate

POST

SERVICE KEY REQUIRED

Blend pooled Q2-derived per-domain explanatory mass with FiveTran-informed priors, UPSERT merged MEI pillar weights per tenant, and append an analyst-facing audit row.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/manager-effectiveness/weights/recalibrate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance

contract v0.17.0

wage-compliance.jurisdictions.resolve

POST

SERVICE KEY REQUIRED

Resolve a work-location address into its hierarchical jurisdiction chain with precision tier + ambiguity flags + rooftop-pending indicator (PAT-89 future).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/jurisdictions/resolve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.evaluate.single

POST

SERVICE KEY REQUIRED

Stateless single-worker compliance evaluation: pass/fail/warning/unknown with full evaluation trace + jurisdiction chain + applied rule.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/evaluate/single" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.evaluate.bulk

POST

SERVICE KEY REQUIRED

Stateless bulk compliance evaluation (≤10,000 workers) with per-worker results + aggregate pass/fail/warning/unknown counts.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/evaluate/bulk" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.evaluate.offer

POST

SERVICE KEY REQUIRED

PAT-90 — Stateless single-offer (ATS / pre-hire) compliance evaluation. Resolves the candidate's location, looks up the applicable rule, returns pass/warning/fail/unknown plus a `recommendedHourlyWage` (required + 1¢ buffer) when failing. Writes an `api`-source row to wage_compliance.offer_evaluations_audit (fire-and-forget).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/evaluate/offer" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.evaluate.posting

POST

SERVICE KEY REQUIRED

PAT-100 — Stateless pay-transparency posting / offer-letter validation. Resolves the jurisdiction (id or location), looks up the applicable `pay-transparency` rule_version, and returns pass/fail + `missingFields[]`. `noObligation=true` when the jurisdiction has no transparency rule on file (outcome still `pass`).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/evaluate/posting" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.evaluate.paid-leave

POST

SERVICE KEY REQUIRED

PAT-99-FU-A — Stateless paid-leave accrual + eligibility evaluation. Given a rule_version id (from the PAT-99 seed) + worker YTD hours-worked + employment start date + optional carryover, returns a `PaidLeaveFinding` (accrued hours, available balance, days-until-eligible, paid / job-protected / FMLA-compatible flags). Supports per-hour / front-load / fixed-bank accrual methods.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/evaluate/paid-leave" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.worker-classification.evaluate

POST

SERVICE KEY REQUIRED

PAT-97 — Advisory FLSA + state heuristic classifier for industry-specific exemption / tipped / prevailing-wage / independent-contractor patterns. Stateless; optional `industry` selects layered rulesets (generic default). Does not substitute for legal advice.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/worker-classification" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.alerts.acknowledge

POST

SERVICE KEY REQUIRED

Acknowledge a compliance alert — flip status from `open` to `reviewed` or `resolved`. Idempotent.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/alerts/:id/acknowledge" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.review-queue.create

POST

SERVICE KEY REQUIRED

PAT-94 — Create a review-queue item from an existing compliance_evaluation row. Writes a 'created' audit event. Persistent; pairs with stateless evaluate.single / evaluate.bulk to land specific results into the operator review workflow.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/review-queue" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.review-queue.assign

POST

SERVICE KEY REQUIRED

PAT-94 — Assign (or unassign with `assigneeId: null`) a review-queue item to an operator. Writes an 'assigned' / 'unassigned' audit event. Idempotent.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/review-queue/:id/assign" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.review-queue.set-status

POST

SERVICE KEY REQUIRED

PAT-94 — Transition a review-queue item's status (new / under_review / approved / exported / resolved / dismissed). Writes a 'status_changed' (or 'exported') audit event capturing the previous status.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/review-queue/:id/status" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.review-queue.add-note

POST

SERVICE KEY REQUIRED

PAT-94 — Append a free-text note to a review-queue item; atomically bumps notes_count and writes a 'note_added' audit event referencing the new note id.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/review-queue/:id/notes" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.exports.generate

POST

SERVICE KEY REQUIRED

PAT-91 — Generate a payroll-vendor export pack (ADP / UKG / Paychex) for a set of compliance_evaluation rows. Uploads CSV to Vercel Blob with a 7-day signed-URL TTL, writes a row to wage_compliance.exports_audit, and (when reviewQueueId is provided) a companion 'exported' audit event to review_queue_audit. Vendor is part of the path: /api/spokes/wage-compliance/exports/[vendor].

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/exports/:vendor" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.alerts.assign

POST

SERVICE KEY REQUIRED

PAT-84-FU-C — Assign a compliance_alert to an operator. Writes to wage_compliance.alert_assignments; fire-and-forget audit to mcp.mcp_audit.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/alerts/:id/assign" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.alerts.add-note

POST

SERVICE KEY REQUIRED

PAT-84-FU-C — Append a free-text note (≤10,000 chars) to a compliance_alert. Writes to wage_compliance.alert_notes; fire-and-forget audit to mcp.mcp_audit.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/alerts/:id/notes" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

wage-compliance.conflicts.resolve

POST

SERVICE KEY REQUIRED

PAT-95-FU-B — Resolve a source-citation conflict. Flips the accepted rule_version to `validated`, supersedes siblings on the same (jurisdictionId × ruleFamilyId × effectiveStart) tuple, writes an audit row to wage_compliance.conflict_resolutions.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/wage-compliance/rules/:ruleVersionId/resolve-conflict" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

worker-resolution

contract v1.0.0

worker-resolution.resolve

POST

SERVICE KEY REQUIRED

Two-Pass Self-Healing join: learning index fortification followed by deterministic merge with HRIS vault, ladder matching, lineage, admissions policy, aliases learned, failures roster.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/worker-resolution/resolve" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

principia-connector

contract v0.12.0

principia-connector.posterior.fuse

POST

SERVICE KEY REQUIRED

Fuse a published Principia prior with a new observation into a posterior (conjugate normal-normal on the Fisher-z scale). Three-state PosteriorResult (fused/none/error). Service-key gated; read-only compute.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/posterior" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

principia-connector.voi.analyze

POST

SERVICE KEY REQUIRED

Value of Information (EVPI/EVSI/optimal-N) for one prior + a loss function; surfaces a delegationHint when the heavier toolbox voi-framework is needed. Three-state VoiResult (ok/none/error). Service-key gated; read-only compute.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/voi" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

principia-connector.relationship-evidence.emit

POST

SERVICE KEY REQUIRED

Emit a primary-deployment construct→outcome effect size to Principia (PRN-065, write-key forwarded). AGGREGATE ONLY — the caller (reincarnation) gates consent + minimum cell size first. Service-key gated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/relationship-evidence" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

principia-connector.methods.response-quality

POST

SERVICE KEY REQUIRED

Insufficient-effort (IER) ingestion gate (PRN-145, HO-059): scores a response set and returns ready-to-filter included/excluded/flagged respondent buckets to drop low-effort responses before metrics compute. Fail-OPEN (Principia down → nothing excluded, checked:false). Service-key gated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/methods/response-quality" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

principia-connector.methods.assemble-battery

POST

SERVICE KEY REQUIRED

Soft-constraint battery assembly (PRN-142, HO-057): construct set + item pool + weights → assembled battery + per-constraint satisfaction (unmet[] flags thin-pool constraints, never a failure). Service-key gated; fail-soft 3-state.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/methods/assemble-battery" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

principia-connector.methods.local-validity

POST

SERVICE KEY REQUIRED

Local closed-loop validity (PRN-144, HO-073): per predictor, fuses the literature prior with the customer's own predictor→criterion correlation into a posterior LOCAL validity, then flags predictors to prune + flags validation decay (drift / too-small n). Re-implements no stats (Fisher-z stays upstream). REST-entity proxy; service-key gated; fail-soft 3-state. (Blueprint-Library-derived — internal use, never market.)

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/methods/local-validity" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

principia-connector.methods.validate-theory

POST

SERVICE KEY REQUIRED

Confirmatory theory validation (PRN-147, HO-068): theory (construct→construct relationships + priors) + a corpus of coded units → per-relationship verdict (supported/refined/contradicted/inconclusive/untested_no_prior) fusing the text-derived association with the published prior (Fisher-z). Absence is signal but coverage is reported. The differentiated capability over commodity theme/sentiment analysis. Service-key gated; fail-soft 3-state. Upstream deploy-pending (returns none/error until principia ships).

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/principia-connector/methods/validate-theory" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

glass-ox

contract v1.0.0

glass-ox.plans.run

POST

SERVICE KEY REQUIRED

Execute a registered plan synchronously, persist its RunReport across the durable tables, and return the rehydrated report (halts honestly when an assertion fires). Service-key-gated.

curl -sS -X POST "https://people-analytics-toolbox.vercel.app/api/spokes/glass-ox/plans/:slug/run" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOOLBOX_SERVICE_KEY" \
  -d '{}'

MCP gateway

The same algorithms, callable by AI agents.

POST /api/mcp — Streamable HTTP + . Per-consumer auth via TOOLBOX_MCP_KEY_<CONSUMER> env vars; each key maps to a scope set in src/lib/mcp/auth.ts. Sequential calls hit the same warm instance via the Mcp-Session-Id header. Per-spoke endpoints exist too: /api/mcp/spokes/<slug> constrains tools to <slug>.*.

StreamableHTTPClientTransport — minimal consumer

TypeScript · @modelcontextprotocol/sdk · service key in env

// scripts/your-mcp-client.ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const url = new URL("/api/mcp", "https://people-analytics-toolbox.vercel.app");
const transport = new StreamableHTTPClientTransport(url, {
  requestInit: {
    headers: { Authorization: `Bearer ${process.env.TOOLBOX_MCP_KEY}` },
  },
});

const client = new Client({ name: "my-consumer", version: "0.0.1" });
await client.connect(transport);

// Discovery
const tools = await client.listTools();
const services = await client.callTool({
  name: "toolbox.list_services",
  arguments: {},
});

// Call a spoke tool
const feed = await client.callTool({
  name: "reincarnation.psychometric-feed",
  arguments: {},
});

Per-tool examples (with tool-name + argument shape) live on each spoke's page. Start with /spokes/reincarnation for the worked walkthrough. The full onboarding runbook (key generation, scope choice, audit verification) is in docs/EXTERNAL-CONSUMERS.md.

Audit + rate limits

Every call is logged. No rate limit enforced today.

Every MCP tool invocation writes one row to mcp.mcp_audit (PAT-33) capturing the consumer ID, tool name, status, latency, and timestamp. Audit writes are fire-and-forget — a failure to persist the audit row never breaks the tool call. Retention is unbounded today; pruning is a follow-up.

HTTP routes emit one structured JSON log line per request via withRouteLogger: { ts, requestId, route, method, path, status, latencyMs }. Vercel log search filters cleanly on the route: key.

The rate-limit hook is scaffolded but no policy is enforced today (PAT-33). A follow-up wires the policy without touching the call sites; consumer-side back-off behavior shouldn't change.

Try a public read. Then ask for a service key.

Reads work right now from any terminal. Writes + MCP need a key — drop Mike a line and you'll have one the same day.