Skip to main content

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:

PlatformDelivery shapeDefault mode
3CommasSignal Bot custom webhook JSONdry-run
CryptohopperMarketplace seller/signal API requestdry-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=true until an operator reviews the rendered request.
  • Store platform secrets in environment variables, not directly in session filters.
  • Keep min_fusion_score and 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.