Skip to content

Error codes

Every QQL error carries a stable code, a broad kind, a human-readable message, and an optional zero-based UTF-8 byte span [start, end). The message text is not normative — match on the code, which is fixed by the conformance fixtures. A code already asserted by a v1 invalid fixture cannot change before QQL 2; new codes may only refine previously unspecified cases.

The tables below cover the full set of codes the reference implementation emits. Codes are grouped by the failure family:

PrefixFamily
QQL-LEX-*Lexical failures
QQL-PARSE-*Syntax, clause order, and value-range failures
QQL-VALIDATION-*Semantic validation of a parsed program
QQL-PLAN-*, QQL-MISSING-*, QQL-UNKNOWN-*, QQL-VECTOR-KINDPlanning and schema resolution
QQL-JSON-*Value conversion to JSON
QQL-BIND-*Prepared-statement parameter binding
QQL-EMBEDDING-*UPSERT embedding inference
QQL-SNAPSHOT-*Remote shard-snapshot bootstrap (REST only)
QQL-EDGE-*In-process edge backend capability and runtime failures

The same structured fields are projected differently by each host binding.

HostShape
RustQqlError { kind, code, message, span: Option<Span { start, end }>, fields, source }; the kind is one of Lex, Parse, Validation, Execution, Transport, Backend
PythonError attributes code, kind, and span
Node.jserror.code, error.kind, error.span on the thrown error
WebAssemblyAnalysisError { code, message, start, end } offline; dx.js buildError maps thrown JSON to Error with .code / .kind / .span / .fields / .request_id
CodeMeaning
QQL-LEX-CHARA character cannot start any token
QQL-LEX-NUMBERMalformed numeric literal (a - not followed by a digit, or an exponent with no digits)
QQL-LEX-STRINGUnterminated string literal
CodeMeaning
QQL-PARSE-STATEMENTUnknown or legacy statement keyword (SELECT, INSERT, BOOST)
QQL-PARSE-EMPTY-STATEMENTEmpty script element, such as a leading or repeated separator
QQL-PARSE-EXPECTEDA required token is missing (for example an unmatched parenthesis)
QQL-PARSE-QUERY-INPUTInvalid query input form (a bare number is not a query input)
QQL-PARSE-CLAUSE-ORDERDuplicate or out-of-order query clause
QQL-PARSE-VECTOR-KINDAS is not DENSE, SPARSE, MULTI, or MULTIVECTOR
QQL-PARSE-VECTOR-SIZEVector dimension exceeds the 65536 maximum
QQL-PARSE-DUPLICATE-CTEDuplicate CTE name in one script
QQL-PARSE-DUPLICATE-KEYDuplicate object or config key (ASCII case-insensitive)
QQL-PARSE-POSITIVE-INTEGERValue must be a positive integer (for example LIMIT, SIZE, MMR CANDIDATES, hnsw_ef) — Qdrant's query API requires limit >= 1, so LIMIT 0 rejects at parse time
QQL-PARSE-NONNEGATIVE-INTEGERValue must be non-negative (for example OFFSET, VALUES_COUNT)
QQL-PARSE-SYNTAXProduction-specific syntax or range failure
QQL-PARSE-COMPARISONExpected a comparison operator
QQL-PARSE-COUNT-CONFIGUnknown COUNT WITH (…) parameter, or exact is not true/false
QQL-PARSE-FACET-CONFIGUnknown FACET WITH (…) parameter, non-bool exact, or duplicate LIMIT/EXACT
QQL-PARSE-FEEDBACK-STRATEGYFeedback strategy must be exactly (a = …, b = …, c = …) numeric parameters in order
QQL-PARSE-QUOTASET QUOTA (…) WAIT requires true or false
QQL-PARSE-RERANKRERANK input requires TEXT '…', VECTOR […], or POINT <id>
QQL-PARSE-SHARD-KEY-CONFIGUnknown CREATE SHARD KEY (…) parameter, or a value that must be a positive integer is not one
QQL-PARSE-CROSS-RERANKCROSS RERANK requires TEXT '…' or a string query input
QQL-PARSE-EMBEDEMBED USING requires DENSE, SPARSE, MULTI, IMAGE, or MODEL
QQL-PARSE-EMBEDDINGDuplicate clause in a HYBRID embedding spec
QQL-PARSE-ESCAPEUnterminated escape sequence
QQL-PARSE-FIELDExpected a field name
QQL-PARSE-FILTERExpected a filter operator (for example IS requires NULL/EMPTY)
QQL-PARSE-FLOATInvalid float literal
QQL-PARSE-IDENTIFIERExpected an identifier or quoted name
QQL-PARSE-ININ / NOT IN requires a non-empty value list
QQL-PARSE-INDEX-TYPEUnsupported CREATE INDEX field type
QQL-PARSE-LITERALExpected a scalar literal
QQL-PARSE-MATCH-ANYMATCH ANY requires a non-empty exact-value list
QQL-PARSE-MATCH-EXCEPTMATCH EXCEPT requires a non-empty exact-value list
QQL-PARSE-NUMBERExpected a number
QQL-PARSE-OBJECT-KEYExpected an object key
QQL-PARSE-ORDER-STARTORDER BY START FROM requires an integer, float, datetime string, or placeholder
QQL-PARSE-PAYLOAD-SELECTORWITH PAYLOAD requires true, false, INCLUDE (...), or EXCLUDE (...)
QQL-PARSE-POINT-IDA point ID must be an unsigned integer or a string
QQL-PARSE-POINT-IDSA point ID list cannot be empty
QQL-PARSE-PREFETCHPREFETCH cannot be empty
QQL-PARSE-SAMPLESAMPLE requires RANDOM
QQL-PARSE-SELECTORA selector list cannot be empty
QQL-PARSE-SEPARATORMultiple statements must be separated by a semicolon
QQL-PARSE-STATEMENT-LIMITA script may contain at most 256 statements
QQL-PARSE-ALTER-CONFIGALTER COLLECTION requires at least one WITH clause
QQL-PARSE-SEARCH-PARAMSPARAMS requires at least one search parameter
QQL-PARSE-TRAILINGUnexpected trailing token
QQL-PARSE-TRAILING-COMMATrailing commas are not allowed (objects, lists, PARAMS / config blocks)
QQL-PARSE-UPDATEExpected VECTOR or PAYLOAD after SET
QQL-PARSE-UPSERT-MODEUPDATE MODE requires insert_only, update_only, or upsert
QQL-PARSE-VALUEUnexpected value token
QQL-PARSE-VECTOR-DIFFMalformed or unrepresentable ALTER COLLECTION per-vector diff (empty or duplicate nested blocks, unknown block names, datatype)
QQL-PARSE-BOOLExpected true or false
QQL-PARSE-DUPLICATE-CLAUSEDuplicate clause (for example a repeated WAIT)
QQL-PARSE-PARAMExpected a parameter identifier after :
CodeMeaning
QQL-VALIDATION-FROMA top-level query lacks FROM
QQL-VALIDATION-PREFETCH-CTEA PREFETCH name does not resolve to a CTE
QQL-VALIDATION-FUSION-PREFETCHQUERY FUSION has no PREFETCH
QQL-VALIDATION-RERANK-PREFETCHQUERY RERANK has no PREFETCH
QQL-VALIDATION-POINTS-CLAUSEQUERY POINTS uses a clause it cannot accept
QQL-VALIDATION-UPDATE-VECTORAn UPDATE … SET VECTOR VALUES row is empty, missing id/vector, or carries extra keys
QQL-VALIDATION-UPSERT-IDAn UPSERT point lacks a valid id key
QQL-VALIDATION-MMRMMR DIVERSITY is outside [0, 1] or not finite
QQL-VALIDATION-HYBRIDInvalid USING HYBRID / QUERY HYBRID combination
QQL-VALIDATION-FILTER-INJECTinject_filter does not apply to this statement type
QQL-VALIDATION-ID-PREDICATEA point ID predicate uses an operator other than =, !=, IN, or NOT IN
QQL-VALIDATION-EMPTY-SCRIPTNothing to execute — the query is empty, whitespace-only, or the statement list is empty
QQL-VALIDATION-POINT-IDA value used as a point ID is neither an unsigned integer nor a string
QQL-VALIDATION-ACORN-SELECTIVITYmax_selectivity requires PARAMS (acorn = true, …)
QQL-VALIDATION-ALIASESCollection aliases are not supported on this backend
QQL-VALIDATION-CONFIGInvalid collection configuration block or edge executor option value
QQL-VALIDATION-CONSISTENCYconsistency must be a non-negative integer factor or majority / quorum / all
QQL-VALIDATION-CREATE-MODELCREATE COLLECTION … HYBRID rejects a single dense MODEL
QQL-VALIDATION-CROSS-RERANK-PREFETCHCROSS RERANK requires PREFETCH
QQL-VALIDATION-FUSIONThe fusion method must be RRF or DBSF
QQL-VALIDATION-GEOInvalid geo coordinates, radius, or polygon ring
QQL-VALIDATION-LIMIT-OVERFLOWLIMIT + OFFSET (or hybrid candidate scaling) overflows u64
QQL-VALIDATION-MULTI-STMTCannot prepare a multi-statement script; prepare one statement at a time
QQL-VALIDATION-PREFETCHThis query expression does not accept PREFETCH
QQL-VALIDATION-RECOMMEND-STRATEGYUnknown RECOMMEND STRATEGY
QQL-VALIDATION-RERANK-USINGRERANK requires USING <vector>
QQL-VALIDATION-SCOREA score threshold must be finite
QQL-VALIDATION-SEARCH-PARAMUnknown search parameter
QQL-VALIDATION-SLICESLICE (total, index) with total < 1 or index >= total
QQL-VALIDATION-IDFPARAMS (idf = …) is not 'global' or WHERE <filter>
QQL-VALIDATION-USINGThis query expression does not accept USING
QQL-VALIDATION-VECTORInvalid vector value
QQL-VALIDATION-VECTOR-KINDQuery inputs mix dense and sparse vector values
QQL-VALIDATION-UPSERT-BATCHupsert_many / upsertMany called with batch_size / batchSize below 1
QQL-VALIDATION-BATCH-EMPTYEmpty BATCH block — at least one member statement is required
QQL-VALIDATION-BATCH-MEMBERBATCH member is not a batchable query or mutation
QQL-VALIDATION-BATCH-MIXEDBATCH members mix collections or query/mutation families
QQL-VALIDATION-BATCH-PARAMSPARAMS timeout/consistency placed on a member instead of the BATCH header (or vice versa)
QQL-VALIDATION-BATCH-WAITWAIT placed on a member instead of the BATCH header, or on a query batch
QQL-VALIDATION-MIN-SHOULDMIN SHOULD count must be >= 1
CodeMeaning
QQL-PLAN-VECTOR-DIFFALTER COLLECTION per-vector diff the wire cannot express (datatype has no VectorParamsDiff field) or a duplicate vector diff name
QQL-PLAN-VECTOR-KINDStructural vector input and the declared AS role disagree
QQL-MISSING-USINGSchema inference is ambiguous; add USING <vector>
QQL-UNKNOWN-VECTORThe explicit vector name does not exist in the collection
QQL-VECTOR-KINDThe schema role conflicts with the requested role, or the kind is unresolved before embedding
QQL-PLAN-COLLECTIONA query collection name must not be empty
QQL-PLAN-COLLECTION-CONFIGInvalid collection configuration value
QQL-PLAN-SHARD-KEYUnknown shard replica state
QQL-BATCH-CARDINALITYA batch RPC returned a different item count than the operations sent
QQL-BATCH-INVARIANTA mutation batch mixed collections or contained a non-mutation operation
QQL-CONFIGLocal client config (~/.qql/config.json) is missing, unreadable, or unparsable
QQL-PLAN-CROSS-RERANK-CANDIDATEA CROSS RERANK prefetch must plan as a search query
QQL-PLAN-CROSS-RERANK-CTEPREFETCH references an unknown CTE
QQL-PLAN-CROSS-RERANK-MODELCROSS RERANK MODEL must not be empty
QQL-PLAN-CROSS-RERANK-PREFETCHCROSS RERANK requires at least one PREFETCH
QQL-PLAN-CROSS-RERANK-QUERYCROSS RERANK query text must not be empty
QQL-PLAN-FUSION-PREFETCHFUSION requires at least one prefetch
QQL-PLAN-GROUPA groups query was lowered without a GROUP BY (internal misuse)
QQL-PLAN-IDFPARAMS (idf = WHERE …) lowered to an empty Qdrant filter
QQL-PLAN-INDEX-OPTIONInvalid or unsupported CREATE INDEX option value
QQL-PLAN-INDEX-TYPEUnknown payload index field type
QQL-PLAN-PREFETCH-CTEPREFETCH references an unknown CTE
QQL-PLAN-PREFETCH-GROUPGROUP BY is not supported inside a PREFETCH source
QQL-PLAN-QUOTAInvalid SET QUOTA key or out-of-range percent
QQL-PLAN-RECOMMEND-AVERAGEaverage_vector examples must share one vector shape
QQL-PLAN-RERANK-PREFETCHRERANK requires at least one PREFETCH
QQL-PLAN-RERANK-USINGRERANK requires a non-empty USING vector name
QQL-PLAN-RRF-PARAMSrrf_k and rrf_weights are valid only with RRF fusion
QQL-PLAN-RRF-WEIGHTSrrf_weights length must equal the prefetch count
QQL-PLAN-SERIALIZEA plan IR request body failed JSON serialization (a Serialize regression)
QQL-PLAN-UNSUPPORTED-PREFETCHPOINTS / CROSS RERANK are not supported inside PREFETCH
QQL-REST-CLIENT-SIDEThe operation is executed client-side and has no single Qdrant REST route
QQL-REST-BATCHBATCH runs through the batch RPCs, not a single REST route
QQL-REST-OVERWRITE-BATCH-ONLYOVERWRITE has no single REST route (POST /points/payload is merge-only); use a batch
QQL-GRPCGeneric gRPC transport failure
QQL-GRPC-BATCHBATCH runs through the batch RPCs, not a single gRPC route
QQL-GRPC-DDL-RANGEA DDL value exceeds the bundled Qdrant proto uint32 range
QQL-GRPC-FLOAT-MATCHA float equality value has no double field in the bundled Qdrant proto Match; use a RANGE filter or an exact integer value
QQL-GRPC-FUSIONUnsupported fusion method on the gRPC path
QQL-GRPC-LIST-INTAn integer value is out of the gRPC int64 range
QQL-GRPC-LIST-TYPEA value list mixes strings with other types on the gRPC path
QQL-GRPC-MATCH-VALUEA match value cannot be represented on the gRPC path
QQL-GRPC-QUOTAQuotas have no public gRPC service (upstream serves quota usage on the internal cluster port only, with no setter RPC); use REST (SHOW QUOTAS / SET QUOTA)
QQL-GRPC-NO-RESULTA collection_info gRPC response is missing its result field
QQL-GRPC-RRF-KAn rrf_k value exceeds the bundled Qdrant proto uint32 range
QQL-GRPC-RRF-WEIGHTAn rrf_weights value is not exactly representable as gRPC f32
QQL-GRPC-SCROLL-LIMITScroll LIMIT exceeds u32::MAX — the bundled Qdrant proto stores scroll limit as uint32
QQL-BACKENDGeneric backend or transport failure
QQL-BACKEND-AUTHRejected credentials (HTTP 401/403, gRPC Unauthenticated / PermissionDenied)
QQL-BACKEND-BATCHA batched query/update item reported an error in its status field
QQL-BACKEND-COLLECTION-NOT-FOUNDThe backend reports a missing collection (HTTP 404, gRPC NotFound)
QQL-BACKEND-DIMENSION-MISMATCHVector size disagrees with the collection schema
QQL-BACKEND-ENVELOPEA Qdrant response envelope missed its expected result shape
QQL-BACKEND-HTTPThe backend rejected a REST request (for example HTTP 400 on batch)
QQL-BACKEND-INDEX-NOT-READYThe server index is still building — retry the query
QQL-BACKEND-JSONA Qdrant response body failed JSON parsing
QQL-BACKEND-OPTIMIZEThe backend has no in-process optimizer to run (only qdrant-edge does)
QQL-BACKEND-STRICT-MODEThe request violates the collection's strict-mode / quota limits
QQL-TIMEOUTBatch execution exceeded its deadline
QQL-TRANSPORTHTTP client, request, or body failure (carries the request id)
CodeMeaning
QQL-JSON-NONFINITEA non-finite float cannot be serialized to JSON
QQL-JSON-NUMBERA value cannot be represented as a JSON number

