{"openapi":"3.1.0","info":{"title":"timezone-toolkit","version":"2.1.0","description":"Timezone converter, world clock, date math & meeting scheduler for AI agents. Pay-per-call x402 endpoints (USDC on Base).","contact":{"name":"AgisHub","url":"https://github.com/agishub/agishub-mcp","email":"jmavid@gmail.com"}},"servers":[{"url":"https://api.agishub.com"}],"paths":{"/v1/now-in":{"post":{"operationId":"now_in","summary":"Get the current local time in an IANA timezone, including the UTC offset, zone abbreviation and whether DST is in effect. Use whenever you need to know what time it is 'now' somewhere. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone, e.g. 'Europe/Madrid', 'Asia/Kolkata'."}},"required":["timezone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/now-in":{"post":{"operationId":"now_in","summary":"Get the current local time in an IANA timezone, including the UTC offset, zone abbreviation and whether DST is in effect. Use whenever you need to know what time it is 'now' somewhere. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone, e.g. 'Europe/Madrid', 'Asia/Kolkata'."}},"required":["timezone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/convert-timezone":{"post":{"operationId":"convert_timezone","summary":"Convert a specific date/time from one IANA timezone to another. Accepts ISO 8601 or natural language ('next Tuesday 3pm'). Returns the converted datetime with its UTC offset, zone abbreviation and DST flag. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"ISO 8601 or natural language, e.g. \"2026-07-09T15:30\" or \"next Tuesday 3pm\"."},"from":{"type":"string","description":"Source IANA timezone."},"to":{"type":"string","description":"Target IANA timezone."}},"required":["datetime","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/convert-timezone":{"post":{"operationId":"convert_timezone","summary":"Convert a specific date/time from one IANA timezone to another. Accepts ISO 8601 or natural language ('next Tuesday 3pm'). Returns the converted datetime with its UTC offset, zone abbreviation and DST flag. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"ISO 8601 or natural language, e.g. \"2026-07-09T15:30\" or \"next Tuesday 3pm\"."},"from":{"type":"string","description":"Source IANA timezone."},"to":{"type":"string","description":"Target IANA timezone."}},"required":["datetime","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/convert-batch":{"post":{"operationId":"convert_batch","summary":"Convert a single instant into many IANA timezones at once — a world-clock view. Like convert_timezone, but 'to' is a list of target zones. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"ISO 8601 or natural language."},"from":{"type":"string","description":"Source IANA timezone."},"to":{"type":"array","items":{"type":"string"},"minItems":1,"description":"List of target IANA timezones."}},"required":["datetime","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/convert-batch":{"post":{"operationId":"convert_batch","summary":"Convert a single instant into many IANA timezones at once — a world-clock view. Like convert_timezone, but 'to' is a list of target zones. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"ISO 8601 or natural language."},"from":{"type":"string","description":"Source IANA timezone."},"to":{"type":"array","items":{"type":"string"},"minItems":1,"description":"List of target IANA timezones."}},"required":["datetime","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/tz-offset":{"post":{"operationId":"tz_offset","summary":"Get the exact UTC offset of an IANA timezone at a given instant, DST-aware. Correctly handles fractional offsets such as India +05:30 and Nepal +05:45. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone."},"instant":{"type":"string","description":"ISO 8601 or natural language. Defaults to now."}},"required":["timezone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/tz-offset":{"post":{"operationId":"tz_offset","summary":"Get the exact UTC offset of an IANA timezone at a given instant, DST-aware. Correctly handles fractional offsets such as India +05:30 and Nepal +05:45. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone."},"instant":{"type":"string","description":"ISO 8601 or natural language. Defaults to now."}},"required":["timezone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/lookup-timezone":{"post":{"operationId":"lookup_timezone","summary":"Resolve a city or country name to its IANA timezone(s) so you don't need the exact identifier — e.g. 'Delhi' -> 'Asia/Kolkata'. Use it first when you only have a place name. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"city_or_country":{"type":"string","description":"City or country name, or ISO country code."}},"required":["city_or_country"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/lookup-timezone":{"post":{"operationId":"lookup_timezone","summary":"Resolve a city or country name to its IANA timezone(s) so you don't need the exact identifier — e.g. 'Delhi' -> 'Asia/Kolkata'. Use it first when you only have a place name. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"city_or_country":{"type":"string","description":"City or country name, or ISO country code."}},"required":["city_or_country"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/date-math":{"post":{"operationId":"date_math","summary":"Timezone-aware date arithmetic: add or subtract a duration to a datetime (days are calendar-based and DST-safe; hours and minutes are absolute), or compute the difference between two datetimes that may be in different zones. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"Base datetime: ISO 8601 or natural language."},"timezone":{"type":"string","description":"IANA timezone the base datetime is in."},"operation":{"type":"object","properties":{"type":{"type":"string","enum":["add","diff"],"description":"'add' to shift the datetime by a duration, or 'diff' to measure the gap between two datetimes."},"amount":{"type":"number","description":"For type 'add': how much to shift. Use a negative number to subtract."},"unit":{"type":"string","enum":["seconds","minutes","hours","days","weeks"],"description":"For type 'add': one of seconds, minutes, hours, days, weeks."},"to_datetime":{"type":"string","description":"For type 'diff': the second datetime (ISO 8601 or natural language)."},"to_timezone":{"type":"string","description":"For type 'diff': the IANA timezone of to_datetime (defaults to the base timezone)."}},"required":["type"],"additionalProperties":false,"description":"What to compute: { type:'add', amount, unit } to add/subtract a duration, or { type:'diff', to_datetime, to_timezone? } for the difference between two datetimes."}},"required":["datetime","timezone","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/date-math":{"post":{"operationId":"date_math","summary":"Timezone-aware date arithmetic: add or subtract a duration to a datetime (days are calendar-based and DST-safe; hours and minutes are absolute), or compute the difference between two datetimes that may be in different zones. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"Base datetime: ISO 8601 or natural language."},"timezone":{"type":"string","description":"IANA timezone the base datetime is in."},"operation":{"type":"object","properties":{"type":{"type":"string","enum":["add","diff"],"description":"'add' to shift the datetime by a duration, or 'diff' to measure the gap between two datetimes."},"amount":{"type":"number","description":"For type 'add': how much to shift. Use a negative number to subtract."},"unit":{"type":"string","enum":["seconds","minutes","hours","days","weeks"],"description":"For type 'add': one of seconds, minutes, hours, days, weeks."},"to_datetime":{"type":"string","description":"For type 'diff': the second datetime (ISO 8601 or natural language)."},"to_timezone":{"type":"string","description":"For type 'diff': the IANA timezone of to_datetime (defaults to the base timezone)."}},"required":["type"],"additionalProperties":false,"description":"What to compute: { type:'add', amount, unit } to add/subtract a duration, or { type:'diff', to_datetime, to_timezone? } for the difference between two datetimes."}},"required":["datetime","timezone","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/find-meeting-slots":{"post":{"operationId":"find_meeting_slots","summary":"Find working-hour time slots that overlap across participants in different timezones for a meeting of a given duration, excluding weekends and (when a country is given per participant) that person's public holidays. Free tier returns at most 1 slot; the paid endpoint returns every matching slot (see 'upgrade' in the response). (x402 paid, $0.02 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"participants":{"type":"array","items":{"type":"object","properties":{"timezone":{"type":"string","description":"Participant's IANA timezone, e.g. 'Europe/Madrid'."},"working_hours":{"type":"object","properties":{"start":{"type":"string","description":"Local start time \"HH:mm\" (24h), e.g. \"09:00\"."},"end":{"type":"string","description":"Local end time \"HH:mm\" (24h), e.g. \"17:00\"."}},"required":["start","end"],"additionalProperties":false,"description":"This participant's local working hours. Defaults to 09:00-17:00."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. 'US', 'ES') to exclude that person's public holidays."}},"required":["timezone"],"additionalProperties":false},"minItems":1,"description":"The people to meet. Each participant is { timezone (IANA, required), working_hours? { start, end }, country? (ISO alpha-2) }."},"duration":{"type":"number","description":"Meeting duration in minutes."},"date_range":{"type":"object","properties":{"start":{"type":"string","description":"First date to search \"YYYY-MM-DD\"."},"end":{"type":"string","description":"Last date to search \"YYYY-MM-DD\"."}},"required":["start","end"],"additionalProperties":false,"description":"Inclusive date window to search, e.g. { \"start\":\"2026-07-13\", \"end\":\"2026-07-17\" }."}},"required":["participants","duration","date_range"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.02 USDC on Base."}}}},"/paid/find-meeting-slots":{"post":{"operationId":"find_meeting_slots","summary":"Find working-hour time slots that overlap across participants in different timezones for a meeting of a given duration, excluding weekends and (when a country is given per participant) that person's public holidays. Free tier returns at most 1 slot; the paid endpoint returns every matching slot (see 'upgrade' in the response). (x402 paid, $0.02 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"participants":{"type":"array","items":{"type":"object","properties":{"timezone":{"type":"string","description":"Participant's IANA timezone, e.g. 'Europe/Madrid'."},"working_hours":{"type":"object","properties":{"start":{"type":"string","description":"Local start time \"HH:mm\" (24h), e.g. \"09:00\"."},"end":{"type":"string","description":"Local end time \"HH:mm\" (24h), e.g. \"17:00\"."}},"required":["start","end"],"additionalProperties":false,"description":"This participant's local working hours. Defaults to 09:00-17:00."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. 'US', 'ES') to exclude that person's public holidays."}},"required":["timezone"],"additionalProperties":false},"minItems":1,"description":"The people to meet. Each participant is { timezone (IANA, required), working_hours? { start, end }, country? (ISO alpha-2) }."},"duration":{"type":"number","description":"Meeting duration in minutes."},"date_range":{"type":"object","properties":{"start":{"type":"string","description":"First date to search \"YYYY-MM-DD\"."},"end":{"type":"string","description":"Last date to search \"YYYY-MM-DD\"."}},"required":["start","end"],"additionalProperties":false,"description":"Inclusive date window to search, e.g. { \"start\":\"2026-07-13\", \"end\":\"2026-07-17\" }."}},"required":["participants","duration","date_range"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.02 USDC on Base."}}}},"/v1/is-holiday":{"post":{"operationId":"is_holiday","summary":"Check whether a given date is a public holiday in a country (identified by its ISO 3166-1 alpha-2 code), and return the holiday name if so. Backed by the Nager.Date public-holiday dataset. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","description":"Date \"YYYY-MM-DD\"."},"country_code":{"type":"string","description":"ISO country code, e.g. \"US\", \"ES\", \"IN\"."}},"required":["date","country_code"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/is-holiday":{"post":{"operationId":"is_holiday","summary":"Check whether a given date is a public holiday in a country (identified by its ISO 3166-1 alpha-2 code), and return the holiday name if so. Backed by the Nager.Date public-holiday dataset. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","description":"Date \"YYYY-MM-DD\"."},"country_code":{"type":"string","description":"ISO country code, e.g. \"US\", \"ES\", \"IN\"."}},"required":["date","country_code"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/web-scraper":{"post":{"operationId":"web_scraper","summary":"Fetch any public web page and return its main content as clean, token-efficient Markdown (title, description, headings, links, lists). Set render:true to execute JavaScript first for single-page apps or JS-heavy pages that would otherwise come back empty. Built for RAG and for agents that need to read the contents of a URL. (x402 paid, $0.004 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Full http/https URL of the page to extract."},"render":{"type":"boolean","description":"Render JavaScript with a headless browser before extracting (default false). Enable for SPAs / JS-heavy pages that return empty content otherwise. Slower."},"include_links":{"type":"boolean","description":"Keep hyperlinks in the markdown output (default true)."},"include_images":{"type":"boolean","description":"Keep images as markdown (default false)."},"max_chars":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"Truncate the markdown to at most this many characters (sets truncated:true)."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.004 USDC on Base."}}}},"/paid/web-scraper":{"post":{"operationId":"web_scraper","summary":"Fetch any public web page and return its main content as clean, token-efficient Markdown (title, description, headings, links, lists). Set render:true to execute JavaScript first for single-page apps or JS-heavy pages that would otherwise come back empty. Built for RAG and for agents that need to read the contents of a URL. (x402 paid, $0.004 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Full http/https URL of the page to extract."},"render":{"type":"boolean","description":"Render JavaScript with a headless browser before extracting (default false). Enable for SPAs / JS-heavy pages that return empty content otherwise. Slower."},"include_links":{"type":"boolean","description":"Keep hyperlinks in the markdown output (default true)."},"include_images":{"type":"boolean","description":"Keep images as markdown (default false)."},"max_chars":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"Truncate the markdown to at most this many characters (sets truncated:true)."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.004 USDC on Base."}}}},"/v1/pdf":{"post":{"operationId":"pdf","summary":"Render a public URL or a raw HTML string into a PDF document, returned base64-encoded. Backed by headless Chromium. Use for invoices, reports, receipts and any HTML-to-PDF need. (x402 paid, $0.008 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public http/https URL to render to PDF. Provide this OR html."},"html":{"type":"string","description":"Raw HTML string to render to PDF. Provide this OR url."},"landscape":{"type":"boolean","description":"Landscape orientation (default false = portrait)."},"format":{"type":"string","enum":["A4","Letter","Legal","A3","A5","Tabloid"],"description":"Paper size (default A4)."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.008 USDC on Base."}}}},"/paid/pdf":{"post":{"operationId":"pdf","summary":"Render a public URL or a raw HTML string into a PDF document, returned base64-encoded. Backed by headless Chromium. Use for invoices, reports, receipts and any HTML-to-PDF need. (x402 paid, $0.008 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public http/https URL to render to PDF. Provide this OR html."},"html":{"type":"string","description":"Raw HTML string to render to PDF. Provide this OR url."},"landscape":{"type":"boolean","description":"Landscape orientation (default false = portrait)."},"format":{"type":"string","enum":["A4","Letter","Legal","A3","A5","Tabloid"],"description":"Paper size (default A4)."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.008 USDC on Base."}}}},"/v1/screenshot":{"post":{"operationId":"screenshot","summary":"Capture a PNG screenshot of any public URL — full page or just the viewport, at a chosen size — returned base64-encoded. Backed by headless Chromium. (x402 paid, $0.006 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public http/https URL to capture."},"full_page":{"type":"boolean","description":"Capture the entire scrollable page instead of just the viewport (default false)."},"width":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"Viewport width in pixels (default 1280)."},"height":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"Viewport height in pixels (default 800)."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.006 USDC on Base."}}}},"/paid/screenshot":{"post":{"operationId":"screenshot","summary":"Capture a PNG screenshot of any public URL — full page or just the viewport, at a chosen size — returned base64-encoded. Backed by headless Chromium. (x402 paid, $0.006 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public http/https URL to capture."},"full_page":{"type":"boolean","description":"Capture the entire scrollable page instead of just the viewport (default false)."},"width":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"Viewport width in pixels (default 1280)."},"height":{"type":"integer","exclusiveMinimum":true,"minimum":0,"description":"Viewport height in pixels (default 800)."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.006 USDC on Base."}}}},"/v1/qr-code":{"post":{"operationId":"qr_code","summary":"Generate a QR code for any text or URL. Returns an inline SVG plus a data URI, with selectable size, quiet-zone margin and error-correction level. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Text or URL to encode in the QR code."},"size":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":40,"description":"Pixel size of each QR module/cell in the SVG (default 6)."},"margin":{"type":"integer","minimum":0,"maximum":20,"description":"Quiet-zone margin around the code, in cells (default 4)."},"ec_level":{"type":"string","enum":["L","M","Q","H"],"description":"Error-correction level: L(7%), M(15%), Q(25%), H(30%). Default M."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/qr-code":{"post":{"operationId":"qr_code","summary":"Generate a QR code for any text or URL. Returns an inline SVG plus a data URI, with selectable size, quiet-zone margin and error-correction level. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Text or URL to encode in the QR code."},"size":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":40,"description":"Pixel size of each QR module/cell in the SVG (default 6)."},"margin":{"type":"integer","minimum":0,"maximum":20,"description":"Quiet-zone margin around the code, in cells (default 4)."},"ec_level":{"type":"string","enum":["L","M","Q","H"],"description":"Error-correction level: L(7%), M(15%), Q(25%), H(30%). Default M."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/convert-units":{"post":{"operationId":"convert_units","summary":"Convert a value between units of the same category: length, mass, volume, speed, area, digital storage, time, and temperature (Celsius/Fahrenheit/Kelvin). (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"number","description":"The numeric value to convert."},"from":{"type":"string","description":"Source unit, e.g. 'km', 'mi', 'kg', 'lb', 'C', 'F', 'GB', 'm/s'."},"to":{"type":"string","description":"Target unit in the SAME category as 'from', e.g. 'mi', 'km', 'lb', 'F'."}},"required":["value","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/convert-units":{"post":{"operationId":"convert_units","summary":"Convert a value between units of the same category: length, mass, volume, speed, area, digital storage, time, and temperature (Celsius/Fahrenheit/Kelvin). (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"number","description":"The numeric value to convert."},"from":{"type":"string","description":"Source unit, e.g. 'km', 'mi', 'kg', 'lb', 'C', 'F', 'GB', 'm/s'."},"to":{"type":"string","description":"Target unit in the SAME category as 'from', e.g. 'mi', 'km', 'lb', 'F'."}},"required":["value","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/convert-currency":{"post":{"operationId":"convert_currency","summary":"Convert an amount between currencies using live daily exchange rates (ISO 4217 codes, e.g. USD, EUR, GBP, JPY). Returns the converted amount and the rate used. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number","description":"The amount of money to convert."},"from":{"type":"string","minLength":3,"maxLength":3,"description":"Source currency ISO 4217 code, e.g. 'USD', 'EUR'."},"to":{"type":"string","minLength":3,"maxLength":3,"description":"Target currency ISO 4217 code, e.g. 'EUR', 'JPY'."}},"required":["amount","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/convert-currency":{"post":{"operationId":"convert_currency","summary":"Convert an amount between currencies using live daily exchange rates (ISO 4217 codes, e.g. USD, EUR, GBP, JPY). Returns the converted amount and the rate used. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number","description":"The amount of money to convert."},"from":{"type":"string","minLength":3,"maxLength":3,"description":"Source currency ISO 4217 code, e.g. 'USD', 'EUR'."},"to":{"type":"string","minLength":3,"maxLength":3,"description":"Target currency ISO 4217 code, e.g. 'EUR', 'JPY'."}},"required":["amount","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/v1/summarize":{"post":{"operationId":"summarize","summary":"Summarize a block of text into a short abstract, with an optional target length. Runs on Cloudflare Workers AI — no external API key. (x402 paid, $0.003 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to summarize."},"max_words":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":400,"description":"Approximate maximum length of the summary, in words (default ~80)."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.003 USDC on Base."}}}},"/paid/summarize":{"post":{"operationId":"summarize","summary":"Summarize a block of text into a short abstract, with an optional target length. Runs on Cloudflare Workers AI — no external API key. (x402 paid, $0.003 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to summarize."},"max_words":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":400,"description":"Approximate maximum length of the summary, in words (default ~80)."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.003 USDC on Base."}}}},"/v1/classify":{"post":{"operationId":"classify","summary":"Classify a text into exactly one of the candidate labels you provide (e.g. sentiment, topic, intent). Runs on Cloudflare Workers AI. (x402 paid, $0.002 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to classify."},"labels":{"type":"array","items":{"type":"string","minLength":1},"minItems":2,"maxItems":20,"description":"Candidate labels to choose from, e.g. ['positive','negative','neutral']."}},"required":["text","labels"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.002 USDC on Base."}}}},"/paid/classify":{"post":{"operationId":"classify","summary":"Classify a text into exactly one of the candidate labels you provide (e.g. sentiment, topic, intent). Runs on Cloudflare Workers AI. (x402 paid, $0.002 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to classify."},"labels":{"type":"array","items":{"type":"string","minLength":1},"minItems":2,"maxItems":20,"description":"Candidate labels to choose from, e.g. ['positive','negative','neutral']."}},"required":["text","labels"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.002 USDC on Base."}}}},"/v1/extract-entities":{"post":{"operationId":"extract_entities","summary":"Extract named entities from text — people, organizations, locations, dates and miscellaneous — returned as structured JSON. Runs on Cloudflare Workers AI. (x402 paid, $0.003 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to extract named entities from."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.003 USDC on Base."}}}},"/paid/extract-entities":{"post":{"operationId":"extract_entities","summary":"Extract named entities from text — people, organizations, locations, dates and miscellaneous — returned as structured JSON. Runs on Cloudflare Workers AI. (x402 paid, $0.003 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to extract named entities from."}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.003 USDC on Base."}}}},"/v1/shorten":{"post":{"operationId":"shorten","summary":"Shorten a long URL into a compact api.agishub.com/s/<code> link that redirects to the original. Codes are stored for a year. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The long http/https URL to shorten."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}},"/paid/shorten":{"post":{"operationId":"shorten","summary":"Shorten a long URL into a compact api.agishub.com/s/<code> link that redirects to the original. Codes are stored for a year. (x402 paid, $0.001 USDC on Base).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The long http/https URL to shorten."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success."},"402":{"description":"Payment required (x402): $0.001 USDC on Base."}}}}}}