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

# prepareRevokeCallData

> Construct calldata so your app's spender can revoke a Spend Permission without user interaction

Defined in the [Coinbase Wallet SDK](https://github.com/base/account-sdk)

<Info>
  Builds a single revoke call that your app's spender account can submit to
  revoke a permission silently. This requires your app to control a spender
  account with rights to revoke.
</Info>

## Parameters

<ParamField body="permission" type="SpendPermission" required>
  The spend permission to revoke. This should be a SpendPermission object returned from [`requestSpendPermission`](/coinbase-wallet/reference/spend-permission-utilities/requestSpendPermission) or fetched via [`fetchPermissions`](/coinbase-wallet/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="revokeCall" type="Call">
  Call data for the revoke transaction.

  <Expandable title="Call Type">
    <ResponseField name="to" type="string" />

    <ResponseField name="data" type="`0x${string}`" />

    <ResponseField name="value" type="`0x0`" />
  </Expandable>
</ResponseField>

<RequestExample>
  ```typescript Silent revoke via spender account lines wrap expandable theme={null}
  import { prepareRevokeCallData } from "@base-org/account/spend-permission";

  const revokeCall = await prepareRevokeCallData(permission);

  await provider.request({
    method: "wallet_sendCalls",
    params: [
      {
        version: "2.0",
        atomicRequired: true,
        from: spender,
        calls: [revokeCall],
      },
    ],
  });
  ```
</RequestExample>

## Error Handling

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