Desktop Only

This application is optimized for desktop browsers. Please open it on a device with a screen width of at least 1024px.

Dashboard & Analytics

Track your payments and manage API keys at https://x402mantlesdk.xyz/dashboard

Getting API Keys

For Hosted Facilitator

  1. Sign in to dashboard
  2. Create a new project
  3. Copy your API key
  4. Use in server config:
const pay = mantlePaywall({
  priceUsd: 0.01,
  payTo: '0x...',
  facilitatorUrl: 'https://facilitator.x402mantlesdk.xyz',
  apiKey: 'your-api-key'
});

For Analytics Only (Self-Hosted)

Even with self-hosted facilitator, you can use analytics:

  1. Create project in dashboard
  2. Get project key (different from API key)
  3. Add to telemetry config:
const pay = mantlePaywall({
  priceUsd: 0.01,
  payTo: '0x...',
  facilitatorUrl: 'https://your-facilitator.com',
  telemetry: {
    projectKey: 'pk_xxx'
  }
});

Telemetry Setup

Server-Side Telemetry

import { mantlePaywall } from '@puga-labs/x402-mantle-sdk/server/express';

const pay = mantlePaywall({
  priceUsd: 0.01,
  payTo: '0x...',
  telemetry: {
    projectKey: 'pk_xxx',     // Required for analytics
    debug: true               // Optional: log telemetry events
  }
});

Self-Hosted Facilitator Telemetry

In your facilitator's .env:

TELEMETRY_PROJECT_KEY=pk_xxx

What Data is Sent

Sent:

  • Buyer address
  • Amount (in atomic units)
  • Asset address
  • Network
  • Transaction hash
  • Timestamp
  • Route (API endpoint)
  • Response status

NOT Sent:

  • Private keys
  • Request/response payloads
  • Personal information
  • IP addresses

Telemetry is Fire-and-Forget

  • Never blocks your requests
  • Errors are swallowed (logged in debug mode)
  • If analytics backend is down, payments continue normally

Monitoring Payments

Dashboard Features

  • Real-time payment feed
  • Daily/weekly/monthly statistics
  • Revenue charts
  • Per-endpoint breakdown
  • Transaction explorer links

Manual Tracking with Callback

const pay = mantlePaywall({
  priceUsd: 0.01,
  payTo: '0x...',
  onPaymentSettled: async (entry) => {
    // Save to your database
    await db.payments.create({
      paymentId: entry.id,
      from: entry.from,
      amount: entry.valueAtomic,
      txHash: entry.txHash,
      route: entry.route,
      timestamp: new Date(entry.timestamp)
    });

    // Send notification
    await slack.send(`Payment received: $${Number(entry.valueAtomic) / 10000} from ${entry.from}`);
  }
});

Dashboard Metrics

Total Transactions

Track all payment events processed through your API.

Success Rate

Percentage of transactions that successfully settled on-chain.

Delivery Rate

Percentage of successful payments where the service was delivered to the user.

Total Volume

View total payment volume in USD across all your endpoints.

Next Steps