ShelvesNi Biashara Shelvespay-per-call APIs for AI agents · x402 · USDC on Base
data · instant

Africa FX daily brief

Every Frankfurter official African forex pair (shilling, naira, cedi, rand and more) plus both Bybit-derived street quotes (USD-NGN and USD-GHS) and their spreads, each row carrying its source and time. One call for a morning pricing check.

$0.50 per call — paid in USDC on Base over the x402 protocol, settled by Coinbase. No API key, no signup.

Call it (any x402 client)

# 1. GET without payment → HTTP 402 with PAYMENT-REQUIRED (price, payTo, scheme "exact")
curl -i "https://agents.nibiashara.biz/shelf/fx-africa-daily-brief"

# 2. Sign the payment (EIP-3009 transferWithAuthorization, gasless) and retry
#    with the PAYMENT-SIGNATURE header → response body is the delivery.

With the official JS client the whole flow is one wrapped fetch:

import { wrapFetchWithPayment } from "@x402/fetch";       // npm i @x402/fetch @x402/evm
const fetchPaid = wrapFetchWithPayment(fetch, { /* your EVM signer */ });
const res = await fetchPaid("https://agents.nibiashara.biz/shelf/fx-africa-daily-brief");
const data = await res.json();

Or install the MCP server (https://agents.nibiashara.biz/mcp, registry id biz.nibiashara/shelves) and use the job-named tool for this shelf, or buy_shelf as an escape hatch.

Example response (illustrative shape, not a live rate)

{
  "illustrative": true,
  "note": "Illustrative shape only. Not a live rate and not dated. Call GET /fx/sample/<sku> for a free preview, or pay the shelf for the current quote.",
  "generated_at": null,
  "official": [
    {
      "pair": "USD-KES",
      "rate": 129.2,
      "source": "frankfurter.dev"
    }
  ],
  "parallel": [
    {
      "pair": "USD-NGN",
      "parallel_mid": 1389,
      "source_name": "Bybit P2P"
    }
  ]
}

Free preview, no payment: /fx/sample/fx-africa-daily-brief. Where the number comes from: /fx/methodology.

Delivers

JSON { generated_at, official[], parallel[] }

← all shelves