Exchange Integration

Gate CrossEx + TradingView Webhook: Missing Middle

2026-09-08·8 min read

You've probably typed gate crossex api tradingview webhook into Google — autocomplete finishes the sentence for you. But the top eight hits are either Gate's own "What is CrossEx" page or scraped rewrites of older API tutorials. Nobody answers the one thing you actually want to know: how does my TradingView alert become a single webhook that fans out to seven exchanges?

Bottom line first
CrossEx is Gate's routing layer — you POST to /crossex/orders and Gate forwards to Binance, OKX, Bybit, Kraken, Hyperliquid, Deribit, or Gate itself. But it does not accept a raw TradingView webhook payload — TradingView sends its own JSON, Gate expects its own API shape, and the piece that bridges the two is what nobody warns you about.
7
Downstream exchanges CrossEx supports
1 key
Gate API keys needed to reach all seven
0
Official TradingView-to-CrossEx adapters

What CrossEx Actually Is, and Which 7 Venues One Key Reaches

Names first. API — the machine-readable interface an application exposes so your program can call it without clicking a web UI. API key — the credential string your program uses to authenticate. It is password-grade; if it leaks, someone else can place orders as you.

Gate's v4 API docs describe CrossEx as: "CrossEx is a unified multi-venue exchange surface: Binance, OKX, Gate, Bybit, Kraken, Hyperliquid, and Deribit tie into one account shell for transfers, market data subscriptions, fills, positions, and account maintenance."

Break that down and CrossEx does three things: one account shell (positions and fills come out of the same API), one order endpoint (POST /crossex/orders where you name the venue and Gate forwards), and one market data layer (/crossex/market/tickers and /crossex/market/funding_info).

Venueexchange_type valueNote
BinanceBINANCELargest global exchange
OKXOKXBoth spot and perp
BybitBYBITMostly perp
KrakenKRAKENUS and EU userbase
Gate itselfGATENative venue in the same account
HyperliquidHYPERLIQUIDOn-chain perp DEX
DeribitDERIBITOptions-focused

Source: Gate v4 API docs, CrossEx page, exchange_type field (verified Aug 2026). The notes are my one-line categorisation, not Gate's.

Note the list does not include Bitget or BingX. CrossEx is not "every exchange" — it is the seven Gate has picked. You still need each of their native APIs to reach those two.

Wiring a TradingView Webhook Through — the Piece Nobody Warns You About

Webhook — the mechanism where TradingView fires an HTTP POST at a URL you specify when an alert triggers. The payload is whatever JSON or plain text you wrote into the alert message; there is no standard format.

Gate's CrossEx POST /crossex/orders expects Gate's own shape — symbol (venue, business and pair joined by underscores, e.g. BYBIT_SPOT_BTC_USDT), side (uppercase BUY / SELL), type (uppercase LIMIT / MARKET), qty, price, time_in_force. The two shapes don't match, and that is the piece nobody warns you about.

1
Do you plan to point TradingView directly at gate.com/api/v4/crossex/orders?
YesGate will reject it — the alert JSON carries no Gate signature and doesn't match Gate's field names. This path doesn't work.
NoYou need a relay in the middle: it takes the TradingView payload, translates it into a CrossEx order request, and signs it. The next two sections cover two ways to build one.

That is why "gate crossex api tradingview webhook" turns up no direct answer on Google: the middle part is something you assemble, and Gate's docs don't do it for you. The companion piece on TradingView webhook end to end covers the webhook side of the wire.

What the Last Three Changelog Entries Added

I pulled everything CrossEx-related from the last month of changelog and dropped pure typo fixes.

VersionDateChange
v4.106.1152026-08-03Expanded CrossEx order error docs; split state=FAIL (CrossEx validation failure) from state=REJECT (downstream exchange rejection); added the common rejection reasons
v4.106.1102026-07-28Added GET /crossex/market/tickers and GET /crossex/market/funding_info — funding rates that used to need one call per venue can now be pulled in a single shot
v4.106.1092026-07-22Added RPI to the supported time_in_force values on POST /crossex/orders; added spot_rpi_maker_fee and future_rpi_maker_fee to the GET /crossex/fee response

Source: Gate v4 API changelog (verified 16 Aug 2026). Read the live page at gate.com/docs/developers/apiv4/en — it has had multiple additions inside a week.

Why look at this now, not three months ago
The three entries only make sense together. The market data endpoints mean you no longer need seven separate WebSockets for funding info. The RPI TIF pulls Gate's own spot maker-fee tier into CrossEx orders. The error taxonomy nails down what "failed" means on the asynchronous order path. Three months ago wiring CrossEx up was cobbling; now it is the "docs finally cover it" phase. That is my read after diffing three months of changelog, not something Gate spelled out in one line.

Approach One: Write a Thin Relay Yourself

The most direct path is to stand up a Cloudflare Worker or a small FastAPI service that receives the TradingView webhook, translates it into a CrossEx order request, signs it and sends it. The skeleton looks like this:

text
# Incoming: TradingView alert JSON
        {
          "secret": "your-webhook-token",
          "symbol": "BTC-USDT",
          "side": "buy",
          "qty": 0.001,
          "venue": "BYBIT"
        }

        # Outgoing: CrossEx order request
        POST /api/v4/crossex/orders
        {
          "symbol": "BYBIT_SPOT_BTC_USDT",
          "side": "BUY",
          "type": "MARKET",
          "qty": "0.001",
          "time_in_force": "GTC"
        }
Sign on the relay side, not inside the alert message
The TradingView alert message is a plain string — stuff your Gate API secret or a pre-computed signature in there and you have written it into your Pine Script, onto TradingView's servers, and back out every time the alert fires. The signing algorithm belongs in your relay, fed from environment variables. Only business fields go into the alert message.

