Skill: Multi-stop trip planner
POST /api/skill/trip-plannerPlan 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. Send POST /api/skill/trip-planner with the required fields stops and startIso and pay $0.006 per call over x402 or MPP (there is no free tier). It returns a JSON object with pack, args, steps and summary.
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. Multi-stop trip planner skill pack: one x402 payment runs 6 underlying tools (geocode, geo-distance, add-time, business-days, time-convert, weather-forecast); partial-success per step.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
stops | string | yes | comma-separated ordered list of stops (e.g. 'New York NY, Pittsburgh PA, Cleveland OH, Chicago IL') |
startIso | string | yes | trip start time as UTC ISO 8601 (e.g. '2026-07-20T08:00:00Z') |
Example request
curl -i -X POST https://agent402.tools/api/skill/trip-planner \
-H "Content-Type: application/json" \
-d '{"stops":"New York NY, Pittsburgh PA, Cleveland OH, Chicago IL","startIso":"2026-07-20T08:00:00Z"}'
Without payment this returns HTTP 402 Payment Required with the exact price for skill-trip-planner; any x402 v2 or MPP client pays it and retries.
Example response
{
"pack": "trip-planner",
"args": {
"stops": "New York NY, Pittsburgh PA, Cleveland OH, Chicago IL",
"startIso": "2026-07-20T08:00:00Z"
},
"steps": [
{
"slug": "geocode",
"ok": true,
"result": {}
},
{
"slug": "geo-distance",
"ok": true,
"result": {}
},
{
"slug": "add-time",
"ok": true,
"result": {}
},
{
"slug": "business-days",
"ok": true,
"result": {}
},
{
"slug": "time-convert",
"ok": true,
"result": {}
},
{
"slug": "weather-forecast",
"ok": true,
"result": {}
}
],
"summary": "6/6 steps succeeded"
}
| Field | Type | Always present | In the example |
|---|---|---|---|
pack | string | yes | trip-planner |
args | object | yes | 2 fields: stops, startIso |
steps | array of objects | yes | 6 items in the example |
summary | string | yes | 6/6 steps succeeded |
From an MCP client
catalog.call {
"slug": "skill-trip-planner",
"params": {
"stops": "New York NY, Pittsburgh PA, Cleveland OH, Chicago IL",
"startIso": "2026-07-20T08:00:00Z"
}
}
The hosted connector at https://agent402.tools/mcp needs a payment for skill-trip-planner; the stdio package pays it from a wallet or from AGENT402_CREDITS_KEY. Local install: npx -y agent402-mcp.
Errors and behavior
- Arguments left out fall back to the pack's own defaults. Each step reports on its own; the call succeeds when at least one step does, and a run where every step fails is refused (400 when the input caused it, 502 otherwise).
- 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.
- Wallet-only: this tool reaches the network or stored state, so it has no proof-of-work tier. A prepaid card-credits key issued earlier (
Authorization: Bearer a402_...) also pays it. - A
GETorHEADto /api/skill/trip-planner 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/skill/trip-planner", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"stops": "New York NY, Pittsburgh PA, Cleveland OH, Chicago IL",
"startIso": "2026-07-20T08:00:00Z"
}),
});
Related tools
Skill: Convert anything to markdown
POST /api/skill/any-to-markdownConvert anything at a URL - HTML, PDF, or an image - to clean markdown. The 'I have a URL but it might be any content-ty…
Skill: API health check
POST /api/skill/api-healthIs this API endpoint healthy? Liveness check, response headers, and TLS certificate status in one pass. API health check…
Skill: API investigation
POST /api/skill/api-investigationPoint at an unknown API endpoint and figure out how to use it: auth scheme, content type, version, rate limits, OpenAPI/…
Skill: Article digest
POST /api/skill/article-digestQuick research brief on any topic - web search results plus an AI-generated answer in one pass. Article digest skill pac…
Skill: Brand protection
POST /api/skill/brand-protectionIs this domain legitimate? WHOIS age, DNS resolution, scam/phishing search results, and HTTP headers for a quick trust a…
Skill: Cheapest rail right now
POST /api/skill/cheapest-railWhere should an agent transact this minute? Live gas on Ethereum + every major L2 side by side, Base gas tiers, a fee es…