← All services

Errors, charging, retries and limits

For agents with no human watching: what each answer means and whether you paid. Also as Markdown and JSON (lordevo.errors/1). Values are read from the running code.

Charging rule. A payment is settled (charged) only when our answer is below 400. Any status >= 400 is not settled, so you are not charged; error bodies say "charged": false. Exception: long service jobs are settled when accepted (202); a later failure is not refunded automatically and is reported to the owner.

Error body: {"error": "<code>", "message": "<human text>", "charged": false, ...optional "retry_after_seconds"}

Status codes

StatusCodesWhenCharged?Retry
200Answered. Quick checks and data tools answer in the same request. "partial": true means part of the work could not finish; the parts that did are in the answer and "failed", "not_checked" or the per-item results name the rest. "cache.stale": true means the source was down and this is an older answer; cache.age_seconds says how old.Yes when you sent a payment (it is settled after the answer). Free-trial calls, discovery, A2A message/send, MCP list/sample tools, preflight and polling are free.No need.
202Long service jobs (deep security scan, content plan, article, fix plan, site report): the job was accepted and runs in the background. The body has delivery_id, status "running" and result_url.Yes: the payment is settled when the job is accepted. If the job fails afterwards there is no automatic on-chain refund: the failure is logged, the owner is alerted and the delivery shows status "error".Poll result_url (free) every 30-60 s until status is "done" or "error". Results and links expire after 30 days (then 410).
400missing_parameter bad_json bad_url bad_target bad_key topic_required brief_too_large bad_request invalid parameter codes per toolMissing or invalid input on a request that sent a payment or asked for the free trial. An unpaid request with invalid input gets the 402 terms plus input_hint instead (see 402). The body names the bad input in "field" and gives a working "example" and "example_input".No ("charged": false).Fix the input; do not retry as is.
402payment required (no payment sent) payment refused at verification (payment sent) free_trial.status: used_up_today | daily_cap_reached | not_eligiblex402 payment terms. v2: the PAYMENT-REQUIRED header (base64 JSON, x402Version 2, accepts[]) - retry the same request with PAYMENT-SIGNATURE. v1: the same terms in the JSON body (x402Version 1, accepts[] with maxAmountRequired) and X-PAYMENT-REQUIRED - retry with X-PAYMENT. Network eip155:8453 (Base), asset USDC, scheme exact. If the input is invalid, the body also has input_hint (error, message, field, example, example_input) and the header X-Lordevo-Input-Error: fix the input before you pay, because a paid call with that input is refused with a 400 and not charged. A final 402 after you sent a payment means the payment was not accepted (balance, amount, network or expiry).No.Pay and retry once (any x402 client does this). After a refused payment, check the USDC balance on Base and sign a new payment.
403robots_disallowed (fetch tools) authorization_required ownership_verification_required ownership_not_verifiedrobots.txt does not allow the shop to fetch that URL (checked for every redirect hop before it is requested), or a service needs the authorization statement / verified ownership first.No.Pick another URL, or complete the free verify steps first.
404not_foundUnknown tool, product, delivery or key.No.No.
405method_not_allowedWrong HTTP method (e.g. GET /mcp; HEAD with a payment header).No.Use the documented method.
409payment_in_use (Retry-After 5) not_ready (report formats of a running delivery)The same signed payment is already being processed by another request (sent twice at once), or a delivery is not finished yet.No (the copy is refused without work; the first request decides).Do not resend the same payment in parallel; make a new call with a new payment. For not_ready, poll later.
410expiredDelivery links older than 30 days.No.No.
413body_too_large pdf_too_largeRequest body over the limit (quick tools 2 MB, MCP 2 MB, A2A 64 KB, services 16 KB) or a target file over the tool's cap.No.Send less.
422dns_not_found target_http_error no_readable_content all_failed not_a_feed no_feed_found not_pdf pdf_encrypted pdf_unreadable pdf_no_text bad_schema unrepairable bad_regex regex_timeout too_long_for_mode diff_timeout date_out_of_range unprocessableThe input passed validation but could not be used: the target does not resolve or answered an error, the file is not what the tool reads, or the data cannot be processed. Also used after a payment was verified.No: an answer >= 400 is never settled, even after you sent a payment.Do not retry as is; fix the target or input.
429rate_limited (Retry-After 3600) busy one_at_a_time daily_limit daily_cap_reachedFree features over their caps (free ownership verification 5/day start and 40/day checks per IP; free preflight 30/day per IP, 3000/day overall, one at a time per IP), or a service backend is busy.No.Wait Retry-After seconds (or retry_after_seconds in the body), then retry once.
499client_closedYour connection closed (timeout or cancel) before a paid quick check could send its answer. The payment is not settled. You will not see this answer; it is listed so you know a cancelled call costs nothing. If you cancel while the payment is already being settled, the payment may still go through: we are alerted and review such payments for a refund.No.Wait at least the tool timeout (table below) plus 10 s before you cancel, and do not cancel the other calls of a batch when one of them fails.
500internalUnexpected error on our side.No.Retry once after a few seconds; tell us if it repeats.
502target_unreachable target_bad_body backend_error engine_error delivery_failed Facilitator verify request timed out / Facilitator verify failed (x402 library text; MCP: verify_failed)The target site or one of our backends failed (could not connect, broke off, could not start the job), or the payment facilitator could not check your payment in time (nothing was run).No.Retry later; for a target site, check it is up (the free preflight helps). After a facilitator error, the same signed payment can be sent again (it was not settled), or sign a new one.
503busy (Retry-After 5; AI tools 30) not_for_sale_yet backend_unavailable (Retry-After 300) backend_not_ready payments_not_runningAt capacity (12 quick checks run at once, at most 6 of them AI tools; the local AI model is shared; a paid call first waits up to 8 s for a free slot), a product not on sale yet, or a backend down. Checked before the 402 where possible, so you are not asked to pay for something that cannot run now.No.Wait Retry-After seconds, then retry once.
504timeout target_timeoutThe check or the target site took longer than the tool timeout (table below).No.Retry later or with a lighter target.

