Public · keyless · CORS-open

The GSPC axis API

One public endpoint returns the 13-axis GSPC measurement board as JSON. No account, no API key, no tiers. Every number is recomputable from the published harness.

The endpoint

Method
Endpoint
Returns
GET
/api/gspc
The full 13-axis board
GET
/api/gspc?axis=<name>
One axis (404 lists known axes)

Base URL: https://councilof.ai/api/gspc

Auth: none. The response sends access-control-allow-origin: * and is cached for 300s.

Axes: governance, safety, provenance, continuity, conformance, openness, machinery-conformity, care, cross-reality, detector-interop, art5-safeguard, swarm, affect.

Call it

# The whole 13-axis board (keyless — no auth header)
curl https://councilof.ai/api/gspc

# A single axis
curl "https://councilof.ai/api/gspc?axis=governance"

# An unknown axis returns 404 with the list of known axes
curl "https://councilof.ai/api/gspc?axis=nope"
# => { "error": "unknown axis", "known": [ "governance", "safety", ... ] }

Response shape (schema csoai.gspc-axes/0.3)

{
  "schema": "csoai.gspc-axes/0.3",
  "issuer": "CSOAI Ltd (GB, Companies House 16939677)",
  "doi": "10.5281/zenodo.21755656",
  "measured_on": {
    "model": "19-model fleet: 8 tuned council specialists + 6 base + frontier cross-lab",
    "date": "2026-08-12",
    "grading": "deterministic grading on 15,580 per-item rows (0 transport errors)"
  },
  "totals": {
    "axes": 13,
    "measured_axes": 13,
    "items": 819,
    "separated_leads": 3,
    "ties": 10
  },
  "axes": [
    {
      "axis": "governance",
      "bench": "GovBench",
      "task": "EU AI Act risk-tier classification",
      "n": 237,
      "accuracy": 0.700,
      "leader": "council specialist:governance-v3",
      "separation": "SEPARATED",
      "separation_p": 0.0086,
      "interval": [0.639, 0.755],
      "fleet_mean": 0.490,
      "macro_f1": 0.705,
      "unparsed_rate": 0.0386,
      "status": "MEASURED",
      "dataset": "csoai/gspc-gov"
    }
    // ... 12 more axes
  ],
  "limitations": [ "3 of 13 axes show a statistically separated leader ...", "..." ]
}
schemaAlways csoai.gspc-axes/0.3 — the payload contract version.
issuerCSOAI Ltd (GB, Companies House 16939677).
doi10.5281/zenodo.21755656 — the citable dataset record.
totals.axes / measured_axes13 measurement axes, all 13 MEASURED on the same fleet, rows and grader.
totals.separated_leads / ties3 separated (McNemar p<0.05 on discordant items), 10 ties. A TIE is not a win.
totals.itemsSum of per-axis n across the selection (819 across all 13 axes).
axes[].n / accuracy / intervalPer-axis item count, the LEADER's accuracy, and its Wilson 95% CI where n is honestly independent.
axes[].separation / separation_pSEPARATED or TIE, with the McNemar exact p on discordant pairs vs the best base model.
axes[].fleet_mean / mean_harmThe full 19-model fleet mean, and the severity-weighted failure mass the accuracy hides.
axes[].unparsed_rateShare of responses no label could be read from — reported, never scored as a wrong answer.
axes[].statusMEASURED / UNMEASURED / DRAFT / SPEC / PLANNED. UNMEASURED is reported with its n, never hidden.

There is no /v1/* SaaS API, no SDK to install, and no API key to request. This is a measurement body, not a platform: the public interface is a static, signed JSON board anyone can recompute.

Measurement, not certification. Every score is a deterministic grade of recorded model outputs on a frozen, published split. A TIE means the leader's point-estimate lead is not statistically separated — ties are not wins, and we do not publish “our models win N of 13”.

Machine consumers should prefer the registries over crawls: the MCP Registry entry and the A2A agent card are the authoritative machine interfaces, and this endpoint is keyless and verifiable offline.