Geo distance (haversine)
POST /api/geo-distanceGreat-circle distance between two latitude/longitude points using the haversine formula. Send POST /api/geo-distance with the required fields from and to and pay $0.001 per call over x402 or MPP, or call it free by solving a proof-of-work challenge. It returns a JSON object with km and miles.
Returns kilometers and miles. Deterministic.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
from | object | yes | { lat, lng } in decimal degrees Also accepted as source, src, start. |
to | object | yes | { lat, lng } in decimal degrees Also accepted as target, dest, destination, end. |
Example request
curl -i -X POST https://agent402.tools/api/geo-distance \
-H "Content-Type: application/json" \
-d '{"from":{"lat":40.7128,"lng":-74.006},"to":{"lat":34.0522,"lng":-118.2437}}'
Without payment this returns HTTP 402 Payment Required with the exact price for geo-distance; any x402 v2 or MPP client pays it and retries.
Example response
{
"km": 3935.75,
"miles": 2445.56
}
| Field | Type | Always present | In the example |
|---|---|---|---|
km | number | yes | 3935.75 |
miles | number | yes | 2445.56 |
From an MCP client
catalog.call {
"slug": "geo-distance",
"params": {
"from": {
"lat": 40.7128,
"lng": -74.006
},
"to": {
"lat": 34.0522,
"lng": -118.2437
}
}
}
On the hosted connector at https://agent402.tools/mcp, catalog.call runs geo-distance free (rate-limited, no wallet). Local install: npx -y agent402-mcp.
Errors and behavior
fromandtoare required. An input the tool rejects returns an HTTP 4xx whose body carrieserror,tool,expected,requiredandexample, so the caller can correct it.- A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is cancelled when the tool fails. The exception is a Tempo push credential, a transfer the buyer sent before the call: it settles before the tool runs, so if the tool then fails the payment is recorded as a refund owed to the paying wallet.
- Free tier: no outbound network call leaves the server for this tool, so proof-of-work (16 leading zero bits of sha256) pays for it.
- A
GETorHEADto /api/geo-distance returns the same 402 quote, so the price can be read without a body. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/geo-distance", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"from": {
"lat": 40.7128,
"lng": -74.006
},
"to": {
"lat": 34.0522,
"lng": -118.2437
}
}),
});
No wallet? Pay with compute
Fetch a challenge, solve the sha256 puzzle (16 leading zero bits, a fraction of a second of CPU), and resend with the X-Pow-Solution header:
import { createHash } from "node:crypto";
const lz = (b) => { let t = 0; for (const x of b) { if (!x) { t += 8; continue; } t += Math.clz32(x) - 24; break; } return t; };
const c = await (await fetch("https://agent402.tools/api/pow/challenge?slug=geo-distance")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/geo-distance", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"from":{"lat":40.7128,"lng":-74.006},"to":{"lat":34.0522,"lng":-118.2437}}) });
Part of these workflows
Geo distance (haversine) is one step in this skill pack, each sold as a single call:
- Multi-stop trip planner - Plan a multi-stop journey deterministically: geocode each stop, sum the pairwise haversine distances, estimate arrival times by adding driving hours per leg, count business days from today to each arrival, and pull the weather forecast at every US stop. Six tools - three pure-CPU (math + time), three egress (geocoding + weather) - covering the deterministic skeleton of every road-trip / sales-tour / delivery-route planning problem.
Related tools
Calculator
POST /api/calcSafely evaluate an arithmetic expression (+ - * / % ^ and parentheses). No code execution - a real parser, not eval.
CIDR calculator
POST /api/cidrParse an IPv4 CIDR block: network address, broadcast, first/last host, netmask, and host count. Optionally test if an IP…
Finance
POST /api/financeFinancial math. op: "compound" (future value of principal at a rate) or "loan" (monthly payment + total for a loan).
Number format
POST /api/number-formatFormat a number: thousands separators, fixed decimals, optional currency, or compact (1.2K / 3.4M).
Percentage
POST /api/percentagePercentage helper. op: "of" (a% of b), "change" (% change a→b), "ratio" (a is what % of b).
Statistics
POST /api/statsDescriptive statistics for an array of numbers: count, sum, mean, median, mode, min, max, range, variance, stddev, and p…