Guides

Prices and paths

Set a price per path in the dashboard with simple patterns. The first matching rule wins.

Prices live in the dashboard, per site, as a list of rules. Each rule is a path pattern and a price in euro. Changes reach your integration within a minute, without a deploy.

Patterns

PatternMatchesDoesn't match
/about/about/about/team
/blog/*/blog/post-1/blog/a/b
/premium/**/premium, /premium/a/b/premiums
/**/*.pdf/report.pdf, /docs/2026/q3.pdf/report.pdf.html

Matching is case-sensitive and ignores the query string. * is one path segment, ** any depth.

Order and defaults

  • Rules are checked from top to bottom; the first match wins. Put specific rules above general ones.
  • A price of 0 makes a path free, for example /free/** at 0 above /** at 0.01.
  • Paths without a matching rule cost the site's default price. Set it to 0 to keep everything free unless a rule says otherwise.

Check a price

The config API tells you which rule a path matches and what it costs:

Terminal
curl -s "https://api.pennipay.eu/v1/sites/$PENNI_SITE_ID/config?path=/blog/hello" \
  -H "Authorization: Bearer $PENNI_API_KEY" | jq .match
# { "path": "/blog/hello", "pattern": "/blog/*", "price": "0.02", "free": false }

Descriptions and discovery

A rule can carry a description and a response MIME type. They appear in the 402, and, when the site is opted in, in the discovery catalog, where agents find your paid resources.