# MPP discovery in OpenAPI (x-payment-info)

> An operation with x-payment-info tells an agent that the call is paid, and states the intent, the payment method, and the amount.

- Source: /checks/mpp-discovery
- Site: AgenticWebScore
- Language: English

---
An operation with x-payment-info tells an agent that the call is paid, and states the intent, the payment method, and the amount. MPP is a draft, and charging agents is a business decision.

Standard status: Draft. A published specification that is not yet ratified. Standards: [MPP](https://mpp.dev/) and [OpenAPI 3.x](https://spec.openapis.org/oas/latest.html).

- Kind: Unscored check: 0 points, never a level gate
- Module: Sites with an API or agent surface
- Listed under: Agent conventions
- Applies when: the scan holds an OpenAPI document
- Who reads it today: Agents that pay with MPP; isitagentready.com.
- Effect on Google Search: None. No Google Search documentation says Google reads it.

| Property | Value |
| --- | --- |
| Check id | `mpp-discovery` |
| Dimension | API and agent |
| Part | — |
| Tier | — |
| Weight | 0 |
| Maturity | Draft. A published specification that is not yet ratified. |
| Publishing skill | `mpp-discovery` |
| Standards | MPP, OpenAPI 3.x |

## Sources

- [MPP](https://mpp.dev/), mpp.dev
- [MPP: multi-method discovery](https://mpp.dev/blog/multi-method-discovery), mpp.dev
- [draft-ryan-httpauth-payment](https://datatracker.ietf.org/doc/draft-ryan-httpauth-payment/), IETF (individual draft)
- [isitagentready.com: MPP skill](https://isitagentready.com/.well-known/agent-skills/mpp/SKILL.md), isitagentready.com

## What is measured

Unscored, agent-api module: asked only when the scan finds an API or agent surface. It makes no request of its own. It reads the OpenAPI description the scan already holds, the one the openapi check reads, and every operation under paths (get, put, post, delete, options, head, patch, and trace). An operation declares MPP payment information in x-payment-info. An offer states an intent (charge or session), a method (tempo, stripe, lightning, card, or custom), and an amount. An amount is a number or a numeric string, and null reads as a price set per request. A single offer, an array of offers, an offers array or object, and an object keyed by method all count. A description with at least one operation that has a valid offer is present, and the detail names up to 5 such operations with the intent and method of each offer. When no operation has a valid offer and some carry x-payment-info, it is defective, and the detail names each operation and what is wrong. A description whose operations declare no x-payment-info is not used. A YAML description is not parsed: one that does not mention x-payment-info is not used, and one that does is not measured. With no OpenAPI description the check is out of scope, and when a candidate path refused the scan's Accept header, an HTTP 406, it is not measured. MPP is a draft, so the check is unscored.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
ORIGIN=https://example.com
# The scan reads the OpenAPI description it already holds. /openapi.json is the usual path; use the path your description is served at.
curl -sSL -A 'AgenticWebScore/0.3 (+https://agenticwebscore.com/bot)' -H 'Accept-Language: en' -H 'Accept: application/json, application/linkset+json;q=0.9, */*;q=0.5' "$ORIGIN/openapi.json" | jq -c '[.paths | to_entries[] | .key as $p | .value | to_entries[] | select(.value | type == "object" and has("x-payment-info")) | {operation: ((.key | ascii_upcase) + " " + $p), "x-payment-info": .value["x-payment-info"]}]'
```

## The fix

This is an example written for example.com. Where the scan can build the fix from your own site, the report shows that version instead.

```json
{
  "paths": {
    "<choose: path of the paid operation>": {
      "<choose: HTTP method in lower case>": {
        "x-payment-info": {
          "intent": "charge",
          "method": "<choose: tempo, stripe, lightning, card, or custom>",
          "amount": "<choose: the price in the base unit of that method>"
        }
      }
    }
  }
}
```

> Add x-payment-info to each operation you charge for, inside the OpenAPI description you already serve. Whether to charge agents, how much, and by which method are your decisions. MPP is a draft, so the field names may change.

## Standards referenced

- `MPP`
- `OpenAPI 3.x`

## Related checks

| Check | Kind | Maturity | Same skill |
| --- | --- | --- | --- |
| `mcp-card` — MCP server card | Unscored check | Draft | — |
| `mcp-server` — MCP server answers and lists its tools | Scored check | Adopted | — |
| `openapi` — OpenAPI definition | Scored check | Adopted | — |
| `oauth-discovery` — OAuth discovery documents | Scored check | Adopted | — |
| `api-catalog` — API catalog | Scored check | Adopted | — |
| `agent-skills` — Agent Skills declaration | Unscored check | Draft | — |
| `a2a-card` — A2A agent card | Unscored check | Draft | — |
| `a2a-signed` — Cryptographically signed agent card | Unscored check | Draft | — |
