weaviate/weaviate · error
TwelveLabs API Key
Error message
TwelveLabs API Key
What it means
This wrapper error is thrown in doEmbed when getApiKey fails to resolve a TwelveLabs API key. The key is looked up first in the per-request header X-TwelveLabs-Api-Key, then in the server-level TWELVELABS_APIKEY environment variable. If neither is set, the request cannot be authenticated and embedding is aborted before any HTTP call is made.
Source
Thrown at modules/multi2vec-twelvelabs/clients/twelvelabs.go:165
if err != nil {
return nil, err
}
return extractEmbedding(res.ImageEmbedding)
}
func extractEmbedding(emb *embedding) ([]float32, error) {
if emb == nil || len(emb.Segments) == 0 || len(emb.Segments[0].Float) == 0 {
return nil, errors.New("empty embeddings response")
}
return emb.Segments[0].Float, nil
}
func (v *vectorizer) doEmbed(ctx context.Context, baseURL, model string,
writeInput func(*multipart.Writer) error,
) (*embedResponse, error) {
apiKey, err := v.getApiKey(ctx)
if err != nil {
return nil, errors.Wrap(err, "TwelveLabs API Key")
}
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
if err := writer.WriteField("model_name", model); err != nil {
return nil, errors.Wrap(err, "write model_name field")
}
if err := writeInput(writer); err != nil {
return nil, errors.Wrap(err, "write input field")
}
if err := writer.Close(); err != nil {
return nil, errors.Wrap(err, "close multipart writer")
}
url := fmt.Sprintf("%s/embed", baseURL)
req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, body)
if err != nil {
return nil, errors.Wrap(err, "create POST request")View on GitHub (pinned to 75aa4b6d11)
Solutions
- Set the TWELVELABS_APIKEY environment variable before starting Weaviate and restart it
- Send the X-TwelveLabs-Api-Key header on the GraphQL/REST request for per-request credentials
- Verify the env var is actually visible in the Weaviate process (docker-compose environment block or k8s envFrom)
- Confirm the header name spelling: X-TwelveLabs-Api-Key (case-insensitive lookup, but name must match)
Example fix
// before (client request without header, no env var)
result, err := client.GraphQL().Get().NearImage(...) // -> TwelveLabs API Key: no api key found...
// after
req := client.GraphQL().Get().NearImage(...)
req = req.WithHeader("X-TwelveLabs-Api-Key", os.Getenv("MY_TWELVELABS_KEY")) Defensive patterns
Strategy: validation
Validate before calling
// Client-side (JS v4): ensure the header or server env is set before querying
if (!process.env.TWELVELABS_APIKEY) {
throw new Error("Set TWELVELABS_APIKEY or send X-TwelveLabs-Api-Key header");
}
const res = await collection.query.nearImage(...)
.withHeader?.("x-twelvelabs-api-key", process.env.TWELVELABS_APIKEY); Prevention
- Set TWELVELABS_APIKEY in the Weaviate deployment's environment (docker-compose/k8s secret) before enabling the module
- Prefer per-request X-TwelveLabs-Api-Key headers in multi-tenant setups
- Add a startup healthcheck that performs a trivial embedding to fail fast on missing keys
When it happens
Trigger: Calling embedText or embedImage (via Vectorize/VectorizeQuery/VectorizeImages or nearText/nearImage search) when neither the X-TwelveLabs-Api-Key request header nor the TWELVELABS_APIKEY env var is configured.
Common situations: Fresh Weaviate deployments where the module is enabled but no API key was set at startup; clients that forgot to send the X-TwelveLabs-Api-Key header; containers where the env var was not passed through (docker-compose env, k8s secret not mounted).
Understand the failure class
Background: "API key is required" / "API key not found" / "No API key was set": the missing-api-key error family across 16 libraries — this error's family across 16 libraries.
Related errors
- no api key found neither in request header: X-TwelveLabs-Api
- no api key found neither in request header: X-Anyscale-Api-K
- no api key found neither in request header: X-Cohere-Api-Key
- no api key found for Contextual AI neither in request header
- no api key found neither in request header: X-Friendli-Token
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/60db93fc05455b4f.
Report an issue: GitHub.