Raised when client-side parameter substitution fails (QQL 1.7 placeholders :name and ?). See Parameter binding.

CodeMeaning
QQL-BIND-MIXED-STYLEThe template mixes :name and ?, or the binder received the other style
QQL-BIND-MISSING-PARAMA named placeholder has no bound value, or a positional index is out of range
QQL-BIND-UNBOUND-PARAMAST-level bind found a named placeholder (:p, VECTOR :v, VALUES :p) with no bound value
QQL-BIND-MISSING-POSITIONALAST-level bind found a positional placeholder (?) with no bound value
QQL-BIND-UNUSED-PARAMSMore positional values were supplied than ? placeholders
QQL-BIND-BATCH-LENGTHA statement-scoped params list length does not match the statement count
QQL-BIND-DUPLICATE-PARAMA key collision occurred when flattening nested dictionary parameters
QQL-BIND-TYPE-MISMATCHA bound value has the wrong type for its position (e.g. a non-string bound to TEXT, non-integer to LIMIT/OFFSET, invalid point ID, non-finite float, or invalid formula parameter)
QQL-BIND-INVALID-PARAMSThe params argument is neither an object (named) nor an array (positional)
QQL-BIND-NULL-PARAMA parameter resolved to null / None — QQL cannot bind null; pass a concrete value
QQL-BIND-UNSUPPORTED-STATEMENTParameter binding attempted on an unsupported statement type (e.g. DDL)
QQL-BIND-ALREADY-BOUNDNew params were passed to an already-bound Stmt — they would be silently ignored
CodeMeaning
QQL-CLIENT-CLOSEDThe client was closed (close()); create a new Client to run more statements
QQL-CROSS-RERANKCROSS RERANK must run client-side, not via a Qdrant route
QQL-RERANK-CROSSCROSS RERANK has no pair-scorer configured, or it returned a wrong score count
QQL-RERANK-CROSS-FIELDCROSS RERANK candidates lack the scored payload field
CodeMeaning
QQL-EMBEDDING-TOPOLOGYUPSERT embedding inference is ambiguous across the collection topology
QQL-EMBEDDING-TARGETThe UPSERT embedding target is absent or has the wrong role
QQL-EMBEDDINGThe requested dense model is unavailable on this embedder (omit MODEL or use 'default')
QQL-EMBEDDING-DIMembedding_dimension must be configured when creating collections with USING MODEL in local inference mode
QQL-EMBEDDING-IMAGEImage embedding is unavailable (no image/CLIP vision path configured)
QQL-EMBEDDING-MODELThe requested embedding model is not available from the configured embedder
QQL-EMBEDDING-MULTIMultivector embedding is unavailable (no multi path configured)
QQL-EMBEDDING-SPARSESparse embedding is unavailable on this embedder (non-default MODEL with local BM25)

