Coordinator API
The CoreTex coordinator surface is mounted at /coretex/*. The miner-facing surface is intentionally small: one read for the current work packet, one write to submit, one read for non-secret state context. Artifact endpoints round out the verifier surface.
Miner endpoints
| Method | Path | Purpose |
|---|---|---|
GET |
/coretex/challenge |
Current patch-work packet for a miner |
POST |
/coretex/submit |
Submit a candidate patch; coordinator validates, evaluates, and returns a signed receipt or rejection |
GET |
/coretex/status |
Non-secret live CoreTex state context (epoch, state root, bundle hash, policy) |
GET /coretex/challenge returns a singular dynamic work packet (no challenge-book listing):
{
"lane": "coretex",
"challengeId": "0x...",
"epochId": 123,
"expiresAt": 1760000000,
"parentStateRoot": "0x...",
"coreVersionHash": "0x...",
"bundleHash": "0x...",
"substrate": {
"encoding": "coretex-packed-substrate-v1",
"bytes": "0x..."
}
}
If the substrate is served by reference the substrate object carries uri (e.g. /coretex/substrate/0x...) instead of inline bytes. coreVersionHash is required so miners not running the full CoreTex client can bind to the correct static patch schema; bundleHash and epochId let a miner pin the active bundle and epoch without a second round-trip. The challenge payload only carries dynamic work context; static patch construction rules live in the miner skill/static docs.
POST /coretex/submit request (high level):
{
"challengeId": "0x...",
"patch": { "...": "..." }
}
Accepted response:
{
"status": "accepted",
"receipt": { "...": "signed receipt payload..." },
"patchHash": "0x...",
"evalReportHash": "0x..."
}
Rejected response:
{
"status": "rejected",
"code": "rejected",
"patchHash": "0x..."
}
Rejection details stay non-oracle: no hidden-pack scoring hints, no per-query rankings, no retrieved-document lists while those artifacts are active.
GET /coretex/status returns:
{
"lane": "coretex",
"epochId": 123,
"stateRoot": "0x...",
"statusVersion": 4187,
"wordCount": 1024,
"transitionCount": 12,
"rulesVersion": 192,
"workPolicyHash": "0x...",
"corpusRoot": "0x...",
"coreVersionHash": "0x...",
"bundleHash": "0x...",
"minImprovementPpm": 2500,
"evalSeedCommit": "0x...",
"substrate": { "uri": "/coretex/substrate/0x..." },
"bundle": { "uri": "/coretex/bundle/0x..." }
}
statusVersion is a monotonic poll token; a miner can long-poll or refetch /coretex/status and skip work whenever the version is unchanged.
Artifact and verification endpoints
| Method | Path | Purpose |
|---|---|---|
GET |
/coretex/substrate/:stateRoot |
Packed substrate bytes for a given state root |
GET |
/coretex/bundle/:bundleHash |
Pinned bundle manifest by content hash |
GET |
/coretex/bundle/by-core-version/:coreVersionHash |
Pinned bundle manifest by active core version (v2 default; aliases to the current bundleHash) |
GET |
/coretex/patch/:hash |
Canonical patch bytes and metadata |
GET |
/coretex/patch-received/:hash |
PatchReceivedNotice envelope for replay watchers (timestamp, target block, coordinator signature over the receipt commitment) |
GET |
/coretex/eval-report/:hash |
Signed evaluation report; this is the verdict lookup that replaces the old /coretex/result/:patchHash polling endpoint |
GET |
/coretex/corpus-delta/:epoch |
Signed corpus delta artifact for an epoch |
GET |
/coretex/health |
Coordinator/service health |
Rate limits are for abuse prevention only: flat per-miner ceilings plus global backpressure. CoreTex does not use credit-weighted rate limiting or reserved lanes. eval_hidden and canary records remain masked until the relevant reveal rules permit disclosure.