GitHub

07 — PIPs · PIP-0015

Limits on an open request

A request whose amount is null may bound what the payer enters, per capability and inside the standing intent. A fixed amount meets the intent's limits at issue.

ImplementedCore
Number
PIP-0015
Status
implemented
Type
Core
Author
PATH
Date
2026-10-08
Source
On the register

Why

A request with amount: null lets the payer choose: a tip, a donation, an open invoice (PIP-0010). This PIP lets it state the range it accepts, for example between 1 000 and 50 000 XOF, and makes that range binding on the wallet. The bounds take the shape of the per-capability limits of an address (PIP-0008), and a request issued against an address stays inside them.

The object

{
  "type": "path.request",
  "reference": "q81mzv4k2tx9",
  "issuer": "member-a",
  "payee": { "member": "member-a", "address": "path:4a91c2f7e8d3" },
  "amount": null,
  "accepts": [
    {
      "rail": "book",
      "asset_type": "fiat",
      "asset_code": "XOF",
      "limits": {
        "min_single": { "value": "1000", "asset_type": "fiat", "asset_code": "XOF" },
        "max_single": { "value": "50000", "asset_type": "fiat", "asset_code": "XOF" }
      },
      "fees": []
    }
  ],
  "status": "created",
  "settled_by": [],
  "expires_at": "2026-10-10T10:00:00Z",
  "grammar": 2
}

Rules

FieldRule
`accepts[].limits`Optional, and only when `amount` is `null`. `min_single`, `max_single`, each an Amount in the capability's asset, as in PIP-0008. Bounds are inclusive.
Against an addressThe request's limits lie inside those of the entry in the standing intent named by `intent_version`. A bound the request leaves out is copied from the intent. A request tightens, never widens.
Fixed `amount``limits` is absent. The amount sent on each capability — `amount`, or the entry's `quote.amount` — lies within the intent's limits for that capability, or the request is not issued.

Payment

  • A wallet does not send, on an entry, an amount outside its limits.
  • A payment instruction (PIP-0009) for an open request or an address carries the limits of the entry in force, and null when amount is fixed.
  • An open request moves to paid on its first settled receipt whose received meets the min_single of the entry in the same asset. A receipt below it is listed in settled_by and leaves the request created. Above max_single follows the rule for an excess in PIP-0010: the request moves to paid, refund is reserved.

What this is not

Display. Limits bound what may be paid, so they are terms, signed and enforced. How the amount is shown is PIP-0016.

Platform bounds. Bounds an operator applies on its own platform are outside the protocol. The operator publishes their intersection with its customer's bounds, here or in the standing intent.

Compatibility

Additive. Requests without limits read as before. The payment instruction gains limits, null unless an open amount has them. Requests issued before this PIP are served as signed.