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.
3. Ingest and search
# 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.