Bot Platform Distribution
TradeOS can export gated signal intents to external bot platforms through the
paid signal-access delivery-session boundary.
The first platform renderers are:
| Platform | Delivery shape | Default mode |
|---|---|---|
| 3Commas | Signal Bot custom webhook JSON | dry-run |
| Cryptohopper | Marketplace seller/signal API request | dry-run |
These adapters are not part of the internal execution path. They send only a sanitized signal intent after TradeOS has already indexed a premium-eligible signal. They do not send account-specific sizing, leverage, wallet control, custody, or personalized execution advice.
Signal Intent
Every platform request starts from the same internal contract:
{
"schema_version": "tradeos_signal_intent.v1",
"signal_id": "sig_123",
"symbol": "BTCUSDT",
"side": "long",
"action": "enter_long",
"confidence": 0.77,
"score": 0.84,
"risk_state": "gated",
"generated_at": "2026-06-11T14:00:00+00:00",
"expires_at": "2026-06-11T16:00:00+00:00",
"source_sku": "tradeos-fusion-signals-api",
"evidence_url": "https://tradeos.tech/signals/sig_123",
"dedup_key": "sha256...",
"no_sizing_by_default": true,
"delivery_channel": "webhook:3commas"
}
The platform payload is rendered from this intent. Internal fields such as
size_pct, leverage, policy state, and wallet/account identifiers are omitted.
3Commas
Store 3Commas secrets in tradeos-main/.env:
THREECOMMAS_SIGNAL_SECRET=...
THREECOMMAS_BOT_UUID=...
Create a delivery session with delivery_platform=3commas.
{
"session_kind": "webhook",
"funding_source": "plan",
"filters": {
"delivery_platform": "3commas",
"symbols": ["BTCUSDT", "ETHUSDT"],
"min_fusion_score": 0.75,
"platform_config": {
"secret_env": "THREECOMMAS_SIGNAL_SECRET",
"bot_uuid_env": "THREECOMMAS_BOT_UUID",
"tv_exchange": "BINANCE",
"instrument_suffix": "",
"allowed_sides": ["long"],
"dry_run": true
}
},
"expires_in_minutes": 120,
"concurrency_limit": 1
}
Set platform_config.dry_run=false only after the account, bot UUID, signal
secret, symbol mapping, side allowlist, and 3Commas bot settings are verified.
For a spot bot, set allowed_sides=["long"]. Use ["long", "short"] only for
a futures bot that is intentionally configured to short.
Optional order sizing can be configured in platform_config.order, but it is
off by default. The preferred first release leaves amount and risk settings on
the buyer's 3Commas bot.
Inspect dry-run payloads with:
GET /v1/access/sessions/{session_id}/events
Cryptohopper
Store Cryptohopper secrets in tradeos-main/.env:
CRYPTOHOPPER_API_KEY=...
CRYPTOHOPPER_API_SECRET=...
CRYPTOHOPPER_SIGNAL_ID=...
Create a delivery session with delivery_platform=cryptohopper.
{
"session_kind": "webhook",
"funding_source": "plan",
"target_url": "https://www.cryptohopper.com/testsignal.php",
"filters": {
"delivery_platform": "cryptohopper",
"symbols": ["BTCUSDT", "ETHUSDT"],
"min_fusion_score": 0.75,
"platform_config": {
"api_key_env": "CRYPTOHOPPER_API_KEY",
"api_secret_env": "CRYPTOHOPPER_API_SECRET",
"signal_id_env": "CRYPTOHOPPER_SIGNAL_ID",
"exchange": "binance",
"allowed_sides": ["long"],
"symbol_map": {
"BTCUSDT": "BTC/USDT",
"ETHUSDT": "ETH/USDT"
},
"dry_run": true
}
},
"expires_in_minutes": 120,
"concurrency_limit": 1
}
Use the Cryptohopper test endpoint first. Move to the live signal endpoint only after seller/signaler access and marketplace rules are confirmed.
Operating Rules
- Keep
dry_run=trueuntil an operator reviews the rendered request. - Store platform secrets in environment variables, not directly in session filters.
- Keep
min_fusion_scoreand symbol allowlists narrow for the first rollout. - Treat platform approval and marketplace listing as manual partner steps.
- Do not publish raw active-signal unlocks through these adapters.
- Do not enable sizing or leverage by default.