---
title: "Compare previous and current x402 payment terms"
method: POST
path: "/v1/tests/payment-terms/compare"
tags: ["x402", "payment-terms", "comparison", "testing"]
---

# Compare previous and current x402 payment terms

`POST /v1/tests/payment-terms/compare`

## Request

- Base URL: `https://api.402rates.com`
- URL: `https://api.402rates.com/v1/tests/payment-terms/compare`
- Auth: none declared

Free comparison of two supplied unsigned payment challenges for the same resource and method. Exact EVM v1/v2 only. Shows changed amounts, recipients, assets and supported terms, with stable digests. Captures are caller declarations; no origin authentication, signatures, fetching or payment. Unknown profiles remain non-comparable.

## Request body

- object
  - `baseline` object, required
    - `resource_url` string, required: Exact HTTP(S) resource URL, including query. No credentials, secret query parameters or fragment.
    - `method` 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS', required
    - `captured_at` string, date-time, required: Caller-declared UTC capture time with Z suffix. Baseline may be old; current has a 24-hour age bound and both allow 60 seconds of future clock skew.
    - `challenge` object, required: Decoded unsigned x402 v1 or v2 PaymentRequired object. Exact EVM only; at most 32 offers.
  - `current` object, required
    - `resource_url` string, required: Exact HTTP(S) resource URL, including query. No credentials, secret query parameters or fragment.
    - `method` 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS', required
    - `captured_at` string, date-time, required: Caller-declared UTC capture time with Z suffix. Baseline may be old; current has a 24-hour age bound and both allow 60 seconds of future clock skew.
    - `challenge` object, required: Decoded unsigned x402 v1 or v2 PaymentRequired object. Exact EVM only; at most 32 offers.

## Response `200`

Successful response

- object
  - `report_version` '1.0.0', required
  - `status` 'input_required' | 'unchanged' | 'changed' | 'incomplete' | 'non_comparable', required
  - `evidence` 'caller_supplied_captures', required
  - `profile` 'exact_evm', required
  - `comparison` object, required
  - `captures` object, required
  - `issues` unknown[], required
    - unknown
  - `bounds` object, required
  - `not_checked` string[], required
  - `limitations` string[], required

## Other responses

- `400`: Invalid input
- `405`: POST required
- `413`: Input exceeds 196608 bytes
- `415`: application/json required
- `429`: Free request limit reached

---

[API](https://skmtc.dev/402rates/apis/402rates-com.md) · [All operations](https://skmtc.dev/402rates/apis/402rates-com/llms.txt) · [OpenAPI document](https://skmtc.dev/402rates/apis/402rates-com/revisions/483a9d0a3f0b?raw)
