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

Run stop reasons

When a run ends, the response includes a done_reason field (slug) and done_reason_desc (human-readable message) explaining why it stopped. These are not HTTP errors — they appear in the run object returned by Get Run Details.

Account errors

These indicate a problem with the account attached to the squid. Re-sync or replace the account, then resume the run.
done_reasonDescription
no_accountsNo accounts are linked to this squid — the run closes permanently. Fix: attach an account.
no_account_availableAccounts are linked but all are currently in use by other runs — the run pauses and resumes automatically once one is free.
account_blockedThe account has been blocked by the platform
account_too_many_requestsThe platform rate-limited the account
cookies_expiredAccount cookies have expired — re-sync required
wrong_credentialsAccount credentials are incorrect
logged_outThe account has been logged out
checkpoint_reachedThe account is blocked on a checkpoint
challenge_requiredThe platform is asking for a challenge
non_premiumA premium platform account is required
sales_seat_requiredA Sales Navigator seat is required for this account
limit_exceededThe account has reached its platform usage limit

General stop reasons

done_reasonDescription
tasks_doneAll tasks completed successfully
no_credits_leftAccount ran out of lobstr.io credits
deactivatedRun was deactivated
website_inaccessibleTarget website is currently down
premium_plan_neededA premium plan is required to run this module
module_under_maintenanceModule is temporarily under maintenance
request_failedA request failed — run paused for 6 hours
export_failedResults export failed
last_invoice_not_paidLast invoice is unpaid
maintenance_fees_not_paidCustom module maintenance fees are unpaid
batch_waitCurrent batch processed — waiting for timeout
emails_verifiedAll emails have been verified

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()