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

# preTransferCheck | Hyperliquid info

> The info endpoint with type: "preTransferCheck" pre-flights a transfer to a destination — sanction status, whether the destination exists, the fee, and transaction history.

<Info>
  You can only use this endpoint on the official Hyperliquid public API. It is not available through Chainstack, as the open-source node implementation does not support it yet. See [Hyperliquid methods](/docs/hyperliquid-methods) for the full availability breakdown.
</Info>

The `info` endpoint with `type: "preTransferCheck"` pre-flights a transfer to a destination address. It returns whether the destination is sanctioned, whether it already exists on Hyperliquid, the fee that would apply, and whether the user has previously transacted.

## Parameters

### Request body

* `type` (string, required) — The request type. Must be `"preTransferCheck"`.
* `user` (string, required) — Destination address in 42-character hexadecimal format.
* `source` (string, required) — Source address in 42-character hexadecimal format.

## Response

Returns a pre-transfer check object:

* `isSanctioned` (boolean) — Whether the destination address is sanctioned.
* `userExists` (boolean) — Whether the destination already exists on Hyperliquid.
* `fee` (string) — The transfer fee that would apply.
* `userHasSentTx` (boolean) — Whether the user has previously sent a transaction.

## Example request

<CodeGroup>
  ```shell Shell theme={null}
  curl -X POST \
    -H "Content-Type: application/json" \
    -d '{"type": "preTransferCheck", "user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568", "source": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568"}' \
    https://api.hyperliquid.xyz/info
  ```

  ```python Python (hyperliquid-python-sdk) theme={null}
  from hyperliquid.info import Info
  from hyperliquid.utils import constants

  info = Info(constants.MAINNET_API_URL, skip_ws=True)

  # The SDK has no dedicated preTransferCheck helper, so post the request directly.
  check = info.post("/info", {
      "type": "preTransferCheck",
      "user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
      "source": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
  })
  print(check)
  ```

  ```typescript TypeScript (@nktkas/hyperliquid) theme={null}
  import { HttpTransport, InfoClient } from "@nktkas/hyperliquid";

  const transport = new HttpTransport();
  const info = new InfoClient({ transport });

  const check = await info.preTransferCheck({
    user: "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
    source: "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
  });
  console.log(check);
  ```
</CodeGroup>

## Example response

```json theme={null}
{
  "isSanctioned": false,
  "userExists": true,
  "fee": "0.0",
  "userHasSentTx": true
}
```

## Use cases

The `info` endpoint with `type: "preTransferCheck"` is useful for:

* Pre-flighting a transfer before submitting it
* Surfacing the applicable fee to the user before sending
* Sanctions screening of a destination address


## OpenAPI

````yaml openapi/hyperliquid_node_api/hypercore_info/info_pre_transfer_check.json post /info
openapi: 3.0.0
info:
  title: Hyperliquid Node API
  version: 1.0.0
  description: This is an API for interacting with Chainstack Hyperliquid node.
servers:
  - url: https://api.hyperliquid.xyz
security: []
paths:
  /info:
    post:
      tags:
        - hyperliquid operations
      summary: info (preTransferCheck)
      operationId: infoPreTransferCheck
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: Request type
                  default: preTransferCheck
                  enum:
                    - preTransferCheck
                user:
                  type: string
                  description: Destination address in 42-character hexadecimal format.
                  default: '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568'
                source:
                  type: string
                  description: Source address in 42-character hexadecimal format.
                  default: '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568'
              required:
                - type
                - user
                - source
      responses:
        '200':
          description: Pre-transfer check result for the destination user.
          content:
            application/json:
              schema:
                type: object
                properties:
                  isSanctioned:
                    type: boolean
                    description: Whether the address is sanctioned.
                  userExists:
                    type: boolean
                    description: >-
                      Whether the destination user already exists on
                      Hyperliquid.
                  fee:
                    type: string
                    description: Transfer fee that would apply.
                  userHasSentTx:
                    type: boolean
                    description: Whether the user has previously sent a transaction.

````