What things cost in Honduras
What things actually cost on the ground in Honduras, recorded by a person who went and asked: coffee at the farmgate, the basic food basket, fuel, and the street rate for dollars. The published number and the real number are different here, and the gap is invisible from outside the country. Every reading carries the day it was observed and how it was learned, so you can judge it rather than trust it.
POST https://api.bottrunk.com/s/prices-hn
On request A person does this work. Write to us first so we can agree scope and timing; the endpoint answers 503 until then, so nothing can be charged by accident.
Call it
# once, on the machine your agent runs on npx bottrunk-mcp wallet # prints the address; send it 0.3 ALGO, then USDC claude mcp add bottrunk -- npx -y bottrunk-mcp # then ask your agent for it — the tool is `bottrunk_prices_hn`
# Ask. You get a 402 with the payment requirements.
curl https://api.bottrunk.com/s/prices-hn \
-H "Content-Type: application/json" \
-d '{"items":["coffee-quintal","fuel-diesel"],"city":"Tegucigalpa"}'
# Pay and retry. Any x402 client does this for you.
curl https://api.bottrunk.com/s/prices-hn \
-H "PAYMENT-SIGNATURE: <signed USDC transfer>" \
-H "Content-Type: application/json" \
-d '{"items":["coffee-quintal","fuel-diesel"],"city":"Tegucigalpa"}'
# pip install "x402-avm[avm,requests]==2.0.2"
import base64, os
from algosdk import encoding, mnemonic
from x402 import x402ClientSync
from x402.http import x402HTTPClientSync
from x402.http.clients.requests import x402_requests
from x402.mechanisms.avm import ALGORAND_MAINNET_CAIP2
from x402.mechanisms.avm.exact import ExactAvmScheme
class MnemonicSigner: # signs the payment with your agent's 25-word mnemonic
def __init__(self, words):
self._sk = mnemonic.to_private_key(words)
self.address = encoding.encode_address(base64.b64decode(self._sk)[32:])
def sign_transactions(self, unsigned_txns, indexes_to_sign):
return [base64.b64decode(encoding.msgpack_encode(
encoding.msgpack_decode(base64.b64encode(t).decode()).sign(self._sk)))
if i in indexes_to_sign else None
for i, t in enumerate(unsigned_txns)]
# A wallet holding 0.3 ALGO, opted in to USDC, funded with the USDC it may spend.
signer = MnemonicSigner(os.environ["ALGORAND_MNEMONIC"])
client = x402ClientSync().register(ALGORAND_MAINNET_CAIP2,
ExactAvmScheme(signer, algod_url="https://mainnet-api.algonode.cloud"))
with x402_requests(client) as session: # answers the 402, pays, retries
r = session.post("https://api.bottrunk.com/s/prices-hn", json={"items": ["coffee-quintal", "fuel-diesel"], "city": "Tegucigalpa"})
print(r.json())
receipt = x402HTTPClientSync(client).get_payment_settle_response(r.headers.get)
print(receipt.transaction) # the settlement on-chain
// npm install @x402-avm/fetch @x402-avm/avm @x402-avm/core algosdk
import algosdk from "algosdk";
import { x402Client } from "@x402-avm/core/client";
import { ExactAvmScheme } from "@x402-avm/avm/exact/client";
import { toClientAvmSigner } from "@x402-avm/avm";
import { wrapFetchWithPayment } from "@x402-avm/fetch";
// A wallet holding 0.3 ALGO, opted in to USDC, funded with the USDC it may spend.
const { sk } = algosdk.mnemonicToSecretKey(process.env.ALGORAND_MNEMONIC!);
const signer = toClientAvmSigner(Buffer.from(sk).toString("base64"));
const client = new x402Client().register("algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=",
new ExactAvmScheme(signer, { algodUrl: "https://mainnet-api.algonode.cloud" })); // default is TestNet
const fetchWithPay = wrapFetchWithPayment(fetch, client);
const r = await fetchWithPay("https://api.bottrunk.com/s/prices-hn", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({"items":["coffee-quintal","fuel-diesel"],"city":"Tegucigalpa"}),
});
console.log(await r.json());
How it behaves
The decisions this service makes on your behalf, and the ones that end in a refusal. A 4xx is never settled, so a refusal costs you nothing.
| Where the numbers come from | A person on a weekly round — phone calls to exporters, visits to markets and stations. Each reading names its source and the day it was made. |
| Freshness is stated, never hidden | Every reading carries days_old, and anything older than three weeks is marked stale: true rather than served quietly as current. |
| Asking for something we do not price | Answered 422 with the list of what is priced, and not charged. You pay for observations, not for an empty list. |
| Dollars are converted, not observed | price_usd uses the day's Banco Central reference rate. The lempira figure is the observation; the dollar figure is arithmetic. |
| Method | POST only. A GET on the same path returns this page. |
Input
| items | array | Optional: which readings you want. Omit for everything priced. |
| city | string | Optional: Tegucigalpa or San Pedro Sula. |
Output
| prices | array | One reading per item: price_hnl, price_usd, unit, observed_at, days_old, stale, source. |
| as_of | string | Newest observation in the response. |
| rate_hnl_per_usd | string | Reference rate used for the dollar column. |