MCP and A2A

Idempotency

There are no idempotency keys. One signed x402 payment pays for one call: the same payment sent twice at once gets 409 payment_in_use for the copy, and a payment that was already settled cannot be settled again (the facilitator refuses it, 402). A payment that was not settled (answer >= 400) did not move money; to retry, sign a new payment. Quick-check answers are cached per input for a few minutes for some tools (cache_seconds below; the answer says cache.hit), so a retry right after a success returns the same result and is charged again only if you pay again.

Limits

{
  "body": {
    "quick": "2mb",
    "precheck": "16kb",
    "a2a": "64kb",
    "mcp": "2mb",
    "services": "16kb"
  },
  "quick_checks_at_once": 12,
  "mcp_batch_max": 20,
  "free_trial": {
    "per_ip_per_utc_day": 3,
    "http_per_day": 200,
    "mcp_per_day": 100,
    "tools_priced_up_to_usd": 0.005,
    "note": "add trial=1 (or X-Lordevo-Trial: 1; MCP \"trial\": true); failed calls do not count; when used up the answer is the normal 402"
  },
  "free_preflight": {
    "per_ip_per_utc_day": 30,
    "per_day": 3000,
    "concurrent": 8,
    "hop_timeout_seconds": 8,
    "deadline_seconds": 25
  },
  "free_verification": {
    "starts_per_ip_per_day": 5,
    "checks_per_ip_per_day": 40
  },
  "delivery_ttl_days": 30
}

Timeouts per tool

ToolPriceTimeout (s)Cache (s)POST body
agent-readiness$0.002400no
broken-links$0.002450no
can-fetch$0.00220600no
canonical-check$0.002203600no
cors-check$0.00220300no
cron-next$0.00280no
csv-parse$0.002120yes
date-calc$0.00250no
dns-lookup$0.00212120no
domain-intel$0.002300no
domain-lookalike$0.00250no
domain-rdap$0.0022086400no
email-auth$0.002450no
email-validate$0.00215600no
federal-register$0.00220900no
feed-parse$0.00245600no
http-ping$0.002200no
ip-info$0.0022086400no
json-query$0.00280yes
json-repair$0.002100yes
json-schema-infer$0.00280yes
json-validate$0.002120yes
link-check$0.00230300no
link-preview$0.002203600no
links-batch$0.002450no
math-eval$0.00250yes
myr-rates$0.00220900no
page-diff$0.002300yes
page-markdown$0.002450no
page-markdown-batch$0.01600no
page-meta$0.002450no
page-quality$0.005750no
pdf-text$0.002453600no
prompt-injection-scan$0.00280yes
readability$0.002203600no
redirect-chain$0.002450no
regex-test$0.00280yes
sec-filings$0.00225600no
security-headers$0.002450no
security-scan-lite$0.02600no
seo-audit-lite$0.002600no
seo-page$0.002450no
site-check$0.02500no
site-snapshot$0.02450no
site-verdict$0.01750no
sitemap-urls$0.002403600no
ssl-cert$0.002153600no
structured-data$0.002203600no
tech-stack$0.002450no
text-chunk$0.002300yes
text-diff$0.002120yes
text-extract$0.00280yes
time-convert$0.00250no
token-count$0.00250yes
unit-convert$0.00250no
url-clean$0.00250yes
url-trust$0.002400no
verdict-card$0.01750no

Versioning

Output schemas are versioned (e.g. site-report/1, trust/2, lordevo.status/1). Within a version we only add fields; renaming or removing a field, or changing its meaning, means a new version, a dated /changelog entry before it goes live, and the old fields kept (marked deprecated) where possible. OpenAPI info.version follows semver.

Live reliability: /status · /changelog · /samples