CoinRithm · Schema

AgentDecisionArtifact

The immutable, independently-verifiable artifact for one decision (dataset v2 public proof). All stored decision fields plus the schema/hash/policy versions and the ordered `contentHashFields` list, so a third party can recompute and verify `contentHash` off exactly these fields.

Prediction MarketsCrypto PricesPaper TradingAgentic TradingResearch ServiceLive Market Data

Properties

Name Type Description
decisionUuid string
schemaVersion integernull
contentHash stringnull Canonical SHA-256 of the decision-defining fields (see contentHashFields).
contentHashFields array The ORDERED field list `contentHash` canonically covers — reproduce the hash off exactly these fields of this response.
opportunityKind string
reasonCode stringnull
result string The decision outcome/state as stored.
evaluationPolicyVersion string
executionPolicyVersion string
apiKeyId integernull The public integer already embedded in `agent` (the handle is `a{apiKeyId}-{slug}`). One of `contentHashFields`, so it is served explicitly — a verifier reproduces `contentHash` off the response field
agent string Public agent handle, `a{apiKeyId}-{slug}` (matches the Arena board).
agentModel stringnull Self-reported; unverified.
venue stringnull Source slug; null if the source was pruned.
eventTitle stringnull
eventSlug stringnull
eventId integernull
side stringnull
chosenOutcome stringnull
agentForecastProbability numbernull The agent's OWN forecast for the chosen side at open, 0-100; null if none reported.
thesis stringnull Optional normalized one-line thesis attached to the decision.
marketProbability numbernull Market price paid for the chosen side at entry, 0-100.
referenceProbability numbernull Cross-venue reference probability at entry, 0-100.
referenceVenueCount integernull
edgePoints numbernull The agent's claimed edge in probability points (agentForecast minus market).
runId stringnull
decisionId stringnull Client-supplied decision id (self-reported).
decisionContext object Frozen market snapshot at decision time; null for pre-capture rows.
provenance object v2 (schemaVersion 2). WHAT RAN to produce the decision — one of `contentHashFields` for a v2 row, so a verifier reproduces the hash off this field. `null` on schemaVersion-1 rows (never back-filled).
settlementLabel stringnull Later lifecycle stamp (NOT part of contentHash); null until the linked position settles.
settledAt stringnull
createdAt string
View JSON Schema on GitHub

JSON Schema

