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

# wallet_getCallsStatus

> Get the status of a call batch sent via wallet_sendCalls

export const Button = ({children, disabled, variant = "primary", size = "medium", iconName, roundedFull = false, className = '', fullWidth = false, onClick = undefined}) => {
  const variantStyles = {
    primary: 'bg-blue text-black border border-blue hover:bg-blue-80 active:bg-[#06318E] dark:text-white',
    secondary: 'bg-white border border-white text-palette-foreground hover:bg-zinc-15 active:bg-zinc-30',
    outlined: 'bg-transparent text-white border border-white hover:bg-white hover:text-black active:bg-[#E3E7E9]'
  };
  const sizeStyles = {
    medium: 'text-md px-4 py-2 gap-3',
    large: 'text-lg px-6 py-4 gap-5'
  };
  const sizeIconRatio = {
    medium: '0.75rem',
    large: '1rem'
  };
  const classes = ['text-md px-4 py-2 whitespace-nowrap', 'flex items-center justify-center', 'disabled:opacity-40 disabled:pointer-events-none', 'transition-all', variantStyles[variant], sizeStyles[size], roundedFull ? 'rounded-full' : 'rounded-lg', fullWidth ? 'w-full' : 'w-auto', className];
  const buttonClasses = classes.filter(Boolean).join(' ');
  const iconSize = sizeIconRatio[size];
  return <button type="button" disabled={disabled} className={buttonClasses} onClick={onClick}>
      <span>{children}</span>
      {iconName && <Icon name={iconName} width={iconSize} height={iconSize} color="currentColor" />}
    </button>;
};

export const BaseBanner = ({content = null, id, dismissable = true}) => {
  const LOCAL_STORAGE_KEY_PREFIX = 'cb-docs-banner';
  const [isVisible, setIsVisible] = useState(false);
  const onDismiss = () => {
    localStorage.setItem(`${LOCAL_STORAGE_KEY_PREFIX}-${id}`, 'false');
    setIsVisible(false);
  };
  useEffect(() => {
    const storedValue = localStorage.getItem(`${LOCAL_STORAGE_KEY_PREFIX}-${id}`);
    setIsVisible(storedValue !== 'false');
  }, []);
  if (!isVisible) {
    return null;
  }
  return <div className="fixed bottom-0 left-0 right-0 bg-white py-8 px-4 lg:px-12 z-50 text-black dark:bg-black dark:text-white border-t dark:border-gray-95">
      <div className="flex items-center max-w-8xl mx-auto">
        {typeof content === 'function' ? content({
    onDismiss
  }) : content}
        {dismissable && <button onClick={onDismiss} className="flex-shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors" aria-label="Dismiss banner">
          ✕
        </button>}
      </div>
    </div>;
};