Every request the Rust runtime sends carries a generated x-request-id header (qql-<nanos><seq>, REST) or x-request-id gRPC metadata. Qdrant echoes the id into its own log lines, so a misbehaving response can be traced in the server log:

  • Transport and backend errors include the id in their message — … (request id: qql-1a2b3c4d0001) — preferring the server-returned value when Qdrant echoes one back.
  • For a silent wrong answer (HTTP 200, empty results — e.g. the intermittent empty BM25 windows seen against inference-backed sparse queries), enable Qdrant request logging (LOG_LEVEL=DEBUG on the server) and correlate by endpoint + timestamp with the ids your client sent.

qql edge bootstrap seeds a local edge collection from a remote Qdrant shard snapshot (GET /collections/{c}/shards/{id}/snapshot). The archive is streamed to a staging directory and unpacked with the engine's snapshot API; these codes cover the REST-only discovery and staging steps.

CodeMeaning
QQL-SNAPSHOT-URLThe remote snapshot URL is empty (--from / --url not set)
QQL-SNAPSHOT-SHARDShard selection failed: a multi-shard collection needs --shard-id, or the chosen shard is not hosted by the target node
QQL-SNAPSHOT-IOThe snapshot staging file could not be created, written, or flushed locally

Transport and HTTP failures use QQL-TRANSPORT and the QQL-BACKEND-* codes respectively; engine-side unpack/load failures use the QQL-EDGE-* runtime codes with operation = snapshot.

