Developer API
Errors & Rate Limits
Error handling and rate limiting for the Kolbo Developer API.
Error Format
All errors return a consistent JSON format:
{
"success": false,
"error": "Human-readable error message",
"code": "ERROR_CODE"
}HTTP Status Codes
| Status | Meaning |
|---|---|
| 200 | Success |
| 201 | Created (new API key) |
| 400 | Bad request (missing/invalid params) |
| 401 | Unauthorized (invalid or missing API key) |
| 403 | Forbidden (insufficient permissions) |
| 404 | Not found |
| 429 | Rate limited |
| 500 | Server error |
Common Error Codes
| Code | Description |
|---|---|
INVALID_API_KEY | API key is invalid, expired, or revoked |
INSUFFICIENT_CREDITS | Not enough credits for this generation |
MISSING_FIELDS | Required fields are missing |
GENERATION_ERROR | The generation failed to start |
MODEL_NOT_FOUND | The specified model doesn't exist |
RATE_LIMITED | Too many requests |
Rate Limits
| Endpoint | Limit |
|---|---|
| Generation endpoints | 10 requests/minute per user |
| Status polling | 300 requests/minute per IP |
| Models / Credits | 300 requests/minute per IP |
When rate limited, the response includes:
{
"status": false,
"message": "Too many requests, please try again later"
}Generation States
When polling status, the state field can be:
| State | Description |
|---|---|
pending | Generation is queued (Creative Director only) |
processing | Generation is in progress |
completed | Generation finished, result field contains URLs |
failed | Generation failed, error field explains why |
cancelled | Generation was cancelled |
Handling Failures
- Check
statein status response - If
failed, read theerrorfield - Credits are automatically refunded for failed generations
- You can retry with a new request
Timeouts
- Chat (
POST /v1/chat): requires polling, typically 5-30 seconds - Image: typically completes within 30 seconds
- Video: typically completes within 5 minutes
- Music: typically completes within 2 minutes
- Speech/Sound: typically completes within 30 seconds
- Creative Director: typically completes within 3 minutes (depends on scene count)
If polling beyond these times, the generation may have failed silently. Check the status one final time, then consider retrying.