---
title: "Pro: watch codes and get a webhook when a rate or China status changes (pay per call in USDC via x402, no key)"
method: GET
path: "/x402/api/watch"
tags: ["Dutyfinch"]
---

# Pro: watch codes and get a webhook when a rate or China status changes (pay per call in USDC via x402, no key)

`GET /x402/api/watch`

## Request

- Base URL: `https://dutyfinch.cybermaxtools.com`
- URL: `https://dutyfinch.cybermaxtools.com/x402/api/watch`
- Auth: none required

Pro plan. GET lists your watched codes, baselines and recent alerts. POST {"codes": ["8516.60.40", ...], "webhook": "https://your.app/hook"} adds codes (up to 100); {"replace": true} replaces the list; {"test": true} sends a test webhook; {"remove": ["8516.60.40"]} removes codes and {"remove": "all"} removes the watch. Alerts are POSTed as JSON: event tariff_change, code, changes [{field, before, after}], release, detectedAt.

Pay per call with x402: $0.012 per call in USDC on Base. No key, no account: an unpaid call returns 402 with the payment requirements; retry with the X-PAYMENT (x402 v1) or PAYMENT-SIGNATURE (v2) header.

## Response `200`

Results (same field names as the bulk version's dataset records) plus the free-tier limits.

- object

## Other responses

- `400`: Invalid input
- `401`: Invalid or revoked API key
- `402`: Payment Required: x402 payment requirements (body: x402Version 1 accepts[]; header PAYMENT-REQUIRED: x402 v2).
- `504`: Took too long; ask for fewer items

---

[API](https://skmtc.dev/cybermaxtools/apis/dutyfinch-api.md) · [All operations](https://skmtc.dev/cybermaxtools/apis/dutyfinch-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cybermaxtools/apis/dutyfinch-api/revisions/e333c51ba697?raw)
