# Forest Web — OpenAPI Schema State Fingerprinter

> Forest Web — OpenAPI Schema State Fingerprinter is a paid API for AI agents from http--forest-gas-station-mainnet--lcjl27p8lmjs.code.run, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-12).

Fingerprints the structural contract of a public OpenAPI or Swagger spec and detects API contract drift by comparing against an optional previous SHA-256 hash.

## Facts

- Endpoint: POST https://http--forest-gas-station-mainnet--lcjl27p8lmjs.code.run/openapi/schema-state?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/forest-web-openapi-schema-state-fingerprinter-8cf5a8f7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_0Ok2GUHqTYmmdju9d9Gpl

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 forest-web-openapi-schema-state-fingerprinter-8cf5a8f7 -d '<json body>'
```

Example prompt: Check the OpenAPI spec at https://api.example.com/openapi.json and tell me if its structural contract has changed since the last fingerprint hash a3f2c1...d9e8b7 — ignore doc text and examples, just the paths, operations, and schemas.

## When to prefer this

Choose this endpoint when you need to detect structural API contract drift in an OpenAPI or Swagger specification without executing any API operations. Ideal for API governance pipelines, CI/CD break-detection, partner API monitoring, or any workflow where you need to know if paths, operations, parameters, security schemes, or component schemas have materially changed. Unlike full API testing tools, this endpoint is read-only, fast, and ignores documentation noise — only structural machine-contract changes trigger a drift signal.

## Known failure modes

- URL is not a valid or reachable OpenAPI/Swagger specification — returns error indicating spec could not be parsed
- previous_hash does not match the 64-character hex format — returns validation error
- Spec URL returns non-200 status or is behind authentication — returns fetch error
- Malformed or invalid OpenAPI/Swagger document structure — returns parsing error
- URL resolves to a non-OpenAPI document — returns schema type mismatch error

## How this service works

Fingerprint the structural machine contract of a public OpenAPI or Swagger specification and compare it with an optional previous SHA-256 fingerprint to detect API contract drift. Paths, operations, parameters, security and component schema structure are tracked while documentation-only text and examples are ignored. No API operation is executed. Base mainnet USDC

## Output

Returns a SHA-256 fingerprint hash of the API's structural contract (paths, operations, parameters, security, component schemas), a boolean or status indicating whether a material change was detected compared to the provided previous hash, and a summary of what structural elements were tracked. Documentation text and examples are excluded from the fingerprint.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "pattern": "^https?://",
   "maxLength": 2048,
   "minLength": 1,
   "description": "Public HTTP(S) URL to inspect, resolve, or compare."
  },
  "previous_hash": {
   "type": [
    "string",
    "null"
   ],
   "pattern": "^[a-fA-F0-9]{64}$",
   "description": "Earlier result hash used to detect a material change."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/forest-web-openapi-schema-state-fingerprinter-8cf5a8f7/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from http--forest-gas-station-mainnet--lcjl27p8lmjs.code.run](https://www.zero.xyz/host/http--forest-gas-station-mainnet--lcjl27p8lmjs.code.run/llms.txt)
