API v1StableLast updated Oct 2026Changelog →
Get started

AI skills & agents

Give Claude, Cursor, ChatGPT and custom agents MessyAPI tools.

MessyAPI exposes eight high-level AI skills. An agent sends a plain-language goal plus records (or text); MessyAPI builds a plan from operations that actually exist, runs it, and returns the plan, per-step report and result. Anything it can't do comes back as unsupported_capability — it never guesses.

Quickstart (REST)

curl https://messyapi.com/api/v1/ai/clean \
  -H "Authorization: Bearer $MESSYAPI_KEY" -H "Content-Type: application/json" \
  -d '{"goal":"normalize phones, validate emails, find duplicates, redact PII","records":[{"name":"jane DOE","email":"jane@example.com","phone":"(555) 123-4567"}]}'

Skills

  • POST /api/v1/ai/clean — messy_clean: normalize phones, addresses, URLs, names. Accepts multi-step goals.
  • POST /api/v1/ai/validate — messy_validate: emails, data quality; formats/schema with options.
  • POST /api/v1/ai/match — messy_match: duplicate and similar-record clusters (reports groups, doesn't delete rows).
  • POST /api/v1/ai/transform — messy_transform: CSV/TSV/JSON conversion, flatten; pivot/unpivot/rank via operations.
  • POST /api/v1/ai/protect — messy_protect: PII and secret detection, redacted copy.
  • POST /api/v1/ai/analyze — messy_analyze: profile, missing values, quality, statistics; text language/sentiment/keywords/entities/summary.
  • POST /api/v1/ai/batch — messy_batch: same plan over up to 10,000 records in 1,000-record chunks (duplicate detection runs per chunk).
  • POST /api/v1/ai/execute — Messy Execute (limited preview): send a goal or template (crm-import-prep, lead-validation, ai-ready-dataset, pii-safe-export, dedupe-contacts, data-profile) with up to 10,000 records; returns the plan, results and a verification report (PASS / PASS_WITH_WARNINGS / FAIL, record counts per step, lost fields, duplicates from the cluster step, PII scan done). Quality score = filled cells ÷ (records × fields) × 100.
  • POST /api/v1/ai/verify — Messy Verify (limited preview, free): check records against required fields and types (string, number, boolean, email).
  • GET|POST /api/v1/ai/discover — messy_discover: free, no key; returns relevant real operations for a goal.

Request body

{
  "goal": "string (optional)",
  "records": [ { ... } ],        // or
  "text": "string",
  "operations": [ { "operation": "pivot", "options": { ... } } ],  // advanced, optional
  "plan_only": true               // return the plan, free
}

MCP (Claude Desktop, Claude Code, Cursor, VS Code)

Point any MCP client at https://messyapi.com/mcp with Authorization: Bearer YOUR_KEY. Add ?mode=skills to list only the 8 skills plus 4 outcome tools; without it every operation is also listed.

claude mcp add --transport http messyapi "https://messyapi.com/mcp?mode=skills" \
  --header "Authorization: Bearer $MESSYAPI_KEY"

ChatGPT custom GPTs, Gemini, custom agents

These connect through the OpenAPI spec (/docs/openapi.json) as actions/function definitions, or call the REST endpoints above directly. This is a standard OpenAPI/REST connection, not a native plugin.

Permissions

Keys limited to categories (Clean, Validate, Match, Transform, Protect, Analyze) are checked against every step of the plan on the server. If any step needs a category the key lacks, the whole call is refused with 403 forbidden naming the step. The goal text can't override this.

Limits & billing

Skills meter like any endpoint: records × each step's weight, through the same quota, rate limits and spend alerts. plan_only and discover are free. Up to 1,000 records per call (10,000 for batch).

Security

  • Goal text is treated as data; prompt-injection markers are reported as injection_detected and never change what runs.
  • Planning is deterministic — no model picks operations, so plans are reproducible.
  • Skills never fetch URLs. Secrets found in data are always removed by redaction.
  • Request logs keep only metadata (skill, goal excerpt, step counts), never your records.

Try it

The live demo on /ai runs the same planner without a key (25 records max).