> ## Documentation Index
> Fetch the complete documentation index at: https://public-perps-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Providers

> Discover available DEX providers, their capabilities, markets, and actions

## getProviders

Returns all available perpetual DEX platforms, including their `setup` and `options` descriptors, trading `actions`, and `categories`.

```typescript theme={null}
import { createPerpsClient, getProviders } from '@lifi/perps-sdk';

const client = createPerpsClient({ integrator: 'my-app', apiKey: 'your-api-key' });
const { providers } = await getProviders(client);

for (const provider of providers.filter((p) => p.active)) {
  console.log(provider.key, provider.name);
  console.log('  categories:', provider.categories.map((c) => c.id));
  console.log('  actions:', provider.actions.map((a) => a.type));
}
// hyperliquid Hyperliquid
//   categories: ['hyperliquid', 'xyz', 'flx', 'spot', ...]
//   actions: ['placeOrder', 'cancelOrder', 'modifyOrder', ...]
```

### Parameters

| Parameter | Type                | Required | Description                                       |
| --------- | ------------------- | -------- | ------------------------------------------------- |
| `client`  | `PerpsSDKClient`    | Yes      | SDK client from `createPerpsClient()`             |
| `options` | `SDKRequestOptions` | No       | Request options (e.g., `signal` for cancellation) |

### Returns

`ProvidersResponse` — `{ providers: Provider[] }`:

Each `Provider`:

