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

# Gas Sponsorship

> Send approved token transfers with Para-sponsored gas and track their final outcome

Send supported EVM token transfers from an API-managed wallet without funding that wallet with native gas.

<Note>
  Gas sponsorship requires Para to enroll your partner separately in each environment. Contact Para to confirm
  production availability and request enrollment. Para enables production partners after internal production
  validation; Beta enrollment does not enable production sponsorship.
</Note>

| Environment | Chain | USDC contract |
| - | - | - |
| Beta | Ethereum Sepolia (`11155111`) | `0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238` |
| Beta | Base Sepolia (`84532`) | `0x036CbD53842c5426634e7929541eC2318f3dCF7e` |
| Production | Ethereum Sepolia (`11155111`) | `0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238` |
| Production | Base Sepolia (`84532`) | `0x036CbD53842c5426634e7929541eC2318f3dCF7e` |
| Production pilot | Ethereum mainnet (`1`) | `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` |
| Production pilot | Base mainnet (`8453`) | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |

Production supports Ethereum Sepolia and Base Sepolia test transfers, plus a native Circle USDC pilot on Ethereum
and Base mainnet. Beta supports testnet sponsorship only. Para does not apply a default per-operation gas cap on
either Sepolia network. Mainnet sponsorship requires a per-operation gas cap. The listed USDC tokens use 6 decimals:
`"1000000"` transfers 1 USDC. Test USDC has no monetary value. Use `env: "PROD"` for production and `env: "BETA"`
for Beta when initializing the [REST SDK](/v3/rest/sdk), with the secret key for that environment.

Para manages the sponsorship provider credentials, policy, and gas caps. Your integration uses the Para secret key
for the target environment; no Pimlico key or policy ID is required in your requests.

Eligible wallets must belong to your partner, be API-created and unclaimed, and be ready for signing. Each transfer
still requires wallet access and passes through permission checks and any configured per-operation gas cap.
Enrollment covers eligible wallets created before or afterward.
Non-EVM wallets keep their existing transfer behavior.

## Send a transfer

Use the existing `transfer()` method with an idempotency key saved in your payout or job record.
Initialize `para` as shown in [REST SDK](/v3/rest/sdk). Supply your enrolled chain, token contract, and recipient.

```typescript sponsored-transfer.ts theme={null}
const result = await para.transfer(
  walletId,
  { to: recipient, value: "1000000", chainId, tokenAddress, kind: "ERC20" },
  { idempotencyKey: payoutRequestKey },
);

if (result.executionMode === "sponsored") {
  const record = await para.getRestTransaction(walletId, result.transactionId);
  console.log(record.status, record.stage, record.hash);
} else {
  console.log(result.signedTransaction, result.txHash);
}
```

`value` is a positive integer in token base units. Omit nonce, transaction type and gas/fee overrides. Omit `broadcast`
or set it to `true`. Leave recipient screening enabled. Native transfers, unsupported chains or tokens, sign-only
requests, and requests with transaction overrides or disabled recipient screening keep the existing transfer path.
If Para pauses sponsorship admission while your partner remains enabled, new eligible sponsored requests are rejected.
Partners without sponsorship enabled use the existing transfer path, which may require wallet-funded gas.

The sponsored response is HTTP `202`, with `executionMode: "sponsored"`, `transactionId`, and `status`.
Save the tracking ID. Para also returns it in `x-transaction-id` and provides the lookup path in `Location`.
The response contains no signed transaction bytes. `userOperationHash` identifies the sponsored operation;
`txHash` in transfer and replay responses and `hash` in transaction lookup/history identify the on-chain transaction
after inclusion.

`202` means the request is recorded. Para checks policy, recipient screening, and any configured gas cap afterward.
Rejections during preparation appear as tracked `failed` results; uncertain outcomes remain nonterminal.

## Track and resume

Poll `getRestTransaction()` using the original tracking ID. See [Transaction history](/v3/rest/transaction-history).

| Result | What to do |
| - | - |
| `pending` or `submitted` | Continue tracking. `submitted` with stage `included` still awaits receipt verification. |
| Stage `requires_action` | Pause for the policy review identified by `reviewId`. Resume explicitly after approval. |
| Stage `submission_unknown` | Submission may have happened. Keep tracking; do not create a replacement transfer. |
| Stage `delivery_unverified` | The operation was included, but token delivery needs reconciliation. Keep the tracking ID and contact Para. |
| `confirmed`, `reverted`, or `failed` | Record the terminal result. Treat unknown future statuses as nonterminal. |

```typescript resume-transfer.ts theme={null}
await para.resumeRestTransaction(walletId, transactionId, { reviewId });
```

Resume continues the same transfer through `POST /v1/wallets/{walletId}/transactions/{transactionId}/resume`.
It accepts the applicable review ID, not a replacement recipient or amount. Later steps can require another review.
This supports existing policy reviews. Conditional approval policies are not supported for sponsored transfers in this pilot.

If the transfer response is lost, repeat the original request with the same key. Sponsored keys recover the same
operation beyond 24 hours and after sponsorship is disabled. Reusing a key for a different wallet or intent returns
`409 IDEMPOTENCY_CONFLICT`. Replaying `transfer()` retrieves status; it does not resume a review.

`actualGasCost` is the settled cost of the individual operation in native-token base units, including included reverts.
Read it as a decimal string or `bigint`. A timeout does not establish failure, and gas cost does not establish token delivery.

If transaction lookup returns `status: "failed"` with `failureCode: "SPONSORSHIP_PAYMASTER_EXPIRED"`, Para has
proved that the signed gas sponsorship expired without inclusion on-chain. The expired operation has no settled
gas cost and is not billed.

Replaying the original idempotency key returns the same terminal record. To retry the transfer after this result,
submit a new request with a new idempotency key.

## Billing

Production billing requires separate enablement by Para. Confirm the agreed fee rates and billing start time before
enabling live billing. Gas sponsorship enrollment alone does not enable customer charging. When enabled, Beta
billing uses Stripe test mode. Production Ethereum Sepolia and Base Sepolia transfers are excluded from live gas billing.

The Developer Portal's Billing page shows sponsored operations and their saved USD estimates. Each estimate uses
the operation's settled native gas cost, a saved exchange-rate quote, and the configured provider and Para fees.
The estimate is separate from Pimlico's provider invoice. Reverted operations included on-chain still consume gas;
operations that were never submitted do not incur sponsored execution gas.

## Wallet delegation

Sponsorship uses EIP-7702 while keeping the wallet's address. Once applied on-chain, delegation persists until another
authorization replaces or clears it. A reverted transfer or disabled sponsorship does not remove that delegation.
Signing an authorization alone does not change the account. See [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.