BazaarLinkBazaarLink
Sign in
DocsAPI ReferenceSDK ReferenceAgentic UsageAI Skills

ZDR zero data retention: setup, supported scope and error codes | BazaarLink

ZDR (zero data retention) is a mode of an API key. When it is on, the key's requests are only sent to upstream providers that declare zero data retention, pinned by BazaarLink, and BazaarLink itself does not store prompts or responses.

What a ZDR key guarantees

  • Requests only use ZDR routes approved by BazaarLink, with the upstream pinned; if one fails, the request only switches between ZDR routes and never falls back to ordinary routes.
  • A model without a ZDR route returns an error instead of quietly using another route.
  • BazaarLink does not store the prompts, model replies or upstream error text of this key; usage records only keep time, model, usage, cost and status.
  • Content is not sent to a third-party moderation service by default.
  • The price is the same as an ordinary request, with no surcharge.

How to turn it on

Personal keys: turn on “Enable ZDR” when you create or edit a key at /keys.

Organizations: an organization admin can set the ZDR policy to “Required for every key” in the organization settings. Every key in the organization is then ZDR, and the key-creation form shows the box checked and locked.

Turning ZDR off lowers the key's protection level, so it needs a second confirmation and is written to the audit log; a key locked by an organization policy cannot be turned off on its own.

Using it

Set base_url to https://api.bazaarlink.ai/v1 and use the key with ZDR on; everything else is the same as an ordinary call.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["BAZAARLINK_API_KEY"],  # a key with ZDR turned on
    base_url="https://api.bazaarlink.ai/v1",
)

response = client.chat.completions.create(
    model="anthropic/claude-sonnet-5.5",
    messages=[{"role": "user", "content": "Reply with exactly one line: hello"}],
)
print(response.choices[0].message.content)

To see which models have a ZDR route, /v1/models marks every model with zdr_available, and adding ?zdr=only lists only the available ones.

GET https://api.bazaarlink.ai/v1/models?zdr=only

What ZDR does not support

With a ZDR key the following requests return 400 and are never sent through another route:

  • Image, audio, video, embeddings, rerank, search and research endpoints.
  • Virtual models (vm/ prefix) and automatic routing (auto).
  • The model suffixes :free, :floor, :nitro, :online and :eco, and the web search plugin.
  • The models fallback list.

Error codes

All ZDR errors are produced by BazaarLink itself and never contain upstream provider information.

CodeMeaningWhat to do
400 zdr_route_unavailableThis model currently has no zero-data-retention routeUse a model with zdr_available true, or a key without ZDR
400 zdr_endpoint_unsupportedThis endpoint or feature is not supported with ZDRUse a supported chat endpoint (chat completions, messages, responses) and remove the unsupported feature
400 zdr_requires_gatewayZDR is not yet open for your connection; to protect you we refuse instead of treating the request as an ordinary oneContact us to confirm the opening date, and use https://api.bazaarlink.ai/v1
503All ZDR routes are temporarily unavailableRetry later; the system never falls back to ordinary routes automatically
{"error":{"message":"This model is not available for zero-data-retention (ZDR) API keys. ZDR keys can only use the models listed at https://bazaarlink.ai/docs/zdr (or GET /v1/models?zdr=only). You can also turn off ZDR mode for this key on the API keys page.","type":"invalid_request_error","code":"zdr_route_unavailable"}}
{"error":{"message":"This endpoint is not available for zero-data-retention API keys.","type":"invalid_request_error","code":"zdr_endpoint_unsupported"}}
{"error":{"message":"This model variant is not available for zero-data-retention (ZDR) API keys (the :free, :floor, :nitro, :online and :eco variants, the auto router and virtual models are not supported). Use a regular model listed at https://bazaarlink.ai/docs/zdr, or turn off ZDR mode for this key on the API keys page.","type":"invalid_request_error","code":"zdr_endpoint_unsupported"}}

BYOK, BYOC and virtual models

  • A ZDR key does not use the BYOK or BYOC provider keys you configured: it always runs on BazaarLink's ZDR routes and is billed at the platform price.
  • Models starting with byok-custom/ or byoc/ have no ZDR route and return 400 (zdr_route_unavailable).
  • Virtual models (vm/ prefix) are not supported with ZDR and return 400 (zdr_endpoint_unsupported).
  • To use your own provider keys or virtual models, use a key without ZDR.

What is covered

  • The usage record of a ZDR request keeps only time, model, usage, cost, status and the ZDR flag; it does not keep prompts, responses or error text.
  • ZDR describes BazaarLink and the upstream providers it pins; data that your own code, logs or other services keep is outside this scope.

FAQ

Does ZDR change the price?

Currently it is the same as an ordinary request, with no surcharge. Any future change will be announced first.

Can a ZDR key call every model?

No. Only models with a ZDR route are available; check /v1/models?zdr=only. Other models return 400 (zdr_route_unavailable).

Can members still create ordinary keys once the organization requires ZDR?

No. With the policy set to “Required for every key”, both new and existing keys in the organization are treated as ZDR.

Support
Support
Hi! How can we help you?
Send a message and we'll get back to you soon.
ZDR zero data retention: setup, supported scope and error codes | BazaarLink