Errors
Technical documentation for dryAPI APIs, integration guides, and operational references.
HTTP status codes and error responses returned by dryAPI
dryAPI uses conventional HTTP response codes to indicate the success or failure of an API request. Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error from the provided information (e.g., missing required parameter, unauthorized access). Codes in the 5xx range indicate an error with dryAPI servers.
HTTP Status Codes
| Code | Status | Description |
|---|---|---|
200 | OK | Request succeeded. Response contains requested data. |
401 | Unauthorized | Invalid or missing API key. |
404 | Not Found | The requested resource (job, model) does not exist. |
422 | Unprocessable Entity | Request validation failed. Check the errors array for details. |
429 | Too Many Request | Rate limit exceeded. |
500 | Internal Server Error | Something went wrong on our end. Try again later. |
Error Response Format
All error responses follow a consistent JSON structure:
{
"data": null,
"message": "Error general message",
"errors": [],
"statusCode": 401
}-
data(object | null): Alwaysnullfor error responses. -
message(string): Human-readable error description. -
errors(array): Additional error details. For validation errors (422), contains field-specific messages. -
statusCode(integer): HTTP status code (matches the response status).
Error Types
401 Unauthorized
Returned when authentication fails.
Common causes:
- Missing
Authorizationheader - Invalid API key
- Expired API key
{
"data": null,
"message": "Unauthorized user.",
"errors": [],
"statusCode": 401
}Solution: Verify your API key is correct and included in the Authorization: Bearer <API_KEY> header.
404 Not Found
Returned when the requested resource doesn't exist.
Common causes:
- Invalid
request_idwhen polling results - Model name doesn't exist
- Request ID not found
{
"data": null,
"message": "Request not found.",
"errors": [],
"statusCode": 404
}Solution: Verify the resource identifier (request_id, model name) is correct. Use the Model Selection endpoint to get valid model names.
422 Unprocessable Entity
Returned when request validation fails. The errors array contains field-specific details.
Common causes:
- Missing required parameters
- Invalid parameter values (out of range, wrong type)
- Invalid image/video URL or format
{
"data": null,
"message": "Validation failed",
"errors": [
{
"field": "width",
"messages": ["The width must be between 64 and 2048."]
},
{
"field": "model",
"messages": ["The selected model does not exist."]
}
],
"statusCode": 422
}Solution: Check the errors array to identify which fields failed validation and correct them according to the API documentation.
500 Internal Server Error
Returned when an unexpected error occurs on our servers.
{
"data": null,
"message": "Internal server error",
"errors": [],
"statusCode": 500
}Solution: Wait a moment and retry your request. If the problem persists, check status.dryapi.dev or contact support on Discord.
Best Practices
Implement error handling for all possible status codes in your application.
For 422 responses, iterate through the
errorsarray to display field-specific messages to users.
For 500 errors, implement exponential backoff retry (e.g., 1s, 2s, 4s delays).
Log full error responses for debugging. Include
request_idif available.
Example Error Handling
import requests
response = requests.post(
"https://api.dryapi.dev/api/v1/client/txt2img",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json"
},
json={
"prompt": "a cat",
"model": "flux-2-klein-4b-bf16",
"width": 512,
"height": 512,
"steps": 4,
"guidance": 0,
"seed": -1,
"loras": []
}
)
if response.status_code == 200:
data = response.json()
request_id = data["data"]["request_id"]
print(f"Job started: {request_id}")
elif response.status_code == 401:
print("Authentication failed. Check your API key.")
elif response.status_code == 422:
error_data = response.json()
print(f"Validation error: {error_data['message']}")
for error in error_data.get("errors", []):
print(f" Field '{error['field']}': {error['messages']}")
elif response.status_code == 500:
print("Server error. Retrying...")
else:
print(f"Unexpected error: {response.status_code}")const response = await fetch("https://api.dryapi.dev/api/v1/client/txt2img", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({
prompt: "a cat",
model: "Flux1schnell",
width: 512,
height: 512,
steps: 4,
guidance: 0,
seed: -1,
loras: []
})
});
if (response.ok) {
const data = await response.json();
const requestId = data.data.request_id;
console.log(`Job started: ${requestId}`);
} else if (response.status === 401) {
console.error("Authentication failed. Check your API key.");
} else if (response.status === 422) {
const errorData = await response.json();
console.error(`Validation error: ${errorData.message}`);
errorData.errors?.forEach(err => {
console.error(` Field '${err.field}': ${err.messages.join(", ")}`);
});
} else if (response.status === 500) {
console.error("Server error. Retrying...");
} else {
console.error(`Unexpected error: ${response.status}`);
}