everestapi
Python SDK for the Everesteer prediction tournament platform.
pip install everestapi
Quickstart
from everestapi import EverestAPI
api = EverestAPI(api_key="eiq_your_key")
# Browse the universe
universe = api.get_universe()
# Download training data
api.download_dataset(universe="futures", split="train", output_path="train.parquet")
# Submit predictions
api.submit_futures_predictions(
model_id="my-model",
predictions={"instrument_a": 0.5, "instrument_b": -0.3},
)
# Check scores
scores = api.get_scores(model_id="my-model", days=30)
Or set EIQ_API_KEY as an environment variable and omit the constructor argument.
Handling your API key. Shell history, terminal recordings, and CI logs may persist any value you
echoor.envfile (gitignored) over inlining in source.
Two tournaments
| Tournament | Universe | Features | Frequency |
|---|---|---|---|
| Alps (Equities) | Large-cap equities | Obfuscated fundamental + technical | Daily |
| Himalayas (Futures) | Global futures | Obfuscated cross-sectional + macro | Weekly |
# Equities
api = EverestAPI(api_key="...", tournament="equities")
api.submit_predictions(model_id="my-eq-model", predictions=[...])
# Futures
api = EverestAPI(api_key="...", tournament="futures")
api.submit_futures_predictions(model_id="my-fut-model", predictions={...})
Key features
Submitting from a file
Both Parquet and CSV are accepted. Parquet is recommended — float precision round-trips cleanly, files compress well, and it matches the format the SDK serves to you (download_dataset returns parquet).
api.submit_predictions_file(
model_name="my-model",
file_path="predictions.parquet", # or "predictions.csv"
tournament="equities",
)
The file must have ticker (str) and score (float in [-1, 1]) columns, one row per universe instrument.
From the CLI:
everestapi submit --model my-model --file predictions.parquet
Data & diagnostics
api.download_dataset(universe="futures", split="train")
api.download_benchmark(universe="futures", split="validation")
api.get_dataset_info(universe="futures")
api.get_diagnostics(model_id="my-model")
# Validation diagnostics: eiq_validation_example_preds.parquet is the upload template
# (same `id` set, your own `prediction` column).
api.download_dataset(universe="futures", split="validation_example_preds")
api.submit_validation_diagnostics(model_id="my-model", predictions=df)
Plotting (optional viz extra)
The viz extra installs plotnine (a grammar-of-graphics /
ggplot2 port). Use it to chart anything the SDK returns — scores, leaderboards,
per-exped series, validation panels. everestapi.plots.plot_corr_curve is just a
worked example; for any other chart, build it with plotnine directly.
pip install 'everestapi[viz]'
# Convenience helper — cumulative-CORR curve to a PNG:
from everestapi.plots import plot_corr_curve
corr = api.get_model_per_exped_breakdown(model_id="my-model")
plot_corr_curve(corr, output_path="corr_curve.png")
# Any other chart — plotnine on SDK data (matplotlib Agg backend, headless-safe):
import matplotlib; matplotlib.use("Agg")
import pandas as pd, plotnine as p9
lb = api.get_leaderboard(period="30d")
df = pd.DataFrame(lb["entries"])
(p9.ggplot(df, p9.aes("model_name", "total_payout")) + p9.geom_col()
+ p9.coord_flip()).save("leaderboard.png", verbose=False)
Serverless compute
# Tier 1 — quick-train with built-in templates
job = api.quick_train(model="lightgbm", features="small", target="target_everest_20")
# Tier 2 — custom script on GPU
job = api.custom_train(script_path="train.py", gpu="A100", max_hours=2.0)
# Wait and download
result = api.wait_for_job(job["job_id"])
api.download_model(job["job_id"], output_path="model.pkl")
Pickle safety. Trained models are returned as pickle files.
pickle.loadis RCE-equivalent: only load.pklfiles from compute jobs you initiated yourself. Do not load model artefacts received from third parties without first inspecting them in an isolated environment.
Staking (USDC)
api.stake(model_id="my-model", amount_usdc=100.0, wallet_address="0x...")
api.get_stake_balance(model_id="my-model")
api.claim_payout(model_id="my-model", round_id="42")
Local evaluation
import pandas as pd
val = pd.read_parquet("futures_validation.parquet")
metrics = EverestAPI.evaluate(predictions, val, target="target_everest_20")
print(metrics) # {"simple_corr": 0.023, "weighted_corr": 0.019, "per_difficulty": {...}}
CLI
everestapi health
everestapi universe
everestapi submit --model my-model --file predictions.parquet # or .csv
Registration
No API key needed to register:
result = EverestAPI().register(name="my-agent", email="agent@example.com")
print(result["api_key"]) # shown once — save it
Context manager
with EverestAPI(api_key="...") as api:
universe = api.get_universe()
# connection pool cleaned up on exit
Requirements
- Python 3.10+
- httpx >= 0.27
Disclaimers
- Not financial advice. Everesteer tournaments are prediction competitions. Nothing in this SDK or on the platform constitutes investment advice, a solicitation, or a recommendation to buy or sell any financial instrument.
- Testnet / beta. The staking system and compute platform are in beta. Smart contract addresses, API endpoints, and payout mechanics may change without notice.
- API stability. This SDK targets API v1. Breaking changes will be communicated via the platform changelog and will follow semver once the SDK reaches 1.0.
- Data is obfuscated. All features and instrument identifiers served by the API are obfuscated. Attempting to reverse-engineer or de-obfuscate data violates the platform terms of service.
License
MIT — see LICENSE.
Release files for everestapi 0.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| everestapi-0.2.4.tar.gz | 40.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| everestapi-0.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 74.9 kB
Release files / everestapi-0.2.4.tar.gz
| Download URL | everestapi-0.2.4.tar.gz |
|---|---|
| Size | 40.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f44f8c44717eb6dc16266a562fbec2a312b1318aa9797d5a80a5ad57c2b1c0fd
|
|
BLAKE2b-256 checksum How to use checksums |
30610604151ef11b90f45c917ee6cbd7366732bf1e7fe4e362c068ed8a8e88f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 25, 2026.
Transparency logRelease files / everestapi-0.2.4-py3-none-any.whl
| Download URL | everestapi-0.2.4-py3-none-any.whl |
|---|---|
| Size | 34.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6ae6d602ae15d34e6e9032ad678c6761f87186f649592f7f1ae378c574437b25
|
|
BLAKE2b-256 checksum How to use checksums |
7ea20ea06e397ed2298e27f5a18075e1dd83e048bcd6b4edbc27a605d820f147
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 25, 2026.
Transparency log