| Field                    | Type                 | Description                                                                                                                                                                             |
| ------------------------ | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `key`                    | `string`             | Unique provider identifier (used in query params)                                                                                                                                       |
| `name`                   | `string`             | Display name                                                                                                                                                                            |
| `logoURI`                | `string`             | URL to provider logo image                                                                                                                                                              |
| `signingMethod`          | `SigningMethod`      | Default signing method for the provider — see [SigningMethod](#signingmethod) below.                                                                                                    |
| `active`                 | `boolean`            | When `false`, the provider is announced but not yet selectable in clients. Filter on this before rendering provider pickers.                                                            |
| `setup`                  | `ProviderAction[]`   | Mandatory account-setup descriptors with their allowed signers and UI metadata. The user MUST satisfy every entry before trading. An empty array means the provider has no setup gates. |
| `options`                | `ProviderAction[]`   | Optional post-setup descriptors the user MAY tune (e.g. `accountMode`, `accountType`). Never gate trading. An empty array is valid.                                                     |
| `actions`                | `ProviderAction[]`   | Trading/operational actions with their allowed signers                                                                                                                                  |
| `categories`             | `ProviderCategory[]` | Trading categories within the provider (e.g., perps, spot, xyz)                                                                                                                         |
| `wsUrl`                  | `string?`            | WebSocket endpoint for streaming (see [Streaming](/sdk/streaming))                                                                                                                      |
| `funding`                | `ProviderFunding?`   | Provider-wide funding cadence in seconds: `{ ratePeriodSeconds, payoutCadenceSeconds }`. Absent when the provider does not publish a global cadence.                                    |
| `minDepositUsd`          | `number?`            | Minimum deposit amount in USD that the provider's deposit path will accept. Absent means no minimum is advertised.                                                                      |
| `minOrderValueUsd`       | `number?`            | Minimum order notional value in USD. Absent means no minimum is advertised.                                                                                                             |
| `minReduceOrderValueUsd` | `number?`            | Minimum order notional value in USD for reduce-only orders, when the provider applies a lower floor than `minOrderValueUsd`. Absent means reduce-only orders use the same floor.        |
| `chainId`                | `number?`            | Settlement chain id for the provider's deposit/withdrawal path. Absent when not applicable.                                                                                             |
| `minWithdrawalUsd`       | `number?`            | Minimum withdrawal amount in USD the provider will accept. Absent means no minimum is advertised.                                                                                       |
| `depositFeeUsd`          | `number?`            | Flat deposit fee in USD, when the provider charges one.                                                                                                                                 |
| `withdrawalFeeUsd`       | `number?`            | Flat withdrawal fee in USD, when the provider charges one.                                                                                                                              |
| `supportedIntervals`     | `OhlcvInterval[]`    | OHLCV candle intervals the provider supports (e.g. `1m`, `1h`, `1d`).                                                                                                                   |
| `upVotes`                | `number?`            | Community up-vote count for the provider.                                                                                                                                               |
| `downVotes`              | `number?`            | Community down-vote count for the provider.                                                                                                                                             |

Each `ProviderCategory`:

| Field         | Type            | Description                                                                                     |
| ------------- | --------------- | ----------------------------------------------------------------------------------------------- |
| `id`          | `string`        | Category identifier (referenced as `categoryId` in `MarketRef`)                                 |
| `logoURI`     | `string?`       | URL to the category logo                                                                        |
| `quoteAsset`  | `Asset \| null` | Quote asset for this category (`null` for the spot category, which has no single fixed quote)   |
| `tradeNotice` | `TradeNotice?`  | Optional advisory (`{ level: 'info' \| 'warn', message }`) shown against the category's markets |

Each `ProviderAction`:

| Field           | Type            | Description                                                                                                                                                                                                                                                    |
| --------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`          | `ActionType`    | Action type string                                                                                                                                                                                                                                             |
| `signers`       | `PerpsSigner[]` | Allowed signers — see [PerpsSigner](#perpssigner) below                                                                                                                                                                                                        |
| `signingMethod` | `SigningMethod` | How the SDK must sign this action — see [SigningMethod](#signingmethod) below. Most actions match the provider's dominant pattern (Hyperliquid: `eip712`, Lighter: `wasmBlob`), but on-chain bridge actions like `deposit` are `evmTx` regardless of provider. |

The same `ProviderAction` shape backs `setup`, `options`, and `actions` — which array it sits in carries the categorisation. Entries in `setup` and `options` additionally populate the presentation/ordering fields the widget renders in its setup and options modals:

| Field         | Type       | Description                                                                                                                                                                                                                                      |
| ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `title`       | `string?`  | Short user-facing label rendered in the modal                                                                                                                                                                                                    |
| `description` | `string?`  | One-paragraph explanation rendered under the title                                                                                                                                                                                               |
| `params`      | `Param[]?` | Input descriptors the widget collects before dispatching. Each `Param` describes one input; its `values` array enumerates the legal `value` strings the action accepts (the source of truth for things like the `mode` values on `accountMode`). |
| `sequence`    | `number?`  | Ascending order in which the user satisfies setup steps (lower runs first)                                                                                                                                                                       |

### PerpsSigner

Identifies which key signs a given action. Surfaced per-action in `ProviderAction.signers`.

| Value  | Description                                                                                                                                                                                                                   |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `USER` | A user-owned authorization path. Usually this invokes the wallet; client-only `session` setup steps can instead use the provider session established by the user's SIWE login.                                                |
| `SDK`  | The provider plugin completes the step internally. Depending on the venue this can use an approved agent key, a Lighter native signing key, an HMAC key, or a provider session. Consumers do not select a credential subtype. |

### SigningMethod

Identifies how an action is authorized. The SDK uses this to dispatch to the provider-owned signing path. The wire-level values are camelCase strings exposed by the `SigningMethod` enum.

| Wire value | `SigningMethod` key | Description                                                                               |
| ---------- | ------------------- | ----------------------------------------------------------------------------------------- |
| `eip712`   | `EIP712`            | EIP-712 typed data + ECDSA signature                                                      |
| `wasmBlob` | `WASM_BLOB`         | Opaque provider transaction blob signed through a WASM signer                             |
| `evmTx`    | `EVM_TX`            | Plain EVM transaction                                                                     |
| `hmac`     | `HMAC`              | Per-request HMAC generated SDK-side from a client-held API key                            |
| `siwe`     | `SIWE`              | ERC-4361 login challenge signed with `personal_sign`                                      |
| `session`  | `SESSION`           | Client-only venue request authorized by a provider session; no `executeAction` submission |

<Info>
  Use `provider.setup` to dynamically build the setup UI and `provider.options` for post-setup tuning controls. See [Hyperliquid / Setup](/providers/hyperliquid/setup) for the full flow.
</Info>

## Deposit Flow Discovery

`PerpsClient.getDepositFlow({ provider, address })` asks the registered provider plugin how that account must be funded. It returns `undefined` when the plugin declares no deposit flow, otherwise one of three discriminated variants:

| `kind`                 | Fields                                                                  | Meaning                                                                                                            |
| ---------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `lifiSwap`             | `destination`, optional `toAddress`                                     | Route through LI.FI into the exact collateral asset; `toAddress` is present for a provider-provisioned destination |
| `firstDepositPipeline` | `chainId`, `gasAsset`, `collateral`, `bridgeAction: ActionType.DEPOSIT` | Seed gas and collateral on the venue chain, then execute the deposit action that opens the account                 |
| `setupRequired`        | `setup: ActionType[]`                                                   | Complete the listed setup actions in order before the provider can name a deposit destination                      |

```typescript theme={null}
const flow = await perps.getDepositFlow({
  provider: 'lighter-rh',
  address: userAddress,
});

if (flow?.kind === 'firstDepositPipeline') {
  console.log(flow.chainId, flow.gasAsset, flow.collateral);
}
```

A `DeclaredDepositAsset` is identified by `{ chainId, address, decimals }`. Do not infer token identity from its symbol.

***

**API Reference:** [GET /providers](/api-reference/market-data#get-providers)
