# Tanod imagepeek – Perceptual Hash

> Tanod imagepeek – Perceptual Hash is a paid API for AI agents from tanod.dev, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-11).

Computes perceptual hashes (aHash, dHash, pHash, wHash) for one image and optionally compares them against a second image to return Hamming distances.

## Facts

- Endpoint: POST https://tanod.dev/v1/image/hash?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tanod-imagepeek-perceptual-hash-d06122e7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_cjy_GWYwxhUtPKpuaLzu_

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability tanod-imagepeek-perceptual-hash-d06122e7 -d '<json body>'
```

Example prompt: Can you compute the perceptual hashes (aHash, dHash, pHash, and wHash) for this image — https://example.com/photo.jpg — and also compare it against https://example.com/photo2.jpg to see how similar they are?

## When to prefer this

Use this endpoint when you need fast, lightweight image similarity detection or deduplication without full ML-based embedding models. It is ideal for near-duplicate detection, tamper/crop detection, or building image fingerprint databases. Prefer it over pixel-diff tools when images may be resized, color-shifted, or slightly cropped, since perceptual hashes are robust to those transformations. Choose it over heavy vision APIs when cost and latency matter and exact pixel fidelity is not required.

## Known failure modes

- Image URL is unreachable or returns non-200 — endpoint cannot fetch the image
- Image exceeds 10 MB size limit — rejected with size error
- Invalid or unsupported image format — decoding failure
- Base64 payload is malformed or exceeds character limit — parse error
- No image provided (both url and image_base64 are null) — validation error
- Compare image also fails to load or decode — comparison skipped or error returned

## How this service works

One MCP server and HTTP API with 193 pay-per-call tools for AI agents (security checks, chain data, finance, aviation, documents), plus free uptime and MikroTik monitoring and 130+ free browser tools. No signup; free daily tier. Operated by an AI.

## Output

Returns one or more perceptual hash values (aHash, dHash, pHash, wHash) as hex strings for the input image. When a second comparison image is provided, also returns pairwise Hamming distances between each hash, indicating the degree of visual similarity (lower distance = more similar).

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "anyOf": [
    {
     "type": "string",
     "maxLength": 2048
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "Public http(s) URL of the image (at most 10 MB; private, internal and IP-literal hosts are refused); or use image_base64."
  },
  "hash_size": {
   "enum": [
    8,
    16
   ],
   "type": "integer",
   "default": 8,
   "description": "Hash grid: 8 (64-bit hashes, default) or 16 (256-bit)."
  },
  "algorithms": {
   "anyOf": [
    {
     "type": "array",
     "items": {
      "enum": [
       "ahash",
       "dhash",
       "phash",
       "whash"
      ],
      "type": "string"
     },
     "maxItems": 4,
     "minItems": 1
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "Default: all four."
  },
  "auto_orient": {
   "type": "boolean",
   "default": true,
   "description": "Apply the EXIF orientation first (default true)."
  },
  "compare_url": {
   "anyOf": [
    {
     "type": "string",
     "maxLength": 2048
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "A second image to compare (or compare_base64)."
  },
  "image_base64": {
   "anyOf": [
    {
     "type": "string",
     "maxLength": 13333464
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "The image as standard or url-safe base64 (at most 10 MB decoded; a data:image/...;base64, prefix is fine); or use url."
  },
  "compare_base64": {
   "anyOf": [
    {
     "type": "string",
     "maxLength": 13333464
    },
    {
     "type": "null"
    }
   ],
   "default": null,
   "description": "A second image as base64 (at most 10 MB decoded; or compare_url)."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "bits": 64,
  "input": {
   "bytes": 161713,
   "width": 640,
   "format": "jpeg",
   "frames": 1,
   "height": 480,
   "animated": false,
   "has_alpha": false
  },
  "notes": [],
  "hashes": {
   "ahash": "fcffffb310160040",
   "dhash": "313c1d66e2e4e595",
   "phash": "cedbd88c49eaf808",
   "whash": "fcfffff310340000"
  },
  "source": {
   "url": "https://python-pillow.org",
   "library": "Pillow",
   "license": "MIT-CMU (HPND)"
  },
  "compare": {
   "input": {
    "bytes": 159137,
    "width": 640,
    "format": "jpeg",
    "frames": 1,
    "height": 480,
    "animated": false,
    "has_alpha": false
   },
   "hashes": {
    "ahash": "e4fae8c01e0e0000",
    "dhash": "0c168a9174dce2be",
    "phash": "f1f136161a62d393",
    "whash": "eefaf8d03e1e1202"
   },
   "distance": {
    "ahash": 19,
    "dhash": 34,
    "phash": 34,
    "whash": 20
   },
   "final_url": "https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0012.jpg",
   "similarity": {
    "ahash": 0.7031,
    "dhash": 0.4688,
    "phash": 0.4688,
    "whash": 0.6875
   },
   "source_url": "https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0012.jpg",
   "likely_same": false
  },
  "final_url": "https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg",
  "operation": "hash",
  "source_url": "https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tanod-imagepeek-perceptual-hash-d06122e7/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from tanod.dev](https://www.zero.xyz/host/tanod.dev/llms.txt)
