# Free tools (no key) (https://upapi.io/docs/free-tools)



A few operations are also **free tools**: anyone can call them without an
account or an API key, from a browser or from code. Each is listed on
[upapi.io/tools](https://upapi.io/tools), runs in a box on the page linked below
(its own tool page or its operation page), and has an endpoint at
`https://app.upapi.io/api/tools/<tool>`.

| Tool                                                                    | Endpoint                                                   | Operation                  |
| ----------------------------------------------------------------------- | ---------------------------------------------------------- | -------------------------- |
| [Open Graph checker](https://upapi.io/tools/open-graph-checker)         | `/api/tools/open-graph-checker?url=`                       | `opengraph-parse.get`      |
| [Sitemap URL extractor](https://upapi.io/apis/seo-tools/sitemap-parse)  | `/api/tools/sitemap-url-extractor?url=&limit=`             | `sitemap-parse.get`        |
| [Google Autocomplete](https://upapi.io/apis/search/google-autocomplete) | `/api/tools/google-autocomplete?query=&language=&country=` | `google-autocomplete.post` |
| [Crypto price checker](https://upapi.io/apis/finance/crypto-price)      | `/api/tools/crypto-price?coins=&vsCurrencies=`             | `crypto-price.get`         |

```bash
curl "https://app.upapi.io/api/tools/open-graph-checker?url=https%3A%2F%2Fgithub.com"
```

## The contract [#the-contract]

* **No key, no cookie.** CORS is open (`Access-Control-Allow-Origin: *`).
* **GET or POST.** GET takes the parameters as a query string; POST takes the
  same names as a JSON object. Only the parameters listed for a tool reach the
  operation: options that cost upstream requests (a proxy, the autocomplete
  `expand` switch) need a key.
* **JSON by default, Markdown on request.** Send `Accept: text/markdown` for a
  Markdown rendering of the same result.
* **Errors are RFC 9457** `application/problem+json` documents, with the same
  `code` the keyed gateway uses (`INVALID_INPUT`, `RATE_LIMITED`, `NOT_FOUND`,
  `UPSTREAM_ERROR`…) and a `Retry-After` header on a 429.
* **Limits.** Each IP address gets 30 runs a minute and 300 a day across all
  free tools together, and each tool has a daily capacity shared by every
  caller. With a key, the same operation at `https://api.upapi.io/<operation>`
  has neither limit.
* Every response carries `X-Tool-Docs` (the tool's page) and `X-Request-Id`.

## Machine-readable [#machine-readable]

* [`/api/tools`](https://app.upapi.io/api/tools) lists every free tool, plus
  the free tools other Devino apps run, as JSON (or Markdown).
* [`/api/tools/openapi.json`](https://app.upapi.io/api/tools/openapi.json) is
  an OpenAPI 3.0 document of the endpoints, every path `security: []`, tagged
  "Free tools".
* The [API catalog](https://upapi.io/.well-known/api-catalog) (RFC 9727) lists
  the free tools as their own API.
