QANATIX

Quickstart

Zero to first search query in 5 minutes.

Quickstart

Get your first search result from QANATIX in under 5 minutes.

1. Get an API key

curl -X POST https://api.qanatix.com/api/v1/auth/keys \
  -H "X-Tenant-Id: your-tenant-id" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-first-key", "scopes": ["search", "upload", "records"]}'

Response:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "my-first-key",
  "key": "sk_live_abc123...",
  "scopes": ["search", "upload", "records"],
  "message": "Store this key securely — it cannot be retrieved again."
}

Save the key value. You'll use it in all subsequent requests.

2. Upload data

Push a batch of records:

curl -X POST https://api.qanatix.com/api/v1/upload/parts_catalog/fastener/batch \
  -H "Authorization: Bearer sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '[
    {
      "name": "Stainless Steel Bolt M8x40 A2",
      "source_id": "ERP-001",
      "part_number": "SS-M8-40-A2",
      "material": "Stainless Steel A2",
      "price_eur": 0.12,
      "in_stock": true
    },
    {
      "name": "Hex Nut M8 Grade 8 Zinc",
      "source_id": "ERP-002",
      "part_number": "HN-M8-G8-ZN",
      "material": "Carbon Steel Zinc Plated",
      "price_eur": 0.04,
      "in_stock": true
    }
  ]'
result = qx.ingest.batch("parts_catalog", "fastener", [
    {
        "name": "Stainless Steel Bolt M8x40 A2",
        "source_id": "ERP-001",
        "part_number": "SS-M8-40-A2",
        "material": "Stainless Steel A2",
        "price_eur": 0.12,
        "in_stock": True,
    },
    {
        "name": "Hex Nut M8 Grade 8 Zinc",
        "source_id": "ERP-002",
        "part_number": "HN-M8-G8-ZN",
        "material": "Carbon Steel Zinc Plated",
        "price_eur": 0.04,
        "in_stock": True,
    },
])
print(f"Accepted: {result.summary.accepted}")

Or upload a CSV file:

curl -X POST https://api.qanatix.com/api/v1/upload/parts_catalog/fastener/upload \
  -H "Authorization: Bearer sk_live_abc123..." \
  -F "file=@parts.csv"
result = qx.ingest.upload("parts_catalog", "fastener", "parts.csv")

QANATIX validates, normalizes, and makes your data instantly queryable.

curl -X POST https://api.qanatix.com/api/v1/search/parts_catalog \
  -H "Authorization: Bearer sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"query": "stainless M8 bolt", "limit": 5}'
results = qx.search("parts_catalog", "stainless M8 bolt", limit=5)
for r in results.results:
    print(r.name, r.score, r.collection_data)

Response:

{
  "results": [
    {
      "record_id": "...",
      "name": "Stainless Steel Bolt M8x40 A2",
      "score": 0.87,
      "collection": "parts_catalog",
      "record_type": "fastener",
      "collection_data": {
        "part_number": "SS-M8-40-A2",
        "material": "Stainless Steel A2",
        "price_eur": 0.12,
        "in_stock": true
      }
    }
  ],
  "metadata": {
    "search_mode": "fulltext",
    "query_type": "keyword",
    "processing_time_ms": 42,
    "cache_hit": false
  },
  "pagination": {
    "offset": 0,
    "limit": 5,
    "has_more": false
  }
}

4. Connect to Claude

Add QANATIX as an MCP tool in Claude Code:

claude mcp add --transport http qanatix https://api.qanatix.com/mcp/

Or in Claude Desktop, add to your config:

{
  "mcpServers": {
    "qanatix": {
      "url": "https://api.qanatix.com/mcp/",
      "headers": {
        "Authorization": "Bearer sk_live_abc123..."
      }
    }
  }
}

Then just ask Claude:

Find stainless M8 bolts in stock

Claude calls qanatix_search() automatically and returns results from your data.

Next steps

On this page