The in-process edge backend reports capability limits with a stable QQL-EDGE-UNSUPPORTED-* code instead of a generic failure. These errors usually carry a remediation hint pointing at remote Qdrant.

CodeMeaning
QQL-EDGE-UNSUPPORTED-SHARDSHARD routing or collection sharding options are not available offline
QQL-EDGE-UNSUPPORTED-SHARD-KEYCREATE / DROP SHARD KEY are not available offline
QQL-EDGE-UNSUPPORTED-GROUP-LOOKUPGROUP BY … LOOKUP FROM; qdrant-edge has no lookup collection
QQL-EDGE-UNSUPPORTED-ALTER-PARAMSALTER COLLECTION … WITH PARAMS; qdrant-edge has no params setter
QQL-EDGE-UNSUPPORTED-ALTER-QUANTIZATIONALTER COLLECTION … QUANTIZATION; qdrant-edge has no quantization setter
QQL-EDGE-UNSUPPORTED-VECTOR-DIFFPer-vector ALTER COLLECTION … WITH VECTOR (<name>) fields other than hnsw_config (quantization_config / on_disk / memory); qdrant-edge exposes set_vector_hnsw_config only
QQL-EDGE-UNSUPPORTED-SPARSE-DIFFPer-sparse-vector ALTER COLLECTION … WITH SPARSE (<name>); qdrant-edge has no sparse vector config setter
QQL-EDGE-UNSUPPORTED-COLLECTION-PARAMSCreate-time WITH PARAMS keys other than on_disk_payload (replication, fan-out, payload memory)
QQL-EDGE-UNSUPPORTED-OPTIMIZER-KEYOPTIMIZERS keys qdrant-edge excludes (memmap_threshold, flush_interval_sec, max_optimization_threads)
QQL-EDGE-UNSUPPORTED-TIMEOUTPARAMS (timeout = ...) is not available offline
QQL-EDGE-UNSUPPORTED-CONSISTENCYPARAMS (consistency = ...) is not available offline
QQL-EDGE-UNSUPPORTED-QUOTASHOW QUOTAS / SET QUOTA require cluster REST /quotas
QQL-EDGE-UNSUPPORTED-RECOMMEND-STRATEGYRECOMMEND STRATEGY average_vector; offline supports best_score and sum_scores only
QQL-EDGE-UNSUPPORTED-POINT-REFPoint-ID query inputs need materialized vectors offline
QQL-EDGE-UNSUPPORTED-FORMULA-FUNCTIONMAX / MIN / ACOSH formula functions; qdrant-edge 0.8 has no such Expression variants
QQL-EDGE-UNSUPPORTED-ROUTEThe planned operation has no edge route implementation (defensive fallback)
QQL-EDGE-UNSUPPORTED-METADATAWITH METADATA is not available offline
QQL-EDGE-UNSUPPORTED-STRICT-MODEWITH STRICT_MODE policy enforcement is not available offline
QQL-EDGE-UNSUPPORTED-WALPer-collection WITH WAL settings are not available offline
QQL-EDGE-INVALID-POINT-IDOffline point IDs accept unsigned integers or UUIDs only

