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

# getPermissionStatus

> Gets the current status of a Spend Permission

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 the [Base Account SDK](https://github.com/base/account-sdk)

<Info>
  This helper method queries the blockchain to retrieve real-time information
  about a spend permission, including how much can still be spent in the current
  period, when the next period starts, and whether the permission is still active.

  The function automatically uses the appropriate blockchain client based on the
  permission's chain ID and calls multiple view functions on the SpendPermissionManager
  contract to gather comprehensive status information.
</Info>

## Parameters

<ParamField body="permission" type="SpendPermission" required>
  The spend permission object to check status for. This should be a SpendPermission object returned from [`requestSpendPermission`](/base-account/reference/spend-permission-utilities/requestSpendPermission) or fetched via [`fetchPermissions`](/base-account/reference/spend-permission-utilities/fetchPermissions).

  <Expandable title="SpendPermission properties">
    <ParamField body="permissionHash" type="string">
      Deterministic EIP-712 hash of the permission.
    </ParamField>

    <ParamField body="signature" type="string">
      Signature for the EIP-712 payload.
    </ParamField>

    <ParamField body="chainId" type="number">
      Target chain ID.
    </ParamField>

    <ParamField body="permission" type="object">
      Underlying permission fields.

      <Expandable title="permission fields">
        <ParamField body="account" type="address" />

        <ParamField body="spender" type="address" />

        <ParamField body="token" type="address" />

        <ParamField body="allowance" type="bigint" />

        <ParamField body="period" type="number">Duration in seconds.</ParamField>
        <ParamField body="start" type="number">Unix timestamp (seconds).</ParamField>
        <ParamField body="end" type="number">Unix timestamp (seconds).</ParamField>

        <ParamField body="salt" type="string" />

        <ParamField body="extraData" type="string" />
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

## Returns

<ResponseField name="status" type="GetPermissionStatusResponseType">
  A promise that resolves to an object containing permission status details.

  <Expandable title="GetPermissionStatusResponseType properties">
    <ResponseField name="remainingSpend" type="bigint">
      Remaining allowance in wei for the current period. Calculated as the difference between the allowance and the amount already spent in the current period.
    </ResponseField>

    <ResponseField name="nextPeriodStart" type="Date">
      When the next allowance period begins. This is calculated as one second after the current period ends.
    </ResponseField>

    <ResponseField name="isRevoked" type="boolean">
      True if the permission has been revoked on-chain.
    </ResponseField>

    <ResponseField name="isExpired" type="boolean">
      True if the current timestamp is past the permission's end time.
    </ResponseField>

    <ResponseField name="isActive" type="boolean">
      True if the permission is not revoked and not expired. A permission is active when it can still be used for spending.
    </ResponseField>

    <ResponseField name="currentPeriod" type="object">
      Information about the current spending period.

      <Expandable title="currentPeriod properties">
        <ResponseField name="start" type="number">Unix timestamp (seconds) when the current period started.</ResponseField>
        <ResponseField name="end" type="number">Unix timestamp (seconds) when the current period ends.</ResponseField>
        <ResponseField name="spend" type="bigint">Amount already spent in the current period (in wei).</ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```typescript Check permission status theme={null}
  import { getPermissionStatus } from "@base-org/account/spend-permission";

  // Check the status of a permission (no client needed)
  const status = await getPermissionStatus(permission);

  console.log(`Remaining spend: ${status.remainingSpend} wei`);
  console.log(`Next period starts: ${status.nextPeriodStart}`);
  console.log(`Is revoked: ${status.isRevoked}`);
  console.log(`Is expired: ${status.isExpired}`);
  console.log(`Is active: ${status.isActive}`);

  if (status.isActive && status.remainingSpend > BigInt(0)) {
    console.log('Permission can be used for spending');
  }
  ```
</RequestExample>

<ResponseExample>
  ```typescript Example response theme={null}
  {
    remainingSpend: 1000000000000000000n,
    nextPeriodStart: new Date("2024-01-31T00:00:01Z"),
    isRevoked: false,
    isExpired: false,
    isActive: true,
    currentPeriod: {
      start: 1704067200,
      end: 1706659200,
      spend: 0n
    }
  }
  ```
</ResponseExample>

## Error Handling

Always wrap the call in a try-catch block to handle these errors gracefully.

<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>
)}
/>
