# GASLESS_FAILED

> Gasless order rejected: The relayer rejected the signed gasless order (bad signature, wrong signer, invalid approval, or not enough balance or allowance).

Source: https://docs.layerhop.com/errors/GASLESS_FAILED

| HTTP status | Retry |
|---|---|
| `422` | after a new quote |

**Where it comes from:** `POST /v1/orders/gasless` (mapped from the 0x relayer).

## Causes

- A signature does not match the typed data `POST /v1/orders` returned (it was changed before signing, or signed by another wallet).
- The wallet is a smart-contract wallet and the approval type needs a plain ECDSA signature.
- The wallet's balance of the sell token dropped below the quoted amount after quoting.

## How to fix

- Sign the typed data exactly as returned, from the quote's `sender`, and submit within the quote's lifetime.
- Check the balance, then get a new quote and sign again. Nothing moved: the relayer rejected the order before sending a transaction.

## Example response

```json
{
  "error": {
    "code": "GASLESS_FAILED",
    "message": "{\n  \"error\": {\n    \"code\": \"GASLESS_FAILED\",\n    \"message\": \"0x: INVALID_SIGNER signer does not match taker\",\n    \"requestId\": \"0d5e1f6a-…\",\n    \"docsUrl\": \"https://docs.layerhop.com/errors/GASLESS_FAILED\"\n  }\n}",
    "requestId": "0d5e1f6a-3b2c-4d1e-8f9a-7b6c5d4e3f21",
    "docsUrl": "https://docs.layerhop.com/errors/GASLESS_FAILED"
  }
}
```

See [Error handling & retries](/guides/error-handling) for a retry strategy, and the [error catalog](/errors) for every code.
