Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.lobstr.io/llms.txt

Use this file to discover all available pages before exploring further.

The lobstr.io API uses standard HTTP status codes. All error responses include a detail field with a human-readable message.
{
  "detail": "A required parameter squid is missing from the route."
}

HTTP status codes

CodeMeaning
200Success
400Bad request — invalid parameters or business logic violation
401Unauthorized — missing or invalid API key
403Forbidden — authenticated but not permitted
404Not found — resource does not exist
429Too many requests — rate limit exceeded
500Server error — something went wrong on our end

Authentication errors (401)

ErrorDescription
NotAuthenticatedNo API key provided or the key is invalid
TokenExpiredThe authentication token has expired
Make sure your Authorization header is formatted exactly as Token YOUR_API_KEY.

Validation errors (400)

These occur when required parameters are missing or have the wrong format.
ErrorDescription
ParamsNeededA required parameter is missing (e.g., squid, tasks)
MultipleParamsNeededMultiple required parameters are missing
ParamsInvalidA parameter value is invalid
InvalidParamTypeA parameter has the wrong type (e.g., string where integer expected)
InvalidParameterValueA parameter value is out of the allowed range
BadEncodingFile encoding could not be recognized (upload endpoints)
InvalidParamGeneral invalid parameter error

Resource not found errors (404)

ErrorDescription
SquidDoesNotExistExceptionThe specified squid does not exist or does not belong to you
RunDoesNotExistThe specified run was not found
TaskDoesNotExistThe specified task was not found
TasksNotFoundNo tasks found matching the criteria
ModuleNotFoundThe specified crawler does not exist
FunctionNotFoundThe specified crawler function does not exist
AccountDoesNotExistThe specified account was not found
AccountTypeDoesNotExistThe specified account type does not exist

Business logic errors (400)

These occur when the request is valid but the operation can’t proceed due to account state.
ErrorDescription
NotEnoughBalanceInsufficient credits to start the run
NoActiveSubscriptionAccount has no active subscription
UsageLimitExceededPlan usage limit has been reached
SlotsLimitExceededMaximum concurrency slots in use
ConcurrencyLimitExceededRequested concurrency exceeds plan limit
NoTasksPresentSquid has no active tasks to run
SquidNotReadySquid is not in a state that allows running
DuplicateSquidA squid with the same name already exists
PremiumModuleThis crawler requires a paid plan
ModuleUnavailableThe crawler is temporarily unavailable
ModuleRestrictedAccess to this crawler is restricted
RunInProgressA run is already in progress for this squid
TaskNotValidErrorTask parameters do not match the crawler’s requirements
FileSizeLimitExceededUploaded file exceeds the size limit

Rate limiting (429)

Requests that exceed your plan’s rate limit return a 429 response. See Rate Limiting for limits and retry guidance.
{
  "detail": "Request was throttled. Expected available in 2 seconds."
}

Server errors (500)

ErrorDescription
SomethingWentWrongAn unexpected server-side error occurred
If you encounter repeated 500 errors, contact support with the request details.

Error handling example

import requests

def api_request(method, url, **kwargs):
    response = requests.request(method, url, **kwargs)

    if response.status_code == 401:
        raise Exception("Authentication failed — check your API key")

    if response.status_code == 404:
        detail = response.json().get("detail", "Resource not found")
        raise Exception(f"Not found: {detail}")

    if response.status_code == 400:
        detail = response.json().get("detail", "Bad request")
        raise Exception(f"Bad request: {detail}")

    if response.status_code == 429:
        raise Exception("Rate limit exceeded — slow down requests")

    if response.status_code >= 500:
        raise Exception("Server error — try again later")

    response.raise_for_status()
    return response.json()