Skip to main content
The artifact tools family contains a single tool — get_artifact — that fetches artifact metadata and a download URI by artifact_id. Artifacts are the durable outputs of runs: every backtest produces an 8-file bundle, and every skill run produces its own artifacts. Each file is content-hashed with SHA-256 so reproducibility can be verified independently.

get_artifact

Fetch artifact metadata and a download URI by artifact_id. The URI is a short-lived, signed URL — it expires after a few minutes. Fetch the content promptly after calling get_artifact.

Arguments

Return value

Example call

Example response

The 8-file backtest artifact bundle

Every backtest_run produces a bundle of exactly 8 files. Together they form a complete, reproducible record of the backtest. The bundle is stored as a group; the artifact_bundle returned by backtest_run points to all 8.

Why 8 files

The bundle is designed so that a third party with no access to Ithaca can reproduce the backtest. Give them the bundle and they have everything: the strategy (in summary.json), the data (in data_manifest.json), the environment (in environment_lock.json), and the expected output (in metrics.json and equity_curve.json).
The split serves three purposes:
  1. Machine readability. The 7 JSON files are structured and parseable. Tools can diff two bundles field-by-field.
  2. Human readability. report.html renders the same information as a styled report with charts — no JSON parsing required.
  3. Selective access. A reviewer can grab just metrics.json and report.html without downloading the full equity curve or position history.

SHA-256 content hashing

Every file in the bundle has a SHA-256 content hash. The hash is computed over the exact bytes stored in the bundle, not a normalized form. This means:
  • Reproducibility check. If you re-run a backtest with the same spec, range, engine version, and data hashes, the output file hashes will match. If they don’t, something changed — and the data_manifest.json and environment_lock.json tell you what.
  • Tamper detection. The hashes are stored on the artifact record in the database, separate from the file storage. If a file is modified in storage, the hash won’t match the record.
  • Bundle integrity. The artifact_bundle.content_hash returned by backtest_run is a hash over the concatenation of all 8 file hashes. This single hash verifies the entire bundle.
When comparing two backtests, start by comparing their artifact_bundle.content_hash values. If they match, the runs are identical — no need to diff the individual files.

Fetching the full bundle

To fetch all 8 files, call get_run first to get the artifacts array, then call get_artifact for each:
The signed URIs returned by get_artifact expire after a few minutes. If you need long-term access, download the content and store it yourself. The content_hash lets you verify that your stored copy hasn’t drifted.