Skip to main content

πŸš€ Start Building Immediately

0xmeta.ai requires zero setup. No account creation, no API keys, no complicated onboarding. Just start making requests to facilitate x402 payments on Base network!
Truly permissionless: Verify and settle x402 payments without any authentication. Our API is as open as the blockchain itself.

Understanding the Flow

0xmeta facilitates EIP-3009 transferWithAuthorization payments - a gasless payment method where users sign authorizations instead of sending transactions.

Step 1: User Creates Authorization

Your user signs an EIP-3009 authorization (client-side, no gas):
// Client-side: User signs authorization
const authorization = {
  from: userAddress,
  to: merchantAddress,
  value: "10000", // 0.01 USDC (6 decimals)
  validAfter: "0",
  validBefore: String(Math.floor(Date.now() / 1000) + 86400), // 24h validity
  nonce: generateRandomNonce(), // Unique per payment
};

// User signs with MetaMask (NO gas required)
const signature = await ethereum.request({
  method: "eth_signTypedData_v4",
  params: [userAddress, JSON.stringify(typedData)],
});
See our merchant demo for complete client-side implementation.

Step 2: Verify the Authorization

Validate that the authorization is properly signed:
curl -X POST https://facilitator.0xmeta.ai/v1/verify \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_hash": "NONCE_HASH",
    "chain": "base-sepolia",
    "seller_address": "0xYourMerchantAddress",
    "expected_amount": "10000",
    "expected_token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
    "metadata": {
      "source": "your_app",
      "paymentPayload": {
        "x402Version": 1,
        "scheme": "exact",
        "network": "base-sepolia",
        "payload": {
          "authorization": { /* ... */ },
          "signature": "0x..."
        }
      }
    }
  }'

Response

{
  "verification_id": "vrf_abc123xyz",
  "status": "verified",
  "transaction_hash": "0x...",
  "chain": "base-sepolia",
  "verified_amount": "10000",
  "verified_token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
  "seller_address": "0xYourMerchantAddress",
  "verified_at": "2025-11-24T10:30:00Z"
}
Verification is FREE - no fees charged

Step 3: Settle the Payment

Execute the on-chain settlement via Provider:
curl -X POST https://facilitator.0xmeta.ai/v1/settle \
  -H "Content-Type: application/json" \
  -d '{
    "verification_id": "vrf_abc123xyz",
    "destination_address": "0xYourMerchantAddress"
  }'

Response

{
  "settlement_id": "stl_def456uvw",
  "verification_id": "vrf_abc123xyz",
  "status": "pending",
  "transaction_hash": null,
  "destination_address": "0xYourMerchantAddress",
  "created_at": "2025-11-24T10:31:00Z"
}
Settlement Fee: $0.001 flat fee (0.001 USDC) collected automatically via USDC allowance. You must approve 0xmeta to spend USDC before settlements can process.

Step 4: Check Settlement Status

Monitor settlement progress:
curl https://facilitator.0xmeta.ai/v1/settlements/stl_def456uvw

Response

{
  "id": "stl_def456uvw",
  "status": "settled",
  "transaction_hash": "0xabcdef123...",
  "settled_at": "2025-11-24T10:32:15Z",
  "details": {
    "verification_id": "vrf_abc123xyz",
    "destination_address": "0xYourMerchantAddress",
    "settled_amount": "10000",
    "fee_collection_status": "success"
  }
}
Settlements typically complete in 30-60 seconds on Base network

One-Time Setup: Approve Fee Collection

Before your first settlement, approve 0xmeta to collect fees:
// One-time setup: Approve USDC spending
const USDC_ADDRESS = "0x036CbD53842c5426634e7929541eC2318f3dCF7e"; // Base Sepolia
const TREASURY_ADDRESS = "0xa92560dcaf2fb556dfee4d2599f021a511b94aae";

const usdcContract = new ethers.Contract(USDC_ADDRESS, USDCAbi, signer);

// Approve $10 worth of fees (~10,000 settlements)
await usdcContract.approve(TREASURY_ADDRESS, ethers.parseUnits("10", 6));
Important: Merchants must approve USDC spending before settlements. Without approval, settlements will fail at the fee collection step.

Settlement Flow Diagram


No Authentication Required

No Signup

Start using the API immediately without creating an account

No API Keys

All endpoints are publicly accessible

No Rate Limits

Use as much as you need (reasonable use)

No Lock-In

No accounts means no platform restrictions
Why no authentication? Payment facilitation should be as permissionless as the blockchain itself. Anyone should be able to accept x402 payments without barriers.

Supported Networks

Currently supporting Base networks:
NetworkChain IDUSDC AddressStatus
Base Mainnet84530x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913βœ… Production
Base Sepolia845320x036CbD53842c5426634e7929541eC2318f3dCF7eβœ… Testing

Example: Complete Integration

// 1. Verify EIP-3009 authorization
const verifyResponse = await fetch("https://facilitator.0xmeta.ai/v1/verify", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    transaction_hash: authorization.nonce,
    chain: "base-sepolia",
    seller_address: merchantAddress,
    expected_amount: "10000",
    expected_token: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
    metadata: {
      source: "my_app",
      paymentPayload: {
        x402Version: 1,
        scheme: "exact",
        network: "base-sepolia",
        payload: { authorization, signature },
      },
    },
  }),
});

const { verification_id } = await verifyResponse.json();

// 2. Settle payment
const settleResponse = await fetch("https://facilitator.0xmeta.ai/v1/settle", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    verification_id,
    destination_address: merchantAddress,
  }),
});

const settlement = await settleResponse.json();

// 3. Check status
const statusResponse = await fetch(
  `https://facilitator.0xmeta.ai/v1/settlements/${settlement.settlement_id}`
);

const status = await statusResponse.json();
console.log("Settlement status:", status.status);

What’s Next?


Need Help?

You’re ready! No signup needed - just start building with 0xmeta.ai today.