post_v1_research_experiments
IngestExperiments appends one batch of experiment and attempt versions to the caller org's evidence store, idempotently by content, then rolls it up to the analytics plane best-effort.
IngestExperiments appends one batch of experiment and attempt versions to the caller org's evidence store, idempotently by content, then rolls it up to the analytics plane best-effort. The project is the SERVER's value and visibility is forced private — an upload grants no training or publication right, which is a separate call. A run carrying a BYO endpoint is SSRF-checked before the store is touched. The answer carries BOTH the canonical (deduped) and retained (full history) counts, so a caller sees the versioned truth rather than a dedup that reads as loss.
| Tool | post_v1_research_experiments |
| Door | https://api.hanzo.ai/v1/mcp |
| Method | tools/call (JSON-RPC 2.0) |
| Arguments | 2 |
| Operation | POST /v1/research/experiments |
| Product | research |
Arguments
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
attempts | Attempt[] | — | — | — |
experiments | Experiment[] | — | — | — |
This tool's schema does not declare which fields are required, nor any default, nor any enumerated value set. The columns above are empty because the door publishes nothing there, not because the answer is "none" — where a field is constrained, the constraint is stated in that field's own description.
Object types
Attempt, Experiment are objects this tool's fields refer to. Each is declared inside the tool's own schema.
Attempt
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
answer | string | — | — | — |
benchmark | string | — | — | — |
correct | boolean | — | — | — |
gold | string | — | — | — |
item | string | — | — | — |
model | string | — | — | — |
response | string | — | — | — |
revision | string | — | — | — |
source | string | — | — | — |
status | string | — | — | — |
ts | integer | — | — | — |
Experiment
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
canonical | boolean | — | — | — |
cost_usd | number | — | — | — |
endpoint | string | — | — | — |
git_branch | string | — | — | — |
git_dirty | boolean | — | — | — |
git_sha | string | — | — | — |
id | string | — | — | — |
kind | string | — | — | — |
lib_versions | any | — | — | — |
meta | any | — | — | — |
metric | string | — | — | — |
n | integer | — | — | — |
n_total | integer | — | — | — |
project | string | — | — | — |
publishable | boolean | — | — | — |
revision | string | — | — | original | corrected | retracted |
status | string | — | — | planning | running | complete | faulted |
subject | string | — | — | — |
task | string | — | — | — |
trainable | boolean | — | — | — |
ts | integer | — | — | — |
value | number | — | — | — |
visibility | string | — | — | — |
Call it
A tools/call carries every argument in one flat object — nothing binds to a path or a query string. Every declared argument is shown, because the door marks none of them required.
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "post_v1_research_experiments",
"arguments": {
"attempts": [
{}
],
"experiments": [
{}
]
}
}
}'Values are placeholders derived from each field's declared type. tools/list needs no credential; tools/call does — called without one the door answers HTTP 200 with a JSON-RPC result whose isError is set and whose text says what was missing. How to get a key →
The operation behind it
| Operation | Route | Product | Summary |
|---|---|---|---|
cloud_post_v1_research_experiments | POST /v1/research/experiments | research | IngestExperiments appends one batch of experiment and attempt versions to the caller org's |
The same capability over plain HTTP is in the research API reference, on https://api.hanzo.ai.
All 834 tools · The door · API reference
Generated from tools/list on https://api.hanzo.ai/v1/mcp — 834 tools captured 2026-08-01 (this build read the vendored copy; the door was unreachable).
How is this guide?