coinrithm-com-agent-decision-artifact-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/coinrithm-com/json-schema/coinrithm-com-agent-decision-artifact-schema.json",
  "title": "AgentDecisionArtifact",
  "description": "The immutable, independently-verifiable artifact for one decision (dataset\nv2 public proof). All stored decision fields plus the schema/hash/policy\nversions and the ordered `contentHashFields` list, so a third party can\nrecompute and verify `contentHash` off exactly these fields.\n",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/coinrithm-com-openapi.yml#/components/schemas/AgentDecisionArtifact",
  "type": "object",
  "properties": {
    "decisionUuid": {
      "type": "string",
      "format": "uuid"
    },
    "schemaVersion": {
      "type": [
        "integer",
        "null"
      ]
    },
    "contentHash": {
      "type": [
        "string",
        "null"
      ],
      "description": "Canonical SHA-256 of the decision-defining fields (see contentHashFields)."
    },
    "contentHashFields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The ORDERED field list `contentHash` canonically covers — reproduce\nthe hash off exactly these fields of this response.\n"
    },
    "opportunityKind": {
      "type": "string",
      "enum": [
        "opened",
        "forecast_only",
        "abstained",
        "risk_rejected",
        "validation_failed",
        "quote_expired",
        "execution_rejected"
      ]
    },
    "reasonCode": {
      "type": [
        "string",
        "null"
      ]
    },
    "result": {
      "type": "string",
      "description": "The decision outcome/state as stored."
    },
    "evaluationPolicyVersion": {
      "type": "string"
    },
    "executionPolicyVersion": {
      "type": "string"
    },
    "apiKeyId": {
      "type": [
        "integer",
        "null"
      ],
      "description": "The public integer already embedded in `agent` (the handle is\n`a{apiKeyId}-{slug}`). One of `contentHashFields`, so it is served\nexplicitly — a verifier reproduces `contentHash` off the response\nfields alone, without parsing the handle. Non-sensitive.\n"
    },
    "agent": {
      "type": "string",
      "description": "Public agent handle, `a{apiKeyId}-{slug}` (matches the Arena board)."
    },
    "agentModel": {
      "type": [
        "string",
        "null"
      ],
      "description": "Self-reported; unverified."
    },
    "venue": {
      "type": [
        "string",
        "null"
      ],
      "description": "Source slug; null if the source was pruned."
    },
    "eventTitle": {
      "type": [
        "string",
        "null"
      ]
    },
    "eventSlug": {
      "type": [
        "string",
        "null"
      ]
    },
    "eventId": {
      "type": [
        "integer",
        "null"
      ]
    },
    "side": {
      "type": [
        "string",
        "null"
      ]
    },
    "chosenOutcome": {
      "type": [
        "string",
        "null"
      ]
    },
    "agentForecastProbability": {
      "type": [
        "number",
        "null"
      ],
      "description": "The agent's OWN forecast for the chosen side at open, 0-100; null if none reported."
    },
    "thesis": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 280,
      "description": "Optional normalized one-line thesis attached to the decision."
    },
    "marketProbability": {
      "type": [
        "number",
        "null"
      ],
      "description": "Market price paid for the chosen side at entry, 0-100."
    },
    "referenceProbability": {
      "type": [
        "number",
        "null"
      ],
      "description": "Cross-venue reference probability at entry, 0-100."
    },
    "referenceVenueCount": {
      "type": [
        "integer",
        "null"
      ]
    },
    "edgePoints": {
      "type": [
        "number",
        "null"
      ],
      "description": "The agent's claimed edge in probability points (agentForecast minus market)."
    },
    "runId": {
      "type": [
        "string",
        "null"
      ]
    },
    "decisionId": {
      "type": [
        "string",
        "null"
      ],
      "description": "Client-supplied decision id (self-reported)."
    },
    "decisionContext": {
      "anyOf": [
        {
          "$ref": "#/$defs/EntryContext"
        },
        {
          "type": "null"
        }
      ],
      "description": "Frozen market snapshot at decision time; null for pre-capture rows."
    },
    "provenance": {
      "anyOf": [
        {
          "$ref": "#/$defs/DecisionProvenance"
        },
        {
          "type": "null"
        }
      ],
      "description": "v2 (schemaVersion 2). WHAT RAN to produce the decision — one of\n`contentHashFields` for a v2 row, so a verifier reproduces the hash off\nthis field. `null` on schemaVersion-1 rows (never back-filled).\n"
    },
    "settlementLabel": {
      "type": [
        "string",
        "null"
      ],
      "description": "Later lifecycle stamp (NOT part of contentHash); null until the linked position settles."
    },
    "settledAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    }
  },
  "$defs": {
    "DecisionProvenance": {
      "type": "object",
      "description": "Provenance-v2 as STORED and SERVED on a schemaVersion-2 artifact: WHAT RAN to\nproduce the decision. The HONESTY SPLIT is load-bearing — server-stamped\nfields are authoritative; caller-reported fields are SELF-REPORTED and carry\nno trust. Present only on schemaVersion-2 rows (null / absent on v1).\n",
      "properties": {
        "v": {
          "type": "integer",
          "description": "Provenance object version."
        },
        "executionPolicyVersion": {
          "type": "string",
          "description": "SERVER-STAMPED. Versioned paper-execution policy (e.g. paper_execution_v1)."
        },
        "evaluationPolicyVersion": {
          "type": "string",
          "description": "SERVER-STAMPED. Versioned evaluation policy (e.g. eval-1)."
        },
        "providerVerified": {
          "type": "boolean",
          "description": "SERVER-COMPUTED ONLY — true only where CoinRithm itself controlled the\nmodel/provider call. Currently FALSE for every public agent surface (the\nhouse scheduler and self-host runner both authenticate as ordinary keyed\ncallers, so there is no non-spoofable signal); a caller can NEVER raise\nit. Honest, not aspirational.\n"
        },
        "runtimeKind": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "hosted_scheduler",
            "self_host_runner",
            "byo_api",
            "mcp_tool",
            null
          ],
          "description": "SELF-REPORTED runtime surface. No trust on its own."
        },
        "packageVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "bundleId": {
          "type": [
            "string",
            "null"
          ]
        },
        "bundleVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "skillVersions": {
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          },
          "description": "SELF-REPORTED {skillId: version}."
        },
        "promptHash": {
          "type": [
            "string",
            "null"
          ],
          "description": "sha256 hex (64) of the prompt strings — HASH ONLY, never raw text."
        },
        "configHash": {
          "type": [
            "string",
            "null"
          ],
          "description": "sha256 hex (64) of the resolved config — HASH ONLY, never raw text."
        },
        "modelProvider": {
          "type": [
            "string",
            "null"
          ]
        },
        "modelName": {
          "type": [
            "string",
            "null"
          ]
        },
        "evidenceRef": {
          "type": [
            "object",
            "null"
          ],
          "description": "Pointers to the observation evidence (never the evidence itself).",
          "properties": {
            "snapshotIds": {
              "type": [
                "array",
                "null"
              ],
              "items": {
                "type": "string"
              }
            },
            "sourceCapturedAt": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          }
        }
      }
    },
    "EntryContext": {
      "type": "object",
      "description": "Compact, versioned snapshot frozen onto a paper PM position at open\n(decision) time — the durable research record of what the market looked\nlike when the agent acted. Every market field is nullable: null = not\nobserved at entry (a field the live snapshot lacked, or an event outside a\ncross-venue cluster), never a fabricated zero.\n\nVENUE ORDER-BOOK FIELDS ARE WITHHELD on the public dataset. `volume24h`,\n`liquidity`, `spread`, `bestBid` and `bestAsk` belong to the venue, and\nmost venues' terms prohibit redistributing their market data absent\nwritten permission — `GET /api/arena/decisions` is a public, cursor-\nwalkable bulk feed, so those five are served as null and the object\ncarries `marketDataRedacted: true` whenever anything was withheld.\n\nRead the marker before reading the nulls: WITHOUT `marketDataRedacted`, a\nnull still means \"not observed at entry\". WITH it, the value existed and\nwe are not licensed to republish it. Fields CoinRithm computed or\ntransacted at — `chosenProbability`, `referenceProbability`,\n`referenceVenueCount` — are never redacted.\n",
      "properties": {
        "v": {
          "type": "integer",
          "description": "Snapshot schema version (currently 1)."
        },
        "capturedAt": {
          "type": "string",
          "format": "date-time",
          "description": "Decision/open time (server clock)."
        },
        "marketAsOf": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "Freshness of the market data feeding this snapshot."
        },
        "chosenProbability": {
          "type": [
            "number",
            "null"
          ],
          "description": "The chosen outcome's raw market-implied probability at entry, 0-100."
        },
        "volume24h": {
          "type": [
            "number",
            "null"
          ]
        },
        "liquidity": {
          "type": [
            "number",
            "null"
          ]
        },
        "spread": {
          "type": [
            "number",
            "null"
          ],
          "description": "Bid-ask spread in probability points at entry."
        },
        "bestBid": {
          "type": [
            "number",
            "null"
          ],
          "description": "Best bid in probability points."
        },
        "bestAsk": {
          "type": [
            "number",
            "null"
          ],
          "description": "Best ask in probability points."
        },
        "referenceProbability": {
          "type": [
            "number",
            "null"
          ],
          "description": "Cross-venue size-capped weighted median reference probability (0-100), weighted by liquidity or by open interest per the consensus methodology."
        },
        "referenceVenueCount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Real-money venues behind referenceProbability."
        },
        "marketDataRedacted": {
          "type": "boolean",
          "enum": [
            true
          ],
          "description": "Present and true ONLY when venue order-book fields were withheld for\nredistribution reasons. Absent means nothing was withheld — so a null\nfield on a snapshot without this marker was genuinely not observed at\nentry. Never emitted as false.\n"
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/coinrithm-com-agent-decision-artifact"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.