POST
/arbitrage/webhooksArbitrage Webhooks (Agent feed)
PAID. Push delivery for trading agents: register an https endpoint and StartupHub POSTs it { type:"arbitrage.opened", opportunities:[...] } the instant a new cross-venue arbitrage opens, so your bot reacts with zero polling. Each opportunity carries native venue market ids (Kalshi ticker, Polymarket token, PredictIt contract) for execution routing. Deliveries are HMAC-signed: X-StartupHub-Signature: sha256=HMAC_SHA256(secret, raw_body). GET this path to list your webhooks, DELETE ?id=<id> to remove one. Requires Pro Lite tier or higher; max 5 active per key. The same plan also unlocks native market ids on GET /arbitrage.
POSThttps://www.startuphub.ai/api/v1/arbitrage/webhooks
Request
curl -X POST "https://www.startuphub.ai/api/v1/arbitrage/webhooks" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"url":"https://your-agent.example.com/arb"}'Parameters
urlstringrequiredYour public https endpoint that will receive POST deliveries.
labelstringoptionalOptional name for the webhook (max 80 chars).
Response
json
{
"ok": true,
"webhook": { "id": "…", "url": "https://your-agent.example.com/arb", "active": true },
"secret": "whsec_…",
"note": "Store this secret now — shown only once."
}
// Then, the moment a new arbitrage opens, we POST to your url:
{
"type": "arbitrage.opened",
"count": 1,
"opportunities": [
{
"event": "Will X win the 2026 nomination?",
"is_arbitrage": true,
"roi_pct": 4.2,
"combined_cost": 0.96,
"legs": {
"yes": { "venue": "kalshi", "price": 0.41, "market_id": "KXPRES-…", "url": "…" },
"no": { "venue": "polymarket", "price": 0.55, "market_id": "0x…", "url": "…" }
}
}
]
}Errors
401Missing or invalid API key402Paid feature — Pro Lite tier or higher required409Max 5 active webhooks per key (delete one first)