Edge also emits QQL-EDGE-* runtime failures. Every fallible engine call is classified by the qdrant-edge failure variant, so the code names the failure category while the message keeps the operation and the crate's own cause text:

CodeMeaning
QQL-EDGE-DIMENSIONVector dimension does not match the collection schema
QQL-EDGE-BAD-INPUTThe engine rejected the request as invalid (validation, malformed vector blob, sparse/multi-vector misuse, non-finite formula result)
QQL-EDGE-TYPEA payload or formula value has the wrong type
QQL-EDGE-VECTOR-NAMEThe named vector does not exist in the collection
QQL-EDGE-POINT-NOT-FOUNDA mutated point id does not exist
QQL-EDGE-STORAGEqdrant-edge service/storage failure (I/O, internal invariant, segment capacity); the message carries the crate's cause
QQL-EDGE-CORRUPTThe engine detected inconsistent on-disk storage
QQL-EDGE-FILE-NOT-FOUNDAn essential storage file is missing
QQL-EDGE-OOMThe engine ran out of memory
QQL-EDGE-CANCELLEDThe engine cancelled the operation
QQL-EDGE-TIMEOUTThe engine operation timed out
QQL-EDGE-MISSING-INDEXORDER BY / FACET needs a payload index that does not exist

Operational failures keep their dedicated codes: collection lifecycle (QQL-EDGE-COLLECTION-EXISTS, QQL-EDGE-COLLECTION-NOT-FOUND, QQL-EDGE-DELETE-COLLECTION, QQL-EDGE-DELETE-COLLECTION-CLOSE, QQL-EDGE-CLOSE), storage I/O (QQL-EDGE-CREATE-DIR, QQL-EDGE-READ-DIR, QQL-EDGE-DIR-ENTRY, QQL-EDGE-SPAWN, QQL-EDGE-CONFIG), vector handling (QQL-EDGE-VECTOR, QQL-EDGE-MISSING-VECTOR, QQL-EDGE-FIELD-NAME), filters (QQL-EDGE-FILTER-CONVERT), query conversion (QQL-EDGE-QUERY), embedding (QQL-EDGE-EMBED), and mutations that require a target (QQL-EDGE-DELETE-REQUIRES-TARGET, QQL-EDGE-CLEAR-PAYLOAD-REQUIRES-TARGET, QQL-EDGE-DELETE-PAYLOAD-REQUIRES-TARGET, QQL-EDGE-DELETE-VECTORS-REQUIRES-TARGET, QQL-EDGE-SET-PAYLOAD-REQUIRES-TARGET, QQL-EDGE-OVERWRITE-PAYLOAD-REQUIRES-TARGET), conditional upsert modes (QQL-EDGE-UPSERT-MODE-ONLY, which requires update_filter alongside update_mode).

