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

# getOnboardingStatus

> What still stands between a trader and their first Ostium trade, with the transaction that clears each step.

`getOnboardingStatus(params?)` reports everything outstanding before a trader can open a position — USDC approval, delegate registration, gasless setup — and hands you the transaction that clears each one, in the order they should be submitted.

It replaces hand-rolling that sequence across three separate transaction builders, and it is mode-aware: a self-submit client is never told to set up gasless delegation.

```ts theme={null}
const status = await client.getOnboardingStatus({ requiredUsd: '100' });

if (status.ready) {
  // nothing outstanding — the trader can open a position
}

for (const step of status.steps) {
  console.log(step.kind, step.description);
  await wallet.sendTransaction(step.tx);   // the trader signs from their own account
}

if (status.needsFunding) {
  // no transaction can fix this — the trader has to fund the account
}
```

## Parameters

| Parameter     | Type     | Default | Description                                                                                                                                           |
| ------------- | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `requiredUsd` | `string` | `"1"`   | Collateral the trader intends to trade with — balance and allowance are checked against it. The default is enough to prove an approval exists at all. |

## Response schema

```ts theme={null}
interface OnboardingStatus {
  ready: boolean;              // nothing outstanding
  needsApproval: boolean;      // USDC allowance below requiredUsd
  needsFunding: boolean;       // USDC balance below requiredUsd — no tx can fix this
  needsDelegate: boolean;      // no delegate registered, or a different one
  needsGaslessSetup: boolean;  // Self + Gasless only — smart account not yet authorised
  steps: Array<{
    kind: 'approveUsdc' | 'setDelegate' | 'setupGaslessDelegation';
    description: string;
    tx: BuiltTxRequest;        // always sent from the trader's own account
  }>;
  allowance: string;           // current USDC allowance to TradingStorage
  usdcBalance: string;
  ethBalance: string;          // needed for gas in self-submit modes
  currentDelegate?: Address;   // undefined when none is set
}
```

`needsFunding` produces no step — there is no transaction that funds an account — but it does keep `ready` false.

Every step's `tx` is sent from the trader's own account. A delegate cannot approve USDC or register itself on the trader's behalf.

## Related

* [approveUsdc](/developer/reference/approve-usdc)
* [setDelegate](/developer/reference/set-delegate)
* [setupGaslessDelegation](/developer/reference/setup-gasless-delegation)
* [Approvals and first trade](/developer/traders/approvals-and-first-trade)
