Arbitrage Webhooks (Agent feed)
POST/arbitrage/webhooks

Arbitrage 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

urlstringrequired

Your public https endpoint that will receive POST deliveries.

labelstringoptional

Optional 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 key
402Paid feature — Pro Lite tier or higher required
409Max 5 active webhooks per key (delete one first)