Defined in [EIP-5792](https://eips.ethereum.org/EIPS/eip-5792)

<Info>
  Returns the status of a call batch that was sent via `wallet_sendCalls`. This method allows applications to track the execution status and retrieve transaction receipts for batch operations.
</Info>

## Parameters

<ParamField body="callsId" type="string" required>
  The call bundle identifier returned by a previous `wallet_sendCalls` request.
</ParamField>

## Returns

<ResponseField name="result" type="object">
  Status information for the call batch.

  <Expandable title="CallsStatus properties">
    <ResponseField name="version" type="string">
      The version of the API being used. Currently "1.0".
    </ResponseField>

    <ResponseField name="chainId" type="string">
      The chain ID in hexadecimal format.
    </ResponseField>

    <ResponseField name="id" type="string">
      The call bundle identifier.
    </ResponseField>

    <ResponseField name="status" type="number">
      Status code indicating the current state of the batch:

      * **1xx (Pending)**: 100 = Batch received but not completed onchain
      * **2xx (Confirmed)**: 200 = Batch included onchain without reverts
      * **4xx (Offchain failures)**: 400 = Batch failed and wallet will not retry
      * **5xx (Chain failures)**: 500 = Batch reverted completely
      * **6xx (Partial failures)**: 600 = Batch reverted partially
    </ResponseField>

    <ResponseField name="atomic" type="boolean">
      Indicates whether the wallet executed calls atomically. If `true`, all calls were executed in a single transaction. If `false`, calls were executed in multiple transactions.
    </ResponseField>

    <ResponseField name="receipts" type="Receipt[]">
      Transaction receipts for the call batch. Structure depends on the `atomic` field:

      * If `atomic` is `true`: Single receipt or array of receipts for the batch transaction
      * If `atomic` is `false`: Array of receipts for all transactions containing batch calls

      <Expandable title="Receipt properties">
        <ResponseField name="logs" type="Log[]">
          The logs generated by the calls. For smart contract wallets, only includes logs relevant to the specific calls.
        </ResponseField>

        <ResponseField name="status" type="'0x1' | '0x0'">
          Transaction status: `0x1` for success, `0x0` for failure.
        </ResponseField>

        <ResponseField name="blockHash" type="string">
          Hash of the block containing these calls.
        </ResponseField>

        <ResponseField name="blockNumber" type="string">
          Block number containing these calls (hex format).
        </ResponseField>

        <ResponseField name="gasUsed" type="string">
          The amount of gas used by these calls (hex format).
        </ResponseField>

        <ResponseField name="transactionHash" type="string">
          Hash of the transaction containing these calls.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="capabilities" type="object">
      Optional capability-specific metadata.
    </ResponseField>
  </Expandable>
</ResponseField>

## Example Usage

<RequestExample>
  ```json Request theme={null}
  {
    "id": 1,
    "jsonrpc": "2.0",
    "method": "wallet_getCallsStatus",
    "params": ["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"]
  }
  ```

  ```typescript SDK Usage theme={null}
  import { createBaseAccountSDK } from '@base-org/account';

  const provider = createBaseAccountSDK().getProvider();

  // Get status of a batch sent via wallet_sendCalls
  const callsId = "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"; 

  const status = await provider.request({
    method: 'wallet_getCallsStatus',
    params: [callsId]
  });

  console.log('Batch status:', status.status);
  console.log('Atomic execution:', status.atomic);
  console.log('Receipts:', status.receipts);
  ```
</RequestExample>

<ResponseExample>
  ```json Successful Batch (Atomic) theme={null}
  {
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
      "version": "1.0",
      "chainId": "0x2105",
      "id": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
      "status": 200,
      "atomic": true,
      "receipts": [
        {
          "logs": [
            {
              "address": "0xa922b54716264130634d6ff183747a8ead91a40b",
              "topics": ["0x5a2a90727cc9d000dd060b1132a5c977c9702bb3a52afe360c9c22f0e9451a68"],
              "data": "0xabcd"
            }
          ],
          "status": "0x1",
          "blockHash": "0xf19bbafd9fd0124ec110b848e8de4ab4f62bf60c189524e54213285e7f540d4a",
          "blockNumber": "0xabcd",
          "gasUsed": "0xdef",
          "transactionHash": "0x9b7bb827c2e5e3c1a0a44dc53e573aa0b3af3bd1f9f5ed03071b100bb039eaff"
        }
      ]
    }
  }
  ```

  ```json Pending Batch theme={null}
  {
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
      "version": "1.0",
      "chainId": "0x2105",
      "id": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
      "status": 100,
      "atomic": true,
      "receipts": []
    }
  }
  ```

  ```json Failed Batch theme={null}
  {
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
      "version": "1.0",
      "chainId": "0x2105",
      "id": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
      "status": 500,
      "atomic": true,
      "receipts": [
        {
          "logs": [],
          "status": "0x0",
          "blockHash": "0xf19bbafd9fd0124ec110b848e8de4ab4f62bf60c189524e54213285e7f540d4a",
          "blockNumber": "0xabcd",
          "gasUsed": "0xabc",
          "transactionHash": "0x9b7bb827c2e5e3c1a0a44dc53e573aa0b3af3bd1f9f5ed03071b100bb039eaff"
        }
      ]
    }
  }
  ```
</ResponseExample>

## Status Code Reference

| Code | Category       | Meaning                                               |
| ---- | -------------- | ----------------------------------------------------- |
| 100  | Pending        | Batch received but not completed onchain              |
| 200  | Success        | Batch included onchain without reverts                |
| 400  | Offchain Error | Batch failed, wallet will not retry                   |
| 500  | Chain Error    | Batch reverted completely                             |
| 600  | Partial Error  | Batch reverted partially, some changes may be onchain |

## Error Handling

| Code   | Message              | Description                                   |
| ------ | -------------------- | --------------------------------------------- |
| -32602 | Invalid params       | Invalid call bundle identifier                |
| 4100   | Method not supported | Wallet doesn't support wallet\_getCallsStatus |
| 4200   | Calls not found      | No batch found with the specified identifier  |

## Usage with wallet\_sendCalls

This method is designed to work with batches sent via `wallet_sendCalls`:

```typescript theme={null}
// Send a batch of calls
const callsId = await provider.request({
  method: 'wallet_sendCalls',
  params: [{
    version: '1.0',
    chainId: '0x2105',
    from: userAddress,
    calls: [
      { to: '0x...', value: '0x0', data: '0x...' },
      { to: '0x...', value: '0x0', data: '0x...' }
    ]
  }]
});

// Poll for status updates
const checkStatus = async () => {
  const status = await provider.request({
    method: 'wallet_getCallsStatus',
    params: [callsId]
  });
  
  if (status.status === 200) {
    console.log('Batch completed successfully!');
    console.log('Transaction receipts:', status.receipts);
  } else if (status.status === 100) {
    console.log('Batch still pending...');
    setTimeout(checkStatus, 2000); // Check again in 2 seconds
  } else {
    console.error('Batch failed with status:', status.status);
  }
};

checkStatus();
```

<Warning>
  The receipts structure varies based on whether the batch was executed atomically. Always check the `atomic` field to properly interpret the receipts array.
</Warning>

<Info>
  This method follows the EIP-5792 standard for wallet batch operations. Not all wallets may support this method - check wallet capabilities first.
</Info>

<BaseBanner
  id="privacy-policy"
  dismissable={false}
  content={({ onDismiss }) => (
<div className="flex items-center">
  <div className="mr-2">
    We're updating the Base Privacy Policy, effective July 25, 2025, to reflect an expansion of Base services. Please review the updated policy here:{" "}
    <a
      href="https://docs.base.org/privacy-policy-2025"
      target="_blank"
      className="whitespace-nowrap"
    >
      Base Privacy Policy
    </a>. By continuing to use Base services, you confirm that you have read and understand the updated policy.
  </div>
  <Button onClick={onDismiss}>I Acknowledge</Button>
</div>
)}
/>
