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

# Approve EVM token

> Generates an unsigned ERC20 `approve()` transaction that enables gasless
offramps on EVM chains. When enabled for your organization, EVM offramp
transactions no longer require the user to hold native gas tokens (e.g. ETH on
Base) — Etherfuse covers the bridging cost and bundles it into the offramp fee.

**This approval must be completed before creating an offramp order** via
`POST /ramp/order` for EVM wallets with this feature enabled; otherwise the
offramp transaction fails on-chain.

**Prerequisites:**
- The feature must be enabled for your organization (contact Etherfuse).
- The user must have a registered EVM wallet on a supported chain.

**Flow:**
1. Call this endpoint to get the approval transaction.
2. Have the user sign and submit it in their wallet.
3. Once confirmed, create the offramp order via `POST /ramp/order`.

**Approval amount:** omit `amount` (recommended) to approve an unlimited amount
once per token per chain; or pass `amount` in base units to approve a specific
amount (consumed after each offramp). If a sufficient allowance already exists,
the response has `"transaction": null`.



## OpenAPI

````yaml /openapi.json post /ramp/evm/approve
openapi: 3.1.0
info:
  title: Etherfuse FX API
  description: Partner-facing ramp API for onramps, offramps, swaps, and KYC.
  license:
    name: Proprietary
  version: 1.0.0
servers:
  - url: https://api.sand.etherfuse.com
    description: Sandbox
security:
  - ApiKeyAuth: []
tags:
  - name: Authentication
    description: >-
      Partner JWT authentication — exchange a JWT for an access token, or launch
      a user into the app.
  - name: Lookup
    description: >-
      Public reference data: exchange rates, stablebonds, bond costs, country
      codes.
  - name: Assets
    description: Rampable stablecoins and stablebonds available per blockchain.
  - name: Onboarding
    description: Hosted and programmatic customer onboarding.
  - name: Agreements
    description: Legal agreement acceptance during onboarding.
  - name: Bank Accounts
    description: Register and retrieve customer bank accounts.
  - name: Quotes
    description: Price quotes for onramps, offramps, and swaps.
  - name: Orders
    description: Create, track, and manage ramp orders.
  - name: Swaps
    description: Crypto-to-crypto swaps.
  - name: Sponsored
    description: Token approvals for sponsored (gasless) offramps.
  - name: Customers
    description: Customer (child-organization) records.
  - name: Wallets
    description: Register and manage customer wallets.
  - name: KYC
    description: Submit and check customer KYC status.
  - name: Webhooks
    description: Event notification subscriptions.
  - name: Organizations
    description: Organization identity, child orgs, and partner fees.
paths:
  /ramp/evm/approve:
    post:
      tags:
        - Sponsored
      summary: Approve EVM token
      description: >-
        Generates an unsigned ERC20 `approve()` transaction that enables gasless

        offramps on EVM chains. When enabled for your organization, EVM offramp

        transactions no longer require the user to hold native gas tokens (e.g.
        ETH on

        Base) — Etherfuse covers the bridging cost and bundles it into the
        offramp fee.


        **This approval must be completed before creating an offramp order** via

        `POST /ramp/order` for EVM wallets with this feature enabled; otherwise
        the

        offramp transaction fails on-chain.


        **Prerequisites:**

        - The feature must be enabled for your organization (contact Etherfuse).

        - The user must have a registered EVM wallet on a supported chain.


        **Flow:**

        1. Call this endpoint to get the approval transaction.

        2. Have the user sign and submit it in their wallet.

        3. Once confirmed, create the offramp order via `POST /ramp/order`.


        **Approval amount:** omit `amount` (recommended) to approve an unlimited
        amount

        once per token per chain; or pass `amount` in base units to approve a
        specific

        amount (consumed after each offramp). If a sufficient allowance already
        exists,

        the response has `"transaction": null`.
      operationId: evm_approve_proxy
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EvmApprovePayload'
        required: true
      responses:
        '200':
          description: 'Approval transaction, or `transaction: null` if already approved'
          content:
            application/json:
              schema: {}
              examples:
                already_approved:
                  summary: Already approved
                  value:
                    currentAllowance: >-
                      115792089237316195423570985008687907853269984665640564039457584007913129639935
                    message: Already approved — no transaction needed
                    transaction: null
                needs_approval:
                  summary: Approval needed
                  value:
                    message: Approve transaction for gasless offramps on base
                    transaction: >-
                      {"to":"0xcC77c598...","data":"0x095ea7b3...","value":"0","chainId":84532}
        '400':
          description: Feature not enabled on this chain, or invalid wallet address
components:
  schemas:
    EvmApprovePayload:
      type: object
      description: >-
        Request body for generating an EVM token-approval transaction.


        Documentation schema for [`evm_approve_proxy`]. The handler forwards the
        body

        to the bridge service verbatim; this type only describes the expected
        shape.
      required:
        - blockchain
        - wallet
        - assetId
      properties:
        amount:
          type:
            - string
            - 'null'
          description: >-
            Amount to approve in base units (token's smallest denomination). For
            a

            6-decimal token, `10000000` = 10 tokens. Omit to approve the maximum

            (recommended — a one-time approval covers all future offramps).
        assetId:
          type: string
          description: The token contract address to approve (`0x`-prefixed, 40 hex chars).
        blockchain:
          type: string
          description: The EVM chain to approve on (currently `base`).
        wallet:
          type: string
          description: The user's EVM wallet address (`0x`-prefixed, 40 hex chars).
      example:
        assetId: '0xcC77c598d42f2f78Beb42C91d12B9d4041a5cE29'
        blockchain: base
        wallet: '0xf82567432381D1326484E5A9140ABCa4294f82D0'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: API key sent in the Authorization header.

````