# `CCXT.WS.Subscription.Custom`
[🔗](https://github.com/ZenHive/ccxt_client/blob/main/lib/ccxt/ws/subscription/custom.ex#L1)

Escape hatch for exchanges whose subscribe frames don't fit any named
pattern. The module dispatches on `config[:custom_type]`:

| custom_type        | Exchange            | Shape                                     |
|--------------------|---------------------|-------------------------------------------|
| `"array_format"`   | Upbit               | `[[%{type, codes}, ...]]` — array of maps |
| `"sendTopicAction"`| Deepcoin            | Nested `sendTopicAction` envelope         |
| _(default)_        | — fallback          | `%{"subscribe" => true, "channels" => […]}` |

`subscribe/2` for Upbit returns a `[map()]` (one envelope per channel);
all others return a single `map()`. Callers must pass `config[:custom_type]`
explicitly — no priority-tier exchange wires this pattern in T94 (custom
DEX exchanges like Hyperliquid/Derive/Lighter are deferred).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
