OpenVerbs

On-demand tools for AI agents.

OpenVerbs is a catalog of small HTTP tools for AI agents. Each tool does one job and returns JSON in one request. Agents pay per successful call over x402 or MPP. No accounts, no API keys, no subscriptions.

  • Pay as you go. Pay only for successful calls, settled in USDC on Base. No plans, minimums, or invoices.
  • Two payment rails, one URL. x402 and MPP are served from the same endpoint, so agents can use the rail they support.
  • One request, one JSON answer. Each tool runs synchronously and returns a result without polling, jobs, or callbacks.
  • Invalid input is free. Malformed requests are rejected with a 400 before any charge. A valid no-match returns 200 as a normal result.
91
live verbs
411
operations

How it works

Every verb is a small HTTP tool with a POST endpoint on its own subdomain. A call that carries payment runs once and returns 200 in a single request. A call without payment returns 402 Payment Required with x402 and MPP terms in the headers, so a client can learn the price, pay, and continue. Malformed input is rejected with a free 400 before any payment.

1 · Discover

Read the terms

Fetch /.well-known/x402 or /openapi.json for any verb to learn its operations and price. No payment needed.

2 · Pay

Settle per call

Your x402 or MPP client pays the exact USDC price for that one request. Nothing to sign up for.

3 · Call

Get your answer

The tool runs synchronously and returns a JSON result. A well-formed no-match is a successful 200, never an error.

Quick start

Point an x402 or MPP client at any tool URL. The endpoint is the same for both rails, and a primed client pays in a single request. Here is the shape of a paid call:

# 1) Discover terms once, for free (x402 or MPP)
curl https://hash.openverbs.com/.well-known/x402
curl https://hash.openverbs.com/.well-known/mpp

# 2) Pay + call in one request. Your client attaches the payment header.
#    x402: X-PAYMENT (serve-then-settle). MPP: Authorization: Payment (pay-then-serve).
curl -X POST https://hash.openverbs.com/v1/hash \
  -H 'content-type: application/json' \
  -d '{ ... }'
# -> 200 with the result. A call with no payment header returns 402 + terms.

The catalog

411 operations across 91 tools and 16 categories. Search by tool, endpoint, title, description, or category, or filter by category, then open the OpenAPI document for details.

Showing all 411 endpoints across 91 tools in 16 categories.

business 3 tools, 31 endpoints

gleif gleif.openverbs.com 3 endpoints
/v1/lookup
Look up a legal entity by LEI
Resolve a 20-character Legal Entity Identifier (LEI, ISO 17442) to its authoritative entity record: verified legal name, registration status (ISSUED/LAPSED/RETIRED), entity status, jurisdiction, legal form, registration number, legal and headquarters addresses, key dates (registration, last update, next renewal), managing LOU, corroboration level and any BIC codes. ISO 7064 check digits are verified before payment.
Inputslei*string
Returns{ lei, found, legalName, registrationStatus, entityStatus, jurisdiction, legalForm, registeredAs, category, country, legalAddress, headquartersAddress, initialRegistrationDate, lastUpdateDate, nextRenewalDate, managingLou, corroborationLevel, bic, source, stale, cachedAt? }
$0.006
/v1/search
Search entities by legal name
Find Legal Entity Identifiers by legal name, optionally filtered to an ISO 3166-1 alpha-2 country. Returns matching entities with their LEI, verified legal name, registration status, jurisdiction and city/country - the reverse of lookup, for when you have a company name but need its authoritative LEI and legal identity.
Inputsname*stringcountrystringlimitinteger
Returns{ query, country, count, total, results: [{ lei, legalName, registrationStatus, jurisdiction, country, city }], source, stale, cachedAt? }
$0.006
/v1/parents
Corporate parents by LEI
Resolve a legal entity's direct and ultimate accounting-consolidating parents from GLEIF's global CC0 LEI registry. Returns parent names and LEIs, relationship status, corroboration and explicit reporting exceptions. Useful for counterparty and corporate-group diligence. Not beneficial-owner identities or ownership percentages. LEI checksum validated before payment; stale results flagged.
Inputslei*string
Returns{ lei, found, legalName, asOf, directParent, ultimateParent, source, stale, cachedAt? }. Each parent reports status, LEI/name/country, relationship type/status, lastUpdated, corroborationLevel and exceptionReason/exceptionReference. Nonreporting is not proof of no owner
$0.006
products products.openverbs.com 4 endpoints
/v1/amazon-search
Amazon Product Search API
Amazon product search API - search Amazon products / find products on Amazon by keyword (US). Live Amazon product data: ranked listings with ASIN, title, product URL, image, price range, currency, star rating, review count and Amazon's Choice / Best Seller flags. No matches returns empty results.
Inputsq*stringlimitinteger
ReturnsThe total and ranked results, each with rank, asin, title, url and (where present) image, priceFrom, priceTo, currency, rating, reviews, isAmazonChoice, isBestSeller, boughtPastMonth
$0.006
/v1/amazon-product
Amazon Product Detail API (ASIN lookup)
Amazon product detail API (US) by ASIN - Amazon product data for one ASIN: title, product URL, image, price range, discount, currency, star rating, review count, category path, availability and description. Amazon prices and product-detail lookup. Unknown ASIN returns found=false.
Inputsasin*string
Returnsfound, asin, title and (where present) url, image, parentAsin, priceFrom, priceTo, discountPercent, currency, rating, reviews, isAmazonChoice, isAvailable, categories, description, details
$0.006
/v1/amazon-sellers
Amazon Offers & Sellers API
Amazon offers & sellers API (US) by ASIN: the buy-box winner plus third-party sellers, each with seller name, price, regular price, discount, condition (new/used), ships-from and seller rating. Amazon offers and sellers for buy-box tracking and price comparison. No offers returns empty results.
Inputsasin*string
Returnsasin, total and offers, each with rank, seller, isBuyBox and (where present) sellerUrl, shipsFrom, condition, conditionNote, price, regularPrice, discountPercent, currency, displayedPrice, rating, reviews
$0.006
/v1/google-shopping
Google Shopping Product Search API
Google Shopping product search API - search Google Shopping by keyword (US) and get ranked product offers across sellers. Live Google Shopping data: title, product URL, image, seller, price, currency, star rating, review count, Google product id and delivery info. Compare product prices across merchants. No matches returns empty results.
Inputsq*stringlimitinteger
ReturnsThe total and ranked results, each with rank, title and (where present) productId, url, image, seller, price, currency, rating, reviews, delivery
$0.006
seo seo.openverbs.com 24 endpoints
/v1/keyword-ideas
Keyword ideas & search volume
Keyword ideas API: discover related keyword ideas from a seed keyword for keyword research, each with Google monthly search volume, CPC, competition, keyword difficulty and search intent. For content planning and SEO research. No ideas returns empty results.
Inputskeyword*stringlimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe seed, total and results, each with keyword and (where present) volume, cpc, competition, competitionLevel, difficulty, intent, trendYoyPct
$0.04
/v1/related-keywords
Related keywords (SERP expansion)
Related keywords API - expand a seed keyword using Google's "searches related to" graph, returning the related keywords (traversed to a configurable depth) each with monthly search volume, CPC, competition, keyword difficulty and search intent, plus the further related terms branching off each. For content-cluster planning and keyword discovery. No matches returns empty results.
Inputskeyword*stringdepthintegerlimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe seed, total and results, each with keyword and (where present) volume, cpc, competition, competitionLevel, difficulty, intent, trendYoyPct, depth and relatedKeywords
$0.04
/v1/keyword-variations
Keyword variations from a seed phrase
Keyword variations API: expand a seed phrase into keywords containing that phrase, such as 'running shoes' into 'running shoes for women'. Each includes Google monthly search volume, CPC, competition, keyword difficulty and search intent. No matches returns empty results.
Inputskeyword*stringlimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe seed, total and results, each with keyword and (where present) volume, cpc, competition, competitionLevel, difficulty, intent, trendYoyPct
$0.04
/v1/keyword-suggestions
Keyword suggestions for a website
Keyword suggestions API: discover keywords to target from a website or page using Google Ads Keyword Planner data, with monthly search volume, CPC, advertising competition, bid estimates and monthly search history. Unlike ranked-keywords, these are suggestions, not existing rankings. Returns up to 100 keywords. No data returns empty results.
Inputstarget*stringtargetTypestringlimitintegerlocationCodeintegerlanguageCodestring
Returnstarget, targetType, total available suggestions, returned count, and results with keyword, volume, cpc, competitionLevel, competitionIndex, lowTopOfPageBid, highTopOfPageBid and monthlySearches[{year,month,volume}]. Missing metrics are null. Advertising competition is not SEO difficulty
$0.15
/v1/keyword-overview
Keyword metrics overview
Keyword volume API: get exact SEO metrics for a list of keywords you already have: Google monthly search volume, CPC, competition, keyword difficulty and search intent for each. For prioritising a keyword list. Unknown keywords are omitted.
Inputskeywords*arraylocationCodeintegerlanguageCodestring
ReturnsThe total and results, each with keyword and (where present) volume, cpc, competition, competitionLevel, difficulty, intent, trendYoyPct
$0.04
/v1/keyword-volume-history
Keyword search-volume history (monthly)
Keyword volume history API: get Google monthly search volume history for a list of keywords, back to 2019: a per-keyword month-by-month search-volume time series plus current CPC and competition. For spotting seasonality, demand trends and momentum that a single keyword-overview snapshot misses. Up to 10 keywords per call; unknown keywords are omitted.
Inputskeywords*arraylocationCodeintegerlanguageCodestring
ReturnsThe total and results, each with keyword, history (an array of { date: "YYYY-MM", volume } sorted oldest-first) and (where present) current volume, cpc, competition, competitionLevel
$0.15
/v1/search-intent
Keyword search intent
Classify the search intent behind keywords: for each keyword, the dominant intent (informational, navigational, commercial or transactional) with a probability, plus any secondary intents. For mapping a keyword list to funnel stage and content type. Up to 1000 keywords per call.
Inputskeywords*arraylanguageCodestring
ReturnsThe total and results, each with keyword, the dominant intent and probability, and (where present) secondaryIntents (each label + probability)
$0.03
/v1/keyword-difficulty
Bulk keyword difficulty
Keyword difficulty API: get the SEO keyword difficulty score (0-100, how hard it is to rank in Google top 10) for up to 1000 keywords in a single call. For prioritising which keywords to target. Keywords with no data are omitted.
Inputskeywords*arraylocationCodeintegerlanguageCodestring
ReturnsThe total and results, each with keyword and (where present) difficulty
$0.03
/v1/trends
Google Trends search interest
Google Trends search interest for up to 5 terms: a relative 0-100 popularity series over time, with per-keyword average and latest value. For content timing, seasonality and demand research. Optional location (default worldwide), timeframe (7d/30d/90d/12m/5y, default 12m) and type (web/news/youtube). found=false when no data.
Inputskeywords*arraylocationstringtimeframestringtypestring
Returnsinterest[] of { date, values } (relative 0-100 per keyword, in keywords order), plus averages and latest per keyword. found false when Google Trends has no data
$0.03
/v1/ranked-keywords
Keywords a domain ranks for
Get the Google organic keywords a domain already ranks for, each with its ranking position, ranking URL, monthly search volume, CPC, difficulty and search intent. For competitor and site SEO audits. Unknown domain returns empty results.
Inputstarget*stringlimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe target, total and results, each with keyword, position, url and (where present) volume, cpc, difficulty, intent, etv
$0.05
/v1/competitors
Organic search competitors
Find a domain's organic search competitors: rival domains ranking for the same Google keywords, each with the number of common keywords, average position, total ranked keywords and estimated organic traffic. For competitive SEO research. Empty results if none.
Inputstarget*stringlimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe target, total and results, each with domain and (where present) commonKeywords, avgPosition, keywords, etv
$0.05
/v1/serp-competitors
SERP competitors for a keyword set
SERP competitors API - given a set of target Google keywords, find the domains that dominate those search results, each with how many of the keywords they rank for, average and median position, SERP rating, estimated traffic (ETV) and visibility. Unlike a domain-based competitor lookup, this starts from the keywords you want to win. For competitive SEO and content-strategy research. Empty results if none.
Inputskeywords*arraylimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe keywords, total and results, each with domain and (where present) avgPosition, medianPosition, rating, etv, keywordsCount, visibility, relevantSerpItems
$0.05
/v1/page-intersection
Keyword intersection of specific pages
Given a set of specific page URLs, find the Google keywords those pages jointly rank for, with each page's position, URL and estimated traffic (ETV) per keyword, plus search volume, CPC, competition, difficulty and intent. Page-level, not domain-level. Optional exclude_pages narrows to keywords the pages rank for that others do not.
Inputspages*arrayexcludePagesarraylimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe input pages, total and results, each with keyword, its ranks ([{ page, rankAbsolute, rankGroup, type, url, title, etv }] per specified page) and (where present) volume, cpc, competition, competitionLevel, difficulty, intent
$0.05
/v1/keyword-gap
Keyword gap vs a competitor
Keyword gap analysis API - find the Google keywords a competitor ranks for that your domain does not, each with the competitor's ranking position and URL plus monthly search volume, CPC, competition, keyword difficulty and search intent. Surfaces content gaps and keyword opportunities for competitive SEO. Empty results if no gap.
Inputsdomain*stringcompetitor*stringlimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe domain, competitor, total and results, each with keyword, competitorRank, competitorUrl and (where present) volume, cpc, competition, competitionLevel, difficulty, intent, competitorEtv
$0.05
/v1/domain-overview
Domain SEO traffic overview
Domain overview: estimate a domain's Google SEO footprint, total organic and paid keywords, estimated traffic (ETV), traffic cost, and how many keywords rank in the top 3, top 10 and top 100. Fast website and domain SEO traffic overview and audit. Unknown domain returns found=false.
Inputstarget*stringlocationCodeintegerlanguageCodestring
Returnsfound, target and (where present) organic and paid, each with keywords, etv, trafficCostUsd, pos1, top3, top10, top100
$0.04
/v1/traffic-estimate
Bulk website traffic estimate
Website traffic estimator API - estimate monthly Google organic and paid traffic (ETV) and ranked-keyword counts for up to 100 domains in a single call. For competitor analysis, prospect/CRM scoring and bulk domain enrichment. Unknown domains return found=false.
Inputstargets*arraylocationCodeintegerlanguageCodestring
ReturnsThe total and results, each with target, found and (where present) organicEtv, organicKeywords, paidEtv, paidKeywords
$0.05
/v1/backlinks
Backlink profile & domain authority
Get a domain's backlink profile and authority: DataForSEO domain rank, total backlinks, referring domains and main domains, referring pages, broken backlinks and spam score. For link analysis and competitor research. Unknown domain returns found=false.
Inputstarget*string
Returnsfound, target and (where present) rank, backlinks, referringDomains, referringMainDomains, referringPages, referringIps, spamScore, targetSpamScore, brokenBacklinks, externalLinksCount, internalLinksCount, crawledPages, firstSeen, lostDate, cms, country
$0.06
/v1/backlinks-history
Backlink profile history
Get a domain's backlink profile over time: a monthly timeseries of domain rank, total backlinks, new and lost backlinks, referring domains (new/lost/total), referring main domains, broken backlinks and crawled pages. For tracking link velocity and growth or a competitor's link building. Unknown domain returns found=false.
Inputstarget*stringdateFromstringdateTostring
Returnsfound, target, total and history (monthly points), each with date and (where present) rank, backlinks, newBacklinks, lostBacklinks, referringDomains, newReferringDomains, lostReferringDomains, referringMainDomains, referringPages, brokenBacklinks, crawledPages
$0.05
/v1/referring-domains
Referring domains (backlink sources)
List the domains linking to a target, each with DataForSEO domain rank, number of backlinks, dofollow count, referring subdomains, broken backlinks, spam score and first/last seen dates. For backlink audits and link building. Unknown domain returns empty results.
Inputstarget*stringlimitinteger
ReturnsThe target, total and results, each with domain and (where present) rank, backlinks, dofollow, referringDomains, referringPages, brokenBacklinks, spamScore, firstSeen, lostDate
$0.05
/v1/backlink-anchors
Backlink anchor text profile
Backlink anchor text API - list the anchor texts pointing at a domain, each with how many backlinks, referring domains and referring pages use it, the dofollow/nofollow split, DataForSEO rank, spam score and broken-link count. For anchor-text distribution analysis, over-optimization/penalty audits and link-building research. Unknown domain returns empty results.
Inputstarget*stringlimitinteger
ReturnsThe target, total and results, each with anchor and (where present) backlinks, referringDomains, referringMainDomains, referringPages, dofollow, nofollow, rank, spamScore, brokenBacklinks, firstSeen, lostDate
$0.05
/v1/relevant-pages
Top ranking pages of a domain
Relevant pages API - list a domain's best-performing pages in Google, each with page-level organic and paid metrics: ranked keyword count, estimated traffic (ETV), traffic cost and position buckets (pos1/top3/top10/top100). For finding a site's top content, competitor content research and page-level SEO audits. Unknown domain returns empty results.
Inputstarget*stringlimitintegerlocationCodeintegerlanguageCodestring
ReturnsThe target, total and results, each with page and (where present) organic and paid metrics (keywords, etv, trafficCostUsd, pos1, top3, top10, top100)
$0.05
/v1/historical-rank
Domain traffic history (monthly trend)
Historical rank overview API - a monthly time series of a domain's Google organic and paid visibility: ranked keyword count, estimated traffic (ETV), traffic cost and position buckets (pos1/top3/top10/top100) for each month. For tracking a site's SEO trajectory, spotting traffic drops/recoveries and competitor trend analysis. Unknown domain returns an empty series.
Inputstarget*stringlocationCodeintegerlanguageCodestring
ReturnsThe target, count and series, each a month { year, month } with (where present) organic and paid metrics (keywords, etv, trafficCostUsd, pos1, top3, top10, top100)
$0.18
/v1/on-page
On-Page SEO Audit
On-page SEO audit API - crawl a single URL and return its on-page SEO health: overall score, title & meta description, H1, word count, internal/external link and image counts, load timing (LCP, TTI) and a list of detected issues (missing meta, broken status, not-https, images missing alt, slow load, …).
Inputsurl*string
Returns{ url, found, statusCode, onpageScore (0-100), title, description, h1, wordCount, internalLinks, externalLinks, imagesCount, https, timing:{ lcpMs, ttiMs, domCompleteMs, durationMs }, issues[] }. found false if the page could not be fetched
$0.006
/v1/pagespeed
Page Speed & Core Web Vitals
Page speed API - Google PageSpeed Insights (Lighthouse) performance audit for a URL on mobile or desktop. Returns the performance score plus lab Core Web Vitals (LCP, FCP, CLS, TBT, Speed Index, TTI) and, where available, real-user (CrUX) field data. Data source: Google PageSpeed Insights.
Inputsurl*stringstrategystring
Returns{ url, strategy, found, performanceScore (0-100), lab:{ fcpMs, lcpMs, cls, tbtMs, speedIndexMs, ttiMs }, field?:{ overall, fcpMs, lcpMs, cls, inpMs } }. found false if Lighthouse could not analyse the page
$0.006

compute 36 tools, 150 endpoints

