Skip to main content
The AppKittie API uses standard HTTP status codes and returns errors as JSON with an error field.

Error Response Format

All error responses follow this structure:
{
  "error": "Human-readable error message"
}
Some validation errors include additional detail:
{
  "error": "Invalid parameters",
  "details": {
    "fieldErrors": {
      "keywords": ["At least one keyword is required"]
    },
    "formErrors": []
  }
}

HTTP Status Codes

Success

CodeDescription
200Request succeeded. Response body contains the requested data.

Client Errors

CodeErrorDescription
400Invalid parametersRequest parameters failed validation. Check the details field for specifics.
400Missing required parameter: keywordA required query parameter is missing.
400Invalid country codeThe country parameter is not a supported ISO 3166-1 alpha-2 code. See Supported Countries.
400Invalid JSON bodyThe request body could not be parsed as JSON (POST endpoints).
401Invalid or missing API keyThe Authorization header is missing, malformed, or the key is revoked.
402Insufficient creditsYour credit balance is too low. Top up credits or reduce the request scope.
404App not foundNo app exists with the given appId.
429Rate limit exceededToo many requests. Wait until the time indicated by X-RateLimit-Reset.

Server Errors

CodeErrorDescription
500Internal server errorAn unexpected error occurred. If this persists, contact support.
503Search service unavailableThe search backend is temporarily down. Retry after a short delay.

Error Handling Examples

import requests

response = requests.get(
    "https://appkittie.com/api/v1/apps",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    params={"limit": 10},
)

if response.status_code == 200:
    data = response.json()
    print(f"Found {len(data['data'])} apps")
elif response.status_code == 401:
    print("Invalid API key. Check your credentials.")
elif response.status_code == 402:
    remaining = response.headers.get("X-Credits-Remaining", "0")
    print(f"Insufficient credits. Remaining: {remaining}")
elif response.status_code == 429:
    reset = response.headers.get("X-RateLimit-Reset")
    print(f"Rate limited. Retry after timestamp: {reset}")
else:
    error = response.json().get("error", "Unknown error")
    print(f"Error {response.status_code}: {error}")