Skip to main content

Setup

Set up your payment handler in just 3 lines:
import { payer } from "@faremeter/rides";

const { PAYER_KEYPAIR } = process.env;
if (!PAYER_KEYPAIR) throw new Error("PAYER_KEYPAIR must be set");

await payer.addLocalWallet(PAYER_KEYPAIR);
@faremeter/rides automatically detects your network, looks up USDC, and sets up payments using your existing wallet. All examples below use payer.fetch().

Example: Get Token Account

Query token account information for a given owner address:
const url = "https://yatori.api.corbits.dev/get-token-account";

const payload = {
  owner_address: "corzHctjX9Wtcrkfxz3Se8zdXqJYCaamWcQA7vwKF7Q",
  token_address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
};

const response = await payer.fetch(url, {
  method: "POST",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify(payload),
});

if (!response.ok) {
  const text = await response.text().catch(() => "");
  throw new Error(`HTTP ${response.status} ${response.statusText} ${text}`);
}

const data = await response.json();
console.log("Token Account Data:", JSON.stringify(data, null, 2));
Request Body:
{
  "owner_address": "corzHctjX9Wtcrkfxz3Se8zdXqJYCaamWcQA7vwKF7Q",
  "token_address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
Response:
{
  "data": "51NXMBZKJcta1hfwvbWtT1c3h72VoDyVfkctiVNXEj9b",
  "status": "Associated token account found successfully"
}

Payment Flow

When you make a request:
  1. Initial Request: Client sends API request
  2. 402 Response: Proxy returns payment requirements
{
  "accepts": [{
    "network": "solana-mainnet-beta",
    "maxAmountRequired": 10000,
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "payTo": "corzHctjX9Wtcrkfxz3Se8zdXqJYCaamWcQA7vwKF7Q"
  }]
}
  1. Payment: Payment handler transfers 0.01 USDC on Solana
  2. Success: Proxy forwards request to Yatori with API key
All handled automatically by payer.fetch() or fetchWithPayer!

External Resources