The Backend compatibility matrix covers which features are available on each backend.

The full set of codes emitted by the reference implementation. Do not edit by hand — regenerate with bash scripts/check-error-codes.sh (same roots as below, test doubles excluded, QQL-BIND-ALREADY-BOUND allowlisted from the bindings) and keep every code's per-section table row alongside it. CI runs the script on every PR:

QQL-BACKEND
QQL-BACKEND-AUTH
QQL-BACKEND-BATCH
QQL-BACKEND-COLLECTION-NOT-FOUND
QQL-BACKEND-DIMENSION-MISMATCH
QQL-BACKEND-ENVELOPE
QQL-BACKEND-HTTP
QQL-BACKEND-INDEX-NOT-READY
QQL-BACKEND-JSON
QQL-BACKEND-OPTIMIZE
QQL-BACKEND-STRICT-MODE
QQL-BATCH-CARDINALITY
QQL-BATCH-INVARIANT
QQL-BIND-BATCH-LENGTH
QQL-BIND-DUPLICATE-PARAM
QQL-BIND-INVALID-PARAMS
QQL-BIND-MISSING-PARAM
QQL-BIND-MISSING-POSITIONAL
QQL-BIND-MIXED-STYLE
QQL-BIND-NULL-PARAM
QQL-BIND-TYPE-MISMATCH
QQL-BIND-UNBOUND-PARAM
QQL-BIND-UNSUPPORTED-STATEMENT
QQL-BIND-UNUSED-PARAMS
QQL-CLIENT-CLOSED
QQL-CONFIG
QQL-CROSS-RERANK
QQL-EDGE-BAD-INPUT
QQL-EDGE-CANCELLED
QQL-EDGE-CLEAR-PAYLOAD-REQUIRES-TARGET
QQL-EDGE-CLOSE
QQL-EDGE-COLLECTION-EXISTS
QQL-EDGE-COLLECTION-NOT-FOUND
QQL-EDGE-CONFIG
QQL-EDGE-CORRUPT
QQL-EDGE-CREATE-DIR
QQL-EDGE-DELETE-COLLECTION
QQL-EDGE-DELETE-COLLECTION-CLOSE
QQL-EDGE-DELETE-PAYLOAD-REQUIRES-TARGET
QQL-EDGE-DELETE-REQUIRES-TARGET
QQL-EDGE-DELETE-VECTORS-REQUIRES-TARGET
QQL-EDGE-DIMENSION
QQL-EDGE-DIR-ENTRY
QQL-EDGE-EMBED
QQL-EDGE-FIELD-NAME
QQL-EDGE-FILE-NOT-FOUND
QQL-EDGE-FILTER-CONVERT
QQL-EDGE-INVALID-POINT-ID
QQL-EDGE-MISSING-INDEX
QQL-EDGE-MISSING-VECTOR
QQL-EDGE-OOM
QQL-EDGE-OVERWRITE-PAYLOAD-REQUIRES-TARGET
QQL-EDGE-POINT-NOT-FOUND
QQL-EDGE-QUERY
QQL-EDGE-READ-DIR
QQL-EDGE-SET-PAYLOAD-REQUIRES-TARGET
QQL-EDGE-SPAWN
QQL-EDGE-STORAGE
QQL-EDGE-TIMEOUT
QQL-EDGE-TYPE
QQL-EDGE-UNSUPPORTED-ALTER-PARAMS
QQL-EDGE-UNSUPPORTED-ALTER-QUANTIZATION
QQL-EDGE-UNSUPPORTED-COLLECTION-PARAMS
QQL-EDGE-UNSUPPORTED-CONSISTENCY
QQL-EDGE-UNSUPPORTED-FORMULA-FUNCTION
QQL-EDGE-UNSUPPORTED-GROUP-LOOKUP
QQL-EDGE-UNSUPPORTED-METADATA
QQL-EDGE-UNSUPPORTED-OPTIMIZER-KEY
QQL-EDGE-UNSUPPORTED-POINT-REF
QQL-EDGE-UNSUPPORTED-QUOTA
QQL-EDGE-UNSUPPORTED-RECOMMEND-STRATEGY
QQL-EDGE-UNSUPPORTED-ROUTE
QQL-EDGE-UNSUPPORTED-SHARD
QQL-EDGE-UNSUPPORTED-SHARD-KEY
QQL-EDGE-UNSUPPORTED-SPARSE-DIFF
QQL-EDGE-UNSUPPORTED-STRICT-MODE
QQL-EDGE-UNSUPPORTED-TIMEOUT
QQL-EDGE-UNSUPPORTED-VECTOR-DIFF
QQL-EDGE-UNSUPPORTED-WAL
QQL-EDGE-UPSERT-MODE-ONLY
QQL-EDGE-VECTOR
QQL-EDGE-VECTOR-NAME
QQL-EMBEDDING
QQL-EMBEDDING-DIM
QQL-EMBEDDING-IMAGE
QQL-EMBEDDING-MODEL
QQL-EMBEDDING-MULTI
QQL-EMBEDDING-SPARSE
QQL-EMBEDDING-TARGET
QQL-EMBEDDING-TOPOLOGY
QQL-GRPC
QQL-GRPC-BATCH
QQL-GRPC-DDL-RANGE
QQL-GRPC-FLOAT-MATCH
QQL-GRPC-FUSION
QQL-GRPC-LIST-INT
QQL-GRPC-LIST-TYPE
QQL-GRPC-MATCH-VALUE
QQL-GRPC-NO-RESULT
QQL-GRPC-QUOTA
QQL-GRPC-RRF-K
QQL-GRPC-RRF-WEIGHT
QQL-GRPC-SCROLL-LIMIT
QQL-JSON-NONFINITE
QQL-JSON-NUMBER
QQL-LEX-CHAR
QQL-LEX-NUMBER
QQL-LEX-STRING
QQL-MISSING-USING
QQL-PARSE-ALTER-CONFIG
QQL-PARSE-BOOL
QQL-PARSE-CLAUSE-ORDER
QQL-PARSE-COMPARISON
QQL-PARSE-COUNT-CONFIG
QQL-PARSE-CROSS-RERANK
QQL-PARSE-DUPLICATE-CLAUSE
QQL-PARSE-DUPLICATE-CTE
QQL-PARSE-DUPLICATE-KEY
QQL-PARSE-EMBED
QQL-PARSE-EMBEDDING
QQL-PARSE-EMPTY-STATEMENT
QQL-PARSE-ESCAPE
QQL-PARSE-EXPECTED
QQL-PARSE-FACET-CONFIG
QQL-PARSE-FEEDBACK-STRATEGY
QQL-PARSE-FIELD
QQL-PARSE-FILTER
QQL-PARSE-FLOAT
QQL-PARSE-IDENTIFIER
QQL-PARSE-IN
QQL-PARSE-INDEX-TYPE
QQL-PARSE-LITERAL
QQL-PARSE-MATCH-ANY
QQL-PARSE-MATCH-EXCEPT
QQL-PARSE-NONNEGATIVE-INTEGER
QQL-PARSE-NUMBER
QQL-PARSE-OBJECT-KEY
QQL-PARSE-ORDER-START
QQL-PARSE-PARAM
QQL-PARSE-PAYLOAD-SELECTOR
QQL-PARSE-POINT-ID
QQL-PARSE-POINT-IDS
QQL-PARSE-POSITIVE-INTEGER
QQL-PARSE-PREFETCH
QQL-PARSE-QUERY-INPUT
QQL-PARSE-QUOTA
QQL-PARSE-RERANK
QQL-PARSE-SAMPLE
QQL-PARSE-SEARCH-PARAMS
QQL-PARSE-SELECTOR
QQL-PARSE-SEPARATOR
QQL-PARSE-SHARD-KEY-CONFIG
QQL-PARSE-STATEMENT
QQL-PARSE-STATEMENT-LIMIT
QQL-PARSE-SYNTAX
QQL-PARSE-TRAILING
QQL-PARSE-TRAILING-COMMA
QQL-PARSE-UPDATE
QQL-PARSE-UPSERT-MODE
QQL-PARSE-VALUE
QQL-PARSE-VECTOR-DIFF
QQL-PARSE-VECTOR-KIND
QQL-PARSE-VECTOR-SIZE
QQL-PLAN-COLLECTION
QQL-PLAN-COLLECTION-CONFIG
QQL-PLAN-CROSS-RERANK-CANDIDATE
QQL-PLAN-CROSS-RERANK-CTE
QQL-PLAN-CROSS-RERANK-MODEL
QQL-PLAN-CROSS-RERANK-PREFETCH
QQL-PLAN-CROSS-RERANK-QUERY
QQL-PLAN-FUSION-PREFETCH
QQL-PLAN-GROUP
QQL-PLAN-IDF
QQL-PLAN-INDEX-OPTION
QQL-PLAN-INDEX-TYPE
QQL-PLAN-PREFETCH-CTE
QQL-PLAN-PREFETCH-GROUP
QQL-PLAN-QUOTA
QQL-PLAN-RECOMMEND-AVERAGE
QQL-PLAN-RERANK-PREFETCH
QQL-PLAN-RERANK-USING
QQL-PLAN-RRF-PARAMS
QQL-PLAN-RRF-WEIGHTS
QQL-PLAN-SERIALIZE
QQL-PLAN-SHARD-KEY
QQL-PLAN-UNSUPPORTED-PREFETCH
QQL-PLAN-VECTOR-DIFF
QQL-PLAN-VECTOR-KIND
QQL-RERANK-CROSS
QQL-RERANK-CROSS-FIELD
QQL-REST-BATCH
QQL-REST-CLIENT-SIDE
QQL-REST-OVERWRITE-BATCH-ONLY
QQL-SNAPSHOT-IO
QQL-SNAPSHOT-SHARD
QQL-SNAPSHOT-URL
QQL-TIMEOUT
QQL-TRANSPORT
QQL-UNKNOWN-VECTOR
QQL-VALIDATION-ACORN-SELECTIVITY
QQL-VALIDATION-ALIASES
QQL-VALIDATION-BATCH-EMPTY
QQL-VALIDATION-BATCH-MEMBER
QQL-VALIDATION-BATCH-MIXED
QQL-VALIDATION-BATCH-PARAMS
QQL-VALIDATION-BATCH-WAIT
QQL-VALIDATION-CONFIG
QQL-VALIDATION-CONSISTENCY
QQL-VALIDATION-CREATE-MODEL
QQL-VALIDATION-CROSS-RERANK-PREFETCH
QQL-VALIDATION-EMPTY-SCRIPT
QQL-VALIDATION-FILTER-INJECT
QQL-VALIDATION-FROM
QQL-VALIDATION-FUSION
QQL-VALIDATION-FUSION-PREFETCH
QQL-VALIDATION-GEO
QQL-VALIDATION-HYBRID
QQL-VALIDATION-ID-PREDICATE
QQL-VALIDATION-IDF
QQL-VALIDATION-LIMIT-OVERFLOW
QQL-VALIDATION-MIN-SHOULD
QQL-VALIDATION-MMR
QQL-VALIDATION-MULTI-STMT
QQL-VALIDATION-POINT-ID
QQL-VALIDATION-POINTS-CLAUSE
QQL-VALIDATION-PREFETCH
QQL-VALIDATION-PREFETCH-CTE
QQL-VALIDATION-RECOMMEND-STRATEGY
QQL-VALIDATION-RERANK-PREFETCH
QQL-VALIDATION-RERANK-USING
QQL-VALIDATION-SCORE
QQL-VALIDATION-SEARCH-PARAM
QQL-VALIDATION-SLICE
QQL-VALIDATION-UPDATE-VECTOR
QQL-VALIDATION-UPSERT-BATCH
QQL-VALIDATION-UPSERT-ID
QQL-VALIDATION-USING
QQL-VALIDATION-VECTOR
QQL-VALIDATION-VECTOR-KIND
QQL-VECTOR-KIND

The QQL-EDGE-UNSUPPORTED- prefix is the family marker used by the edge backend to classify capability rejections; individual codes always carry the full suffix. New codes may be introduced in a v1 minor release (see language/v1/spec/versioning.md), so treat this list as a snapshot of the current reference implementation.