{
  "openapi": "3.1.0",
  "x-zeroclick-navigation": {
    "fullSpec": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json",
    "services": "https://agents.tuski.ai/zcj/kcuuss778pzd/services",
    "serviceSpecTemplate": "https://agents.tuski.ai/zcj/kcuuss778pzd/services/{slug}/openapi.json",
    "searchTemplate": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json?q={text}",
    "operationTemplate": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json?path={path}&method={method}",
    "firstPage": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json?page=1",
    "instructions": [
      "Use this spec if it contains the operation and details you need. Otherwise, search or open a relevant service spec using the links below.",
      "Find service slugs in x-zeroclick-services or x-payment-info.rates[].service; use them in serviceSpecTemplate, never as request values.",
      "URL-encode template values. Search is ranked; service, path, and method filters are exact. Filters combine.",
      "Pages contain up to 10 operations; follow info.x-next or the Link header if you need more results. Shared operations retain all selector values."
    ]
  },
  "info": {
    "title": "Tuski",
    "version": "1.0.0",
    "description": "Tuski validates email lists with real delivery evidence. Every address goes through syntax, domain, and MX checks, disposable-domain and typo detection, and controlled probe sends that collect real bounce signals, then receives one of eight verdicts (deliverable, invalid, no MX, burner, typo, catch-all, full box, role) and a 0 to 100 quality score. Jobs run asynchronously: create a job from a list of addresses or CSV text, poll its progress, then fetch paginated JSON results or a CSV export. Only addresses that can actually be tested are billed; addresses on unreachable, disposable, or typo domains are free. This server is a pay-per-use, transparent proxy in front of Tuski's own API: it handles identity, payment, and proxying. Agents can purchase autonomously or with their human's approval. The complete verified paid surface is listed at /openapi.json, the source of truth for available operations. Each operation here carries its live price in x-payment-info. Use the operations and details here when they meet your needs. Filtered specs contain only matching operations; if you cannot find what you need here, use search or the service catalog. The live catalog at /manifest.json is authoritative for prices and any free included units (prices[].includedUnits) - some meters include free usage per account before any charge, reserved for agents claimed by a human with a verified email.",
    "x-guidance": "Start with the free seller advisor: POST https://agents.tuski.ai/zcj/kcuuss778pzd/zeroclick/agent/quote with your goal and known budget or requirements. This operation costs $0 and requires only an x402 or MPP wallet proof; it returns a guide and never executes a purchase. Without a wallet, GET https://agents.tuski.ai/zcj/kcuuss778pzd/zeroclick/agent/guide?goal=URL_ENCODED_TASK or POST to that guide. Other operations below are the direct API reference; their own prices and access requirements still apply. Call the operations listed in this document at https://agents.tuski.ai. Each service's full price matrix, plans, and how to buy are at https://agents.tuski.ai/zcj/kcuuss778pzd/services/{slug}; each operation's x-payment-info names the service it bills by slug (rates[].service). Slugs identify services in prices and usage reports and are never request values: when one operation serves several services, its request body schema lists the accepted values of the field that selects the service, so send one of those exactly as written. An unpaid call returns 402 Payment Required with a signed challenge; settle it with a supported payment method - x402 (Base USDC) or MPP (Tempo USDC) today - and retry with the proof attached. No upstream API key is needed, and an agent without a payment method can set one up instantly at no cost. Read GET https://agents.tuski.ai/zcj/kcuuss778pzd/manifest.json for the live services, meters, plans, prices, and any free included units, and https://agents.tuski.ai/zcj/kcuuss778pzd/llms-full.txt for the full agent guide, including how the free allowance works without funding (it requires an agent identity claimed by a human with a verified email)."
  },
  "x-service-info": {
    "docs": {
      "homepage": "https://tuski.ai",
      "apiReference": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json",
      "llms": "https://agents.tuski.ai/zcj/kcuuss778pzd/llms.txt"
    }
  },
  "externalDocs": {
    "url": "https://agents.tuski.ai/zcj/kcuuss778pzd/llms-full.txt",
    "description": "How to authenticate, pay, and call this API; links the upstream API reference."
  },
  "servers": [
    {
      "url": "https://agents.tuski.ai/zcj/kcuuss778pzd",
      "description": "Pay-per-use access to Tuski's API"
    }
  ],
  "security": [
    {
      "payPerUse": []
    }
  ],
  "components": {
    "securitySchemes": {
      "payPerUse": {
        "type": "apiKey",
        "in": "header",
        "name": "x-payment",
        "description": "Pay-per-use access. An unpaid call returns 402 Payment Required with a signed challenge; settle it with a supported payment method (x402 or MPP today) and retry with the proof in this header (x402) or as Authorization: Payment (MPP; use ZC-Agent-Authorization for a separate buyer bearer). No upstream API key is needed, and an agent without a payment method can set one up instantly at no cost."
      },
      "sellerAgentX402": {
        "type": "apiKey",
        "in": "header",
        "name": "Payment-Signature",
        "description": "Signed $0 x402 proof from the 402 challenge"
      },
      "sellerAgentMpp": {
        "type": "http",
        "scheme": "Payment",
        "description": "Signed $0 MPP proof from the 402 challenge"
      }
    },
    "schemas": {
      "sds_px2rsSXPuRoJNY6Muxs3X_4737d842a11b7d29_ref0": {
        "type": "object",
        "title": "ValidationJobResponse",
        "required": [
          "job_id",
          "total",
          "queued"
        ],
        "properties": {
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "job_id": {
            "type": "integer",
            "title": "Job Id"
          },
          "queued": {
            "type": "integer",
            "title": "Queued"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "The existing job's status; an idempotent replay only"
          },
          "next_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Step",
            "description": "What to do next; an auto-keyed idempotent replay only"
          },
          "long_queue": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Long Queue",
            "description": "True when the job is expected to take more than 48 hours"
          },
          "idempotency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Idempotency",
            "description": "Where the idempotency key came from: `explicit` (your header) or `auto`"
          },
          "idempotent_hit": {
            "type": "boolean",
            "title": "Idempotent Hit",
            "default": false
          },
          "projected_hours": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Projected Hours",
            "description": "Hours until the job is expected to finish; null when no mailbox can send"
          },
          "projected_finish_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Projected Finish At",
            "description": "When the job is expected to finish (UTC, ISO 8601)"
          }
        }
      },
      "sds_px2rsSXPuRoJNY6Muxs3X_4737d842a11b7d29_ref1": {
        "type": "object",
        "required": [
          "detail"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable error code."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable error message."
          }
        }
      },
      "sds_px2rsSXPuRoJNY6Muxs3X_7ad36a497b2d639c_ref0": {
        "type": "object",
        "title": "ValidationStatusResponse",
        "required": [
          "job_id",
          "status"
        ],
        "properties": {
          "eta": {
            "title": "Eta"
          },
          "done": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Done"
          },
          "sent": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sent"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "total": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total"
          },
          "valid": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Valid"
          },
          "job_id": {
            "type": "integer",
            "title": "Job Id"
          },
          "queued": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Queued"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "blocked": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Blocked"
          },
          "invalid": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invalid"
          },
          "unknown": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unknown"
          },
          "soft_temp": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Soft Temp"
          },
          "unreachable": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unreachable"
          },
          "mailbox_full": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mailbox Full"
          },
          "other_bounce": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Other Bounce"
          },
          "paused_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Paused Reason"
          },
          "routing_error": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Routing Error"
          },
          "poll_after_seconds": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poll After Seconds"
          }
        }
      },
      "sds_px2rsSXPuRoJNY6Muxs3X_7ad36a497b2d639c_ref1": {
        "type": "object",
        "required": [
          "detail"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable error code."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable error message."
          }
        }
      },
      "sds_px2rsSXPuRoJNY6Muxs3X_ab5b89a3b458fce0_ref0": {
        "type": "object",
        "title": "ValidationCancelResponse",
        "required": [
          "job_id",
          "cancelled",
          "refunded"
        ],
        "properties": {
          "job_id": {
            "type": "integer",
            "title": "Job Id"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "refunded": {
            "type": "integer",
            "title": "Refunded"
          },
          "cancelled": {
            "type": "boolean",
            "title": "Cancelled"
          },
          "refunded_to": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refunded To"
          },
          "zeroclick_refund_note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Zeroclick Refund Note"
          }
        }
      },
      "sds_px2rsSXPuRoJNY6Muxs3X_ab5b89a3b458fce0_ref1": {
        "type": "object",
        "required": [
          "detail"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable error code."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable error message."
          }
        }
      },
      "sds_px2rsSXPuRoJNY6Muxs3X_4fba1f79a69cb209_ref0": {
        "type": "object",
        "title": "ValidationResultsResponse",
        "required": [
          "job_id",
          "rows",
          "count",
          "limit",
          "offset",
          "has_more"
        ],
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "title": "Rows"
          },
          "count": {
            "type": "integer",
            "title": "Count"
          },
          "limit": {
            "type": "integer",
            "title": "Limit"
          },
          "job_id": {
            "type": "integer",
            "title": "Job Id"
          },
          "offset": {
            "type": "integer",
            "title": "Offset"
          },
          "has_more": {
            "type": "boolean",
            "title": "Has More"
          }
        }
      },
      "sds_px2rsSXPuRoJNY6Muxs3X_4fba1f79a69cb209_ref1": {
        "type": "object",
        "required": [
          "detail"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable error code."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable error message."
          }
        }
      }
    }
  },
  "paths": {
    "/api/v1/email-validation/jobs": {
      "post": {
        "summary": "Create an email validation job",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_4737d842a11b7d29_ref0"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_4737d842a11b7d29_ref0"
                }
              }
            },
            "description": "Created; see the Location header."
          },
          "400": {
            "description": "Malformed JSON or domain validation error (code invalid_request)"
          },
          "401": {
            "description": "Missing or invalid Bearer API key"
          },
          "402": {
            "description": "Payment required"
          },
          "403": {
            "description": "Missing API-key permission"
          },
          "409": {
            "description": "Idempotency conflict"
          },
          "413": {
            "description": "Request too large"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_4737d842a11b7d29_ref1"
                }
              }
            },
            "description": "Invalid request or missing Idempotency-Key"
          },
          "429": {
            "description": "Rate limit exceeded; see Retry-After"
          },
          "500": {
            "description": "Unexpected server error"
          },
          "503": {
            "description": "Temporarily unavailable due to database contention; retry shortly"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_4737d842a11b7d29_ref1"
                }
              }
            },
            "description": "Unexpected error"
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            },
            "required": true
          }
        ],
        "description": "Create an email validation job. Retries with the same Idempotency-Key replay the original job.",
        "operationId": "create_validation_job_api_v1_email_validation_jobs_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "required": [
                      "emails"
                    ]
                  },
                  {
                    "required": [
                      "csv_text"
                    ]
                  }
                ],
                "properties": {
                  "emails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 100000,
                    "minItems": 1,
                    "description": "A list of addresses to validate. Provide this or `csv_text`, never both."
                  },
                  "csv_text": {
                    "type": "string",
                    "minLength": 1,
                    "description": "Raw CSV text with a header row and an email column, up to `settings.max_csv_rows` data rows. Provide this or `emails`, never both."
                  },
                  "fresh_probe": {
                    "type": "boolean",
                    "default": false,
                    "description": "Send a fresh probe to every address, even one whose result is remembered from a recent check."
                  }
                },
                "description": "Provide exactly one of `emails` or `csv_text`. Tuski writes every probe message itself, picking each one at random from a rotating set of neutral messages. The whole request body is capped at 26214400 bytes and `emails` at 100000 entries (settings.max_csv_rows).",
                "additionalProperties": false
              },
              "examples": {
                "emails": {
                  "value": {
                    "emails": [
                      "a@example.com",
                      "b@example.com"
                    ]
                  },
                  "summary": "A short list of addresses"
                },
                "csv_text": {
                  "value": {
                    "csv_text": "email\na@example.com\nb@example.com\n"
                  },
                  "summary": "CSV text with a header row"
                }
              }
            }
          },
          "required": true
        },
        "x-zeroclick-document-sources": [
          {
            "gaps": [],
            "pages": [],
            "sourceId": "sds_px2rsSXPuRoJNY6Muxs3X",
            "authority": "official",
            "conflicts": [],
            "revisionId": "sdrn_-sO-jho4hrIvJ4oFsFE0z"
          },
          {
            "gaps": [
              "Missing full request body schema",
              "Missing response schema"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_A1NYR1l24iJXEra0tE7jJ",
            "authority": "supplemental",
            "conflicts": [
              "/responses/201/description",
              "/operationId"
            ],
            "revisionId": "sdrn_xHBr5SVy-4dRTs972pXYv"
          },
          {
            "gaps": [
              "Missing full request body schema",
              "Missing response schema details"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_dey4m-N4JPXMSemS9Z9u7",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/201/description",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_z1yZWrLYZ1XWPZRk9kwCx"
          },
          {
            "gaps": [
              "Missing full request body schema",
              "Missing response schema"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_mKX9tac1NnEOVh0gmNtUj",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/201/description",
              "/description",
              "/operationId",
              "/requestBody/content/application/json/schema/required"
            ],
            "revisionId": "sdrn_o5_s8dkhIFohqLqRE1ljo"
          }
        ],
        "x-zeroclick-services": [
          "email-validation"
        ],
        "x-payment-info": {
          "access": "payg",
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "USD"
              }
            },
            {
              "x402": {
                "network": "eip155:8453",
                "scheme": "exact",
                "currency": "USDC"
              }
            }
          ],
          "offers": [
            {
              "amount": null,
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "description": "$0.010000 per address (validations, service email-validation)",
              "intent": "charge",
              "method": "tempo"
            }
          ],
          "price": {
            "mode": "dynamic",
            "currency": "USD",
            "min": "0.010000"
          },
          "rates": [
            {
              "service": "email-validation",
              "meter": "validations",
              "unit": "address",
              "unitSize": 1,
              "priceUsd": "0.010000",
              "includedUnits": 0
            }
          ]
        }
      }
    },
    "/api/v1/email-validation/jobs/{job_id}": {
      "get": {
        "summary": "Get an email validation job's status",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_7ad36a497b2d639c_ref0"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Missing or invalid Bearer API key"
          },
          "402": {
            "description": "Payment required"
          },
          "403": {
            "description": "Missing API-key permission"
          },
          "404": {
            "description": "Job not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_7ad36a497b2d639c_ref1"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit exceeded; see Retry-After"
          },
          "500": {
            "description": "Unexpected server error"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_7ad36a497b2d639c_ref1"
                }
              }
            },
            "description": "Unexpected error"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "schema": {
              "type": "integer",
              "title": "Job Id"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "wait",
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Wait",
              "description": "Long-poll instead of returning immediately: wait on the server for up to this many seconds for the job to reach a terminal status, then return whatever status is current. Clamped into 1..50. Adds `done` and `poll_after_seconds` to the response. Ignored on a ZeroClick-signed request, which always returns immediately."
            },
            "required": false,
            "description": "Long-poll instead of returning immediately: wait on the server for up to this many seconds for the job to reach a terminal status, then return whatever status is current. Clamped into 1..50. Adds `done` and `poll_after_seconds` to the response. Ignored on a ZeroClick-signed request, which always returns immediately."
          }
        ],
        "description": "Return a job's status and per-outcome counters, plus an ETA.\n\nAny API-key permission may call this route. Errors: 401 missing/\ninvalid key, 404 `job_not_found` for a job that does not exist or\nbelongs to another organization, 429 rate limited. A ZeroClick-signed\ncaller uses the same path; a guard failure (bad signature, payment\nrequired, allowance unavailable) comes back in ZeroClick's own\n`{\"error\": ...}` envelope built by the ZeroClick SDK, and every other\nerror (for example `job_not_found`, raised by `_zc_read`) comes back\nas `{\"detail\": ...}` (plus `code` only when\n`ZEROCLICK_ERROR_ENVELOPE_V2` is on). `wait` is ignored for that\ncaller (see `_zc_read`).",
        "operationId": "validation_job_status_api_v1_email_validation_jobs__job_id__get",
        "x-zeroclick-document-sources": [
          {
            "gaps": [],
            "pages": [],
            "sourceId": "sds_px2rsSXPuRoJNY6Muxs3X",
            "authority": "official",
            "conflicts": [],
            "revisionId": "sdrn_-sO-jho4hrIvJ4oFsFE0z"
          },
          {
            "gaps": [
              "Missing response schema definition",
              "Missing request parameter descriptions"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_A1NYR1l24iJXEra0tE7jJ",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/operationId"
            ],
            "revisionId": "sdrn_xHBr5SVy-4dRTs972pXYv"
          },
          {
            "gaps": [
              "Missing response schema details",
              "Missing request parameter descriptions"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_dey4m-N4JPXMSemS9Z9u7",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_z1yZWrLYZ1XWPZRk9kwCx"
          },
          {
            "gaps": [
              "Missing response schema definition",
              "Missing request parameter descriptions"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_mKX9tac1NnEOVh0gmNtUj",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_o5_s8dkhIFohqLqRE1ljo"
          }
        ],
        "x-zeroclick-services": [
          "email-validation"
        ],
        "x-payment-info": {
          "access": "payg",
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "USD"
              }
            },
            {
              "x402": {
                "network": "eip155:8453",
                "scheme": "exact",
                "currency": "USDC"
              }
            }
          ],
          "offers": [
            {
              "amount": "0",
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "description": "Free",
              "intent": "charge",
              "method": "tempo"
            }
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.000000"
          }
        }
      }
    },
    "/api/v1/email-validation/jobs/{job_id}/cancel": {
      "post": {
        "summary": "Cancel an email validation job",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_ab5b89a3b458fce0_ref0"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "description": "Invalid cancellation request"
          },
          "401": {
            "description": "Missing or invalid Bearer API key"
          },
          "402": {
            "description": "Payment required"
          },
          "403": {
            "description": "Missing API-key permission"
          },
          "404": {
            "description": "Job not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_ab5b89a3b458fce0_ref1"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit exceeded; see Retry-After"
          },
          "500": {
            "description": "Unexpected server error"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_ab5b89a3b458fce0_ref1"
                }
              }
            },
            "description": "Unexpected error"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "schema": {
              "type": "integer",
              "title": "Job Id"
            },
            "required": true
          }
        ],
        "description": "Cancel a job and refund one credit per unsent lead. Requires `validate`.\n\n`refunded` is the credits this call returned for the charged leads\nit stopped before they were sent. Leads already sent still get their\nverdict after the bounce check, and the job's no-MX and send-failure\nrefunds follow then.\n\nA job already 'done' or already 'cancelled' is a no-op: nothing\nchanges and nothing is refunded again. A ZeroClick-funded job's\n`zeroclick_refund_note` explains the refund landed in Tuski's shared\nwallet, not the caller's. Errors: 401 missing/invalid key, 403\nmissing `validate` permission, 404 `job_not_found`, 429 rate\nlimited. A ZeroClick-signed caller uses the same path; a guard\nfailure (bad signature, payment required, allowance unavailable)\ncomes back in ZeroClick's own `{\"error\": ...}` envelope built by the\nZeroClick SDK, and every other error comes back as `{\"detail\": ...}`\n(plus `code` only when `ZEROCLICK_ERROR_ENVELOPE_V2` is on).",
        "operationId": "cancel_validation_job_api_v1_email_validation_jobs__job_id__cancel_post",
        "x-zeroclick-document-sources": [
          {
            "gaps": [],
            "pages": [],
            "sourceId": "sds_px2rsSXPuRoJNY6Muxs3X",
            "authority": "official",
            "conflicts": [],
            "revisionId": "sdrn_-sO-jho4hrIvJ4oFsFE0z"
          },
          {
            "gaps": [
              "Missing response schema"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_A1NYR1l24iJXEra0tE7jJ",
            "authority": "supplemental",
            "conflicts": [
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/operationId"
            ],
            "revisionId": "sdrn_xHBr5SVy-4dRTs972pXYv"
          },
          {
            "gaps": [
              "Missing response schema details"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_dey4m-N4JPXMSemS9Z9u7",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_z1yZWrLYZ1XWPZRk9kwCx"
          },
          {
            "gaps": [
              "Missing response schema"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_mKX9tac1NnEOVh0gmNtUj",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_o5_s8dkhIFohqLqRE1ljo"
          }
        ],
        "x-zeroclick-services": [
          "email-validation"
        ],
        "x-payment-info": {
          "access": "payg",
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "USD"
              }
            },
            {
              "x402": {
                "network": "eip155:8453",
                "scheme": "exact",
                "currency": "USDC"
              }
            }
          ],
          "offers": [
            {
              "amount": "0",
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "description": "Free",
              "intent": "charge",
              "method": "tempo"
            }
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.000000"
          }
        }
      }
    },
    "/api/v1/email-validation/jobs/{job_id}/results": {
      "get": {
        "summary": "Get an email validation job's results",
        "responses": {
          "200": {
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_4fba1f79a69cb209_ref0",
                  "type": "object",
                  "title": "ValidationResultsResponse",
                  "required": [
                    "job_id",
                    "rows",
                    "count",
                    "limit",
                    "offset",
                    "has_more"
                  ],
                  "properties": {
                    "rows": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "title": "Rows"
                    },
                    "count": {
                      "type": "integer",
                      "title": "Count"
                    },
                    "limit": {
                      "type": "integer",
                      "title": "Limit"
                    },
                    "job_id": {
                      "type": "integer",
                      "title": "Job Id"
                    },
                    "offset": {
                      "type": "integer",
                      "title": "Offset"
                    },
                    "has_more": {
                      "type": "boolean",
                      "title": "Has More"
                    }
                  }
                }
              }
            },
            "description": "JSON page or CSV export, selected by format"
          },
          "400": {
            "description": "Invalid results request"
          },
          "401": {
            "description": "Missing or invalid Bearer API key"
          },
          "402": {
            "description": "Payment required"
          },
          "403": {
            "description": "Missing export permission"
          },
          "404": {
            "description": "Job not found"
          },
          "413": {
            "description": "CSV export too large"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_4fba1f79a69cb209_ref1"
                }
              }
            },
            "description": "Invalid query parameters"
          },
          "429": {
            "description": "Rate limit exceeded; see Retry-After"
          },
          "500": {
            "description": "Unexpected server error"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/sds_px2rsSXPuRoJNY6Muxs3X_4fba1f79a69cb209_ref1"
                }
              }
            },
            "description": "Unexpected error"
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "schema": {
              "type": "integer",
              "title": "Job Id"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "type": "string",
              "title": "Format",
              "default": "json"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Limit",
              "maximum": 5000,
              "minimum": 1
            },
            "required": false
          },
          {
            "in": "query",
            "name": "offset",
            "schema": {
              "type": "integer",
              "title": "Offset",
              "default": 0,
              "minimum": 0
            },
            "required": false
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            },
            "required": false
          }
        ],
        "description": "Requires the `export` permission. The `csv` format is paginated by `limit`/`offset` exactly like `json`, but the CSV body carries no `has_more` field. To make truncation visible, the response includes an `X-Total-Count` header (the true row count for this job/status filter) and, when more rows remain past this page, a `Link: <...>; rel=\"next\"` header (RFC 8288) advertising the next `offset` to request.\n\n`status` filters rows by `leads.status` and must be one of the values the pipeline actually writes: terminal outcomes -- valid, invalid, unknown, unreachable, mailbox_full, blocked, soft_temp, routing_error, other_bounce -- or in-flight/job-level states that are not a deliverability judgement -- pending, queued, sending, sent, cancelled. Omit `status` to get every row. An unrecognized value is rejected with 422 rather than silently returning zero rows. Each row also carries a human-facing `verdict` field (see app/results.py) derived from `status`/`preflight`/`reason`, always one of `deliverable`, `catch_all`, `role`, `typo`, `invalid`, `full_box`, `no_mx`, `burner`, `no_reply`, `blocked`, `unknown`, `soft_temp`, `routing_error`, `other_bounce`, `not_judged`. A typo of a well-known mail provider's domain is `typo`; a domain with no mail server is `no_mx`.\n\nErrors: 401 missing/invalid key, 403 missing `export` permission, 404 `job_not_found`, 413 CSV export too large, 422 `invalid_request`/`unknown_status_filter`, 429 rate limited. A ZeroClick-signed caller uses the same path; a guard failure (bad signature, payment required, allowance unavailable) comes back in ZeroClick's own `{\"error\": ...}` envelope built by the ZeroClick SDK, and every other error comes back as `{\"detail\": ...}` (plus `code` only when `ZEROCLICK_ERROR_ENVELOPE_V2` is on).",
        "operationId": "validation_job_results_api_v1_email_validation_jobs__job_id__results_get",
        "x-zeroclick-document-sources": [
          {
            "gaps": [],
            "pages": [],
            "sourceId": "sds_px2rsSXPuRoJNY6Muxs3X",
            "authority": "official",
            "conflicts": [],
            "revisionId": "sdrn_-sO-jho4hrIvJ4oFsFE0z"
          },
          {
            "gaps": [
              "Missing pagination parameters",
              "Missing response schema definition"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_A1NYR1l24iJXEra0tE7jJ",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/operationId"
            ],
            "revisionId": "sdrn_xHBr5SVy-4dRTs972pXYv"
          },
          {
            "gaps": [
              "Missing pagination parameter definitions",
              "Missing response schema details"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_dey4m-N4JPXMSemS9Z9u7",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_z1yZWrLYZ1XWPZRk9kwCx"
          },
          {
            "gaps": [
              "Missing pagination parameters",
              "Missing response schema definition"
            ],
            "pages": [
              1
            ],
            "sourceId": "sds_mKX9tac1NnEOVh0gmNtUj",
            "authority": "supplemental",
            "conflicts": [
              "/summary",
              "/responses/200/description",
              "/parameters/path/job_id/schema/type",
              "/description",
              "/operationId"
            ],
            "revisionId": "sdrn_o5_s8dkhIFohqLqRE1ljo"
          }
        ],
        "x-zeroclick-services": [
          "email-validation"
        ],
        "x-payment-info": {
          "access": "payg",
          "protocols": [
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "USD"
              }
            },
            {
              "x402": {
                "network": "eip155:8453",
                "scheme": "exact",
                "currency": "USDC"
              }
            }
          ],
          "offers": [
            {
              "amount": "0",
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "description": "Free",
              "intent": "charge",
              "method": "tempo"
            }
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.000000"
          }
        }
      }
    },
    "/zeroclick/agent/quote": {
      "post": {
        "operationId": "sellerAgentQuote",
        "summary": "Get a free seller API quote and purchase guide",
        "description": "Describe your task to get the matching API contract, prices, prerequisites and next steps. This is a $0 wallet-proof lookup, not the seller's paid service. No purchase is executed. Without a wallet, use /zeroclick/agent/guide.",
        "servers": [
          {
            "url": "https://agents.tuski.ai/zcj/kcuuss778pzd"
          }
        ],
        "security": [
          {
            "sellerAgentX402": []
          },
          {
            "sellerAgentMpp": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "goal": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 2000,
                    "description": "Describe the task and known inputs. Do not include credentials."
                  },
                  "quantity": {
                    "description": "Number of API calls, not returned items. Omit when unknown; describe desired output in goal.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000000
                  },
                  "budgetUsd": {
                    "description": "Total cash budget in USD. A quote does not authorize spending.",
                    "type": "string",
                    "pattern": "^(0|[1-9]\\d{0,8})(\\.\\d{1,6})?$"
                  },
                  "budgetExclusive": {
                    "type": "boolean"
                  },
                  "reviewAfterCalls": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000000
                  },
                  "requirements": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 300
                  },
                  "humanAvailable": {
                    "description": "Whether a human is in the loop; omit when unknown. Executing a human's request without further interruptions does not by itself mean false.",
                    "type": "boolean"
                  },
                  "payment": {
                    "description": "Known payment method for the eventual purchase, independent of this free lookup's wallet proof.",
                    "type": "string",
                    "enum": [
                      "x402",
                      "mpp",
                      "card"
                    ]
                  }
                },
                "required": [
                  "goal"
                ],
                "additionalProperties": false
              },
              "example": {
                "goal": "Find the available services, prices and purchase steps"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Task guidance; inspect status before executing anything",
            "content": {
              "application/json": {
                "schema": {
                  "$schema": "https://json-schema.org/draft/2020-12/schema",
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "quoted",
                        "catalog",
                        "ready",
                        "needs_input",
                        "blocked",
                        "unknown",
                        "unsupported",
                        "unavailable"
                      ]
                    },
                    "priceUsd": {
                      "type": "string",
                      "const": "0"
                    },
                    "guide": {
                      "type": "string",
                      "description": "Markdown guidance containing the task result, exact contract, pricing and next steps when available. No purchase is executed."
                    },
                    "guideUrl": {
                      "type": "string",
                      "format": "uri",
                      "description": "Wallet-free advisor endpoint for further planning or recovery."
                    }
                  },
                  "required": [
                    "status",
                    "priceUsd",
                    "guide",
                    "guideUrl"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "402": {
            "description": "$0 x402 or MPP wallet proof required; sign and retry the same request. No funds are transferred."
          },
          "503": {
            "description": "Advisor unavailable; use the wallet-free guide or direct storefront references"
          }
        },
        "x-payment-info": {
          "access": "payg",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0"
          },
          "protocols": [
            {
              "x402": {
                "network": "eip155:8453",
                "scheme": "exact",
                "currency": "USDC"
              }
            },
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "USD"
              }
            }
          ],
          "offers": [
            {
              "amount": "0",
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "method": "tempo",
              "intent": "charge",
              "description": "Free seller advisor lookup"
            }
          ]
        }
      }
    }
  },
  "x-zeroclick-navigation-footer": {
    "instructions": [
      "Use this spec if it contains the operation and details you need. Otherwise, search or open a relevant service spec using the links below.",
      "Find service slugs in x-zeroclick-services or x-payment-info.rates[].service; use them in serviceSpecTemplate, never as request values.",
      "URL-encode template values. Search is ranked; service, path, and method filters are exact. Filters combine.",
      "Pages contain up to 10 operations; follow info.x-next or the Link header if you need more results. Shared operations retain all selector values."
    ],
    "fullSpec": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json",
    "services": "https://agents.tuski.ai/zcj/kcuuss778pzd/services",
    "serviceSpecTemplate": "https://agents.tuski.ai/zcj/kcuuss778pzd/services/{slug}/openapi.json",
    "searchTemplate": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json?q={text}",
    "operationTemplate": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json?path={path}&method={method}",
    "firstPage": "https://agents.tuski.ai/zcj/kcuuss778pzd/openapi.json?page=1"
  }
}
