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

# Isolated Operation Status

<div className="venue-tags" aria-label="Supported venues">
  <span className="venue-tag">Hyperliquid</span>
</div>

Returns durable progress for an assigned HIP-3 leverage or margin operation. This read requires a
signature from the user or an approved API wallet authorized for that user.

## Endpoint

```text theme={null}
POST /info
```

## Request Body

| Parameter | Type | Description |
| - | - | - |
| `type`\* | string | Must be `"isolatedOperationStatus"` |
| `user`\* | string | Canonical lowercase, `0x`-prefixed user address |
| `operationId`\* | string | Nonzero lowercase, `0x`-prefixed 32-byte ID returned by a pending operation |
| `timestamp`\* | number | Positive safe integer Unix-millisecond signing time |
| `chainId`\* | number | Positive safe integer chain ID used in the signing domain |
| `signature`\* | string | 65-byte, `0x`-prefixed EIP-712 signature |

Use the `operationId` from [Update Leverage](/api-reference/exchange-endpoints/update-leverage) or
[Update Isolated Margin](/api-reference/exchange-endpoints/update-isolated-margin). A leverage
selection returned as `applied` has no asynchronous operation to query.

## Signing

Use `buildIsolatedOperationStatusTypedData` with a connected Viem `walletClient`:

```typescript theme={null}
import { buildIsolatedOperationStatusTypedData } from "@notional/common";

const user = "0x1111111111111111111111111111111111111111" as const;
const operationId = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" as const;
const timestamp = Date.now();
const chainId = 42161;
const signature = await walletClient.signTypedData({
  ...buildIsolatedOperationStatusTypedData({ user, operationId, timestamp, chainId }),
  account: walletClient.account!,
});

const request = {
  type: "isolatedOperationStatus",
  user,
  operationId,
  timestamp,
  chainId,
  signature,
};
```

The helper uses the `NotionalSignTransaction` domain, version `1`, the supplied `chainId`, and the
zero address as `verifyingContract`. The primary type is `IsolatedOperationStatus`, containing
`user: address`, `operationId: bytes32`, and `timestamp: uint64`.

This is a separate signing format from `NotionalExchange` actions. There is no exchange nonce.
The timestamp may be at most five minutes old or one minute in the future. Re-sign when polling
beyond that window; the `operationId` stays unchanged.

## Response

<Tabs sync={false}>
  <Tab title="200: Pending">
    ```json theme={null}
    {
      "operationId": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "operation": "margin_update",
      "direction": "add",
      "status": "pending"
    }
    ```
  </Tab>

  <Tab title="200: Completed">
    ```json theme={null}
    {
      "operationId": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "operation": "leverage_update",
      "status": "completed",
      "completedAt": 1785254410000
    }
    ```
  </Tab>

  <Tab title="200: Failed">
    ```json theme={null}
    {
      "operationId": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "operation": "margin_update",
      "direction": "remove",
      "status": "failed",
      "completedAt": 1785254410000,
      "error": {
        "code": "MARGIN_VIOLATION",
        "details": {
          "reason": "margin_required",
          "phase": "margin_update",
          "operationId": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
        }
      }
    }
    ```
  </Tab>
</Tabs>

| Status | Meaning |
| - | - |
| `pending` | The request is waiting for a committed venue attempt |
| `active` | A venue attempt has been committed and may already have been sent |
| `needs_reconciliation` | A terminal result is not yet established; keep checking |
| `completed` | The operation was confirmed |
| `failed` | The operation reached a failed terminal result |

`operation` is `leverage_update` or `margin_update`; `direction` appears only for margin updates.
`completedAt` is a Unix-millisecond observation time and appears only for terminal results. A
failed result additionally has `error.code` and `error.details` with a structured reason and phase.

## Errors

* `400`: malformed address, ID, timestamp, chain ID, or signature format.
* `401`: invalid, stale, future-dated, or unauthorized signature.
* `404`: no matching operation for this user, including settings-only leverage selections.
* `503`: the request history or operation status cannot currently be read reliably.

An operation with `status: "failed"` is still a successful HTTP `200` status lookup. Inspect its
body before updating the client.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.