Skip to main content
POST
Execute ERC-20 Permit
Execute a gasless ERC-20 token transfer using a signed EIP-2612 permit. The user signs off-chain; the facilitator pays the gas and settles on-chain.
This endpoint is for ERC-2612 permit() transfers. Permit2 payments use POST /v1/settle with the Permit2 payment payload.

Authentication

Requires an API key passed as Authorization: Bearer <api-key>.

Request Body

Facilitator contract addresses

Response

Success

Error

Error Codes

Ethereum 503 responses include Retry-After: 30. They are fail-closed: the facilitator does not broadcast a transaction when the profitability check fails.

Authorizations

Authorization
string
header
required

Body

application/json
network
string
required

EVM network identifier. Must be one of the facilitator's configured EVM networks (e.g. ethereum, base, arbitrum, bsc, bot-chain, base-sepolia, bot-chain-testnet, optimism, optimism-sepolia, polygon, unichain, ink, tempo, monad, robinhood, worldchain, hyperevm, megaeth, fluent-testnet, etc.).

Example:

"base-sepolia"

owner
string
required

Token owner address (the signer of the EIP-2612 permit). Tokens are pulled from this address.

Pattern: ^0x[a-fA-F0-9]{40}$
Example:

"0x742d35Cc6634C0532925a3b8D0c4E5e6C2aE7A3e"

spender
string
required

Spender address authorized by the permit signature. Required by the request schema. The on-chain transferWithPermit call uses the facilitator contract as the spender; this field is forwarded for signing-side compatibility.

Pattern: ^0x[a-fA-F0-9]{40}$
Example:

"0x8e633dBf31adCc7D41BE3e95B7c8DD3526B5235A"

value
string
required

uint256 token amount as a decimal string in the token's smallest unit (e.g. 1000000 = 1 USDC at 6 decimals). Numbers and bigints are accepted and coerced to a decimal string.

Pattern: ^\d+$
Example:

"1000000"

deadline
string
required

uint256 permit deadline as a decimal Unix timestamp string. Numbers and bigints are accepted and coerced to a decimal string.

Pattern: ^\d+$
Example:

"1893456000"

recipient
string
required

Address that receives the transferred tokens after the permit is applied.

Pattern: ^0x[a-fA-F0-9]{40}$
Example:

"0x742d35Cc6634C0532925a3b8D0c4E5e6C2aE7A3e"

tokenAddress
string

Optional ERC-20 token address. Defaults to the selected network's configured USDC address when omitted.

Pattern: ^0x[a-fA-F0-9]{40}$
Example:

"0x036CbD53842c5426634e7929541eC2318f3dCF7e"

signature
string

Optional 65-byte EIP-2612 permit signature, hex-encoded. Provide this OR (v, r, s), but not both.

Pattern: ^0x[a-fA-F0-9]+$
Example:

"0x..."

v
integer

Optional v byte of the signature. Use the token's expected recovery value, normally 27 or 28.

Required range: 0 <= x <= 255
r
string

Optional 32-byte hex r component, with or without a leading 0x.

s
string

Optional 32-byte hex s component, with or without a leading 0x.

Response

Permit transaction submitted

success
boolean
required

true only when the on-chain transaction was submitted successfully.

transaction
string
required

Transaction hash on success. Empty string ("") on every error response.

network
string
required

Echoes the network from the request (or "" if the request body could not be parsed).

errorReason
enum<string>

Present on error responses only.

Available options:
invalid_request,
unsupported_network,
network_not_configured,
invalid_signature,
gas_cost_exceeds_fee,
gas_price_check_failed,
gas_price_configuration_error,
permit_execution_failed