The upside of your own relay is you own the order path end to end: whether to suppress repeated triggers on the same bar, whether to retry on failure, where the logs land. The downside is you have to run that service — uptime, key rotation, CrossEx error-code handling all fall on you.

Approach Two: A Third-Party Multi-Exchange Router — but Check Whether It Actually Uses CrossEx

Off-the-shelf routers between TradingView and multiple exchanges exist — PineConnector, 3Commas, our own TVSBot all sit in this space. The differences look like this.

Self-hosted relay via CrossExThird-party router (native APIs)
Time to first orderA few days to a weekReady right after sign-up
API keys required1 CrossEx keyOne per exchange
Exchanges supportedGate's 7Depends on vendor, usually 6-10
Who owns the routing logicYour own relayThe vendor
Who fixes bugsYouThe vendor — subject to their SLA

These two aren't optimising the same thing — it isn't 'which is better', it is 'whose execution do you trust'.

One thing to be straight about: our TVSBot included, none of these third-party routers actually go through Gate's CrossEx endpoint — they place orders through each exchange's native API. So the "one key to seven" ergonomics are only there if you take the CrossEx path yourself; go through a third-party router and you are still holding six keys, you just don't have to run the relay.

The RPI TIF Value: Gate Documents the Acronym, Not the Behaviour

TIF (time in force) — how long an order stays live. The common values are GTC (rests until filled or cancelled), IOC (cancel any unfilled remainder immediately), FOK (fill in full or cancel).

v4.106.109 added RPI to the supported time_in_force values on POST /crossex/orders. Where the field is defined, the docs expand it as "RPI: Retail Price Improvement", listed alongside GTC / IOC / FOK / POC. The acronym is documented, but exactly how the order behaves — and how it differs from a plain limit maker — isn't spelled out anywhere in the docs.

How to handle RPI in practice
Default time_in_force to GTC in your relay — that is the value CrossEx has supported all along, with well-defined behaviour. Test RPI on small size before turning it on for real orders: the docs only added their error handling in v4.106.115, which tells you the edges of this path are still being filled in. Any new TIF, any new order type, deserves a dry-run or minimum-notional test before you scale it up.

An Edge Case Nobody Warns You About: CrossEx Order State Has Two Kinds of Failure

v4.106.115 split CrossEx failures into two layers.

state valueWho rejected itCommon cause
FAILGate CrossEx itselfBad parameters (wrong field name, wrong enum value), signature error, CrossEx-side maintenance
REJECTDownstream exchangeThe downstream's min order size, price filter, insufficient balance, reduce-only with no position

Source: Gate v4 API v4.106.115 (2026-08-03) error docs (verified Aug 2026). Both states appear in the state field of the order response.

Why the split matters — the debugging path is different. FAIL means your relay is what to fix; REJECT means your model of that particular exchange is what to fix (go look at its min notional, check its price filter). CrossEx used to give you a single opaque error field, and "order failed" was all you had to work with. Now you can tell them apart, but your relay has to log the two states separately, not just print the error message — otherwise you won't be able to walk it back once size scales up.

The failure taxonomy is close to what shows up in cross-exchange arbitrage, just at a different layer: that piece is about the opportunity disappearing; this one is about the order itself getting turned away.

Honest Admission: I Haven't Tested How CrossEx Access Is Provisioned

Gate's v4 API docs don't spell out whether CrossEx needs to be enabled separately, or whether it is API-only — they just link a CrossEx help-desk address at the bottom of the CrossEx page. I haven't run through the full application flow, and I haven't checked whether a non-API user can manage a CrossEx position from the web UI. Everything above assumes you already hold a key that can hit /crossex/orders. If you are stuck at provisioning, that is outside what this piece covers.

Frequently Asked Questions

Does CrossEx support Bitget or BingX?
As of Aug 2026, Gate's exchange_type only lists BINANCE / OKX / GATE / BYBIT / KRAKEN / HYPERLIQUID / DERIBIT — seven venues. Bitget and BingX aren't in it, and you still need their native APIs for those two.
Can a TradingView alert place a CrossEx order directly?
No. TradingView will only POST to a URL you specify — it can't compute Gate's API signature and doesn't know CrossEx's field names. A relay in the middle is mandatory, whether you write it yourself or use an existing third-party router.
Which has lower latency, CrossEx or direct connections to all seven exchanges?
Gate hasn't published CrossEx latency figures relative to direct connections. Structurally, CrossEx adds one hop (your request lands at Gate, Gate then forwards to the target). Real latency also depends on Gate's region, your relay's region and the target exchange itself. We haven't tested it, so no conclusion.
Is cross-venue P&L netting a CrossEx feature?
I can't find any documentation for automatic cross-venue P&L netting — only cross-exchange fund transfers (POST /crossex/transfers) and quote conversion (POST /crossex/convert/quote). If you need netting, ask the CrossEx help desk directly.
I'm already on TVSBot or PineConnector — should I switch to CrossEx?
It isn't either/or. CrossEx saves the "one key managing many exchanges" overhead; a third-party router saves the "running your own relay" overhead. They can co-exist — route Gate, Kraken and Hyperliquid via CrossEx while keeping Binance, OKX and Bybit on your existing router, for instance, depending on which bottleneck is more expensive to you.

Get started

Ready to ship what you just learned?

Route TradingView signals to six exchanges — your own API keys, dry-run first, per-venue native APIs rather than CrossEx. If you want to run CrossEx alongside, the fifth section covers how the two combine.

Start Free