Agentic Portal

TaintCheck

security
Serving

Scan a dependency manifest for known-vulnerable and confirmed-malicious packages. POST /v1/scan with a raw lockfile or a components array and get per-dependency verdicts (malicious, vulnerable, suspicious, clean) from OSV.dev and the OpenSSF Malicious Packages feed, each with a summary and snapshot timestamp. Pay per request in USDC; no account, no API key.

Endpoint
POST https://agent.pocket.network/v1/taint-check
Price per call
$0.005 USD
Networks payable on
Base (eip155:8453)
Protocol
rest

Calling it

The first call returns 402 Payment Required with the terms. Sign for those terms and retry the same request with the payment attached.

Example request

Derived from the published request schema.

curl -X POST https://agent.pocket.network/v1/taint-check \
  -H 'content-type: application/json' \
  -d '{"lockfile":{"format":"package-lock.json","content":"string"},"components":[{"ecosystem":"npm","name":"string","version":"string"}],"options":{"since":"string","heuristics":true}}'
Example response

This service declares its response shape in prose rather than as fields, so there is nothing more specific to sample.

{}

Try it

Make one real paid call from your own wallet — about $0.005 on Base (eip155:8453). The wallet signs; nothing here holds a key. You'll see exactly what the service answers.

No browser wallet found. Install MetaMask, Rabby, or Coinbase Wallet to try a call here.

Supported methods

Methods the registry lists for this service. The portal forwards any call as sent; the supplier decides what it answers, and a delivered answer is settled.

Methods TaintCheck accepts, and whether each reads or writes.
MethodEffect
GET /healthzread
GET /v1/capabilitiesread
GET /v1/openapi.jsonread
GET /v1/versionread
POST /v1/scanread

Schemas

Published by the service itself. The example above is generated from these.

Request schema
{
  "type": "object",
  "description": "Provide either a raw lockfile or a pre-parsed components array; body size and component limits come from GET /v1/capabilities.",
  "properties": {
    "lockfile": {
      "type": "object",
      "description": "A raw lockfile.",
      "properties": {
        "format": {
          "type": "string",
          "enum": [
            "package-lock.json",
            "pnpm-lock.yaml",
            "yarn.lock",
            "requirements.txt",
            "poetry.lock",
            "uv.lock",
            "Pipfile.lock",
            "Cargo.lock",
            "go.sum"
          ],
          "description": "Lockfile format."
        },
        "content": {
          "type": "string",
          "description": "Raw lockfile content."
        }
      }
    },
    "components": {
      "type": "array",
      "description": "Pre-parsed dependencies.",
      "items": {
        "type": "object",
        "properties": {
          "ecosystem": {
            "type": "string",
            "description": "e.g. npm, pypi, go, cargo."
          },
          "name": {
            "type": "string",
            "description": "Package name."
          },
          "version": {
            "type": "string",
            "description": "Package version."
          }
        }
      }
    },
    "options": {
      "type": "object",
      "description": "Scan options.",
      "properties": {
        "since": {
          "type": "string",
          "description": "Only advisories newer than this timestamp (monitor mode)."
        },
        "heuristics": {
          "type": "boolean",
          "description": "Add typosquat, install-script and dormancy signals."
        }
      }
    }
  },
  "required": []
}
Response schema
{
  "type": "object",
  "description": "For POST /v1/scan, a JSON object with a `findings` array — each dependency's verdict (malicious, vulnerable, suspicious, clean), a summary, and a data_as_of timestamp. Findings vary by each supplier's snapshot freshness and converge as mirrors sync. The exact shape is the service's own and is not pinned here; errors return a JSON object with an `error` field, and the GET routes return their own small JSON documents."
}

Request body used in the example: { "lockfile": { "format": "package-lock.json", "content": "string" }, "components": [ { "ecosystem": "npm", "name": "string", "version": "string" } ], "options": { "since": "string", "heuristics": true } }