# Submit a signed permit deposit

`POST https://api.getchord.xyz/v1/crosschain/permit`

Source: https://getchord.xyz/docs/api-reference/operations/crosschainpermit/

Hands a signed `signature` step from a `usePermit` quote back to the provider (Relay only): send the step's `post.body` fields plus the EIP-712 signature. Then poll `/crosschain/status`.

## Request body (JSON)

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| `requestId` | yes | string |  |
| `kind` | yes | string | e.g. `eip3009` |
| `api` | yes | string | e.g. `swap` |
| `signature` | yes | string | 0x… EIP-712 signature |

```json
{
  "requestId": "0x17900816413eb4c1d4ec4b00d0be87c6b60872ed43d103eb87dc22a0b80ff325",
  "kind": "eip3009",
  "api": "swap",
  "signature": "0x…"
}
```

## Response 200

- **400**: Invalid parameters — `error` names the check that failed (`INVALID_PARAMS`, `BAD_ADDRESS`, `BAD_LIMIT`, `BAD_HOURS`, …).
- **429**: Over the per-minute limit (`RATE_LIMIT_EXCEEDED`). Read `X-RateLimit-Reset` and back off.
- **502**: The routing engine or an upstream did not answer (`ENGINE_ERROR`, `ROUTE_ERROR`).
- **503**: The lane behind this endpoint is not ready or not enabled here (`NOT_READY`, `CHAIN_NOT_ENABLED`, `NOT_ENABLED`, `*_UNAVAILABLE`). Retry later; do not treat it as an empty answer.
