QANATIX
API Reference

Search API

Hybrid search endpoint — full specification.

Search API

Search entities using hybrid search (semantic + keyword + identifier detection).

POST /search/{vertical}

curl -X POST https://api.qanatix.com/api/v1/search/manufacturing \
  -H "Authorization: Bearer sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "query": "stainless M8 bolt ISO 4017",
    "limit": 20,
    "offset": 0,
    "rerank": true,
    "format": "json",
    "filters": {
      "in_stock": true,
      "price_eur_max": 0.20
    }
  }'

Path parameters

ParameterDescription
verticalThe vertical to search within

Request body

FieldTypeRequiredDefaultDescription
querystringyesSearch query (1-500 chars)
limitintegerno20Max results (1-100)
offsetintegerno0Pagination offset
rerankbooleannotrueEnable cross-encoder reranking
formatstringnojsonResponse format: json, compact, yaml
filtersobjectno{}Filters on vertical_data fields

Filter operators

SuffixOperatorExample
(none)="country": "DE"
_min>="price_eur_min": 0.05
_max<="price_eur_max": 0.20
_gt>"stock_gt": 0
_lt<"lead_time_days_lt": 10

Maximum 20 filters per query. Multiple filters use AND logic.

Response (200) — JSON format

{
  "results": [
    {
      "entity_id": "550e8400-...",
      "name": "Stainless Steel Hex Head Bolt M8x40 ISO 4017",
      "score": 0.87,
      "vertical": "manufacturing",
      "entity_type": "fastener",
      "vertical_data": {
        "part_number": "SS-M8-40-A2",
        "material": "Stainless Steel A2",
        "standard": "ISO 4017",
        "price_eur": 0.12,
        "in_stock": true
      },
      "description_llm": "...",
      "source_type": "file_upload",
      "updated_at": "2026-03-05T14:30:00Z"
    }
  ],
  "pagination": {
    "offset": 0,
    "limit": 20,
    "has_more": false
  },
  "metadata": {
    "search_mode": "hybrid",
    "query_type": "keyword",
    "processing_time_ms": 42,
    "total_estimate": 1,
    "zero_result_fallback_used": false,
    "reranked": true,
    "cache_hit": false,
    "timings": {
      "embed_ms": 18.2,
      "search_ms": 12.4,
      "rerank_ms": 5.0,
      "hydrate_ms": 8.1
    }
  }
}

Response fields

FieldDescription
results[].entity_idEntity UUID
results[].scoreRelevance score (0-1, DBSF normalized). Identifier matches = 1.0
results[].vertical_dataYour structured data
results[].description_llmAuto-generated LLM-optimized description
results[].source_typeHow data was ingested: api, file_upload, webhook, connector
metadata.search_modehybrid, identifier, degraded, or error
metadata.query_typeidentifier, keyword, or semantic
metadata.processing_time_msTotal server-side latency
metadata.rerankedWhether cross-encoder reranking was applied
metadata.cache_hitWhether response was served from 30-second cache
metadata.timingsPer-phase latency breakdown
pagination.has_moreWhether more results exist

Response — Compact format

When format: "compact", returns plain text markdown table:

| # | Name | Score | Key Data |
|---|------|-------|----------|
| 1 | Stainless Steel Bolt M8x40 A2 | 0.87 | part_number: SS-M8-40-A2, material: Stainless Steel A2 |

~120 tokens per result. Best for LLM context windows.

Response — YAML format

When format: "yaml", returns plain text YAML:

- name: Stainless Steel Bolt M8x40 A2
  score: 0.87
  part_number: SS-M8-40-A2
  material: Stainless Steel A2

~200 tokens per result.

GET /search/{vertical}

Same search via query parameters. Convenience endpoint for simple queries.

curl "https://api.qanatix.com/api/v1/search/manufacturing?q=M8+bolt&limit=5" \
  -H "Authorization: Bearer sk_live_abc123..."
ParameterMaps toDefault
qquery— (required)
limitlimit20
offsetoffset0

Filters, rerank, and format are not supported via GET — use POST.

On this page