{
  "x402Version": 2,
  "service": {
    "name": "Toolshed",
    "description": "Paid file conversions for agents over x402: POST the raw file, get the converted file back. No install, no account, no API key — the 402 is the front door.",
    "url": "https://toolshed.lemon-agent.dev",
    "tags": [
      "x402",
      "conversion",
      "file-conversion",
      "developer-tools",
      "agents"
    ],
    "contact": "support@lemon-agent.dev",
    "related": [
      {
        "name": "10x402",
        "url": "https://10x402.com",
        "relation": "sibling: x402 conformance linting"
      },
      {
        "name": "kino402",
        "url": "https://kino402.com",
        "relation": "sibling: video and speech generation over x402"
      }
    ]
  },
  "resources": [
    {
      "url": "https://toolshed.lemon-agent.dev/convert/html-markdown",
      "method": "POST",
      "description": "Saved HTML page / static HTML file to Markdown",
      "mimeType": "text/markdown",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "6000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "6000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.006",
          "amount_atomic": "6000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/md-html",
      "method": "POST",
      "description": "Markdown to HTML",
      "mimeType": "text/html",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "4000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "4000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.004",
          "amount_atomic": "4000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/json-yaml",
      "method": "POST",
      "description": "JSON to YAML",
      "mimeType": "application/yaml",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/yaml-json",
      "method": "POST",
      "description": "YAML to JSON",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/csv-json",
      "method": "POST",
      "description": "CSV to JSON",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/json-csv",
      "method": "POST",
      "description": "JSON array of records to CSV with a header row",
      "mimeType": "text/csv",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/csv-yaml",
      "method": "POST",
      "description": "CSV to YAML",
      "mimeType": "application/yaml",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/yaml-csv",
      "method": "POST",
      "description": "YAML list of records to CSV with a header row",
      "mimeType": "text/csv",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/json-ndjson",
      "method": "POST",
      "description": "JSON array to NDJSON (newline-delimited JSON)",
      "mimeType": "application/x-ndjson",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/ndjson-json",
      "method": "POST",
      "description": "NDJSON (newline-delimited JSON) to JSON array",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/frontmatter-json",
      "method": "POST",
      "description": "Markdown with a frontmatter fence to JSON with the metadata and the body split apart",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "4000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "4000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.004",
          "amount_atomic": "4000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/markdown-json",
      "method": "POST",
      "description": "Markdown to JSON token tree plus a table of contents",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "4000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "4000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.004",
          "amount_atomic": "4000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/srt-vtt",
      "method": "POST",
      "description": "SubRip subtitle file (.srt) to WebVTT (.vtt)",
      "mimeType": "text/vtt",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/vtt-srt",
      "method": "POST",
      "description": "WebVTT (.vtt) to SubRip subtitle file (.srt)",
      "mimeType": "application/x-subrip",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "2000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "2000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.002",
          "amount_atomic": "2000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/toml-json",
      "method": "POST",
      "description": "TOML config file to JSON",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "4000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "4000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.004",
          "amount_atomic": "4000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/json-toml",
      "method": "POST",
      "description": "JSON object to TOML",
      "mimeType": "application/toml",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "4000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "4000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.004",
          "amount_atomic": "4000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/xml-json",
      "method": "POST",
      "description": "XML document (feed, export, SOAP payload) to JSON",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "6000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "6000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.006",
          "amount_atomic": "6000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/html-text",
      "method": "POST",
      "description": "Saved HTML page / static HTML file to Plain text, readable",
      "mimeType": "text/plain",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "6000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "6000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.006",
          "amount_atomic": "6000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    },
    {
      "url": "https://toolshed.lemon-agent.dev/convert/html-json",
      "method": "POST",
      "description": "HTML page containing data tables to JSON rows keyed by the header row",
      "mimeType": "application/json",
      "accepts": [
        {
          "scheme": "exact",
          "network": "eip155:8453",
          "amount": "6000",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0x0adc7adac7bbaffffbd73505711e42378c4f9f9e"
        },
        {
          "scheme": "exact",
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "amount": "6000",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7zXRc8sYkhjezbwXQw43beBrKDmhTMA7mkNfqRjdZ6gw"
        }
      ],
      "billing_terms": {
        "billable_unit": {
          "unit": "one served conversion",
          "price_usd": "0.006",
          "amount_atomic": "6000",
          "metered": false,
          "note": "One served conversion. A single signed authorization buys exactly one response at the listed price; the amount settled is that whole price, and there is no partial, metered or per-byte billing. Settlement is queued only after the converter has returned an output, and only for a payment the facilitator verified — a conversion served while the facilitator was unreachable settles nothing at all, and says so in its x-payment-verified header."
        },
        "hold": {
          "held": false,
          "note": "None. Verification is a read at the facilitator, so nothing is reserved, escrowed or held: the signed authorization moves no funds until it is submitted at settle, which is queued behind the response rather than run in front of it. An authorization that never reaches settle simply goes unused."
        },
        "idempotency": {
          "key": "sha256(payment header, as presented)",
          "headers": [
            "PAYMENT-SIGNATURE",
            "X-PAYMENT"
          ],
          "idempotency_key_header": null,
          "replay": {
            "status": 402,
            "error": "payment_already_used"
          },
          "note": "There is no idempotency-key header. The key is the SHA-256 of the payment header exactly as presented — `X-PAYMENT` for x402 v1, `PAYMENT-SIGNATURE` for x402 v2, and PAYMENT-SIGNATURE is the one read when a request carries both — claimed single-use between verification and the conversion. A retry carrying the same authorization, concurrently or an hour later, is answered 402 with invalidReason `payment_already_used` and the live terms attached; it converts nothing, serves no second response and settles nothing. Sign a fresh authorization, with a fresh nonce, to buy another conversion."
        },
        "post_payment_error": {
          "settles": false,
          "on_4xx": "authorization released",
          "on_5xx": "authorization released",
          "note": "Nothing is ever settled unless a conversion was served, and every exit after the claim hands the claim back, so the very same authorization can be presented again. That covers the 4xx paths — a body that cannot be read, an empty body, a body over the 256 KB cap, input the converter refused, anything unexpected — and the one 5xx after payment, a 503 raised when the metering store is unreachable and the route fails closed. The release is best-effort, so a retry that is nonetheless refused as already used means signing a fresh authorization. What is deliberately not given back is the per-caller daily ceiling: it bounds what a request costs us, and the facilitator round trip was made either way."
        },
        "refund": {
          "path": "none",
          "dispute": "none",
          "contact": "support@lemon-agent.dev",
          "note": "None. There is no refund, credit or dispute endpoint, and no reversal of a settled payment. The mechanism is non-charge rather than refund: an authorization for a conversion that was not served is never submitted, so no funds move. A settlement that fails after a conversion was served is recorded in the ledger with settle_ok = 0 and is not retried — the caller keeps the conversion. Anything else is support@lemon-agent.dev and a conversation, not a guaranteed remedy."
        }
      }
    }
  ],
  "note": "Each accepts entry carries the payTo of its rail, substituted at serve time from this deployment's configuration — nothing here is baked into a file that could go stale, and an entry with no address configured omits the key rather than publishing an empty one. The authoritative terms are still the 402 each resource answers with, and one thing only it can tell you: whether a rail is offerable right now. The Solana entry is listed because that rail is configured in production. GET https://toolshed.lemon-agent.dev/check for the live catalogue."
}
