QANATIX
Verticals

Create a Vertical

Define a JSON schema and start ingesting data.

Create a Vertical

Create a custom vertical in 3 steps. No code changes, no deployment, no waiting.

1. Define your schema

A vertical schema is standard JSON Schema. It describes what fields your vertical_data should contain.

{
  "type": "object",
  "properties": {
    "part_number": { "type": "string" },
    "material": { "type": "string" },
    "price_eur": { "type": "number", "minimum": 0 },
    "in_stock": { "type": "boolean" },
    "certifications": {
      "type": "array",
      "items": { "type": "string" }
    },
    "dimensions": {
      "type": "object",
      "properties": {
        "length_mm": { "type": "number" },
        "diameter_mm": { "type": "number" }
      }
    }
  },
  "required": ["part_number"]
}

2. Register the schema

curl -X POST https://api.qanatix.com/api/v1/schemas \
  -H "Authorization: Bearer sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "vertical": "fasteners",
    "entity_type": "bolt",
    "schema": {
      "type": "object",
      "properties": {
        "part_number": { "type": "string" },
        "material": { "type": "string" },
        "price_eur": { "type": "number" },
        "in_stock": { "type": "boolean" }
      },
      "required": ["part_number"]
    }
  }'

The Qdrant collection is created automatically when you register a schema. You can start ingesting immediately.

# Ingest
curl -X POST https://api.qanatix.com/api/v1/ingest/fasteners/bolt/batch \
  -H "Authorization: Bearer sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"records": [{"name": "M8 Bolt A2", "vertical_data": {"part_number": "M8-A2-40"}}]}'

# Search
curl -X POST https://api.qanatix.com/api/v1/search/fasteners \
  -H "Authorization: Bearer sk_live_abc123..." \
  -d '{"query": "M8 bolt stainless"}'

Schema validation

When a schema is registered, all incoming data is validated against it:

  • Valid data — ingested normally
  • Invalid data — rejected with a clear error message
  • Extra fields — allowed (schemas are open by default)
  • Missing required fields — rejected

Validation uses jsonschema-rs (Rust-based) for sub-millisecond validation even on large batches.

Update a schema

Re-register with the same vertical and entity_type to update:

curl -X POST https://api.qanatix.com/api/v1/schemas \
  -H "Authorization: Bearer sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"vertical": "fasteners", "entity_type": "bolt", "schema": { ... }}'

Existing data is not re-validated. New ingestions use the latest schema version.

List schemas

curl https://api.qanatix.com/api/v1/schemas \
  -H "Authorization: Bearer sk_live_abc123..."

Filter by vertical:

curl "https://api.qanatix.com/api/v1/schemas?vertical=fasteners" \
  -H "Authorization: Bearer sk_live_abc123..."

List verticals

curl https://api.qanatix.com/api/v1/verticals \
  -H "Authorization: Bearer sk_live_abc123..."

Returns all verticals your tenant has data in, with entity counts and schema status.

On this page