canonical: https://jentic.com/apis/keenable.ai/keenable

# Keenable API

The Keenable API searches the web and fetches pages as clean Markdown for agents that need live sources. Search takes a query with filters for publish date, acquisition date, and a single site, returns up to 50 results with adjustable snippet length, and supports point-in-time search with query_time to see the web as it stood at a past moment. Fetch extracts a page's content up to a character limit, can request live content, and accepts an optional prompt so an LLM returns only the extracted answer instead of the full page. Both operations are also offered pay-per-request over x402 with no account needed.

## For AI agents

Search the web with date and site filters or point-in-time query_time, and fetch any URL as clean Markdown with an optional extraction prompt. Pay with an API key or per request over x402.

## Scope

Does not crawl whole sites, host a search index for your own documents, or generate embeddings. Use for web search and single-page fetch and extraction only.

## Capabilities

- Search the web by query, restricted to one site and filtered by published_after, published_before, acquired_after, or acquired_before
- Run a point-in-time search with query_time so pages newer than that moment are excluded
- Return up to 50 results per search with snippet_max_length between 180 and 10000 characters
- Fetch a URL as clean Markdown, capped with max_chars and optionally refreshed with live set to true
- Pass a prompt to fetch so an LLM returns only the requested extraction, such as pricing tiers, instead of the whole page
- Pay per request with an x402 PAYMENT-SIGNATURE in place of an API key on the x402 search and fetch endpoints

## Use cases

### Live Web Grounding Through Jentic

An AI agent answering a question about recent events searches Keenable with a published_after filter, picks the strongest sources, and fetches each as Markdown before writing a cited answer. Through Jentic the agent discovers search and fetch by intent and calls them with your API key, which is injected at call time and never placed in the agent's context.

Example prompt: Search with query 'EU AI Act enforcement' and published_after '7d', fetch the top three result URLs with max_chars 20000, and summarise them with citations

### Targeted Page Extraction

Rather than pulling a full page into context, an agent fetches a URL with a prompt such as 'List all pricing tiers with their monthly price' and receives only that extraction. This keeps context small when comparing many product pages.

Example prompt: Fetch a product pricing page URL with prompt 'List all pricing tiers with their monthly price' and return the result as a table

### Point-in-Time Research

An analyst checking what was knowable on a past date runs a search with query_time set to that moment, which excludes every page newer than it. The spec notes query_time sets no lower bound, so it is not a recency filter: published_after is the field for recent results.

Example prompt: Search for 'company X layoffs' with query_time '2025-01-01' and site 'reuters.com' and list the results with their publish dates

### Account-Free Pay-Per-Request Search

An agent without a Keenable account calls the x402 search or fetch endpoint. The unpaid request returns a 402 offer in the PAYMENT-REQUIRED header, the agent retries with a signed payment in PAYMENT-SIGNATURE, and the result arrives with a receipt in PAYMENT-RESPONSE. Failed requests are not charged.

Example prompt: Call POST `/v1/x402/search` with query 'open source vector databases', read the 402 offer, and retry with a signed PAYMENT-SIGNATURE header

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/v1/search` | Search the web |
| GET | `/v1/fetch` | Fetch page content as Markdown |
| POST | `/v1/x402/search` | Search the web, paid per request |
| GET | `/v1/x402/fetch` | Fetch page content, paid per request |
| GET | `/v1/auth/user` | Get API key identity |

## Key resources

- **Search** — Web search with date, site, and point-in-time filters, via API key or x402.
- **Fetch** — Page content as Markdown with optional live fetch and extraction prompt, via API key or x402.
- **Identity** — The user and organization behind the API key.

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 68 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 100 / 100
  - Developer Experience & Jentic Compatibility: 69 / 100
  - AI-Readiness & Agent Experience: 48 / 100
  - Agent Usability: 94 / 100
  - Security: 58 / 100
  - AI Discoverability: 85 / 100
- **View full report:** https://jentic.com/apis/keenable.ai/keenable/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring Keenable by hand means choosing between the X-API-Key header, a bearer JWT from its OAuth sign-in, or the x402 payment handshake, and learning which date filter does what. Through Jentic you install once, import the Keenable API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Keenable carries the search query and the fetch URL in the request body or query string, so rules bound which operations your agent may call, such as search and fetch, not which sites it reaches. You choose the operations it may call, so the x402 paid endpoints are not included unless you add them.
- **Credential handling:** Your Keenable API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'search the web for recent news' or 'fetch a page as markdown', and Jentic returns the matching Keenable operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Tavily API** — Tavily is a search API built for LLM agents with extraction features.
- **Exa** — Exa offers neural web search and page contents for agents.
- **Brave Search API** — Brave Search returns results from an independent web index.
- **Perplexity** — Perplexity generates answers over web sources that Keenable search and fetch can supply or verify.

## FAQ

### What authentication does the Keenable API use?

Per its OpenAPI spec, the Keenable API accepts an API key from the Keenable dashboard in the X-API-Key header, and POST `/v1/search` and GET `/v1/fetch` also accept a bearer JWT from Keenable's OAuth sign-in. The x402 endpoints need no account: they take an x402 signed payment in the PAYMENT-SIGNATURE header instead. Through Jentic your API key is stored encrypted by your own Jentic One instance and injected at call time.

### Is there a Keenable MCP server?

You don't need an MCP server to give your agent Keenable. Jentic connects the API directly from the API Directory: import it, store your API key once, and your agent calls search and fetch, discovering them on demand instead of loading a server's tool definitions into its context.

### Can I limit what my agent is allowed to do with the Keenable API?

Yes. Write a rule that allows only POST `/v1/search` and GET `/v1/fetch` on your API key, so the agent can research but cannot call the x402 paid endpoints or the identity lookup. Every call it makes is logged, giving you a record of each query and URL it touched.

### How much does a Keenable x402 request cost?

Per the spec, the price is stated in the 402 offer returned to an unpaid request, $0.01 per request by default, paid in USDC. Failed requests are not charged, and the receipt comes back in the PAYMENT-RESPONSE header.

### What is the difference between query_time and published_after in Keenable search?

query_time is an upper bound for point-in-time search: it shows the web as it stood at that moment and excludes newer pages, but sets no lower bound. published_after is the filter to use for recent results. Date filters accept YYYY-MM-DD, ISO 8601, or relative values like 7d.

### What are the rate limits for the Keenable API?

The OpenAPI spec does not specify rate limits. Check the Keenable dashboard at https://keenable.ai for the limits on your plan.

### How do I fetch a web page as Markdown with Keenable through Jentic?

Search Jentic for an intent like 'fetch a web page as markdown', import the Keenable API from the API Directory, and store your API key. Your agent calls GET `/v1/fetch` with the url, an optional max_chars cap, and an optional prompt to extract only what it needs. To run it on your own infrastructure, install Jentic One from its GitHub repo.
