# POST /text/cluster: $0.01 per call

Group similar texts: send up to 200 pieces of feedback, support tickets, reviews or survey answers and get back the groups that say much the same thing, biggest first, each with a short label and examples, plus the ones that fit nowhere. Any language. Grouping is done by code on embeddings (BGE-M3); set similarity (0.5-0.95) for looser or tighter groups.

- **Price:** $0.01 in USDC, the same on Base, Solana, Polygon, Arbitrum. Failed calls are never charged.
- **Free trial:** yes, 20 free calls a day from Claude, Cursor or any MCP client ([set-up](/mcp/setup)).
- **Tier:** live
- **Answers cached for:** 1 day(s)
- **Data sources:** Workers AI: BGE-M3 embeddings (metered); Workers AI: Llama 3.1 8B for group labels (metered)
- **Lane:** AI tools ([OpenAPI](/openapi/ai.json))
- **Live health:** [status page](/status)

## Free sample

See an answer for the demo input first, free (no payment, 10 a minute): [https://aayatai.com/sample/text-cluster](/sample/text-cluster). It is a stored real answer when we have one, otherwise an example marked `"kind": "illustrative"`.

```bash
curl "https://aayatai.com/sample/text-cluster"
```

## 1. See the price (free)

Call it without paying: you get `402 Payment Required` and a `PAYMENT-REQUIRED` header with the exact price and where to pay.

```bash
curl -i -X POST https://aayatai.com/text/cluster -H "content-type: application/json" -d '{"texts":["The app crashes when I open settings","Settings screen makes the app crash","Please add a dark mode","Would love a dark theme option","Crash on launch of the settings page","Great support team, thanks!"]}'
```

## 2. Pay and call (TypeScript)

```bash
npm install @x402/fetch @x402/evm viem
```

```ts
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

// A wallet used only by your agent, holding a little USDC on Base.
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
const pay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});

const res = await pay("https://aayatai.com/text/cluster", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({"texts":["The app crashes when I open settings","Settings screen makes the app crash","Please add a dark mode","Would love a dark theme option","Crash on launch of the settings page","Great support team, thanks!"]}),
});
console.log(await res.json());
```

## 3. Or as an MCP tool

```ts
// MCP server: https://aayatai.com/mcp (Streamable HTTP). With the x402 MCP client (see /start):
const result = await client.callTool("text-cluster", {"texts":["The app crashes when I open settings","Settings screen makes the app crash","Please add a dark mode","Would love a dark theme option","Crash on launch of the settings page","Great support team, thanks!"]});
```

## Inputs

- `texts` **(required)** (array): 2 to 200 texts.
- `similarity` (number; default `0.75`): How alike texts must be to share a group (higher = tighter groups).
- `labels` (boolean; default `true`): Name each group with AI (false = grouping only, no language model).

Bad inputs are rejected with HTTP 400 before any payment is asked for.

## Example answer

Example only: the shape of an answer, with placeholder addresses and made-up figures. It is not data about any real token or wallet; call the service (or its free sample) for real results.

```json
{
  "groups": [
    {
      "label": "App crashes on the settings screen",
      "size": 3,
      "members": [
        0,
        1,
        4
      ],
      "examples": [
        "The app crashes when I open settings",
        "Settings screen makes the app crash",
        "Crash on launch of the settings page"
      ]
    },
    {
      "label": "Requests for a dark mode",
      "size": 2,
      "members": [
        2,
        3
      ],
      "examples": [
        "Please add a dark mode",
        "Would love a dark theme option"
      ]
    }
  ],
  "unclustered": [
    5
  ],
  "count": 6,
  "similarity": 0.75,
  "models": {
    "embeddings": "@cf/baai/bge-m3",
    "labels": "@cf/meta/llama-3.1-8b-instruct-fp8"
  }
}
```

## Related

- [POST /invoice/parse](/services/invoice-parse) ($0.02): Parse an invoice or receipt into clean JSON: supplier, VAT/tax ID, invoice number, dates, currency, line items, subtotal, tax, total, amount due and bank detail
- [POST /document/ask](/services/document-ask) ($0.02): Ask a question about one document (PDF, Word, web page or pasted text) and get a short answer with the exact quotes that support it.
- [POST /entities](/services/entities) ($0.005): Named-entity extraction: the organisations, people, places, products, events, dates, amounts of money and laws in a text or document (URL to a page or PDF), wit
- [POST /keywords](/services/keywords) ($0.003): Key phrases and topics of a text, web page or PDF, for tagging, SEO and search indexes: up to 30 key phrases, most important first, each checked by code to real
- [POST /moderate](/services/moderate) ($0.005): Content moderation for AI agents and apps: is this text safe?
- [POST /pii/redact](/services/pii-redact) ($0.005): Remove personal data from text before an agent stores it or sends it to another model: emails, phone numbers, card numbers, IBANs, NI numbers, SSNs, IP addresse
- [POST /sentiment](/services/sentiment) ($0.005): Sentiment analysis for reviews, comments, support tickets and social replies: up to 50 texts per call, each labelled positive, neutral, negative or mixed with a
- [POST /text/rank](/services/text-rank) ($0.003): Semantic ranking: give a query and up to 100 candidate texts (search results, FAQ answers, products, document chunks) and get them sorted by how well they match

New here? [Getting started in 60 seconds](/start). All services: [Aayat AI](/).