bitwise bitwise.openverbs.com 7 endpoints
/v1/and
Bitwise AND
Bitwise AND across two or more non-negative integers (given as decimal strings, evaluated as arbitrary-precision BigInt). Returns the result in decimal, hex and binary.
Inputsvalues*array
Returns{ decimal, hex, binary }
$0.002
/v1/or
Bitwise OR
Bitwise OR across two or more non-negative integers (given as decimal strings, evaluated as arbitrary-precision BigInt). Returns the result in decimal, hex and binary.
Inputsvalues*array
Returns{ decimal, hex, binary }
$0.002
/v1/xor
Bitwise XOR
Bitwise XOR across two or more non-negative integers (given as decimal strings, evaluated as arbitrary-precision BigInt). Returns the result in decimal, hex and binary.
Inputsvalues*array
Returns{ decimal, hex, binary }
$0.002
/v1/not
Bitwise NOT
One's-complement NOT of a non-negative integer within an explicit bit width (two's-complement domain). The value must fit in `width` bits. Returns decimal, hex and binary.
Inputsvalue*stringwidth*integer
Returns{ decimal, hex, binary }
$0.002
/v1/shift
Bit shift
Shift a non-negative integer left or right by `amount` bits. A right shift is logical (fills with zeros). A left shift grows freely unless a `width` is given, in which case the result is masked to that width and the input must fit it. Returns decimal, hex and binary.
Inputsvalue*stringamount*integerdirection*stringwidthinteger
Returns{ decimal, hex, binary }
$0.002
/v1/rotate
Bit rotate
Circularly rotate a non-negative integer left or right within an explicit bit width (bits shifted off one end reappear at the other). The value must fit in `width` bits. Returns decimal, hex and binary.
Inputsvalue*stringamount*integerdirection*stringwidth*integer
Returns{ decimal, hex, binary }
$0.002
/v1/analyze
Analyze bits
Inspect a non-negative integer's bit structure: bit length, set-bit count (population count), trailing-zero count, power-of-two test, and hex/binary representations. An optional width zero-pads the binary form.
Inputsvalue*stringwidthinteger
Returns{ decimal, hex, binary, bitLength, popcount, trailingZeros, isPowerOfTwo }
$0.002
checksum checksum.openverbs.com 4 endpoints
/v1/crc32
CRC-32 (IEEE)
CRC-32 (IEEE 802.3 polynomial, as used by zip, gzip and PNG) over the input payload. Returns the checksum as an unsigned integer and 8-digit hex. Non-cryptographic, for error detection only.
Inputsdata*stringencodingstring
Returns{ checksum, hex }
$0.002
/v1/crc16
CRC-16 (multiple variants)
CRC-16 over the input payload in one of several standard variants (ccitt-false, xmodem, modbus, ibm; default ccitt-false). Returns the checksum as an unsigned integer and 4-digit hex. Non-cryptographic.
Inputsdata*stringencodingstringvariantstring
Returns{ checksum, hex }
$0.002
/v1/adler32
Adler-32
Adler-32 checksum (as used by zlib) over the input payload. Faster than CRC-32 but weaker for short inputs. Returns the checksum as an unsigned integer and 8-digit hex. Non-cryptographic.
Inputsdata*stringencodingstring
Returns{ checksum, hex }
$0.002
/v1/fletcher
Fletcher-16 / Fletcher-32
Fletcher checksum over the input payload, in 16-bit (default) or 32-bit width. Returns the checksum as an unsigned integer and hex. Non-cryptographic.
Inputsdata*stringencodingstringbitsinteger
Returns{ checksum, hex }
$0.002
color color.openverbs.com 4 endpoints
/v1/convert
Convert color
Parse any CSS color and return it as hex, rgb, hsl, hwb, lab, lch and oklch.
Inputscolor*string
ReturnsThe hex value and a formats map (rgb, hsl, hwb, lab, lch, oklch) as CSS strings
$0.002
/v1/contrast
WCAG contrast
Compute the WCAG 2.1 contrast ratio between two colors and whether it passes AA/AAA.
Inputsforeground*stringbackground*string
ReturnsThe contrast ratio and aa/aaa pass flags for normal and large text
$0.002
/v1/scheme
Color scheme
Generate a harmony scheme (complementary, analogous, triadic, tetradic, monochromatic) from a base color.
Inputscolor*stringtype*string
ReturnsThe scheme type, the base hex and the generated colors as hex strings
$0.002
/v1/nearest-named
Nearest named color
Find the nearest CSS named color to a given color, by perceptual distance.
Inputscolor*string
ReturnsThe nearest CSS name, its hex and the perceptual distance (0 = exact)
$0.002
combinatorics combinatorics.openverbs.com 5 endpoints
/v1/factorial
Factorial
Exact factorial n! for 0 ≤ n ≤ 20000, returned as a decimal string with its digit count.
Inputsn*string
Returns{ result, digits } (result is an exact decimal string)
$0.004
/v1/permutations
Permutations (nPr)
Number of ordered arrangements of r items from n, nPr = n!/(n-r)!. Requires r ≤ n and r ≤ 10000.
Inputsn*stringr*string
Returns{ result, digits } (result is an exact decimal string)
$0.004
/v1/combinations
Combinations (nCr)
Binomial coefficient nCr = n!/(r!(n-r)!), the number of unordered r-subsets of n. Requires r ≤ n and min(r, n-r) ≤ 10000.
Inputsn*stringr*string
Returns{ result, digits } (result is an exact decimal string)
$0.004
/v1/multinomial
Multinomial coefficient
Multinomial coefficient (k1+k2+…)! / (k1! k2! …), the number of ways to partition n = Σki items into labelled groups of the given sizes. The sum must be ≤ 20000.
Inputsgroups*array
Returns{ result, n, digits }
$0.004
/v1/catalan
Catalan number
The n-th Catalan number Cₙ = C(2n, n)/(n+1), counting balanced bracketings, binary trees, and many other structures. Requires n ≤ 10000.
Inputsn*string
Returns{ result, digits } (result is an exact decimal string)
$0.004
data data.openverbs.com 6 endpoints
/v1/query
Query JSON with JMESPath
Evaluate a JMESPath expression against a JSON value and return the selected/projected result. A malformed expression is rejected before payment.
Inputsdata*anyexpression*string
ReturnsThe JMESPath result as result (null when the expression selects nothing)
$0.004
/v1/diff
Diff two JSON documents
Compute the RFC 6902 JSON Patch that transforms `source` into `target`. The patch is a minimal array of add/remove/replace operations.
Inputssource*anytarget*any
ReturnsThe RFC 6902 JSON Patch as patch (an array of operations)
$0.004
/v1/patch
Apply a JSON Patch
Apply an RFC 6902 JSON Patch to a JSON document and return the result. An invalid or unresolvable patch (e.g. a failed `test`, or a path that does not exist) is rejected before payment.
Inputsdata*anypatch*array
ReturnsThe patched document as result
$0.004
/v1/merge
Deep-merge JSON documents
Deep-merge an ordered list of JSON documents, left to right. Objects are merged key-by-key; arrays, scalars and null in a later document replace the earlier value (last-wins, no array concatenation).
Inputsdocuments*array
ReturnsThe merged document as result
$0.004
/v1/flatten
Flatten a nested object
Flatten a nested object/array into a single-level object whose keys are the delimited paths to each leaf (default delimiter `.`). Requires an object or array.
Inputsdata*anydelimiterstring
ReturnsThe flattened single-level object as result
$0.004
/v1/unflatten
Unflatten a delimited object
Rebuild a nested object from a single-level object whose keys are delimited paths (default delimiter `.`), the inverse of flatten. Requires a flat object.
Inputsdata*anydelimiterstring
ReturnsThe reconstructed nested object as result
$0.004
datetime datetime.openverbs.com 13 endpoints
/v1/convert
Convert timezone
Convert an ISO datetime into another timezone, with offset, weekday and Unix time.
Inputsdatetime*stringfromstringto*string
ReturnsThe converted iso datetime in the to zone, its offset, weekday, unix seconds and resolved from zone
$0.002
/v1/business-days
Business-day math
Add/subtract business days to a date, or count business days between two dates, skipping weekends and optional holidays.
Inputsstart*stringdaysintegerendstringtimezonestringweekendarrayholidaysarray
ReturnsIn add mode the resulting end date; in count mode the number of businessDays between start and end
$0.002
/v1/parse
Parse an ISO 8601 duration
Parse an ISO 8601 duration such as 'P1Y2M10DT2H30M' into its components. Returns a normalized ISO string and totalSeconds, but totalSeconds is null when the duration contains years or months, because those are calendar-variable (use /v1/add or /v1/between for exact date math).
Inputsduration*string
Returns{ sign, components, calendarDependent, totalSeconds, iso }
$0.002
/v1/format
Build an ISO 8601 duration
Assemble an ISO 8601 duration string from individual components (years, months, weeks, days, hours, minutes, seconds) and an optional sign. All components must be non-negative and at least one must be non-zero.
Inputsyearsnumbermonthsnumberweeksnumberdaysnumberhoursnumberminutesnumbersecondsnumbersigninteger
Returns{ iso }
$0.002
/v1/humanize
Humanize an ISO 8601 duration
Render an ISO 8601 duration as an English phrase, e.g. 'P1Y2M' → '1 year and 2 months'. Components are shown in descending order with correct pluralization.
Inputsduration*string
Returns{ text }
$0.002
/v1/add
Add a duration to a date
Add an ISO 8601 duration to a start date or date-time and return the resulting UTC instant. Calendar-aware: months and years honor month lengths (e.g. Jan 31 + P1M clamps to the last day of February). A negative-signed duration subtracts.
Inputsstart*stringduration*string
Returns{ result, epochSeconds }
$0.002
/v1/between
Duration between two dates
Compute the calendar breakdown (years, months, days, hours, minutes, seconds) between two ISO 8601 dates/date-times, plus exact totalSeconds. If end precedes start the result is flagged negative rather than erroring.
Inputsstart*stringend*string
Returns{ negative, components, totalSeconds, iso }
$0.002
/v1/to-jdn
Date → Julian Day Number
Convert a proleptic-Gregorian calendar date to its Julian Day Number (the integer count of days since JDN 0, 1 January 4713 BC in the proleptic Julian calendar).
Inputsyear*integermonth*integerday*integer
Returns{ jdn }
$0.004
/v1/from-jdn
Julian Day Number → date
Convert a Julian Day Number back to a proleptic-Gregorian date, with the ISO weekday (1=Monday..7=Sunday) and its name.
Inputsjdn*integer
Returns{ year, month, day, weekday, weekdayName }
$0.004
/v1/weekday
Day of week
Return the ISO weekday (1=Monday..7=Sunday) and its name for a Gregorian date.
Inputsyear*integermonth*integerday*integer
Returns{ weekday, weekdayName }
$0.004
/v1/iso-week
ISO-8601 week number
Return the ISO-8601 week-numbering year, week number (1..53) and weekday (1=Monday..7=Sunday) for a Gregorian date. The ISO year can differ from the calendar year around New Year.
Inputsyear*integermonth*integerday*integer
Returns{ isoYear, week, weekday }
$0.004
/v1/easter
Gregorian Easter
Compute the date of Western (Gregorian) Easter Sunday for a year in 1583..9999 using the Anonymous Gregorian computus.
Inputsyear*integer
Returns{ year, month, day, weekdayName }
$0.004
/v1/day-of-year
Day of year
Return the ordinal day of the year (1..366), the number of days in that year and whether it is a leap year.
Inputsyear*integermonth*integerday*integer
Returns{ dayOfYear, daysInYear, leapYear }
$0.004
distribution distribution.openverbs.com 4 endpoints
/v1/normal
Normal (Gaussian) distribution
Normal distribution with optional mean (default 0) and standard deviation sd (default 1). `function` selects the density (pdf), cumulative distribution (cdf) or quantile / inverse-CDF.
Inputsfunction*stringx*numbermeannumbersdnumber
Returns{ value }
$0.004
/v1/t
Student's t distribution
Student's t distribution with df degrees of freedom (> 0). `function` selects the density (pdf), cumulative distribution (cdf) or quantile / inverse-CDF.
Inputsfunction*stringx*numberdf*number
Returns{ value }
$0.004
/v1/binomial
Binomial distribution
Binomial distribution with `trials` (n ≥ 0, ≤ 1e6) and success `probability` (0..1). `function` selects the mass (pmf), cumulative distribution (cdf) or quantile / inverse-CDF.
Inputsfunction*stringx*numbertrials*integerprobability*number
Returns{ value }
$0.004
/v1/poisson
Poisson distribution
Poisson distribution with rate `lambda` (> 0, ≤ 1e9). `function` selects the mass (pmf), cumulative distribution (cdf) or quantile / inverse-CDF.
Inputsfunction*stringx*numberlambda*number
Returns{ value }
$0.004
finance finance.openverbs.com 6 endpoints
/v1/loan
Loan amortization
Compute the level monthly payment, total paid and total interest of a fully-amortizing loan. Handles a 0% rate. Set schedule=true to also return the full month-by-month amortization table.
Inputsprincipal*numberannualRatePercent*numbertermMonths*integerscheduleboolean
Returns{ monthlyPayment, totalPaid, totalInterest, schedule? }
$0.004
/v1/interest
Simple / compound interest
Grow a principal by simple or compound interest over a number of years. Compound interest uses compoundsPerYear compounding periods (default 12, monthly).
Inputsprincipal*numberannualRatePercent*numberyears*numbermethodstringcompoundsPerYearinteger
Returns{ method, amount, interest }
$0.004
/v1/future-value
Future value
Future value of a present sum and/or a level annuity, given a per-period rate and number of periods. Set dueAtBeginning=true for an annuity-due (payments at the start of each period).
InputsratePercent*numberperiods*integerpaymentnumberpresentValuenumberdueAtBeginningboolean
Returns{ futureValue }
$0.004
/v1/present-value
Present value
Present value of a future sum and/or a level annuity, given a per-period rate and number of periods. Set dueAtBeginning=true for an annuity-due.
InputsratePercent*numberperiods*integerpaymentnumberfutureValuenumberdueAtBeginningboolean
Returns{ presentValue }
$0.004
/v1/npv
Net present value
Net present value of a series of cash flows discounted at a per-period rate. cashflows[0] is the time-0 flow (typically the initial outlay, negative).
InputsratePercent*numbercashflows*array
Returns{ npv }
$0.004
/v1/irr
Internal rate of return
Internal rate of return (per period) of a series of cash flows, solved with a bounded bisection. Requires at least one positive and one negative flow; flows with no sign change or no bracketable root are rejected as a clean 400.
Inputscashflows*array
Returns{ ratePercent }
$0.004
format format.openverbs.com 5 endpoints
/v1/convert
Convert structured data
Transcode a document between json, json5, jsonc, yaml, xml, csv, tsv, toml, ndjson, ini, env, properties, plist and querystring. Any source converts to any target through a JSON hub. Malformed input or a target that cannot represent the structure is rejected before payment.
Inputsfrom*stringto*stringdata*stringoptionsobject
ReturnsThe converted document as data, plus the from and to formats
$0.004
/v1/validate
Validate against a JSON Schema
Parse a document (json, json5, jsonc, yaml, xml, csv, tsv, toml, ndjson, ini, env, properties, plist or querystring) and validate it against a JSON Schema. Returns whether it is valid and a list of precise, path-tagged errors. Malformed input or an invalid schema is rejected before payment.
Inputsdata*stringfromstringschema*object
ReturnsWhether the document is valid, the from format it was parsed as, and an errors array of {path, message, keyword}
$0.004
/v1/detect
Detect the format of a blob
Sniff which structured format an unknown document is. Because formats overlap, returns every plausible format with a 0, 1 score plus the best guess, honest about ambiguity rather than pretending certainty.
Inputsdata*string
ReturnsThe best-guess format (or null), its score, and the ranked candidates array of {format, score}
$0.004
/v1/infer-schema
Infer a JSON Schema
Infer a JSON Schema (draft-07) from a sample document in any supported format. Types are inferred, present keys are marked required, and heterogeneous array item schemas are merged. The result validates out of the box with /v1/validate.
Inputsdata*stringfromstring
ReturnsThe inferred JSON schema (draft-07) and the from format the sample was parsed as
$0.004
/v1/canonicalize
Canonicalize JSON (RFC 8785)
Parse a document (in any format) and re-emit it in the RFC 8785 JSON Canonicalization Scheme form, sorted keys, canonical number/string formatting, plus the SHA-256 of the canonical bytes for stable hashing, signing and dedup.
Inputsdata*stringfromstring
ReturnsThe canonical JSON string data, its sha256 (hex), and the from format it was parsed as
$0.004
fraction fraction.openverbs.com 4 endpoints
/v1/simplify
Simplify a fraction
Reduce a fraction to lowest terms and describe it: numerator/denominator (denominator normalized positive), sign, whether it is an integer, and a mixed-number form when improper. A zero denominator is a clean 400.
Inputsnumerator*integerdenominatorinteger
Returns{ numerator, denominator, sign, isInteger, mixed }
$0.002
/v1/arithmetic
Fraction arithmetic
Add, subtract, multiply or divide two fractions and return the exact, fully-reduced result. All computation is done in BigInt so there is no floating-point error. Dividing by a zero fraction is a clean 400.
Inputsa*objectb*objectoperation*string
Returns{ numerator, denominator, sign, isInteger, mixed }
$0.002
/v1/from-decimal
Decimal to fraction
Convert a decimal string to an exact reduced fraction. For a repeating decimal, set repeat to the number of trailing fractional digits that repeat (e.g. value='0.1666', repeat=1 → 1/6; value='0.3', repeat=1 → 1/3). A non-numeric value is a clean 400.
Inputsvalue*stringrepeatinteger
Returns{ numerator, denominator, sign, isInteger, mixed }
$0.002
/v1/to-decimal
Fraction to decimal
Expand a fraction to its decimal form by exact long division, detecting a repeating cycle and rendering it in parenthesis notation (e.g. 1/6 → '0.1(6)', 1/7 → '0.(142857)'). maxDigits caps a non-repeating expansion. A zero denominator is a clean 400.
Inputsnumerator*integerdenominatorintegermaxDigitsinteger
Returns{ value, terminating, repeating }
$0.002
geometry geometry.openverbs.com 5 endpoints
/v1/circle
Circle
Diameter, circumference and area of a circle from its radius.
Inputsradius*number
Returns{ radius, diameter, circumference, area }
$0.004
/v1/rectangle
Rectangle
Area, perimeter and diagonal of a rectangle from its width and height.
Inputswidth*numberheight*number
Returns{ width, height, area, perimeter, diagonal }
$0.004
/v1/triangle
Triangle (SSS)
Area (Heron's formula), perimeter and interior angles of a triangle from its three side lengths. Sides that violate the triangle inequality are rejected as a clean 400.
Inputsa*numberb*numberc*number
Returns{ sides, perimeter, area, angles: { A, B, C } } (degrees)
$0.004
/v1/polygon
Polygon
Area (shoelace formula), perimeter and centroid of a simple polygon given its vertices in order. Vertices are treated as a closed ring (last connects to first).
Inputspoints*array
Returns{ vertices, area, perimeter, centroid: [x, y] }
$0.004
/v1/distance
Point distance
Euclidean, Manhattan and Chebyshev distance between two 2-D points.
Inputsfrom*arrayto*array
Returns{ euclidean, manhattan, chebyshev }
$0.004
geospatial geospatial.openverbs.com 15 endpoints
/v1/to-dms
Decimal degrees → DMS
Convert a decimal-degree latitude/longitude to degrees-minutes-seconds, with hemisphere letters and a formatted string for each axis.
Inputslat*numberlon*number
Returns{ lat:{degrees,minutes,seconds,hemisphere,formatted}, lon:{…} }
$0.002
/v1/parse
Parse a coordinate string
Parse a coordinate string into decimal lat/lon. Accepts a plain decimal pair ('40.4462, -79.9822') or DMS with hemisphere letters ('40°26'46"N 79°58'56"W'). Anything unrecognized is a clean 400.
Inputscoordinate*string
Returns{ lat, lon }
$0.002
/v1/utm
Decimal degrees → UTM
Convert decimal lat/lon to a UTM coordinate (zone, latitude band, hemisphere, easting, northing) on WGS84, including the Norway/Svalbard zone exceptions. Defined for latitudes -80..84.
Inputslat*numberlon*number
Returns{ zone, band, hemisphere, easting, northing }
$0.002
/v1/from-utm
UTM → decimal degrees
Convert a UTM coordinate (zone, hemisphere, easting, northing) back to decimal lat/lon on WGS84.
Inputszone*integerhemisphere*stringeasting*numbernorthing*number
Returns{ lat, lon }
$0.002
/v1/mgrs
Decimal degrees → MGRS
Convert decimal lat/lon to a Military Grid Reference System (MGRS) string on WGS84. Precision is the number of digits per axis (1, 5; 5 = 1-metre resolution, default 5).
Inputslat*numberlon*numberprecisioninteger
Returns{ mgrs, zone, band, square }
$0.002
/v1/from-mgrs
MGRS → decimal degrees
Convert an MGRS grid reference back to decimal lat/lon on WGS84 (the coordinate of the grid cell's south-west corner at the given precision). Whitespace is ignored; a malformed reference is a clean 400.
Inputsmgrs*string
Returns{ lat, lon }
$0.002
/v1/forward
WGS84 → Web Mercator
Project WGS84 longitude/latitude (degrees) to Web Mercator (EPSG:3857) easting/northing in metres. Latitude is clamped to ±85.0511° (the projection's valid extent).
Inputslon*numberlat*number
Returns{ x, y } in metres
$0.002
/v1/inverse
Web Mercator → WGS84
Un-project Web Mercator (EPSG:3857) easting/northing in metres back to WGS84 longitude/latitude in degrees.
Inputsx*numbery*number
Returns{ lon, lat } in degrees
$0.002
/v1/tile
Coordinate → slippy-map tile
Map a WGS84 coordinate at a given zoom (0..30) to its slippy-map (XYZ / Google / OSM) tile x,y and its Bing quadkey.
Inputslon*numberlat*numberzoom*integer
Returns{ z, x, y, quadkey }
$0.002
/v1/tile-bounds
Tile → geographic bounds
Compute the geographic bounding box (west/south/east/north in degrees) of a slippy-map tile z/x/y, plus its Bing quadkey.
Inputsz*integerx*integery*integer
Returns{ west, south, east, north, quadkey }
$0.002
/v1/resolution
Ground resolution & scale
Report the ground resolution (metres per pixel, for 256-px tiles) and the OGC map scale denominator at a zoom level, optionally adjusted for latitude (default equator).
Inputszoom*integerlatnumber
Returns{ metersPerPixel, scaleDenominator }
$0.002
/v1/distance
Great-circle distance
Distance and initial bearing between two coordinates.
Inputsfrom*objectto*object
ReturnsDistance in meters/kilometers/miles/nauticalMiles and the initial bearing in degrees
$0.002
/v1/geohash
Encode geohash
Encode a coordinate to a geohash and return its bounding box and 8 neighbors.
Inputslat*numberlon*numberprecisioninteger
ReturnsThe geohash, its precision, the cell bbox [minLat,minLon,maxLat,maxLon] and its 8 neighbors
$0.002
/v1/timezone
Timezone from coordinate
Resolve the timezone for a latitude/longitude.
Inputslat*numberlon*number
ReturnsThe IANA timezone (e.g. "Europe/Paris") containing the coordinate
$0.002
/v1/point-in-polygon
Point in polygon
Test whether a coordinate falls inside a polygon.
Inputspoint*objectpolygon*array
ReturnsWhether the point is inside the polygon
$0.002
hash hash.openverbs.com 2 endpoints
/v1/hash
Hash data
Compute a cryptographic digest (SHA-2, SHA-3, BLAKE2, and legacy SHA-1/MD5/RIPEMD-160) of some data. The input may be utf8/hex/base64/base64url and the digest is returned as hex/base64/base64url.
Inputsdata*stringalgorithm*stringinputEncodingstringoutputEncodingstring
Returns{ algorithm, hash, outputEncoding }
$0.002
/v1/hmac
HMAC data
Compute a keyed HMAC of some data with a secret key, the standard way to sign and verify webhooks (Stripe, GitHub, etc.) and API requests. Data and key may each be utf8/hex/base64/base64url; the tag is returned as hex/base64/base64url.
Inputsdata*stringkey*stringalgorithm*stringinputEncodingstringkeyEncodingstringoutputEncodingstring
Returns{ algorithm, hmac, outputEncoding }
$0.002
ical ical.openverbs.com 3 endpoints
/v1/parse
Parse iCalendar
Parse an .ics document into structured calendar events (summary, times, location, RRULE, attendees).
Inputsics*string
ReturnsThe calendar metadata and an events[] array of parsed events
$0.002
/v1/expand
Expand recurrence
Expand an RRULE recurrence rule into its occurrence datetimes, with a human-readable description.
Inputsrrule*stringdtstartstringfromstringtostringlimitinteger
ReturnsA human-readable text, the count, and the occurrences[] as ISO datetimes
$0.002
/v1/create
Create iCalendar
Build a valid .ics document from event fields (summary, start/end, location, …).
Inputssummary*stringstart*stringendstringdescriptionstringlocationstringurlstringuidstringallDaybooleanprodIdstringcalendarNamestring
ReturnsThe generated ics document as a string
$0.002
id id.openverbs.com 4 endpoints
/v1/uuid
Generate a UUID (v4/v7)
Generate one or more UUIDs. Supports v4 (random), v1/v7 (time), and v3/v5 (namespaced).
Inputsversionstringcountintegernamespacestringnamestring
ReturnsThe version, count, and the generated uuids array
$0.002
/v1/inspect
Inspect a UUID
Validate a UUID and report its version and variant.
Inputsuuid*string
ReturnsWhether it is valid, the normalized uuid, its version (0, 15) and variant
$0.002
/v1/ulid
Generate a ULID
Generate one or more lexicographically sortable ULIDs (monotonic within a call).
Inputscountintegertimeinteger
ReturnsThe count and the generated ulids array (ascending order)
$0.002
/v1/decode
Decode a ULID
Validate a ULID and extract its embedded timestamp and time/random components.
Inputsulid*string
ReturnsWhether it is valid, the timestamp (ms) and datetime (ISO), and the timeComponent/randomComponent
$0.002
jsonschema jsonschema.openverbs.com 2 endpoints
/v1/validate
Validate against JSON Schema
Validate a JSON value against a JSON Schema (draft-07, with the standard string formats enabled). An invalid schema is rejected as a clean 400 before payment; a valid schema that the data simply fails to satisfy is a successful result with valid=false and a list of errors (path, keyword, message).
Inputsschema*objectdata*any
Returns{ valid, errors: [{ path, keyword, message }] }
$0.004
/v1/infer
Infer schema from a sample
Infer a JSON Schema (draft-07) from an example value, walking objects and arrays recursively. Set detectFormat=true to tag strings that look like date-time/date/email/uri/uuid, requireAll=false to leave object properties optional, and additionalProperties=true to allow extra keys.
Inputssample*anydetectFormatbooleanrequireAllbooleanadditionalPropertiesboolean
Returns{ schema }
$0.004
jwt jwt.openverbs.com 3 endpoints
/v1/decode
Decode a JWT
Decode a JSON Web Token WITHOUT verifying its signature and return the header, payload and signature. A structurally malformed token is rejected before payment. Never trust a decoded payload you have not verified.
Inputstoken*string
ReturnsThe decoded header, payload and signature (unverified)
$0.004
/v1/verify
Verify a JWT
Verify a JSON Web Token's signature and claims against a shared secret (HS*) or a PEM public key (RS/ES/PS). Returns { valid, payload } on success or { valid: false, reason } for a bad signature, expired/not-yet-active token, or a failed issuer/audience/subject check. Pass `algorithms` to pin the accepted signing algorithms and prevent algorithm-confusion attacks.
Inputstoken*stringkey*stringalgorithmsarrayissuerstringaudiencestringsubjectstringclockToleranceSecintegerignoreExpirationboolean
Returns{ valid: true, header, payload } or { valid: false, reason, code }
$0.004
/v1/sign
Sign a JWT
Mint a signed JSON Web Token from a JSON claims object, using a shared secret (HS*) or a PEM private key (RS/ES/PS). Supports expiresInSec, notBeforeSec, issuer, audience, subject and keyid. An unusable key or option is rejected before payment.
Inputspayload*objectkey*stringalgorithm*stringexpiresInSecintegernotBeforeSecintegerissuerstringaudiencestringsubjectstringkeyidstringnoTimestampboolean
ReturnsThe signed compact JWT as token
$0.004
math math.openverbs.com 2 endpoints
/v1/eval
Evaluate expression
Evaluate a mathematical expression with optional named variables, arithmetic, comparison and logic operators plus functions like sqrt, abs, min, max, sin, cos, log, floor, round, etc. A syntax error, an undefined variable, or a non-finite result is a clean 400. The factorial operator is disabled for safety.
Inputsexpression*stringvariablesobjectprecisioninteger
Returns{ result, variables }, result is a number, boolean, string or simple array; variables are the names the expression uses
$0.004
/v1/variables
List expression variables
Parse an expression and return the free variables it references, without evaluating it, so an agent can discover which inputs a formula needs before supplying values. A syntax error is a clean 400.
Inputsexpression*string
Returns{ variables }, the names the expression references
$0.004
matrix matrix.openverbs.com 5 endpoints
/v1/multiply
Multiply matrices
Multiply two matrices A·B. The inner dimensions must agree (columns of A equal rows of B); a mismatch or a ragged/empty matrix is a clean 400.
Inputsa*arrayb*array
Returns{ result, rows, cols }
$0.004
/v1/transpose
Transpose a matrix
Transpose a matrix, swapping rows and columns. A ragged/empty matrix is a clean 400.
Inputsmatrix*array
Returns{ result, rows, cols }
$0.004
/v1/determinant
Determinant
Compute the determinant of a square matrix via Gaussian elimination with partial pivoting. A non-square, ragged or empty matrix is a clean 400; a singular matrix simply returns 0.
Inputsmatrix*array
Returns{ determinant }
$0.004
/v1/inverse
Invert a matrix
Invert a square matrix via Gauss-Jordan elimination. A non-square, ragged or empty matrix is a clean 400. A singular (non-invertible) matrix is NOT an error, it returns a successful { invertible:false, inverse:null }.
Inputsmatrix*array
Returns{ invertible, inverse, determinant }
$0.004
/v1/solve
Solve a linear system
Solve the linear system A·x = b for a square coefficient matrix A and vector b via Gaussian elimination with partial pivoting. A non-square A or a b of the wrong length is a clean 400. A singular system is NOT an error, it returns a successful { solvable:false, solution:null }.
Inputsa*arrayb*array
Returns{ solvable, solution }
$0.004
mime mime.openverbs.com 2 endpoints
/v1/lookup
Lookup MIME type
Resolve a filename, path or extension to its MIME type, charset and full Content-Type.
Inputspath*string
ReturnsThe mimeType, its charset and the full contentType (null if unknown)
$0.002
/v1/extension
MIME to extension
Resolve a MIME type to its default file extension.
InputsmimeType*string
ReturnsThe default extension for the type (null if unknown)
$0.002
money money.openverbs.com 4 endpoints
/v1/format
Format currency
Format a numeric amount as currency for a given locale using Intl, honouring the currency's own minor-unit convention (USD→2, JPY→0). display selects the symbol, narrow symbol, ISO code or full name. An unknown currency or locale is a clean 400.
Inputsamount*numbercurrency*stringlocalestringdisplaystring
Returns{ formatted, currency, locale }
$0.002
/v1/parse
Parse money string
Parse a formatted money string back into a number, using the locale's grouping and decimal separators (so '1.234,56' in de-DE → 1234.56). Currency symbols/codes and whitespace are stripped; parentheses or a leading minus mean negative. A string with no numeric amount is a clean 400.
Inputstext*stringlocalestring
Returns{ amount }
$0.002
/v1/round
Round to minor units
Round an amount to a currency's minor units (or an explicit minorUnits) with a chosen rounding mode: half-even (banker's, default), half-up, half-down, ceil, floor or trunc. Give a currency to derive minor units automatically (USD→2, JPY→0).
Inputsamount*numbercurrencystringminorUnitsintegermodestring
Returns{ amount, minorUnits, mode }
$0.002
/v1/allocate
Allocate without losing cents
Split an amount into parts using integer minor-unit math so the shares always sum back to the exact original, no rounding drift. Pass parts for an even split, or ratios for a weighted one (e.g. [1,1,1] splits $100 into 33.34/33.33/33.33). The leftover minor units go to the largest fractional remainders.
Inputsamount*numberpartsintegerratiosarraycurrencystringminorUnitsinteger
Returns{ shares, minorUnits }
$0.002
numeral numeral.openverbs.com 4 endpoints
/v1/radix
Radix (base) conversion
Convert an integer between numeral bases 2, 36 (binary, octal, hex, base36, …). Arbitrary size via BigInt; digits are case-insensitive and a leading minus is allowed.
Inputsvalue*stringfromBase*integertoBase*integer
Returns{ value, fromBase, toBase, result, decimal }
$0.002
/v1/roman
Roman numerals
Convert between integers (1, 3999) and Roman numerals in either direction, a digit string is encoded to Roman, a Roman numeral is decoded to an integer. Non-canonical numerals (IIII, IC) are rejected.
Inputsvalue*string
Returns{ input, direction, integer, roman }
$0.002
/v1/ordinal
Ordinal
Format a non-negative integer as an ordinal, both the suffixed form (21st) and the ordinal words (twenty-first).
Inputsnumber*integer
Returns{ number, ordinal, ordinalWords }
$0.002
/v1/words
Number to words
Spell an integer out in English words, e.g. 123 → "one hundred twenty-three". Negatives are prefixed with "minus".
Inputsnumber*integer
Returns{ number, words }
$0.002
numtheory numtheory.openverbs.com 6 endpoints
/v1/gcd
Greatest common divisor
Greatest common divisor of two or more non-negative integers (arbitrary precision).
Inputsvalues*array
Returns{ result }
$0.004
/v1/lcm
Least common multiple
Least common multiple of two or more positive integers (arbitrary precision).
Inputsvalues*array
Returns{ result }
$0.004
/v1/factorize
Prime factorization
Prime-factorize a positive integer (≤ 10^15 so the computation is always fast). Returns the prime factors with exponents, the divisor count, and whether n is prime.
Inputsn*string
Returns{ n, factors:[{prime,exponent}], isPrime, divisorCount }
$0.004
/v1/is-prime
Primality test
Miller-Rabin primality test (with witnesses that are exact for all 64-bit integers) on an arbitrary-precision integer. Returns { prime }.
Inputsn*string
Returns{ prime }
$0.004
/v1/totient
Euler's totient
Euler's totient φ(n), the count of integers in [1, n] coprime to n, for a positive integer ≤ 10^15 (it is computed from the prime factorization).
Inputsn*string
Returns{ totient }
$0.004
/v1/modpow
Modular exponentiation
Compute (base ^ exponent) mod modulus efficiently for arbitrary-precision integers. The modulus must be positive.
Inputsbase*stringexponent*stringmodulus*string
Returns{ result }
$0.004
otp otp.openverbs.com 4 endpoints
/v1/totp
TOTP (time-based)
Generate an RFC 6238 time-based one-time password from a base32 secret. Uses the current time by default, or an explicit unix timestamp (seconds); configurable period (default 30s), digits (default 6) and algorithm (default SHA1). Also returns the counter and seconds remaining in the window.
Inputssecret*stringtimestampintegerperiodintegerdigitsintegeralgorithmstringt0integer
Returns{ code, counter, period, secondsRemaining }
$0.004
/v1/hotp
HOTP (counter-based)
Generate an RFC 4226 counter-based HMAC one-time password from a base32 secret and counter. Configurable digits (6, 10, default 6) and algorithm (SHA1/SHA256/SHA512, default SHA1). An invalid base32 secret is a clean 400.
Inputssecret*stringcounter*integerdigitsintegeralgorithmstring
Returns{ code, counter }
$0.004
/v1/verify
Verify a TOTP code
Verify a submitted TOTP code against a base32 secret, scanning ±window time steps (default ±1) to tolerate clock drift. Returns valid plus the matching step offset (delta). A code that does not match is a successful result with valid=false, not an error.
Inputssecret*stringcode*stringtimestampintegerperiodintegerdigitsintegeralgorithmstringwindowintegert0integer
Returns{ valid, delta }
$0.004
/v1/uri
Build otpauth:// URI
Build an otpauth:// provisioning URI (the string encoded in authenticator QR codes) for a totp or hotp secret. Includes label, issuer, algorithm, digits and period (totp) or counter (hotp). The secret must be valid base32.
Inputstypestringlabel*stringsecret*stringissuerstringalgorithmstringdigitsintegerperiodintegercounterinteger
Returns{ uri }
$0.004
pack pack.openverbs.com 2 endpoints
/v1/encode
Encode JSON to MessagePack/CBOR
Serialize a JSON value into a compact MessagePack or CBOR byte stream, returned as a base64 (default), base64url or hex string, along with the byte length.
Inputsformat*stringdata*anyoutputEncodingstring
Returns{ format, data, outputEncoding, bytes }, the encoded envelope and its byte length
$0.004
/v1/decode
Decode MessagePack/CBOR to JSON
Decode a MessagePack or CBOR byte stream (supplied as a base64/base64url/hex string) back into a JSON value. A malformed envelope, malformed bytes, or a value that is not JSON-representable is rejected before payment.
Inputsformat*stringdata*stringinputEncodingstring
Returns{ format, value }, the decoded JSON value
$0.004
password password.openverbs.com 2 endpoints
/v1/strength
Password strength
Estimate password strength: score, guesses, crack-time and feedback. Never stored.
Inputspassword*stringuserInputsarray
ReturnsThe score (0, 4), guessesLog10, a crackTime map, and warning/suggestions feedback
$0.002
/v1/generate
Generate password
Generate a secure random password (characters) or a wordlist passphrase.
InputsmodestringlengthintegerlowercasebooleanuppercasebooleandigitsbooleansymbolsbooleanexcludeAmbiguousbooleanwordsintegerseparatorstringcapitalizeboolean
ReturnsThe generated password, the mode used and its entropyBits
$0.002
phone phone.openverbs.com 1 endpoint
/v1/parse
Parse phone number
Parse, validate and format a phone number, E.164/national/international/RFC 3966, region and line type (syntactic validation, no carrier lookup).
Inputsnumber*stringcountrystring
ReturnsWhether the number is valid/possible, its e164/national/international/rfc3966 formats, region, callingCode and line type. An unparseable number returns valid: false with a reason (e.g. NOT_A_NUMBER, TOO_SHORT, INVALID_COUNTRY)
$0.002
qr qr.openverbs.com 3 endpoints
/v1/qr
Generate QR code
Render text (URL, vCard, Wi-Fi config, …) as a QR code, SVG string or PNG data URL.
Inputstext*stringformatstringsizeintegermarginintegereccstring
ReturnsThe generated image (SVG markup or a PNG data: URL) and its format
$0.004
/v1/barcode
Generate barcode
Render a barcode (Code128, Code39, EAN-13/8, UPC-A/E, ITF-14, DataMatrix, PDF417) as SVG or PNG data URL.
Inputstext*stringtype*stringformatstringscaleintegerheightintegerincludeTextboolean
ReturnsThe generated image (SVG markup or a PNG data: URL), its format and the barcode type
$0.004
/v1/decode
Decode QR / barcode
Read the text out of a QR code or barcode in a PNG or JPEG image. Auto-detects QR, DataMatrix, PDF417, Aztec and 1D symbologies (Code128/39/93, EAN-13/8, UPC-A/E, ITF, Codabar). A valid image with no code returns { found: false }; a payload that is not a parseable image is a 400.
Inputsimage*string
Returns{ found, text?, format?, kind? }, kind is "qr" (2D) or "barcode" (1D)
$0.004
random random.openverbs.com 4 endpoints
/v1/bytes
Random bytes
Generate cryptographically-secure random bytes, returned as hex, base64 or base64url.
Inputscount*integerencodingstring
Returns{ count, encoding, data }
$0.002
/v1/integer
Random integers
Generate one or more uniformly-distributed random integers in an inclusive [min, max] range.
Inputsmin*integermax*integercountinteger
Returns{ values }
$0.002
/v1/string
Random string
Generate a random string of a given length from a named charset (alphanumeric, alpha, lower, upper, numeric, hex, base58) or a custom alphabet. Unbiased character selection.
Inputslength*integercharsetstringalphabetstring
Returns{ value, alphabet }
$0.002
/v1/sample
Random sample
Draw a random sample from a provided array, without replacement by default (a fair shuffle), or with replacement when unique is false. count defaults to 1.
Inputsitems*arraycountintegeruniqueboolean
Returns{ items }
$0.002
semver semver.openverbs.com 3 endpoints
/v1/parse
Parse version
Parse a semantic version into major/minor/patch, prerelease and build metadata.
Inputsversion*string
ReturnsWhether it is valid, the normalized version, major/minor/patch, and prerelease/build arrays
$0.002
/v1/compare
Compare versions
Compare two semantic versions and report which is greater (precedence-aware).
Inputsa*stringb*string
ReturnsThe comparison (-1/0/1), a relation (lt/eq/gt) and the greater version
$0.002
/v1/satisfies
Range satisfaction
Test whether a version satisfies a semver range (^, ~, x-ranges, ||, hyphen).
Inputsversion*stringrange*stringincludePrereleaseboolean
ReturnsWhether the version satisfies the range, plus the normalizedRange
$0.002
slug slug.openverbs.com 1 endpoint
/v1/create
Create slug
Convert text into a URL-safe slug: transliterate accents, apply a locale character map, and join with a separator.
Inputstext*stringseparatorstringlowercasebooleanstrictbooleantrimbooleanlocalestring
ReturnsThe generated slug, the original text and the slug length
$0.002
spreadsheet spreadsheet.openverbs.com 4 endpoints
/v1/a1-to-rc
A1 reference → row/column
Parse an A1-style cell reference (e.g. "B3" or "$AA$100") into 1-based row and column numbers, plus the column letters and whether each part is absolute.
Inputsref*string
Returns{ row, column, columnLetters, columnAbsolute, rowAbsolute }
$0.004
/v1/rc-to-a1
Row/column → A1 reference
Build an A1-style cell reference from 1-based row and column numbers, optionally marking the row and/or column absolute ($).
Inputsrow*integercolumn*integerrowAbsolutebooleancolumnAbsoluteboolean
Returns{ ref, columnLetters }
$0.004
/v1/column
Column letter ↔ number
Convert between a spreadsheet column letter and its 1-based index in either direction. Provide exactly one of `letter` (e.g. "AA") or `number` (e.g. 27); the response always contains both.
Inputsletterstringnumberinteger
Returns{ letter, number }
$0.004
/v1/range
Parse an A1 range
Parse an A1 range like "A1:C10" into its start and end cells (normalized so start is the top-left) and its extent, row count, column count and total cell count.
Inputsrange*string
Returns{ start, end, rows, columns, cells, normalized }
$0.004
stats stats.openverbs.com 4 endpoints
/v1/summary
Descriptive summary
Full descriptive summary of a numeric sample: count, sum, min/max/range, mean, median, mode(s), variance, standard deviation and the quartiles (q1/q3/iqr). Set sample=true for the sample variance/stdev (÷ n-1) instead of the population form (÷ n).
Inputsdata*arraysampleboolean
Returns{ count, sum, min, max, range, mean, median, mode, variance, stdev, q1, q3, iqr }
$0.004
/v1/percentile
Percentiles / quantiles
Evaluate one or more percentiles (0, 100) of a numeric sample using linear interpolation between order statistics (the R-7 / Excel PERCENTILE.INC method). 50 is the median, 25/75 the quartiles.
Inputsdata*arraypercentiles*array
Returns{ results: [{ percentile, value }] }
$0.004
/v1/correlation
Pearson correlation
Pearson correlation coefficient and covariance of two equal-length paired series. Rejected as a clean 400 if the lengths differ or either series has zero variance (correlation undefined).
Inputsx*arrayy*array
Returns{ n, pearson, covariance }
$0.004
/v1/regression
Linear regression
Ordinary-least-squares linear regression of y on x: slope, intercept, correlation r and coefficient of determination r². Pass predictAt to also evaluate the fitted line at a given x. Rejected as a clean 400 if lengths differ or x has zero variance.
Inputsx*arrayy*arraypredictAtnumber
Returns{ slope, intercept, r, r2, predict }
$0.004
text text.openverbs.com 4 endpoints
/v1/case
Convert case
Recase a string into camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, Sentence case, Capital Case, Train-Case, no case, Title Case, or plain UPPER/lower, the word boundaries are detected regardless of the input casing.
Inputstext*stringtarget*string
Returns{ text, target }
$0.002
/v1/encode
Encode text
Encode a UTF-8 string into base64, base64url, hex, base32, or URL percent-encoding.
Inputstext*stringencoding*string
Returns{ text, encoding }
$0.002
/v1/decode
Decode text
Decode a base64, base64url, hex, base32, or URL percent-encoded string back into UTF-8 text. Malformed input for the chosen encoding is rejected as a clean 400.
Inputstext*stringencoding*string
Returns{ text, encoding }
$0.002
/v1/diff
Diff text
Diff two texts. The default `unified` mode returns a unified-diff patch string; `lines`, `words`, and `chars` modes return a structured array of added/removed/unchanged parts.
Inputsa*stringb*stringmodestring
Returns{ mode, changed, patch?, parts? }
$0.002
tokens tokens.openverbs.com 1 endpoint
/v1/count
Count tokens
Count the LLM tokens in text for a given model or encoding, exact for OpenAI and open models (Llama, Mistral, Qwen, Gemma, DeepSeek, Command-R); labelled-approximate for Claude & Gemini.
Inputstext*stringmodelstringencodingstring
ReturnsThe token count (tokens) of the text under the resolved tokenizer, the echoed model, characters, and exact (false with a note for Claude/Gemini approximations or an unknown model)
$0.004
unit unit.openverbs.com 2 endpoints
/v1/convert
Convert units
Convert a value between units, length, mass, volume, temperature, area, speed, pressure, energy, power, digital storage, time, angle, frequency and more. Unknown units or a conversion between incompatible measures (e.g. kg → km) are rejected as a clean 400.
Inputsvalue*numberfrom*stringto*string
Returns{ value, from, to, measure }
$0.002
/v1/list
List units
List the supported units and their metadata (abbreviation, measure, system, singular/plural names), optionally filtered to a single measure, a discovery endpoint for choosing valid `from`/`to` values.
Inputsmeasurestring
Returns{ measure?, count, units: [{ abbr, measure, system, singular, plural }] }
$0.002

content 7 tools, 29 endpoints

braille braille.openverbs.com 4 endpoints
/v1/encode
Text to braille
Transcribe text to Unicode braille (grade-1 / uncontracted English braille), with capital and number signs. Characters with no grade-1 representation are clean 400s.
Inputstext*string
Returns{ braille, cellCount }
$0.002
/v1/decode
Braille to text
Transcribe a Unicode braille string back to text, honouring capital and number signs. Non-braille or unmapped cells are clean 400s.
Inputsbraille*string
Returns{ text }
$0.002
/v1/to-dots
Braille cells to dot numbers
Break a braille string into its cells and the raised-dot numbers (1, 8) of each cell.
Inputsbraille*string
Returns{ cells: [{ char, dots }] }
$0.002
/v1/from-dots
Dot numbers to braille cells
Build braille cells from raised-dot numbers (each cell an array of 1, 8). Out-of-range or repeated dots are clean 400s.
Inputscells*array
Returns{ braille, cells: [{ dots, char }] }
$0.002
emoji emoji.openverbs.com 4 endpoints
/v1/lookup
Look up an emoji
Resolve an emoji by its shortcode (e.g. "smile" or ":smile:") or exact name. Provide exactly one field. Returns the emoji, its metadata and code points.
Inputsshortcodestringnamestring
Returns{ emoji, name, category, aliases, tags, codePoints }
$0.002
/v1/search
Search emoji
Fuzzy-search emoji by name, shortcode or keyword tag, ranked exact → prefix → substring.
Inputsquery*stringlimitinteger
Returns{ matches: [{ emoji, name, aliases, tags, codePoints }], count }
$0.002
/v1/info
Inspect an emoji
Given an emoji character (or any string), return its code points and, if known, its name, category, shortcodes and tags. An unknown emoji is a successful result with `known:false`, not an error.
Inputsemoji*string
Returns{ emoji, codePoints, name, category, aliases, tags, known }
$0.002
/v1/flag
Country flag emoji
Build the flag emoji for an ISO 3166-1 alpha-2 country code from its regional-indicator symbols (e.g. "US" → 🇺🇸). Non two-letter codes are clean 400s.
Inputscountry*string
Returns{ country, emoji, codePoints }
$0.002
html html.openverbs.com 4 endpoints
/v1/encode
HTML entity encode
Encode text to HTML entities so it can be safely embedded in markup. By default uses hex numeric references; set useNamedReferences for named entities (&, ©) or encodeEverything to encode every character.
Inputstext*stringuseNamedReferencesbooleanencodeEverythingboolean
Returns{ encoded }
$0.002
/v1/decode
HTML entity decode
Decode HTML entities (named, decimal and hex numeric references) back into plain text.
Inputshtml*string
Returns{ decoded }
$0.002
/v1/strip
Strip HTML to text
Remove all HTML tags, returning the plain text content. Entities are decoded to real characters by default (set decodeEntities=false to keep them encoded).
Inputshtml*stringdecodeEntitiesboolean
Returns{ text }
$0.002
/v1/sanitize
Sanitize HTML
Sanitize untrusted HTML to a safe allowlist. Keeps common formatting and links but removes dangerous scripting tags, inline event handlers and unsafe URL schemes. Ideal for rendering user-supplied HTML.
Inputshtml*string
Returns{ sanitized }
$0.002
inflect inflect.openverbs.com 4 endpoints
/v1/pluralize
Pluralize
Return the plural form of an English word (handles irregulars, person → people, mouse → mice).
Inputsword*string
Returns{ word, plural, isAlreadyPlural }
$0.002
/v1/singularize
Singularize
Return the singular form of an English word (handles irregulars, people → person, mice → mouse).
Inputsword*string
Returns{ word, singular, isAlreadySingular }
$0.002
/v1/count
Count-aware phrasing
Choose the singular or plural form for a given count, e.g. (apple, 3) → "apples", (apple, 1) → "apple". By default the count is prepended ("3 apples"); set includeCount=false to omit it.
Inputsword*stringcount*integerincludeCountboolean
Returns{ word, count, form, result }
$0.002
/v1/case
Case conversion
Split an identifier or phrase into words and render it in every common case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, Title Case and Sentence case. Handles acronyms (HTMLParser → html parser).
Inputstext*string
Returns{ text, words, camel, pascal, snake, kebab, constant, dot, path, title, sentence }
$0.002
markdown markdown.openverbs.com 3 endpoints
/v1/render
Render Markdown
Render GitHub-Flavored Markdown to HTML. Output is sanitized by default (scripts, event handlers and javascript: URLs removed); set sanitize=false to keep raw HTML.
Inputsmarkdown*stringsanitizeboolean
Returns{ html, sanitized }
$0.002
/v1/toc
Table of contents
Extract the heading outline from Markdown, depth, text and a unique GitHub-style anchor slug for each heading. Optionally limit to a maximum heading depth.
Inputsmarkdown*stringmaxDepthinteger
Returns{ headings: [{ depth, text, slug }] }
$0.002
/v1/frontmatter
Parse front-matter
Split YAML front-matter from a document, returns the parsed metadata object and the remaining content body. Malformed YAML is rejected as a clean 400.
Inputstext*string
Returns{ data, content, isEmpty }
$0.002
pdf pdf.openverbs.com 1 endpoint
/v1/extract
PDF Text Extraction
Extract plain text and metadata (title, author, producer, page count) from a PDF supplied by URL or base64, heavy pdf.js parsing an agent can't self-run.
InputsurlstringpdfstringmaxPagesintegerperPageboolean
ReturnsThe source (url|inline), final url, total pages, extractedPages, truncated, characters, the extracted text (and perPage[] when requested), and document info (title/author/subject/keywords/creator/producer/dates/pdfVersion/encrypted)
$0.006
web web.openverbs.com 9 endpoints
/v1/extract
Extract readable content
Fetch a URL and return its main article as clean HTML, Markdown and plain text.
Inputsurl*string
ReturnsThe final url, title, byline, excerpt, siteName, lang, publishedTime, length/wordCount, and the article as content (HTML), markdown and text
$0.006
/v1/unfurl
Unfurl link preview
Fetch a URL and return link-preview metadata from Open Graph, Twitter Card and standard meta tags.
Inputsurl*string
ReturnsThe final url, title, description, siteName, type, image, favicon, themeColor, canonical and author (absolute URLs where applicable)
$0.006
/v1/structured
Extract structured data
Fetch a URL and pull out its machine-readable structured data: all JSON-LD blocks (schema.org), Open Graph and Twitter Card tags, standard named meta tags, and inline microdata items. Also returns the page title, canonical URL, language and the distinct schema.org types found. Ideal for turning a product, article, recipe, event or organization page into structured fields without bespoke scraping.
Inputsurl*string
ReturnsThe final url, title, canonical, lang, schemaTypes (distinct schema.org types), jsonld (parsed JSON-LD objects), openGraph, twitter, meta (named tags) and microdata ([{ type, properties }])
$0.006
/v1/sitemap
Discover and parse sitemaps
Discover a site's XML sitemaps (via robots.txt Sitemap: directives, an explicit sitemap URL, or the conventional /sitemap.xml) and parse them into a bounded list of URLs with their lastmod, changefreq and priority. Follows sitemap-index files to their child sitemaps. Fetches and URL counts are capped (with a `truncated` flag) to stay fast and memory-bounded. The reliable way for an agent to enumerate a site's pages.
Inputsurl*string
ReturnsThe input url, origin, robotsUrl, sitemapUrls (sitemap files parsed), urlCount, urls ([{ loc, lastmod, changefreq, priority }]) and truncated
$0.006
/v1/headers
Inspect HTTP response headers
Fetch a URL (following redirects) and return the final response's HTTP headers, the server banner and content-type, plus a security-header audit reporting HSTS, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy and the cross-origin policies (with the missing ones listed). No body is downloaded or parsed.
Inputsurl*string
ReturnsThe requested url, finalUrl, status, redirected/redirectCount, the full headers map, pulled-out server and contentType, and a security object (each header's value or null, plus missing)
$0.003
/v1/redirects
Trace URL redirect chain
Follow a URL's redirect chain (301/302/303/307/308) to its final destination and return every hop with its status and Location. Unwraps link shorteners and cloaked/tracking links so an agent can see where a link really goes before following it. Each hop is SSRF-validated and the chain is capped.
Inputsurl*string
ReturnsThe requested url, finalUrl, final status, redirected/redirectCount, the ordered chain ([{ url, status, location }]) and truncated
$0.003
/v1/robots
Check robots.txt crawl rules
Fetch a site's robots.txt and evaluate crawl permissions: given a URL (plus optional extra paths) and a user-agent, return whether each path is allowed or disallowed, the rule that matched, the user-agent group, the crawl-delay and any declared sitemaps. Implements the Robots Exclusion Protocol (RFC 9309) with longest-match-wins, Allow-over-Disallow tie-breaking and * / $ wildcards.
Inputsurl*stringuserAgentstringpathsarray
ReturnsThe robotsUrl, fetched, status, evaluated userAgent, matched groupUserAgent, crawlDelay, sitemaps, and results ([{ path, allowed, matchedRule, directive }])
$0.006
/v1/links
Extract and classify page links
Fetch a URL and extract every hyperlink on the page, each resolved to an absolute URL and classified as internal vs external (by registrable host), with its anchor text, rel attributes (nofollow, sponsored, ugc) and whether it opens in a new tab. Returns internal/external/nofollow counts. For SEO link audits, internal-linking analysis and outbound-link/nofollow compliance checks.
Inputsurl*string
ReturnsThe url, host, total, internalCount, externalCount, nofollowCount, truncated and links ([{ url, anchor, rel, internal, nofollow, sponsored, ugc, newTab }])
$0.006
/v1/seo-audit
On-page SEO audit
Fetch a public page and grade its on-page SEO: title and meta-description length, H1 and heading outline, canonical, meta-robots indexability, viewport/lang/charset, hreflang, Open Graph and Twitter Card completeness, image alt coverage and word count, plus optional focus-keyword placement and density. Returns a pass/warn/fail verdict per check and an overall 0, 100 score.
Inputsurl*stringkeywordstring
ReturnsThe final url, title {text,length,ok}, metaDescription {text,length,ok}, headings {h1,h1Count,outline}, canonical, metaRobots {index,follow,raw}, openGraph {present,missing}, twitterCard, hreflang, images {total,withAlt,altCoverage}, lang, viewport, charset, wordCount, optional keyword placement, the per-rule checks ([{id,status,detail}]) and an overall score (0, 100)
$0.006

crypto 3 tools, 55 endpoints

chain chain.openverbs.com 27 endpoints
/v1/gas
Current gas
Live gas conditions for an EVM chain: current gas price, the latest block's base fee (EIP-1559) and the suggested max priority fee, all in both wei and gwei. Ground truth an agent can't compute. Reads live on-chain data with automatic endpoint fallback.
Inputschainstring
Returns{ chain, chainId, blockNumber, gasPriceWei/Gwei, baseFeePerGasWei/Gwei, maxPriorityFeePerGasWei/Gwei }. stale: true (with cachedAt) if served from cache
$0.002
/v1/address
On-chain Wallet Balance (native)
Native ETH / wallet balance for an address on any EVM chain: native balance (wei + ether), transaction count (nonce), and whether it's a contract or an externally-owned account (with deployed code size). Reads live on-chain data with automatic endpoint fallback.
Inputsaddress*stringchainstring
Returns{ chain, chainId, address, isContract, balanceWei, balanceEth, nonce, codeSizeBytes }. stale: true (with cachedAt) if served from cache
$0.002
/v1/token
ERC-20 Token Metadata
Live ERC-20 metadata read directly from the contract: name, symbol, decimals and total supply (raw + decimal-formatted). Handles both string and legacy bytes32 name/symbol encodings. Returns `isToken:false` for EOAs or non-token contracts. Reads live on-chain data with automatic endpoint fallback.
Inputsaddress*stringchainstring
Returns{ chain, chainId, address, isToken, name, symbol, decimals, totalSupply, totalSupplyFormatted }. stale: true (with cachedAt) if served from cache
$0.002
/v1/token-balance
ERC-20 Token Balance
Live ERC-20 token balance held by a wallet: calls `balanceOf(address)` on the token contract and returns the raw balance plus a decimal-formatted amount (using the token's own decimals) with its symbol. Distinct from `address` (native ETH balance) and `token` (contract metadata). Reads live on-chain data with automatic endpoint fallback.
Inputsaddress*stringtoken*stringchainstring
Returns{ chain, chainId, address, token, isToken, symbol, decimals, balanceRaw, balanceFormatted }. stale: true (with cachedAt) if served from cache
$0.002
/v1/token-allowance
ERC-20 Token Allowance API
Live ERC-20 spending allowance an owner has granted a spender: calls `allowance(owner, spender)` on the token and returns the raw amount, a decimal-formatted amount (using the token's decimals) with its symbol, and an `isUnlimited` flag for effectively-infinite approvals. Use it to audit token approvals / approval risk before signing. Reads live on-chain data with automatic endpoint fallback.
Inputstoken*stringowner*stringspender*stringchainstring
Returns{ chain, chainId, token, owner, spender, isToken, symbol, decimals, allowanceRaw, allowanceFormatted, isUnlimited }. stale: true (with cachedAt) if served from cache
$0.002
/v1/gas-estimate
Onchain Gas Estimate & Tx Simulation API
Simulate a transaction before signing: runs `eth_estimateGas` for `{ to, from?, data?, value? }` and returns the estimated gas units and estimated fee (current gas price x gas, in wei + ETH). If the node rejects the call it returns `ok:false` with the decoded `revertReason` (why it would fail) instead of erroring. Reads live on-chain state with automatic endpoint fallback.
Inputsto*stringfromstringdatastringvaluestringchainstring
Returns{ chain, chainId, to, from, ok, gas, revertReason, gasPriceWei, gasPriceGwei, estCostWei, estCostEth }. stale: true (with cachedAt) if served from cache
$0.004
/v1/tx
On-chain Transaction Lookup
Live status and details of a transaction by hash: success/failed/pending, from/to, value (wei + ether), nonce, block number, gas used, effective gas price and any created contract address. Returns `found:false` for unknown hashes. Reads live on-chain data with automatic endpoint fallback.
Inputshash*stringchainstring
Returns{ chain, chainId, hash, found, status, from, to, valueWei, valueEth, nonce, blockNumber, gasUsed, effectiveGasPriceWei, contractAddress }. stale: true if served from cache
$0.003
/v1/block
On-chain Block / Height
Live block summary by number, hex, or tag (latest/earliest/pending/safe/finalized; default latest): number, hash, parent, timestamp (unix + ISO), transaction count, gas used/limit, base fee and miner. Reads live on-chain data with automatic endpoint fallback.
Inputschainstringblockstring|integer
Returns{ chain, chainId, number, hash, parentHash, timestamp, isoTime, txCount, gasUsed, gasLimit, baseFeePerGasWei/Gwei, miner }. stale: true if served from cache
$0.001
/v1/logs
Onchain Event Logs & ERC-20 Transfers API
Query a contract's event logs over a bounded block range via `eth_getLogs`: filter by `address` (required) and optional `topics`, get back raw logs (topics, data, block, tx hash, log index) with ERC-20/721 Transfer logs auto-decoded to `{from, to, value}`. Block span is capped (large windows are clamped); results are capped by `limit`. Reads live on-chain data with automatic endpoint fallback.
Inputsaddress*stringtopicsarrayfromBlock*string|integertoBlockstring|integerlimitintegerchainstring
Returns{ chain, chainId, address, fromBlock, toBlock, count, truncated, clamped, logs: [{ address, topics, data, blockNumber, transactionHash, logIndex, removed, decoded? }] }. stale: true if served from cache
$0.006
/v1/receipt
Transaction Receipt API
Live transaction receipt by hash via `eth_getTransactionReceipt`: success/failed status, block number, from/to, created contract address, gas used, cumulative gas, effective gas price (wei + gwei), tx type and the emitted event logs (capped). Complements `tx` (which reads the transaction itself). Returns `found:false` for unknown/pending hashes. Reads live on-chain data with automatic endpoint fallback.
Inputshash*stringchainstring
Returns{ chain, chainId, hash, found, status, blockNumber, from, to, contractAddress, gasUsed, cumulativeGasUsed, effectiveGasPriceWei/Gwei, type, logsCount, logs: [{ address, topics, data, logIndex }] }. stale: true if served from cache
$0.003
/v1/proxy
Proxy Implementation Detection API
Detect whether a contract is an upgradeable proxy and resolve its implementation: reads the standard EIP-1967 implementation/admin/beacon slots, EIP-1822 (UUPS), the OpenZeppelin legacy slot, and EIP-1167 minimal-proxy bytecode. Returns the proxy type, implementation, admin and beacon addresses when present. Reads live on-chain data with automatic endpoint fallback.
Inputsaddress*stringchainstring
Returns{ chain, chainId, address, isContract, isProxy, proxyType, implementation, admin, beacon }. proxyType ∈ eip1967|eip1967-beacon|uups|oz-legacy|eip1167-minimal|null. stale: true if served from cache
$0.004
/v1/explain
Explain a transaction
Decode a transaction into plain language: native ETH transfer, contract call (with decoded method name for common ERC-20/DEX functions like transfer, approve, swap, mint, multicall) or contract creation; ERC-20 and NFT (ERC-721) transfers it triggered (token, from, to, amount/tokenId from logs); gas spent in ETH; success/failed/pending; and a one-line summary. Reads live on-chain data with automatic endpoint fallback.
Inputshash*stringchainstring
Returns{ chain, chainId, hash, found, status, kind, method, methodName, from, to, valueEth, gasUsed, gasCostEth, transfers: [{ token, from, to, valueRaw }], nftTransfers: [{ token, from, to, tokenId }], logCount, summary }. stale: true if served from cache
$0.006
/v1/token-risk
ERC-20 token risk scan
Deterministic risk screen of an ERC-20 token from on-chain bytecode and metadata, no third-party risk API. Flags privileged or abuse capabilities: blacklist/freeze, owner mint, pausable transfers, upgradeable proxy and a privileged owner, plus tokens missing symbol/decimals or code. Returns each flag with a severity, a 0-100 score and a verdict. Reads live on-chain data with automatic endpoint fallback.
Inputsaddress*stringchainstring
Returns{ chain, chainId, address, isContract, name, symbol, decimals, totalSupply, totalSupplyFormatted, flags: [{ code, severity, message }], score, verdict }. stale: true if served from cache
$0.006
/v1/ens-resolve
ENS Name Resolution
Resolve an ENS name (like alice.eth) to its Ethereum address, read live from the ENS resolver on Ethereum mainnet. Offchain names such as *.base.eth resolve too. Returns `found:false` (a real answer, not an error) when the name has no address record. Live reads with automatic endpoint fallback.
Inputsname*string
Returns{ name, address, found }. stale: true (with cachedAt) if served from cache
$0.003
/v1/ens-reverse
ENS Reverse Lookup API (address to name)
Reverse-resolve an Ethereum address to its primary ENS name (the reverse record set by the owner), read live on Ethereum mainnet. Returns `found:false` when the address has no primary name set. Live reads with automatic endpoint fallback.
Inputsaddress*string
Returns{ address, name, found }. stale: true (with cachedAt) if served from cache
$0.003
/v1/ens-records
ENS Text Records API
Read an ENS name's address plus its text records (avatar, url, email, description, com.twitter, com.github and more) in one call, live from the resolver on Ethereum mainnet. Pass `keys` to fetch specific records, or omit it for a sensible default set. Only records that are set are returned. Live reads with automatic endpoint fallback.
Inputsname*stringkeysarray
Returns{ name, address, records: { <key>: <value> }, keys, found }. stale: true (with cachedAt) if served from cache
$0.002
/v1/nft-metadata
NFT metadata
Resolve one NFT (contract + tokenId) into normalized metadata: name, description, image, attributes and token standard (ERC-721 or ERC-1155). Reads the on-chain tokenURI/uri, then fetches and normalizes the metadata document (ipfs/ar/http/data), rewriting ipfs image links to a gateway URL. Returns `found:false` for non-NFT contracts. Live reads with automatic endpoint fallback.
Inputscontract*stringtokenId*string|integerchainstring
Returns{ chain, chainId, contract, tokenId, found, tokenStandard, contractName, name, description, image, imageRaw, animationUrl, externalUrl, attributes, tokenUri, tokenUriRaw, metadata }. stale: true if served from cache
$0.006
/v1/decode
Decode calldata / function selector
Turn a 4-byte function selector or full calldata into its human-readable function signature, and (when calldata is present) the decoded argument values. Supply an `abi` for a fully deterministic offline decode, or omit it to look the selector up in public signature registries. Reads with automatic fallback.
Inputsdatastringselectorstringabiarray|string
Returns{ selector, source, name, signature, signatures, inputs, args, argsDecoded, note? }. stale: true if served from cache
$0.004
/v1/abi
Contract ABI & verification (get ABI)
Get the verified contract ABI and verification metadata for a deployed contract by address, sourced from Sourcify. Returns the contract ABI (to decode or call it), contract name, compiler/language, match type, and proxy resolution (is-proxy plus implementation addresses). Supports Ethereum, Base, Arbitrum, Optimism, Polygon. Unverified contracts return `verified:false`. Live reads with cache fallback.
Inputsaddress*stringchainstring
Returns{ chain, chainId, address, verified, matchType, contractName, language, compiler, abi, proxy: { isProxy, proxyType, implementations }, verifiedAt }. stale: true (with cachedAt) if served from cache
$0.006
/v1/source
Verified contract source code (get source)
Get the verified Solidity/Vyper source code for a deployed contract by address, sourced from Sourcify. Returns every source file (path + content), the contract name, language, compiler version and compiler settings (optimizer, evmVersion), the full human-readable source an agent needs to read, audit or feed to an LLM. Supports Ethereum, Base, Arbitrum, Optimism, Polygon. Unverified contracts return `verified:false`. Live reads with cache fallback.
Inputsaddress*stringchainstring
Returns{ chain, chainId, address, verified, matchType, contractName, fullyQualifiedName, language, compiler, settings, sources: [{ path, content, truncated }], fileCount, totalBytes, truncated, verifiedAt }. stale: true (with cachedAt) if served from cache
$0.006
/v1/read-contract
Read contract (call a view function)
Call a read-only (view/pure) function on any deployed contract via eth_call and get the decoded result. Give the contract address and a human-readable signature (e.g. 'balanceOf(address) view returns (uint256)') plus args; include return types to decode outputs, else raw hex is returned. Reads allowances, oracle prices and vault/DAO state. Read-only, no signing. Ethereum, Base, Arbitrum, Optimism, Polygon.
Inputsaddress*stringfunction*stringchainstringargsarrayblockinteger|string
Returns{ chain, chainId, address, function, selector, block, success, reverted, outputs, outputsNamed, raw, error?, note? }. stale: true (with cachedAt) if served from cache
$0.006
/v1/sanctions
OFAC sanctions screening for a crypto address
Screen a crypto wallet address against the OFAC SDN sanctions list (US Treasury Specially Designated Nationals) before transacting. Multi-chain across ~20 assets (BTC, ETH, USDT, TRX, XMR and more); EVM 0x addresses match case-insensitively. Returns whether the address is sanctioned plus the listed entity, asset and list publish date. Clean address returns `sanctioned:false`. Public-domain OFAC data.
Inputsaddress*string
Returns{ address, sanctioned, asset, entity, uid, source:"OFAC SDN", asOf, listSize }. sanctioned:false for a clean address. stale:true (with cachedAt) if served from a cached list after a refresh failure
$0.006
/v1/bytecode
Contract bytecode and code hash
Fetch deployed EVM contract runtime bytecode and its Keccak-256 code hash to fingerprint or compare contracts, or feed a disassembler. Supports Ethereum, Base, Arbitrum, Optimism and Polygon, with optional historical block reads. Returns full hex code, byte size and isContract; an empty-code address returns 0x and a null hash. Key-free RPC with endpoint fallback; code capped at 256 KiB.
Inputsaddress*stringchainstringblockinteger|string
Returns{ chain, chainId, address, isContract, bytecode, size, codeHash, block, stale, cachedAt? }. Runtime code, not creation code. Empty code is not proof of an EOA (e.g. precompiles). Stale cache is scoped to chain, address and requested block
$0.006
/v1/btc-fees
Bitcoin recommended fees
Live recommended Bitcoin transaction fee rates (in sat/vB) for next-block, ~30-minute, ~1-hour, economy and minimum confirmation targets, straight from the mempool. Also estimates the total fee (in sats and BTC) for a transaction of the given virtual size, so an agent can pick a fee tier and know the cost before broadcasting.
InputstxvBytesinteger
Returns{ fastestFee, halfHourFee, hourFee, economyFee, minimumFee, unit:"sat/vB", txvBytes, estimate: { fastest, halfHour, hour, economy, minimum } (each { sats, btc }), source, stale, cachedAt? }
$0.006
/v1/btc-mempool
Bitcoin mempool congestion
Live snapshot of the Bitcoin mempool: number of unconfirmed transactions, total pending virtual size (bytes and MB), the current backlog in blocks, total fees pending (sats and BTC), the fee-rate histogram, and the current chain tip height. Lets an agent gauge network congestion and time a transaction.
InputsJSON body
Returns{ count, vsizeBytes, vsizeMB, backlogBlocks, totalFeeSat, totalFeeBtc, tipHeight, feeHistogram: [{ feeRate, vsize }], source, stale, cachedAt? }
$0.006
/v1/btc-address
Bitcoin address balance & history
Balance and activity for a Bitcoin address (base58 1…/3… or bech32 bc1…): confirmed balance (sats and BTC), total received and sent, confirmed transaction count, and unconfirmed/pending value and tx count from the mempool. On-chain ground truth an agent cannot compute locally.
Inputsaddress*string
Returns{ address, found, balanceSat, balanceBtc, totalReceivedSat, totalSentSat, txCount, pendingSat, pendingTxCount, source, stale, cachedAt? }
$0.006
/v1/btc-tx
Bitcoin transaction status
Look up a Bitcoin transaction by txid: confirmation status, block height and time, fee (sats), effective fee rate (sat/vB), size, weight and virtual size, input and output counts, and total output value (sats and BTC). On-chain ground truth for verifying a payment.
Inputstxid*string
Returns{ txid, found, confirmed, blockHeight, blockTime, feeSat, feeRate, sizeBytes, weight, vsize, inputCount, outputCount, totalOutputSat, totalOutputBtc, source, stale, cachedAt? }
$0.006
crypto crypto.openverbs.com 24 endpoints
/v1/price
Crypto & Token Prices
Crypto & token prices: live USD spot price for one or more coins/tokens by coin id, market coins (e.g. "coingecko:bitcoin", "coingecko:ethereum") or any ERC-20 by contract (e.g. "ethereum:0xdAC17..."). Real-time bitcoin, ethereum and token price feed from an open, redistribution-OK source. Unknown ids are returned in `notFound`.
Inputscoins*array
Returnsprices[] with each coin's price (USD), symbol, decimals, confidence and timestamp; any unresolved ids in notFound[]. stale: true (with cachedAt) if served from cache after an upstream failure
$0.001
/v1/history
Crypto Price History
Token price history: historical USD price series (price chart data) for one coin/token by coin id (e.g. "coingecko:bitcoin", "ethereum:0xdAC17…"). Returns evenly spaced `points` over the last `span` periods.
Inputscoin*stringspanintegerperiodstring
Returnspoints[] of { timestamp, price } (USD, oldest→newest) for the coin, with its symbol, decimals, confidence and the period used; found: false with empty points for an unknown id. stale: true (with cachedAt) if served from cache
$0.003
/v1/market-cap
Crypto Market Cap & Global Stats
Crypto market cap: total cryptocurrency market capitalization (USD), 24h trading volume, Bitcoin (BTC) and Ethereum (ETH) dominance, 24h market-cap change and active coin/market counts. Whole-market context behind any single coin's move. Data source: CoinLore.
InputsJSON body
ReturnstotalMarketCapUsd, total24hVolumeUsd, btcDominancePct, ethDominancePct, marketCapChange24hPct, volumeChange24hPct, activeCoins, activeMarkets, attribution (Data source: CoinLore). stale: true (with cachedAt) if served from cache
$0.003
/v1/trending
Trending crypto, top 24h movers (gainers & losers)
Trending crypto by 24h price momentum: the biggest gainers and losers among the top coins by market cap, each with symbol, rank, USD price, 24h change % and market cap. A momentum/discovery signal for agents. Data source: CoinLore.
Inputslimitinteger
Returnsgainers[] and losers[] (each { rank, symbol, name, priceUsd, change24hPct, marketCapUsd }), plus scanned (coins considered) and attribution (Data source: CoinLore). stale: true (with cachedAt) if served from cache
$0.003
/v1/tvl
Total value locked
Total value locked (USD) for a DeFi protocol (e.g. "aave") or a whole chain (e.g. "Ethereum"). Provide exactly one of `protocol` or `chain`.
Inputsprotocolstringchainstring
ReturnstvlUsd for the requested protocol or chain (kind tells which), with found false and tvlUsd null when the name is unknown. stale: true (with cachedAt) if served from cache
$0.003
/v1/defi-overview
DeFi Market Overview API
DeFi market overview: total value locked (USD) across all chains, the chain count, and the top chains by TVL with each chain's TVL dominance. This is DeFi TVL, not total crypto market cap.
InputstopChainsinteger
ReturnstotalTvlUsd across all chains, chainCount, and topChains[] of { name, tvlUsd, dominancePct } (highest TVL first). stale: true (with cachedAt) if served from cache
$0.003
/v1/protocols
Top DeFi protocols by TVL
Top DeFi protocols ranked by total value locked (USD), with 1d/7d TVL change, category and chains. Optional filters: `chain` (ranks by that chain's TVL) and `category` (e.g. "Dexes", "Lending"). Centralised-exchange reserves are excluded.
Inputslimitintegerchainstringcategorystring
Returnsprotocols[] of { name, category, chains, tvlUsd, change1dPct, change7dPct } (highest TVL first) and count. stale: true (with cachedAt) if served from cache
$0.003
/v1/protocol
DeFi Protocol TVL API
Total value locked (USD) for one DeFi protocol by DefiLlama slug or name (e.g. "aave-v3", "lido", "uniswap-v3"): current TVL, per-chain TVL breakdown, 1h/1d/7d TVL change, category, chains, token symbol and market cap. Optional `chain` also returns that chain's TVL for the protocol. Unknown names return `found:false` with slug `suggestions`.
Inputsprotocol*stringchainstring
Returnsfound, protocol ({ name, slug, category, symbol, chains, tvlUsd, chainTvls[], chainTvlUsd, change1hPct, change1dPct, change7dPct, mcapUsd, url }) and suggestions[] when not found. stale: true (with cachedAt) if served from cache
$0.001
/v1/categories
Crypto Categories & Sectors
Crypto categories & sectors ranked by total value locked (USD): each DeFi narrative (e.g. Dexes, Lending, Liquid Staking, Restaking, RWA) with its aggregate TVL, protocol count and share of total DeFi TVL. A map of where capital sits across sectors. Centralised-exchange reserves are excluded.
Inputslimitinteger
Returnscategories[] of { category, tvlUsd, protocols, dominancePct } (highest TVL first), plus count (total sectors) and totalTvlUsd. stale: true (with cachedAt) if served from cache
$0.002
/v1/dex-volume
DEX Trading Volume
Decentralised exchange (DEX) trading volume: total 24h and 7d USD volume with 1d/7d change, plus the top DEXs by 24h volume. Optional `chain` filter scopes the totals and ranking to one chain.
Inputslimitintegerchainstring
Returnstotal24hUsd, total7dUsd, change1dPct, change7dPct, and dexs[] of { name, category, volume24hUsd, volume7dUsd, change1dPct, chains } (highest volume first) with count. stale: true (with cachedAt) if served from cache
$0.003
/v1/fees
Protocol fees & revenue
DeFi protocol fees and revenue: total 24h and 7d fees (USD) paid by users across protocols, plus the top protocols by 24h fees with each one's 24h revenue where reported. Optional `chain` filter scopes totals and ranking to one chain.
Inputslimitintegerchainstring
Returnstotal24hUsd, total7dUsd, and protocols[] of { name, category, fees24hUsd, fees7dUsd, revenue24hUsd, chains } (highest fees first) with count. stale: true (with cachedAt) if served from cache
$0.003
/v1/options
Onchain Options Volume API
Onchain options trading volume (premium): total 24h/7d/30d USD volume with 1d/7d change, plus the top options protocols by 24h volume. Optional `chain` filter scopes the totals and ranking to one chain.
Inputslimitintegerchainstring
Returnstotal24hUsd, total7dUsd, total30dUsd, change1dPct, change7dPct, and protocols[] of { name, category, volume24hUsd, volume7dUsd, change1dPct, chains } (highest volume first) with count. stale: true (with cachedAt) if served from cache
$0.003
/v1/dex-aggregators
DEX aggregator volume (1inch, CowSwap, Jupiter)
DEX aggregator trading volume: total 24h/7d/30d USD volume with 1d/7d change, plus the top aggregators (1inch, CowSwap, Jupiter, etc.) by 24h volume. Optional chain filter scopes the totals and ranking to one chain.
Inputslimitintegerchainstring
Returnstotal24hUsd, total7dUsd, total30dUsd, change1dPct, change7dPct, and aggregators[] of { name, category, volume24hUsd, volume7dUsd, change1dPct, chains } (highest volume first) with count. stale: true (with cachedAt) if served from cache
$0.003
/v1/stablecoins
Stablecoin supply
Stablecoin market: total circulating market cap (USD) and the largest stablecoins by mcap with their peg type, peg mechanism (e.g. fiat-backed, crypto-backed) and dominance.
Inputslimitinteger
ReturnstotalMcapUsd across all stablecoins, count, and stablecoins[] of { name, symbol, mcapUsd, pegType, pegMechanism, dominancePct } (largest first). stale: true (with cachedAt) if served from cache
$0.003
/v1/yields
Top DeFi yields
Top DeFi yield pools ranked by APY, with optional filters (chain, project, stablecoin-only, minimum TVL). Dust pools below `minTvlUsd` (default $10k) are excluded so reported APYs are meaningful.
InputslimitintegerchainstringprojectstringstablecoinbooleanminTvlUsdnumber
Returnspools[] of { chain, project, symbol, tvlUsd, apy, apyBase, apyReward, stablecoin, ilRisk } (highest APY first) and count. stale: true (with cachedAt) if served from cache
$0.003
/v1/staking
Crypto Staking Rewards
Crypto staking rewards: live staking APY and TVL for liquid-staking and restaking protocols (Lido, Rocket Pool, ether.fi, Jito, Binance, …), ranked by size. Filter by asset (e.g. ETH, SOL), chain or protocol. Data source: DefiLlama.
InputslimitintegerchainstringassetstringprojectstringminTvlUsdnumber
Returnspools[] of { chain, project, symbol, tvlUsd, apy, apyBase, apyReward } (largest TVL first) and count. stale: true (with cachedAt) if served from cache. Data source: DefiLlama
$0.003
/v1/fear-greed
Crypto Fear & Greed Index
Crypto sentiment via the live Fear and Greed Index (0-100 with classification, e.g. Fear/Greed). Optionally include a short historical series. Source: alternative.me.
Inputslimitinteger
ReturnsLatest value (0, 100) and classification (e.g. "Greed") with timestamp, plus a series[] of recent points. stale: true (with cachedAt) if served from cache
$0.003
/v1/buzz
Crypto web buzz & sentiment - social mentions
Web buzz for a coin/token: total count of web mentions (news, blogs, forums) plus an emotion breakdown (happiness, anger, love, sadness, fun) and a 0-1 positivityScore. A social/editorial signal distinct from the market Fear and Greed index and news lists.
Inputskeyword*stringpageTypesarray
ReturnstotalMentions (web mentions), connotations { anger, happiness, love, sadness, share, fun }, positivityScore (0-1, higher = more positive; null if no emotional mentions), and found
$0.05
/v1/news
Crypto & Financial News
Crypto news API: live cryptocurrency news headlines for a query (e.g. "bitcoin etf", "ethereum upgrade", "solana"), from Google News and localised by location/language. Returns ranked articles with title, URL, domain and, where available, source and publish time.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe article total and ranked results, each with rank, title, url, domain and (where present) source and timestamp. No results → empty results
$0.005
/v1/trends
Crypto search interest, Google Trends
Google Trends search interest for crypto terms (e.g. ["bitcoin","solana"], up to 5): a relative 0-100 popularity series over time, with per-keyword average and latest value. Optional `location` (default worldwide), `timeframe` (7d/30d/90d/12m/5y, default 12m) and `type` (web/news/youtube). Measures retail attention, not on-chain state.
Inputskeywords*arraylocationstringtimeframestringtypestring
Returnsinterest[] of { date, values } (relative 0, 100 per keyword, in keywords order), plus averages and latest per keyword. found false when Google Trends has no data for the terms
$0.03
/v1/derivatives
Crypto Derivatives (Perps, Funding, OI)
Crypto perpetual-futures data from on-chain perp DEXs: per market the funding rate (hourly + annualized %), open interest (USD and base units), mark & oracle price, 24h volume and 24h price change. Ranked by open interest; filter by `coins` or `limit`. Data source: Hyperliquid (dYdX fallback).
Inputscoinsarraylimitinteger
Returnsmarkets[] of { coin, markPrice, oraclePrice, fundingRateHourly, fundingRateAnnualizedPct, openInterest, openInterestUsd, premium, volume24hUsd, priceChange24hPct } (highest OI first), plus count, source and attribution. stale: true (with cachedAt) if served from cache
$0.002
/v1/funding
Crypto Perp Funding Rates
Live perpetual-futures funding rates per market, each market's funding rate as hourly, the standard 8-hour figure and annualized %, alongside mark price and open interest. Ranked by the most extreme (|annualized|) funding by default; pass `coins` to get the funding rate for a specific market (e.g. ["BTC","ETH"]). Real-time crypto perp funding rate feed. Data source: Hyperliquid (dYdX fallback).
Inputscoinsarraylimitinteger
Returnsmarkets[] of { coin, fundingRateHourly, fundingRate8h, fundingRateAnnualizedPct, markPrice, openInterestUsd } (most extreme |annualized| funding first), plus count, source and attribution. stale: true (with cachedAt) if served from cache
$0.002
/v1/ohlc
Crypto Price History (OHLC)
Crypto price history as OHLC candles from on-chain perp DEXs: open/high/low/close, base volume and trade count per interval (1m, 5m, 15m, 1h, 4h, 1d) for a coin (BTC, ETH, SOL, and more). Returns up to 500 candles, oldest first. Data source: Hyperliquid (dYdX fallback).
Inputscoin*stringintervalstringlimitinteger
Returnscandles[] of { t (ms), open, high, low, close, volume, trades } (oldest first), plus coin, interval, count, source and attribution. count: 0 means the coin is not listed on Hyperliquid or dYdX. stale: true (with cachedAt) if served from cache
$0.003
/v1/orderbook
Crypto Order Book (L2 Depth)
Live L2 order book for a crypto perp market: aggregated bids and asks with price, size and resting-order count per level, plus the best bid/ask spread, spread % and mid price. Real-time market-depth snapshot for a coin (BTC, ETH, SOL, and more); pass `depth` for how many price levels per side. Data source: Hyperliquid (dYdX fallback).
Inputscoin*stringdepthinteger
Returnsbids[] (high→low) and asks[] (low→high) of { px, sz, n? }, plus spread, spreadPct, midPrice, count: { bids, asks }, time, coin, source and attribution. count 0/0 means the coin is not listed on Hyperliquid or dYdX. stale: true (with cachedAt) if served from cache
$0.002
wallet wallet.openverbs.com 4 endpoints
/v1/validate
Address validation
Validate a blockchain address. Supply `chain` to check against a specific chain, or omit it to auto-detect. Ethereum addresses report their EIP-55 checksum state; Bitcoin covers base58check (P2PKH/P2SH) and bech32/bech32m segwit (P2WPKH/P2WSH/P2TR). A well-formed but invalid address returns `valid:false`, not an error.
Inputsaddress*stringchainstring
Returns{ valid, chain, format?, type?, network?, checksum?, reason? }
$0.004
/v1/detect
Chain detection
Guess which chain an address belongs to from its shape and encoding, without requiring the caller to know it up front. Returns the chain, format and address type, or nulls when nothing matches.
Inputsaddress*string
Returns{ chain, format, type, network? }
$0.004
/v1/eip55
EIP-55 checksum
Apply the EIP-55 mixed-case checksum to an Ethereum address, regardless of its input casing. Returns the checksummed address and whether it differed from the input. Non-hex input is rejected before payment.
Inputsaddress*string
Returns{ address, changed }
$0.004
/v1/normalize
Address normalisation
Normalise an address to its canonical form, Ethereum to its EIP-55 checksummed form, bech32 Bitcoin to lowercase (base58check is left untouched as it is case-sensitive). An address that is not a valid address of a known chain is rejected before payment.
Inputsaddress*stringchainstring
Returns{ address, chain, changed }
$0.004

email 2 tools, 5 endpoints

email email.openverbs.com 1 endpoint
/v1/validate
Validate email
Validate an email address, syntax, MX/A deliverability lookup, and disposable / role-based address detection. No mailbox probing.
Inputsemail*string
ReturnsWhether the address is valid (well-formed + mxFound), its local/domain parts, the mx[] hosts, and disposable / roleBased flags. A reason (INVALID_SYNTAX / NO_MX_RECORD) is set when not valid
$0.006
emailauth emailauth.openverbs.com 4 endpoints
/v1/spf-parse
Parse an SPF record
Parse an SPF TXT record ("v=spf1 …") into its qualified mechanisms and modifiers. Records that do not start with v=spf1 or use unknown mechanisms are clean 400s.
Inputsrecord*string
Returns{ version, mechanisms: [{ qualifier, type, value }], modifiers, all }
$0.004
/v1/spf-check
Evaluate an SPF record against an IP
Evaluate an SPF record against an IPv4/IPv6 address using only its literal ip4/ip6/all mechanisms. DNS-dependent mechanisms (include, a, mx, exists, redirect) reached before a match yield an honest `indeterminate` result rather than a guess.
Inputsrecord*stringip*string
Returns{ result, matched, reason }, result is pass/fail/softfail/neutral/none/indeterminate
$0.004
/v1/dmarc-parse
Parse a DMARC record
Parse a DMARC TXT record ("v=DMARC1; p=…") into its policy, alignment, sampling and reporting tags. Missing or invalid policy/alignment/pct values are clean 400s.
Inputsrecord*string
Returns{ version, policy, subdomainPolicy, pct, rua, ruf, adkim, aspf, tags }
$0.004
/v1/dkim-parse
Parse a DKIM key record
Parse a DKIM public-key DNS TXT record ("v=DKIM1; k=rsa; p=…") into its key type, public key, hash algorithms, service types and flags. An empty `p` is reported as a revoked key. A missing `p` tag is a clean 400.
Inputsrecord*string
Returns{ version, keyType, publicKey, revoked, hashAlgorithms, serviceTypes, flags, notes, tags }
$0.004

finance 2 tools, 6 endpoints

edgar edgar.openverbs.com 4 endpoints
/v1/lookup
Resolve a ticker or company name to a CIK
Resolve a stock ticker symbol or company name to its Central Index Key (CIK) - the identifier every other EDGAR endpoint keys on. Exact ticker matches rank first, then company-name prefix/substring matches. Returns each match's zero-padded CIK, numeric CIK, ticker and official company title.
Inputsquery*stringlimitinteger
Returns{ query, count, results: [{ cik, cikNumber, ticker, title }], source, stale, cachedAt? }
$0.006
/v1/filings
List a company's recent SEC filings
SEC filings API: list a company's recent SEC EDGAR filings (10-K, 10-Q, 8-K, Form 4, S-1) by ticker or CIK, optionally filtered by form type. Each filing has its accession number, form, filing/report dates, primary document, XBRL flag and a direct as-filed document URL, plus company name, tickers, exchanges and SIC code.
Inputscikstringtickerstringformstringlimitinteger
Returns{ cik, found, name, tickers, exchanges, sic, sicDescription, form, count, filings: [{ accessionNumber, form, filingDate, reportDate, primaryDocument, primaryDocDescription, isXBRL, url }], source, stale, cachedAt? }
$0.006
/v1/facts
Read an XBRL financial fact for a company
Read a single XBRL financial concept for a company (by CIK or ticker) from its as-filed statements. Give the concept's XBRL tag (e.g. Revenues, NetIncomeLoss, Assets, EarningsPerShareDiluted) and optionally the taxonomy (default us-gaap, also dei). Returns the label and, per unit (USD, shares), recent datapoints with period end, value, fiscal year/period, form, filing date and accession. Bounded, as-reported output.
Inputscikstringtickerstringtaxonomystringconcept*stringlimitinteger
Returns{ cik, found, entityName, taxonomy, concept, label, description, units: { <unit>: [{ end, start, val, fy, fp, form, filed, frame, accession }] }, latest, source, stale, cachedAt? }
$0.006
/v1/financials
Company financial statements snapshot
Company financials API: one-call snapshot for a US public company (by ticker or CIK) from as-filed SEC XBRL statements, revenue, cost of revenue, gross profit, operating income, net income, EPS (basic/diluted), total assets, total liabilities, stockholders equity, cash, operating cash flow and shares outstanding, each with the latest fiscal-year value. Unknown company returns found=false.
Inputscikstringtickerstring
Returns{ cik, found, entityName, ticker, currency, metrics: { <line item>: { unit, tag, annual: { val, end, fy, fp, form, filed } | null, latest: { val, end, fy, fp, form, filed } | null } }, source, stale, cachedAt? }. Line items: revenue, costOfRevenue, grossProfit, operatingIncome, netIncome, epsBasic, epsDiluted, totalAssets, totalLiabilities, stockholdersEquity, cashAndEquivalents, operatingCashFlow, sharesOutstanding
$0.008
fx fx.openverbs.com 2 endpoints
/v1/convert
Convert currency
Convert an amount from one currency to another using reference rates (latest or a historical date). Amount defaults to 1.
Inputsfrom*stringto*stringamountnumberdatestring
ReturnsThe rate and converted result for amount from→to, plus the date the rate is from. Same-currency conversions return rate 1
$0.006
/v1/rates
Exchange rates
Reference exchange rates for a base currency against some or all supported currencies (latest or a historical date).
Inputsbase*stringsymbolsarraydatestring
ReturnsThe base, the date, and a rates map of currency → rate
$0.006

games 1 tool, 3 endpoints

dice dice.openverbs.com 3 endpoints
/v1/parse
Parse dice notation
Parse dice notation such as "3d6+2", "4d6kh3" (keep highest 3) or "2d20dl1" (drop lowest 1) into structured terms. Malformed notation is a clean 400.
Inputsnotation*string
Returns{ notation, terms: [{ type, sign, count?, sides?, keep?, keepFrom?, value? }] }
$0.002
/v1/roll
Roll dice
Roll dice notation with a cryptographically secure RNG, optionally repeated. Returns per-die rolls, the kept dice and the total for each roll.
Inputsnotation*stringrollsinteger
Returns{ notation, results: [{ total, groups: [{ sides, rolls, kept, subtotal, sign }], modifier }] }
$0.002
/v1/stats
Exact dice statistics
Compute the exact probability distribution of a dice notation, mean, variance, standard deviation, min/max and the full probability mass function, with no sampling. Notations whose outcome range is too large for exact computation are clean 400s.
Inputsnotation*stringdistributionboolean
Returns{ notation, min, max, mean, variance, stddev, distribution: [{ value, probability }] | null }
$0.002

location 2 tools, 5 endpoints

airport airport.openverbs.com 3 endpoints
/v1/airport
Airport lookup by IATA/ICAO code
Look up an airport by its 3-letter IATA code or 4-character ICAO code. Provide exactly one. Returns the airport name, both codes, city, country, coordinates, elevation and type.
Inputsiatastringicaostring
Returns{ ident, type, name, iata, icao, lat, lon, elevationFt, continent, country, region, municipality }
$0.002
/v1/search
Search airports by name or city
Fuzzy-search airports by name, city or code, optionally filtered by ISO country code or airport type. Matches are ranked exact-code/name then prefix then substring, larger airports first. Empty result is a successful 200.
Inputsquery*stringcountrystringtypestringlimitinteger
Returns{ matches: [{ code, name, airport }], count, found }
$0.002
/v1/nearest
Nearest airports to coordinates
Find the airports nearest to a latitude/longitude, ordered by great-circle distance. Optionally cap the search radius (km), result count and airport type. Returns each airport with its distance in km.
Inputslat*numberlon*numberradiusKmnumberlimitintegertypestring
Returns{ matches: [{ distanceKm, airport }], count, found }
$0.004
geocode geocode.openverbs.com 2 endpoints
/v1/forward
Geocode an address
Convert a free-form address or place name into ranked coordinates with a structured, normalized address. Optionally bias by country and language.
Inputsq*stringlimitintegercountrystringlangstring
ReturnsAn attribution field and ranked results, each with lat, lon, formatted address, country/countryCode/state/city/postcode/street/housenumber where known, and a confidence. No match → empty results
$0.006
/v1/reverse
Reverse geocode
Convert latitude/longitude coordinates into the nearest structured address. Optionally set the preferred result language.
Inputslat*numberlon*numberlangstring
ReturnsAn attribution field and results with the nearest formatted address plus structured country/city/postcode/street fields. No match → empty results
$0.006

media 2 tools, 8 endpoints

music music.openverbs.com 5 endpoints
/v1/note
Note parse
Parse a note in scientific pitch notation (e.g. "A4", "C#5", "Bb3") into its letter, accidental, pitch class (0..11), octave, MIDI number and frequency in Hz (A4 = 440 Hz).
Inputsnote*string
Returns{ name, letter, accidental, pitchClass, octave, midi, frequency }
$0.002
/v1/interval
Interval between notes
Name the interval between two notes (`to` at or above `from`), its size in semitones, its diatonic number and its quality (perfect/major/minor/augmented/diminished). Correct spelling matters: C→F# is an augmented fourth, C→Gb a diminished fifth.
Inputsfrom*stringto*string
Returns{ semitones, number, quality, name }
$0.002
/v1/transpose
Transpose a note
Transpose a note by a (possibly negative) number of semitones. Result is spelled chromatically with sharps, or flats when `preferFlats` is true.
Inputsnote*stringsemitones*integerpreferFlatsboolean
Returns{ name, midi, frequency }
$0.002
/v1/scale
Build a scale
Build a scale from a root note and type (major, natural-minor, harmonic-minor, melodic-minor, dorian, phrygian, lydian, mixolydian, locrian, major-pentatonic, minor-pentatonic, blues, chromatic). Heptatonic scales and modes are spelled diatonically (F major → F G A Bb C D E). Returns the note names, MIDI numbers and semitone intervals.
Inputsroot*stringtype*string
Returns{ root, type, notes, midi, intervals }
$0.002
/v1/chord
Build a chord
Build a chord from a root note and quality (major, minor, dim, aug, maj7, min7, dom7, dim7, half-dim7, sus2, sus4, maj6, min6). Notes are spelled by stacked thirds (C dom7 → C E G Bb). Returns the note names, MIDI numbers and semitone intervals.
Inputsroot*stringquality*string
Returns{ root, quality, notes, midi, intervals }
$0.002
timecode timecode.openverbs.com 3 endpoints
/v1/parse
Parse timecode
Parse an SMPTE timecode (HH:MM:SS:FF, or HH:MM:SS;FF for drop-frame) at a given frame rate into its components, total frame count and real-time seconds. Drop-frame is auto-detected from a ';' separator unless dropFrame is set. Out-of-range or non-existent drop-frame values are a clean 400.
Inputstimecode*stringframeRate*numberdropFrameboolean
Returns{ timecode, frameRate, dropFrame, hours, minutes, seconds, frames, totalFrames, totalSeconds }
$0.002
/v1/convert
Convert / rebase timecode
Rebase a timecode (or a raw frame count) from one frame rate to another on a real-time basis, so the wall-clock position is preserved. Give a source frameRate plus timecode or totalFrames, and a toFrameRate (with optional toDropFrame). Returns the target timecode, frame count and seconds.
InputsframeRate*numberdropFramebooleantoFrameRate*numbertoDropFramebooleantimecodestringtotalFramesinteger
Returns{ timecode, totalFrames, totalSeconds, frameRate, dropFrame }
$0.002
/v1/add
Timecode arithmetic
Add or subtract from a timecode, either another timecode (b) or a raw frame count (frames), at a given frame rate. Uses frame-exact SMPTE math (including drop-frame). A result below zero is rejected as a clean 400.
InputsframeRate*numberdropFramebooleana*stringbstringframesintegeroperationstring
Returns{ timecode, totalFrames, totalSeconds, frameRate, dropFrame }
$0.002

network 5 tools, 13 endpoints

dns dns.openverbs.com 2 endpoints
/v1/resolve
Resolve DNS records
Resolve DNS records for a hostname, A, AAAA, CNAME, MX, TXT, NS, SOA, CAA or SRV. NXDOMAIN or an absent record type returns an empty record set.
Inputsname*stringtypestring
ReturnsThe queried name and type, the records[] (shape varies by type: A/AAAA carry address+ttl, MX exchange+priority, etc.), count, and which public resolver answered
$0.006
/v1/reverse
Reverse DNS lookup
Reverse-resolve an IPv4 or IPv6 address to its PTR hostname(s). No PTR record returns an empty list. This is reverse DNS (PTR), not ENS or onchain name resolution.
Inputsip*string
ReturnsThe ip and its resolved PTR hostnames[], count, and which public resolver answered
$0.006
ip ip.openverbs.com 4 endpoints
/v1/parse
Parse & classify IP
Parse an IPv4 or IPv6 address and classify it, version, normalized form and RFC range (unicast, private, loopback, linkLocal, multicast, uniqueLocal, ipv4Mapped, …). Detects IPv4-mapped IPv6.
Inputsaddress*string
Returns{ kind, version, address, range, ipv4Mapped? }
$0.002
/v1/subnet
Subnet calculator
Compute network details of a CIDR block, network & broadcast address, usable host range, total and usable address counts. Works for IPv4 and IPv6 (counts returned as strings for large IPv6 blocks). Honours RFC 3021 for /31.
Inputscidr*string
Returns{ kind, cidr, prefixLength, networkAddress, lastAddress, broadcastAddress?, firstHost, lastHost, numAddresses, usableHosts }
$0.002
/v1/contains
CIDR membership
Test whether an IP address falls within a CIDR block. A well-formed address of a different family (or simply outside the block) returns contains=false, not an error.
Inputscidr*stringaddress*string
Returns{ cidr, address, contains }
$0.002
/v1/expand
Expand / compress IPv6
Return both the fully-expanded (eight 4-hex groups) and canonical compressed (RFC 5952) forms of an address. IPv4 is returned unchanged in both fields.
Inputsaddress*string
Returns{ kind, input, expanded, compressed }
$0.002
macaddress macaddress.openverbs.com 5 endpoints
/v1/parse
Parse & normalize a MAC address
Parse a MAC / EUI-48 or EUI-64 address from any common notation (colon, hyphen, Cisco dot, or bare hex) and return it in every canonical form plus its integer value.
Inputsaddress*string
Returns{ eui, hex, bytes, colon, hyphen, dot, integer }
$0.002
/v1/info
Inspect address properties
Report the properties of a MAC address encoded in its first octet: unicast vs multicast (I/G bit), universal vs locally-administered (U/L bit), the broadcast address, and, for EUI-48, the OUI and NIC portions.
Inputsaddress*string
Returns{ eui, unicast, multicast, universal, local, broadcast, oui, nic }
$0.002
/v1/format
Reformat a MAC address
Reformat a MAC address into the requested notation (colon, hyphen, Cisco dot or bare) and case (lower default or upper).
Inputsaddress*stringnotationstringcasestring
Returns{ formatted }
$0.002
/v1/to-eui64
EUI-48 → EUI-64 / IPv6 IID
Derive the modified EUI-64 interface identifier from a 48-bit MAC (insert FFFE, flip the U/L bit) and the resulting IPv6 link-local address (fe80::/64).
Inputsaddress*string
Returns{ eui64, interfaceId, linkLocal }
$0.002
/v1/generate
Generate a random MAC address
Generate a random EUI-48 MAC address. By default it is locally-administered and unicast (safe for testing); set `local:false` for a universal-bit address or `multicast:true` for a group address.
Inputslocalbooleanmulticastboolean
Returns{ address, local, multicast }
$0.002
rdap rdap.openverbs.com 1 endpoint
/v1/domain
Domain registration
Look up a domain's RDAP registration data, registrar, status, creation/expiry/update dates, nameservers and DNSSEC. Unregistered domains return found:false.
Inputsdomain*string
ReturnsWhether the domain was found, its registrar, status[], createdAt/updatedAt/expiresAt dates, nameservers[] and dnssec flag
$0.006
tls tls.openverbs.com 1 endpoint
/v1/inspect
Inspect SSL/TLS certificate
Open an SSL/TLS connection to a host and report its certificate, issuer, subject, validity window, days remaining, SANs, fingerprint and trust status.
Inputshost*stringportintegerservernamestring
ReturnsWhether the host was reachable, and its certificate, subject, issuer, validFrom/validTo, daysRemaining, expired, subjectAltNames, fingerprint256, negotiated protocol and authorized (trusted chain)
$0.006

reference 3 tools, 8 endpoints

holidays holidays.openverbs.com 2 endpoints
/v1/list
List holidays
List a country's holidays for a calendar year (optionally by state/region, language and type).
Inputscountry*stringstatestringregionstringlanguagestringtypesarrayyear*integer
ReturnsThe holidays[] (each with date, name, type) for the country/year, a count, and an attribution string
$0.002
/v1/check
Check a date
Check whether a specific date is a public holiday in a country (optionally by state/region).
Inputscountry*stringstatestringregionstringlanguagestringtypesarraydate*string
ReturnsisHoliday for the date, the matching holidays[] (if any), and an attribution string
$0.002
iso iso.openverbs.com 4 endpoints
/v1/country
ISO 3166-1 country lookup
Look up a country by its ISO 3166-1 alpha-2 code, alpha-3 code, numeric code or English name. Provide exactly one field. Returns all codes plus the UN region.
Inputsalpha2stringalpha3stringnumericstringnamestring
Returns{ alpha2, alpha3, numeric, name, region }
$0.002
/v1/currency
ISO 4217 currency lookup
Look up an active ISO 4217 currency by its alphabetic code or numeric code. Provide exactly one field. Returns the code, numeric code, name and number of minor units (decimal places).
Inputscodestringnumericstring
Returns{ code, numeric, name, minorUnit }
$0.002
/v1/language
ISO 639 language lookup
Look up a language by its ISO 639-1 alpha-2 code, ISO 639-2 alpha-3 code (bibliographic or terminologic) or English name. Provide exactly one field.
Inputsalpha2stringalpha3stringnamestring
Returns{ alpha3, alpha3t, alpha2, name }
$0.002
/v1/search
Search ISO registries
Fuzzy-search countries, currencies and languages by name or code. Scope with `registry` (defaults to all). Matches are ranked exact-code/name → prefix → substring.
Inputsquery*stringregistrystringlimitinteger
Returns{ matches: [{ registry, code, name, record }], count }
$0.002
wikidata wikidata.openverbs.com 2 endpoints
/v1/search
Search Wikidata
Search Wikidata for entities matching a text query, returning candidate Q-ids with labels and descriptions.
Inputsquery*stringlanguagestringlimitinteger
ReturnsThe query, language, and a results[] of { id, label, description, url } candidate entities
$0.006
/v1/entity
Get Wikidata entity
Fetch a Wikidata entity by Q-id: label, description, aliases and its claims (property → values).
Inputsid*stringlanguagestring
ReturnsThe entity id, whether it was found, its label/description, aliases[], a claims map (property id → values) and its Wikidata url
$0.006

science 4 tools, 13 endpoints

astro astro.openverbs.com 4 endpoints
/v1/julian-date
Astronomical Julian Date
Compute the astronomical Julian Date (JD, fractional, epoch noon 1 Jan 4713 BC) and Modified Julian Date (MJD = JD − 2400000.5) of a UTC instant. Unlike `calendar`'s integer Julian Day Number, this carries the time-of-day fraction.
Inputsyear*integermonth*integerday*integerhourintegerminuteintegersecondinteger
Returns{ jd, mjd }
$0.004
/v1/sun
Sunrise / sunset
Compute sunrise, sunset, solar noon and day length for a latitude/longitude (east-positive) and date, using the NOAA sunrise equation. All times are UTC ISO-8601. Locations in polar day or night return null rise/set with a `polar` flag, a successful result, not an error.
Inputslat*numberlon*numberyear*integermonth*integerday*integer
Returns{ sunrise, sunset, solarNoon, dayLengthHours, polar }
$0.004
/v1/moon-phase
Moon phase
Compute the Moon's phase name, age in days since the last new moon and illuminated fraction (0..1) for a UTC date/time. Uses the mean synodic month (29.53 days).
Inputsyear*integermonth*integerday*integerhourintegerminuteinteger
Returns{ phase, ageDays, illumination }
$0.004
/v1/season
Astronomical season
Determine the astronomical season for a date, based on the Sun's apparent ecliptic longitude (0°=March equinox, 90°=June solstice, …). Defaults to the northern hemisphere; pass `hemisphere` to flip.
Inputsyear*integermonth*integerday*integerhemispherestring
Returns{ season, hemisphere, solarLongitude }
$0.004
chem chem.openverbs.com 3 endpoints
/v1/element
Element lookup
Look up a periodic-table element by exactly one of `symbol` (e.g. "Fe"), `name` (e.g. "iron") or atomic `number` (1..118). Returns its number, symbol, name, standard atomic weight and whether that weight is a true standard atomic weight.
Inputssymbolstringnamestringnumberinteger
Returns{ number, symbol, name, mass, standardWeight }
$0.004
/v1/search
Element search
Search the periodic table by name or symbol substring. Exact matches rank first, then prefix matches, then substring matches. Returns up to `limit` elements (default 20) plus the total match count.
Inputsquery*stringlimitinteger
Returns{ matches:[Element], count }
$0.004
/v1/molar-mass
Molar mass
Compute the molar mass (g/mol) of a chemical formula. Supports nested parentheses and brackets, element multipliers, and hydrate dot notation with coefficients (e.g. "Ca(OH)2", "CuSO4·5H2O", "K4[Fe(CN)6]"). Returns the total mass and the per-element composition with mass fraction percentages.
Inputsformula*string
Returns{ formula, molarMass, composition:[{symbol,count,mass,percent}] }
$0.004
chemeq chemeq.openverbs.com 3 endpoints
/v1/balance
Balance a chemical equation
Balance an equation such as "H2 + O2 -> H2O" into the smallest whole-number coefficients using exact rational linear algebra. Equations that cannot be balanced with positive coefficients are clean 400s.
Inputsequation*string
Returns{ balanced, reactants: [{ formula, coefficient }], products: [...] }
$0.004
/v1/stoichiometry
Reaction stoichiometry
Given a reaction and a known amount (moles or grams) of one species, compute the amount of a target species. The equation is balanced automatically.
Inputsequation*stringgiven*objecttarget*stringtargetUnitstring
Returns{ balanced, given: { species, moles, grams }, target: { species, moles, grams } }
$0.004
/v1/limiting
Limiting reagent & theoretical yield
Given a reaction and the supplied amount of every reactant, identify the limiting reagent and compute leftover reactant and theoretical product yields.
Inputsequation*stringamounts*array
Returns{ balanced, limitingReagent, reactants: [{ species, moles, consumedMoles, leftoverMoles }], products: [{ species, moles, grams }] }
$0.004
physics physics.openverbs.com 3 endpoints
/v1/constant
Constant lookup
Look up a physical constant by its key (e.g. "speed-of-light"), symbol (e.g. "c") or exact name. Returns the CODATA 2018 recommended value, unit, relative standard uncertainty (0 for values that are exact by SI definition) and category.
Inputsquery*string
Returns{ key, symbol, name, value, unit, uncertainty, exact, category }
$0.004
/v1/search
Constant search
Search the constants table by key, symbol or name substring. Exact matches rank first, then prefix matches, then substring matches. Returns up to `limit` constants (default 20) plus the total match count.
Inputsquery*stringlimitinteger
Returns{ matches:[Constant], count }
$0.004
/v1/list
Constant list
List every physical constant in the dataset, or only those in a given category (universal, adopted, electromagnetic, atomic, physico-chemical). Returns the constants, the total count and the set of available categories.
Inputscategorystring
Returns{ constants:[Constant], count, categories }
$0.004

text 7 tools, 33 endpoints

dictionary dictionary.openverbs.com 3 endpoints
/v1/define
Define a word (dictionary definitions)
Look up the definitions of an English word. Returns one entry per sense with its part of speech, definition, example sentences and synonyms. Optionally filter by part of speech. An unknown word returns found:false with a 200.
Inputsword*stringposstring
Returns{ word, found, entries: [{ partOfSpeech, definition, examples, synonyms }] }
$0.002
/v1/synonyms
Synonyms of a word (thesaurus)
Return the synonyms of an English word, aggregated across all its senses. Optionally filter by part of speech. An unknown word returns found:false with a 200.
Inputsword*stringposstring
Returns{ word, found, count, synonyms: [] }
$0.002
/v1/antonyms
Antonyms of a word (opposites)
Return the antonyms (opposites) of an English word, aggregated across all its senses. Optionally filter by part of speech. An unknown word returns found:false with a 200.
Inputsword*stringposstring
Returns{ word, found, count, antonyms: [] }
$0.002
encoding encoding.openverbs.com 4 endpoints
/v1/detect
Detect character set
Guess the character set of a base64-encoded byte buffer: sniffs a byte-order mark, then falls back to ASCII / UTF-8 validation and a UTF-16 NUL-pattern heuristic. Returns a best-effort charset with a confidence label, a low-confidence guess is still a successful 200.
Inputsbytes*string
Returns{ charset, hasBom, bom, confidence, byteLength }
$0.002
/v1/transcode
Transcode between character sets
Decode a base64 byte buffer from one character set and re-encode it into another (utf-8, utf-16le, utf-16be, latin1, ascii). Characters that the target set cannot represent, or bytes invalid for the source set, are clean 400s.
Inputsbytes*stringfrom*stringto*string
Returns{ bytes, from, to, byteLength, text }
$0.002
/v1/normalize
Unicode normalisation
Apply a Unicode normalisation form (NFC, NFD, NFKC or NFKD) to a string. Reports whether the text changed and its length in UTF-16 code units and code points.
Inputstext*stringformstring
Returns{ text, form, changed, length, codePoints }
$0.002
/v1/inspect
Inspect code points
Break a string into its Unicode code points, each with its U+ notation, decimal value and UTF-8 / UTF-16 byte layout, plus total byte lengths.
Inputstext*string
Returns{ characters: [{ char, codePoint, decimal, utf8, utf16 }], codePoints, utf8Bytes, utf16Bytes }
$0.002
nato nato.openverbs.com 4 endpoints
/v1/spell
Spell with the phonetic alphabet
Spell text using the NATO/ICAO phonetic alphabet (A→Alfa, B→Bravo, …), including digits and spaces (→Space). Characters with no phonetic spelling are clean 400s.
Inputstext*string
Returns{ words, text }
$0.002
/v1/unspell
Decode phonetic words
Turn a string of phonetic words back into text ("Sierra Oscar Sierra" → "SOS"). Accepts common alternative spellings (Alpha, Juliet, Niner). Unknown words are clean 400s.
Inputswords*string
Returns{ text }
$0.002
/v1/to-morse
Encode Morse code
Encode text into international (ITU) Morse code. Letters are separated by spaces and words by "/". Supports A-Z, 0-9 and common punctuation; unsupported characters are clean 400s.
Inputstext*string
Returns{ morse }
$0.002
/v1/from-morse
Decode Morse code
Decode international Morse code back into text. Letters are separated by whitespace and words by "/". Unknown Morse sequences are clean 400s.
Inputsmorse*string
Returns{ text }
$0.002
readability readability.openverbs.com 4 endpoints
/v1/score
Readability scores
Compute the standard English readability formulas, Flesch Reading Ease, Flesch, Kincaid grade, Gunning fog, SMOG, Coleman, Liau and ARI, along with the underlying sentence/word/syllable statistics. Empty text is a clean 400.
Inputstext*string
Returns{ stats: { sentences, words, syllables, characters, complexWords, … }, scores: { fleschReadingEase, fleschKincaidGrade, gunningFog, smog, colemanLiau, automatedReadabilityIndex } }
$0.002
/v1/grade
Consensus grade level
Summarise a text's difficulty as a single consensus US grade level (averaging the five grade formulas), plus the Flesch Reading Ease, a plain-language difficulty band and an approximate age range.
Inputstext*string
Returns{ gradeLevel, readingEase, difficulty, ageRange, contributingGrades }
$0.002
/v1/syllables
Count syllables
Count syllables per word and in total across the text.
Inputstext*string
Returns{ words: [{ word, syllables }], total, wordCount }
$0.002
/v1/reading-time
Reading & speaking time
Estimate reading and speaking time for a text at configurable words-per-minute rates (defaults: 200 wpm reading, 130 wpm speaking).
Inputstext*stringreadingWpmnumberspeakingWpmnumber
Returns{ words, reading: { wpm, minutes, seconds, humanReadable }, speaking: { … } }
$0.002
regex regex.openverbs.com 4 endpoints
/v1/test
Test for a match
Test whether a RE2 pattern matches anywhere in the input. Returns { matched }. RE2 guarantees linear-time evaluation, so this is safe against catastrophic backtracking. An invalid pattern is a clean 400; no match is a successful 200.
Inputspattern*stringinput*stringflagsstring
Returns{ matched }
$0.004
/v1/match
Find matches and capture groups
Find the first match (or all matches with all=true) of a RE2 pattern, returning each match's text, start/end offsets, and numbered and named capture groups. No match is a successful 200 with an empty match list.
Inputspattern*stringinput*stringflagsstringallboolean
Returns{ matched, count, matches:[{ match, start, end, groups }] }
$0.004
/v1/replace
Replace matches
Replace matches of a RE2 pattern with a replacement string. Replaces all matches by default (set all=false for first-only). The replacement may reference capture groups with $1, $2 or ${name}. Returns the resulting string.
Inputspattern*stringinput*stringreplacement*stringflagsstringallboolean
Returns{ result }
$0.004
/v1/split
Split by a pattern
Split the input into parts on each match of a RE2 pattern. An optional limit caps the number of parts (0 = unlimited). Returns the parts array and its count.
Inputspattern*stringinput*stringflagsstringlimitinteger
Returns{ parts, count }
$0.004
similarity similarity.openverbs.com 10 endpoints
/v1/levenshtein
Levenshtein distance
Levenshtein edit distance (insertions, deletions, substitutions) between two strings, plus a normalized similarity in [0,1]. Operates on Unicode code points.
Inputsa*stringb*string
Returns{ distance, similarity }
$0.004
/v1/damerau
Damerau-Levenshtein distance
Damerau-Levenshtein distance, like Levenshtein but also counts adjacent transpositions as a single edit, plus a normalized similarity in [0,1].
Inputsa*stringb*string
Returns{ distance, similarity }
$0.004
/v1/hamming
Hamming distance
Hamming distance, the number of positions at which two EQUAL-LENGTH strings differ, plus a normalized similarity. Strings of unequal length are a clean 400.
Inputsa*stringb*string
Returns{ distance, similarity }
$0.004
/v1/jaro
Jaro & Jaro-Winkler similarity
Jaro similarity and the Jaro-Winkler variant (which boosts scores for a shared prefix), both in [0,1]. The prefix boost factor is configurable (default 0.1, max 0.25). Well suited to short strings like names.
Inputsa*stringb*stringprefixScalenumber
Returns{ jaro, jaroWinkler }
$0.004
/v1/dice
Sørensen-Dice coefficient
Sørensen-Dice similarity coefficient in [0,1] over character bigrams, robust to word order and minor edits.
Inputsa*stringb*string
Returns{ coefficient }
$0.004
/v1/jaccard
Jaccard index
Jaccard similarity index in [0,1], the size of the intersection over the union of the two strings' character-bigram sets.
Inputsa*stringb*string
Returns{ coefficient }
$0.004
/v1/soundex
Soundex
Encode a word with the classic Soundex algorithm (letter + 3 digits) for phonetic matching of names.
Inputsword*string
Returns{ word, code }
$0.002
/v1/metaphone
Metaphone
Encode a word with the Metaphone algorithm, more accurate than Soundex for English pronunciation.
Inputsword*string
Returns{ word, code }
$0.002
/v1/double-metaphone
Double Metaphone
Encode a word with Double Metaphone, returning a primary and a secondary code to capture alternate pronunciations (useful for non-English names).
Inputsword*string
Returns{ word, primary, secondary }
$0.002
/v1/compare
Phonetic compare
Report whether two tokens sound alike under a chosen algorithm (soundex, metaphone or double-metaphone; default double-metaphone). Returns each token's codes and a boolean match.
Inputsa*stringb*stringalgorithmstring
Returns{ a, b, algorithm, codesA, codesB, match }
$0.002
unicode unicode.openverbs.com 4 endpoints
/v1/inspect
Inspect a code point
Resolve a single code point (given as 'char' or 'codepoint') to its name, general category, block, script and plane. Provide exactly one of the two inputs.
Inputscodepointobjectcharstring
Returns{ codepoint, codepointDecimal, char, name, assigned, category: { code, name }, block, script, plane }
$0.002
/v1/name
Look up character by name
Reverse lookup: resolve a Unicode character name (e.g. 'SNOWMAN', 'CJK UNIFIED IDEOGRAPH-4E2D', 'HANGUL SYLLABLE GA') to its code point. Loose whitespace/case matching. An unknown name is a successful `found:false`.
Inputsname*string
Returns{ query, found, codepoint, codepointDecimal, char, name }
$0.002
/v1/block
Look up a Unicode block
Resolve a Unicode block name (loose matching) to its range, size, count of assigned characters and a small sample. An unknown block is a successful `found:false`. This is a Unicode Character Database block, not a blockchain block.
Inputsblock*string
Returns{ query, found, name, start, end, size, assignedCount, sample }
$0.002
/v1/script
Look up a Unicode script
Resolve a Unicode script name (loose matching) to its code point ranges, total size and a small sample. An unknown script is a successful `found:false`.
Inputsscript*string
Returns{ query, found, name, ranges, size, sample }
$0.002

trust-safety 4 tools, 9 endpoints

mcpscan mcpscan.openverbs.com 1 endpoint
/v1/scan
Scan MCP manifest for risks
Statically analyse a Model Context Protocol (MCP) server manifest for security risks. Tool descriptions enter the model context, a prime prompt-injection vector. Deterministic and offline (inline manifest). Flags dangerous capabilities (command/code execution, filesystem, credential and network access), injection patterns, hidden unicode and unconstrained parameters. Returns severity-ranked findings and a 0-100 score.
Inputsmanifest*object
Returns{ toolCount, hasFindings, findingCount, counts: { critical?, high?, medium?, low? }, riskScore (0-100), verdict (low|medium|high), findings: [{ location, rule, severity, message, excerpt }] }
$0.004
preflight preflight.openverbs.com 1 endpoint
/v1/inspect
Inspect x402 endpoint
Fetch any URL and, without paying, decode its x402 402 Payment Required challenge: price (atomic and formatted for known stablecoins), asset, network, payTo, resource, description, timeout and any input schema. Flags MPP and Bazaar discovery extensions. Returns free:true when no payment is needed. SSRF-hardened: public hosts only; private, loopback, link-local and cloud-metadata addresses are rejected.
Inputsurl*string
Returns{ url, finalUrl, status, isX402, paymentRequired, free, x402Version, error, acceptsCount, accepts: [{ scheme, network, asset, assetSymbol, payTo, resource, description, mimeType, maxAmountRequired, amountFormatted, maxTimeoutSeconds, hasInputSchema }], mppEnabled, bazaarDeclared, contentType }
$0.006
scan scan.openverbs.com 4 endpoints
/v1/secrets
Scan text for leaked secrets
Scan source code or configuration text for hardcoded secrets: AWS access keys, GitHub/Slack/Google tokens, Stripe and OpenAI keys, PEM private-key blocks, JWTs and high-entropy secret assignments. Placeholder values are filtered out. Each finding gives the rule, a severity (critical/high/medium/low), line and column, entropy and a masked excerpt. Offline and deterministic.
Inputscontent*string
Returns{ hasSecrets, count, counts: { <severity>: n }, findings: [{ rule, name, severity, line, column, match, entropy }] }
$0.004
/v1/detect
Detect PII
Find personally identifiable information in a text blob: emails, phone numbers, credit cards (Luhn-validated), IBANs (mod-97 validated), IPv4/IPv6 addresses, US SSNs and JWTs. Returns every match with its type and character offsets, plus per-type counts. Validated, not just pattern-matched, to keep false positives low. Fully offline.
Inputstext*stringtypesarray
Returns{ hasPII, count, counts: { <type>: n }, matches: [{ type, value, start, end }] }
$0.004
/v1/redact
Redact PII
Return the input text with every detected PII span replaced. `mode` controls the replacement: "label" (default) → `[EMAIL]`; "mask" → the value covered with a mask character; "hash" → `[EMAIL:1a2b3c4d]`, a stable per-value fingerprint so equal values stay linkable without exposing them. Same validated detectors as `/detect`. Fully offline.
Inputstext*stringtypesarraymodestringmaskstring
Returns{ redacted, count, counts: { <type>: n }, matches: [{ type, value, start, end }] }
$0.004
/v1/kev
CISA known exploited vulnerabilities check
Check up to 50 CVE IDs against CISA's Known Exploited Vulnerabilities (KEV) catalog. Returns membership, vendor/product, exploitation evidence, ransomware-use status and remediation guidance from CC0 data. Not listed does not mean safe or unexploited. Federal due dates are not global deadlines. Refreshed hourly; stale snapshots are explicitly flagged.
Inputscves*array
Returns{ source, catalogVersion, asOf, catalogSize, checkedAt, results:[{cve,listed,vendor,product,name,description,dateAdded,requiredAction,federalDueDate,ransomwareUse,cwes,reference}], stale, cachedAt? }. Membership only, not a safety or CVE-existence verdict
$0.006
urltrust urltrust.openverbs.com 3 endpoints
/v1/analyze
Analyze URL trust
Score how likely a URL is to be phishing or untrustworthy using offline lexical and structural heuristics (no network lookups). Checks raw-IP hosts, embedded credentials, punycode/homoglyph labels, brand typosquatting, brand-in-subdomain, abused TLDs, shorteners, random hostnames, odd ports, plaintext http and executable paths. Returns a 0-100 risk score, a verdict and the reasons.
Inputsurl*string
Returns{ url, host, scheme, score (0-100), verdict: low|medium|high, reasons: [{ code, message, weight }] }
$0.004
/v1/domain
Score a domain's reputation
Assess how trustworthy a domain is using authoritative live signals, not just its spelling. Fuses RDAP registration data (domain age, the single strongest phishing signal, plus registrar, expiry and registry status flags), DNS resolvability (A/AAAA), MX presence and DNSSEC into a 0-100 risk score with a verdict (low/medium/high) and the exact reasons. Pairs with `urltrust` (lexical) for a complete picture.
Inputsdomain*string
Returns{ domain, registered, ageDays, createdAt, expiresAt, registrar, resolves, addresses, hasMx, mx, dnssec, status, score (0-100), verdict, reasons: [{ code, message, weight }] }
$0.006
/v1/techstack
Website technology stack lookup
Detect the technology stack a website runs on. Given a domain, returns the software and services it uses (CDN, analytics, frameworks, CMS, payment, hosting, security) grouped by category, plus a domain rank, last-seen date, country and public social links. Unknown domain returns found=false.
Inputsdomain*string
Returnsfound, domain, categories, technologies (category -> tech names), a flat stack list, and (where present) domainRank, lastVisited, country, language, title, description, emails, phones, social
$0.05

validation 5 tools, 22 endpoints

checkdigit checkdigit.openverbs.com 5 endpoints
/v1/luhn
Luhn check
Validate a number by the Luhn (mod-10) algorithm, the scheme behind credit/debit card numbers and many IDs. Spaces and hyphens are ignored. A mismatched check digit is a successful { valid: false }.
Inputsnumber*string
Returns{ input, valid, checkDigit, expectedCheckDigit }
$0.002
/v1/isbn
ISBN check
Validate an ISBN-10 (mod-11, trailing X allowed) or ISBN-13 (GTIN mod-10) book number. Length after removing spaces/hyphens selects the scheme.
Inputsisbn*string
Returns{ input, kind, valid, checkDigit, expectedCheckDigit }
$0.002
/v1/ean
EAN / UPC / GTIN check
Validate a GTIN barcode number, EAN-8, UPC-A (12), EAN-13 or GTIN-14, by the standard mod-10 check digit. Length selects the scheme.
Inputsnumber*string
Returns{ input, length, valid, checkDigit, expectedCheckDigit }
$0.002
/v1/imei
IMEI check
Validate a 15-digit mobile device IMEI by its Luhn check digit. Spaces and hyphens are ignored.
Inputsimei*string
Returns{ input, valid, checkDigit, expectedCheckDigit }
$0.002
/v1/routing
ABA routing check
Validate a 9-digit US ABA bank routing number by its weighted (3,7,1) mod-10 checksum. Spaces and hyphens are ignored.
InputsroutingNumber*string
Returns{ input, valid, checkDigit, expectedCheckDigit }
$0.002
creditcard creditcard.openverbs.com 5 endpoints
/v1/validate
Validate a card number
Validate a payment-card number: Luhn check-digit test plus network detection and length check. A syntactically valid number that fails Luhn returns `valid:false` (a 200, not an error).
Inputsnumber*string
Returns{ valid, luhnValid, lengthValid, network, digits }
$0.002
/v1/network
Detect the card network
Detect the issuing network/brand (Visa, Mastercard, American Express, Discover, Diners Club, JCB, UnionPay, Maestro) from the card's IIN prefix, with the network's valid lengths. Returns `network:null` for an unrecognized prefix.
Inputsnumber*string
Returns{ network, lengths }
$0.002
/v1/mask
Mask a card number
Mask a card number for display, keeping the first six and last four digits (the PCI-permitted maximum) and replacing the rest with a mask character (default `*`).
Inputsnumber*stringmaskCharstring
Returns{ masked }
$0.002
/v1/format
Group a card number
Format a card number into the conventional display groups for its network (4-6-5 for Amex, 4-6-4 for 14-digit Diners, otherwise groups of four).
Inputsnumber*string
Returns{ formatted, network }
$0.002
/v1/generate
Generate a TEST card number
Generate a random Luhn-valid TEST card number for the given network (default Visa). For testing only, these are not issued cards and cannot be charged. The response is always flagged `test:true`.
Inputsnetworkstringlengthinteger
Returns{ number, network, test }
$0.002
iban iban.openverbs.com 2 endpoints
/v1/validate
Validate IBAN
Validate an IBAN (mod-97 checksum, length, country format) and decompose it into country, bank, branch and account parts.
Inputsiban*string
ReturnsWhether the IBAN is valid, its compact and formatted forms, countryCode, bankIdentifier, branchIdentifier, accountNumber, and reasons[] (error codes) when invalid
$0.004
/v1/bic
Validate BIC
Validate a BIC/SWIFT code and decompose it into bank, country, location and branch codes.
Inputsbic*string
ReturnsWhether the BIC is valid, its bankCode, countryCode, locationCode, branchCode, whether it is a testBic, and reasons[] when invalid
$0.004
postal postal.openverbs.com 4 endpoints
/v1/validate
Validate a postal code
Check whether a postal / ZIP code is well-formed for a country (ISO 3166-1 alpha-2). A malformed code is a successful result with `valid:false`, not an error, only an unsupported country or empty code is a 400.
Inputscountry*stringcode*string
Returns{ country, code, valid }
$0.002
/v1/format
Normalise a postal code
Normalise a postal code's casing and whitespace (uppercase, collapse runs of spaces) and report whether the normalised form is valid for the country.
Inputscountry*stringcode*string
Returns{ country, input, normalized, valid }
$0.002
/v1/spec
Country postal-code pattern
Return the validation regular expression (source and flags) used for a country's postal codes.
Inputscountry*string
Returns{ country, pattern, flags }
$0.002
/v1/countries
List supported countries
List every ISO 3166-1 alpha-2 country code for which a postal-code pattern is available.
InputsJSON body
Returns{ countries, count }
$0.002
vat vat.openverbs.com 6 endpoints
/v1/norway
Validate Norwegian VAT number
Validate a Norwegian VAT (MVA) number against the official business register. Validity means the entity exists and is entered in the VAT register.
InputsvatNumber*string
ReturnsWhether the number is valid, the countryCode/vatNumber, the registered name/address (when the register discloses them), the requestDate, the source register, an attribution string when the source's licence requires it, and serviceAvailable (false during register downtime, in which case valid is false)
$0.006
/v1/finland
Validate Finnish VAT number
Validate a Finnish VAT (ALV) number against the official VAT register. Validity means the entity exists and holds a live registration.
InputsvatNumber*string
ReturnsWhether the number is valid, the countryCode/vatNumber, the registered name/address (when the register discloses them), the requestDate, the source register, an attribution string when the source's licence requires it, and serviceAvailable (false during register downtime, in which case valid is false)
$0.006
/v1/france
Validate French VAT number
Validate a French VAT (TVA) number against the official company register. Validity means the SIREN exists and the company is administratively active.
InputsvatNumber*string
ReturnsWhether the number is valid, the countryCode/vatNumber, the registered name/address (when the register discloses them), the requestDate, the source register, an attribution string when the source's licence requires it, and serviceAvailable (false during register downtime, in which case valid is false)
$0.006
/v1/czechia
Validate Czech VAT number
Validate a Czech VAT (DIČ) number for a legal entity against the official register. Validity means the subject exists and is live in the VAT (DPH) register.
InputsvatNumber*string
ReturnsWhether the number is valid, the countryCode/vatNumber, the registered name/address (when the register discloses them), the requestDate, the source register, an attribution string when the source's licence requires it, and serviceAvailable (false during register downtime, in which case valid is false)
$0.006
/v1/poland
Validate Polish VAT number
Validate a Polish VAT (NIP) number against the official VAT register. Validity means the taxpayer's VAT status is active (Czynny).
InputsvatNumber*string
ReturnsWhether the number is valid, the countryCode/vatNumber, the registered name/address (when the register discloses them), the requestDate, the source register, an attribution string when the source's licence requires it, and serviceAvailable (false during register downtime, in which case valid is false)
$0.006
/v1/latvia
Validate Latvian VAT number
Validate a Latvian VAT (PVN) number against the official VAT-payers register. Validity means the number has a currently active entry in the register.
InputsvatNumber*string
ReturnsWhether the number is valid, the countryCode/vatNumber, the registered name/address (when the register discloses them), the requestDate, the source register, an attribution string when the source's licence requires it, and serviceAvailable (false during register downtime, in which case valid is false)
$0.006

web 5 tools, 21 endpoints

places places.openverbs.com 3 endpoints
/v1/place-details
Google Business Profile / place details lookup
Look up a business's full Google Business Profile by name and location. Returns name, category, star rating and review count, address, phone, website, opening hours by day, Google place_id and CID, coordinates and claimed status. For place enrichment, store-hours and business lookups. Unknown business returns found=false.
Inputsname*stringlocationstringlanguagestring
Returnsfound plus the profile: name, category, categories, rating, reviewsCount, address, phone, website, domain, placeId, cid, latitude, longitude, claimed, bookingUrl and hours (day → [{open,close}] in HH:MM). No match → found:false
$0.02
/v1/business-search
Local business directory search
Google Business Profile and Google Maps local business search API: find businesses within a radius of a coordinate, filtered by category and/or name. Returns ranked businesses with name, category, star rating and review count, address, phone, website domain, place_id/CID and coordinates. For local SEO, lead lists and competitor research. No match → empty results.
InputscategoriesarrayquerystringlocationCoordinate*stringlimitinteger
Returnstotal, count and ranked results, each with rank, name and (where present) category, categories, rating, reviewsCount, address, phone, domain, website, placeId, cid, latitude, longitude, claimed. No match → empty results
$0.03
/v1/business-categories
Local business category counts
Count how many Google businesses fall under each category within a radius of a coordinate, optionally filtered by category or name. Returns categories ranked by business count - for local market sizing, competitor-density analysis and site-selection research. No match → empty results.
InputslocationCoordinate*stringcategoriesarrayquerystringlimitinteger
Returnstotal, count and results, each with category and count (number of businesses in that category). No match → empty results
$0.04
search search.openverbs.com 10 endpoints
/v1/web
Web Search (Google SERP)
Web search API - live Google (default) or Bing SERP for a query: search engine results returned as ranked organic hits with title, URL, domain and snippet, localised by location and language. A google search api / serp api for agents: search the web, live web search for grounding, RAG and web lookup.
Inputsq*stringlocationstringlanguagestringlimitintegerenginestring
ReturnsThe organic total and ranked results, each with rank, title, url, domain and (where present) description and breadcrumb. No results → empty results
$0.01
/v1/bing
Bing Search (Bing SERP)
Bing search API - live Bing SERP for a query: Bing search engine results returned as ranked organic hits with title, URL, domain and snippet, localised by location and language. A bing serp api for agents: search Bing, live Bing web search for grounding, RAG and cross-engine lookup beyond Google.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe organic total and ranked results, each with rank, title, url, domain and (where present) description and breadcrumb. No results → empty results
$0.01
/v1/news
News search
News search: live Google News results for a query, localised by location and language. Returns ranked articles with title, URL, domain and, where available, source and timestamp. Real-time news API for current events and headlines.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe article total and ranked results, each with rank, title, url, domain and (where present) source and timestamp. No results → empty results
$0.01
/v1/jobs
Jobs search (Google Jobs)
Jobs search: Google Jobs listings for a query (e.g. "backend engineer"), localised by location and language. Returns ranked postings with title, employer, location and, where available, salary, contract type, source and posting date. Results are collected on demand, so the call may take a few seconds.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe posting total and ranked results, each with rank, title and (where present) employer, location, salary, contractType, source, sourceUrl, posted and jobId. No results → empty results
$0.01
/v1/youtube
YouTube video search
Live YouTube video-search results for a query, localised by location and language. Returns ranked videos with title, URL, video id, channel, view count, publish date and duration.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe total and ranked results, each with rank, title, url, videoId and (where present) channel, channelUrl, views, published, durationSeconds, isLive, isShorts. No results → empty results
$0.01
/v1/local
Local business & places search
Live Google local-finder (map places) results for a query, localised by location and language. Returns ranked places with title, address, website domain, phone, rating and review count.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe total and ranked results, each with rank, title and (where present) description, domain, url, phone, rating, reviews, cid. No results → empty results
$0.01
/v1/images
Google Image Search
Image search API - live Google Images results for a query, localised by location and language. Returns ranked images with title, direct image URL, source page URL and alt text. A google images / image search api for agents.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe total and ranked results, each with rank, title, imageUrl and (where present) sourceUrl and alt. No results → empty results
$0.006
/v1/scholar
Scholarly & Academic Paper Search
Scholarly search API - academic papers and research articles for a query, powered by OpenAlex. Returns ranked works with title, authors, year, venue, DOI, citation count and open-access status. A google-scholar-style research / scholarly articles search for agents. Data source: OpenAlex (CC0).
Inputsq*stringlimitinteger
ReturnsThe total matches and ranked results, each with rank, title, authors, citations, openAccess and (where present) year, venue, doi, url, type. No results → empty results. Data source: OpenAlex
$0.006
/v1/wikipedia
Wikipedia Article Summary
Wikipedia summary API - the plain-language summary of the best-matching Wikipedia article for a topic or query, in any language. Returns the article title, short description, summary extract, thumbnail image and canonical URL. A wikipedia / encyclopedia lookup for agents grounding answers on a topic. No match returns found:false. Data source: Wikipedia (CC BY-SA 4.0).
Inputsq*stringlangstring
Returnsfound and lang plus, when matched, title, description, extract, url and (where present) thumbnail, type. Every response carries attribution (CC BY-SA 4.0). No match → found: false. Data source: Wikipedia
$0.002
/v1/suggest
Search autocomplete suggestions
Live Google autocomplete suggestions for a partial query, localised by location and language. Returns ranked suggestion strings with a relevance score.
Inputsq*stringlocationstringlanguagestringlimitinteger
ReturnsThe total and ranked suggestions, each with rank, suggestion and (where present) relevance. No results → empty suggestions
$0.01
sentiment sentiment.openverbs.com 1 endpoint
/v1/sentiment
Market & Brand Sentiment
Market & brand sentiment for any keyword, brand, ticker or product: analyses the sentiment of web & news content mentioning it and returns an overall label (positive/negative/neutral/mixed), a net sentiment score (-1..1), positive/negative/neutral shares and an emotion breakdown (anger, happiness, love, sadness, fun).
Inputskeyword*string
Returnslabel (positive/negative/neutral/mixed), netSentiment (-1..1), totalMentions, polarity and polarityShare (positive/negative/neutral) and emotions (anger/happiness/love/sadness/fun). found:false when there is no coverage for the keyword
$0.04
url url.openverbs.com 4 endpoints
/v1/parse
Parse URL
Parse an absolute URL into its WHATWG components: protocol/scheme, credentials, host/hostname/port, origin, pathname (plus path segments), search (plus a decoded query object) and hash. A string that is not a valid absolute URL is rejected as a clean 400.
Inputsurl*string
Returns{ href, protocol, scheme, host, hostname, port, origin, pathname, segments, search, query, hash, … }
$0.002
/v1/normalize
Normalize URL
Canonicalize a URL: WHATWG parsing already lowercases the host, resolves dot-segments and drops default ports; on top of that, query parameters are sorted by default and you can optionally drop the fragment or a trailing slash. Returns the normalized URL and whether it changed.
Inputsurl*stringsortQuerybooleanremoveHashbooleanremoveTrailingSlashbooleanlowercaseHostnameboolean
Returns{ url, changed }
$0.002
/v1/resolve
Resolve reference
Resolve a relative or absolute reference against a base URL, following RFC 3986 reference resolution (e.g. base 'https://a.com/x/y' + ref '../z' → 'https://a.com/z'). The base must itself be a valid absolute URL, else a clean 400.
Inputsbase*stringref*string
Returns{ url }
$0.002
/v1/query
Query string parse / build
Two directions over query strings. action='parse' decodes a query string (with or without a leading '?') into an object, collapsing repeated keys into arrays. action='build' encodes a params object into a query string, expanding array values into repeated keys; set sort=true to order keys alphabetically.
Inputsaction*stringquerystringparamsobjectsortboolean
Returns{ query } (parse) or { string } (build)
$0.002
useragent useragent.openverbs.com 3 endpoints
/v1/parse
Parse a User-Agent
Break a User-Agent string into browser, engine, operating system (each with a version) and device type. Unidentifiable components are reported as null.
Inputsua*string
Returns{ ua, browser: { name, version }, engine: { … }, os: { … }, device: { type } }
$0.002
/v1/classify
Classify a User-Agent
Classify a User-Agent by device form factor and return convenience booleans (isBot, isMobile, isTablet, isDesktop, isTouchCapable) for routing decisions.
Inputsua*string
Returns{ ua, deviceType, isBot, isMobile, isTablet, isDesktop, isTouchCapable }
$0.002
/v1/is-bot
Detect a bot
Detect whether a User-Agent belongs to a known bot, crawler, AI agent or HTTP tool, and if so return its name and category (search, social, seo, ai, monitoring, tool, …).
Inputsua*string
Returns{ ua, isBot, name, category }
$0.002