# Animica Post-Quantum Signature Verification (ML-DSA-65)

> Animica Post-Quantum Signature Verification (ML-DSA-65) is a paid API for AI agents from animica.dev, paid per call via x402, $0.001794/call, status unknown (last checked 2026-09-14).

Verifies a post-quantum ML-DSA-65 (Dilithium) digital signature against a public key and message, returning a cryptographic verdict with fingerprint and metadata.

## Facts

- Endpoint: POST https://animica.dev/x402/pq/verify
- Price: $0.001794/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/animica-post-quantum-signature-verification-ml-dsa-65-8a219e6c
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_-UfPcpbTOfk4l3ylg3gWl

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 animica-post-quantum-signature-verification-ml-dsa-65-8a219e6c -d '<json body>'
```

Example prompt: Verify this ML-DSA-65 post-quantum signature for me — the algorithm ID is 4099, the message bytes are 'a1b2c3...', the signature is 'deadbeef...', and the public key is 'f00d...'. I want to know if it checks out and what the public key fingerprint is.

## When to prefer this

Choose this endpoint when you need to verify post-quantum (ML-DSA-65 / Dilithium) digital signatures specifically — especially in contexts involving Animica platform payments or agents spending ANM tokens, where ML-DSA-65 is the only accepted spending scheme. Prefer over generic ECDSA or RSA verifiers when quantum-resistance is required.

## Known failure modes

- Invalid or malformed hex encoding for message, signature, or public key — returns ok:false with reason
- Unsupported alg_id (anything other than 4099) — scheme not recognized
- Signature does not match message and public key — returns ok:false
- Missing required fields (alg_id, message, signature, public_key) — request rejected
- Payment not received or insufficient USDC balance — x402 payment required error

## How this service works

Verify a post-quantum signature (ML-DSA-65 / Dilithium3 / SPHINCS+ as enabled by chain policy) against a message and public key, using the same verifier the Animica chain itself uses to admit transactions. Useful when an agent must check a PQ-signed attestation without shipping a post-quantum library of its own. A signature that does not verify is a SUCCESSFUL call answering ok:false - you paid for the answer, and "invalid" is an answer. Only an inability to perform the check is treated as a failure.

## Output

Returns a JSON object with: 'ok' (boolean verdict of whether the signature is valid), 'reason' (explanation if invalid), 'scheme_id' and 'scheme_name' (confirming ML-DSA-65), 'pub_fingerprint' (a fingerprint of the public key), 'sizes' (byte sizes of inputs), and 'verified_at' (timestamp of verification).

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "alg_id": {
   "type": "integer",
   "description": "scheme id - 4099 (0x1003) is ML-DSA-65, the only scheme that can spend on Animica"
  },
  "message": {
   "type": "string",
   "description": "hex-encoded message bytes"
  },
  "sign_hash": {
   "type": "string",
   "description": "hex domain/sign-hash bytes, when the scheme binds one"
  },
  "signature": {
   "type": "string",
   "description": "hex-encoded signature"
  },
  "public_key": {
   "type": "string",
   "description": "hex-encoded public key"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json"
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/animica-post-quantum-signature-verification-ml-dsa-65-8a219e6c/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from animica.dev](https://www.zero.xyz/host/animica.dev/llms.txt)
