Troubleshooting
Common issues and their solutions. If you're stuck, check the error code reference below or review the API documentation.
Error Code Reference
| Code | Meaning |
|---|---|
400 validation_error | Invalid request body. Check the messages[] array for details |
401 unauthorized | Missing, invalid, or revoked API key / JWT |
404 not_found | Resource doesn't exist or isn't owned by your API key |
409 conflict | State conflict, e.g., trying to delete an already-deleted kubbi |
410 gone | kubbi has expired, been burned, or was deleted |
429 rate_limited | Too many requests. Wait and retry |
429 quota_exceeded | Daily creation or active kubbi limit reached |
500 internal_error | Server error. Retry or contact support |
501 not_implemented | Endpoint version is not yet available (e.g., /api/v2) |
Common Issues
I get "401 unauthorized" but my API key is correct
- Ensure you're using the full key (not just the
kb_abcprefix shown in the dashboard) - Check that the header format is exactly
Authorization: Bearer kb_... - Verify the key hasn't been revoked in Dashboard → API Keys
- Note: consumer endpoints (
/r/:token) don't need authentication. If you're passing a key to a claim URL, remove it
I get "429 rate_limited" errors
You've exceeded your plan's per-key rate limit. To resolve this:
- Add exponential backoff and retry logic to your client
- Both the TypeScript and Python SDKs have built-in retries (default: 2 retries, so 3 attempts total)
- Spread requests across multiple API keys if needed
- Consider upgrading your plan for higher rate limits
I get "429 quota_exceeded" errors
This means you've hit either your daily creation quota or active kubbi limit for your current plan. Options:
- Wait for existing kubbis to expire or be claimed (burn-after-read)
- Manually delete kubbis you no longer need
- Use shorter TTLs so kubbis expire faster
- Upgrade your plan for higher quotas
I get "410 gone" when claiming a kubbi
The kubbi is no longer available. This happens when:
- The TTL has elapsed (status:
expired) - All allowed retrievals were used (status:
burned) - The producer deleted it (status:
deleted)
In all cases, the encrypted content has been permanently overwritten and cannot be recovered. Use GET /r/:token/inspect to check status before claiming.
My multi-file kubbi creation fails with "validation_error"
Common causes for package validation failures:
- More files than your plan allows in the
filesarray - Total decoded size exceeds your plan's package size limit
- Duplicate filenames (case-insensitive, so
README.mdandreadme.mdconflict) - Invalid filename characters (only
a-zA-Z0-9._-, must start with alphanumeric) - Including both
contentandfilesin the same request (mutually exclusive) - Invalid base64 encoding for binary files
The SDK throws a network error but the API is up
- Check your internet connection and any proxy/firewall settings
- Verify you're connecting to
https://api.kubbi.ai(HTTPS required in production) - If using a custom
baseUrl, ensure it's correct - Check the
timeoutMs/timeoutsetting. Default is 30 seconds - The SDK retries failed requests up to 2 times by default (3 attempts total). If all retries fail, there may be a persistent connectivity issue
Inspect shows the kubbi but claim returns different data than expected
A few things to check:
- Inspect does not count as a retrieval, but claim does. If
maxRetrievalswas 1, the first claim burns the kubbi - For
application/jsoncontent, the claim response returns parsed JSON (not a string) - For packages, binary files are returned with
encoding: "base64". Decode them on the client side - Use the SDK's type guards (
isPackageClaimfor claim responses,isPackageInspectfor inspect responses) to correctly handle both single and package shapes
Still having issues?
Check the full API Reference for detailed request/response schemas, or review the SDK documentation for language-specific error handling. You can also inspect the Security & Operations docs to understand the encryption and lifecycle model.