Extension specification.
This directory documents what OpenRSL adds on top of RSL: extension namespaces, JWT claim extensions, payment-backend bindings, and conformance criteria for OpenRSL implementations. RSL itself is not redrafted here.
Schemas use date-pinned versions (e.g. 2026-05-06), compared lexicographically. The current version is 2026-05-06.
rsl.xml with OpenRSL extensions.
A valid OpenRSL rsl.xml declares the openrsl namespace on the root element and adds an openrsl:binding element inside each paid <payment> block. Free content uses <payment type="free"/> with no binding.
<?xml version="1.0" encoding="UTF-8"?> <rsl xmlns="https://rslstandard.org/rsl" xmlns:openrsl="https://openrsl.org/ns/extensions"> <content url="/" server="https://olp.example.com"> <license> <permits type="usage">ai-index</permits> <prohibits type="usage">ai-train</prohibits> <payment type="crawl"> <amount currency="USD">0.001</amount> <openrsl:binding scheme="pds" ref="offer-abc-123"/> </payment> </license> </content> <content url="/research/" server="https://olp.example.com"> <license> <permits type="usage">ai-train</permits> <payment type="training"> <amount currency="USD">10.00</amount> <openrsl:binding scheme="pds" ref="offer-xyz-789"/> </payment> </license> </content> <content url="/open/"> <license> <permits type="usage">all</permits> <payment type="free"/> </license> </content> </rsl>
The binding element.
The openrsl:binding element is the bridge between an RSL license rule and a payment-backend instrument. RSL defines the rule shape; this element names what the OLP server settles against.
pds is the only defined scheme in OpenRSL v1. The ref value is opaque: the OLP server interprets it against the configured payment backend.
The binding claim in the JWT token is unprefixed (not openrsl_binding) because it is scheme-discriminated. All other OpenRSL extension claims use the openrsl_ prefix.
Payment backend identifier. Only defined value in v1: "pds"
Opaque reference to the payment-backend instrument. Interpreted by the OLP server.
<openrsl:binding scheme="pds" ref="offer-abc-123" />
OLP token JWT claims.
RSL treats the OLP access token as opaque. OpenRSL defines the claim structure inside the JWS. Standard JWT claims are unprefixed per RFC 7519. OpenRSL extension claims use the openrsl_ prefix, except binding which is unprefixed because it is scheme-discriminated.
The Python and TypeScript libraries do not verify tokens: they request and present them as opaque strings. Token verification is the OLP server’s responsibility. See spec/jwt-versions.md for the JWT library registry.
Subject: wallet or buyer identifier
Issuer: OLP server URL
Audience: publisher or asset host
Issued at (Unix timestamp)
Expiration (Unix timestamp)
JWT ID: unique token identifier
Asset URL this token authorizes access to
RSL payment type value for this token. See term classes below.
Identifier for the matched RSL license rule
Transaction ID cross-referencing audit events (stdout JSON-line)
Payment-backend binding. Required for all paid term classes. Absent when openrsl_term_class is free.
{ "sub": "wallet-user-001", "iss": "https://olp.example.com", "aud": "https://publisher.example.com", "iat": 1746576000, "exp": 1746662400, "jti": "tok-abc-123", "openrsl_asset": "https://publisher.example.com/article/1", "openrsl_term_class": "crawl", "openrsl_license_id": "license-rule-001", "openrsl_txid": "txn-def-456", "binding": { "scheme": "pds", "ref": "offer-abc-123" } }
{ "sub": "wallet-user-002", "iss": "https://olp.example.com", "exp": 1746662400, "jti": "tok-free-001", "openrsl_asset": "https://publisher.example.com/open/article/1", "openrsl_term_class": "free", "openrsl_license_id": "license-rule-open", "openrsl_txid": "txn-free-001" // no binding claim: free term class }
rsl.xml extension schema.
Validates the JSON projection of OpenRSL extension-carrying fields in an rsl.xml document. RSL elements (content, license, permits, prohibits, payment) are RSL-defined. This schema covers OpenRSL additions only.
Schema version. Must be "2026-05-06" for this version.
RSL payment type. Required-explicit; OLP server returns 422 if absent. Values: purchase, subscription, training, crawl, use, contribution, attribution, free.
Required for all paid term classes. Must conform to binding.schema.json. Absent when termClass is free.
Term class values.
Standard web crawl or indexing.
Use for training a machine learning model.
General use, including inference and retrieval.
One-time purchase of access to a specific asset.
Recurring access under a subscription arrangement.
Use requiring attribution in the output.
Use as a contribution to a shared resource.
No payment required. OLP server issues a ticket with no settlement call. No binding claim in token.
Date-pinned schemas.
Schema versions are date-pinned (e.g. 2026-05-06) and compared lexicographically. Adding a field is an additive change requiring a coordinated version bump across every library and the OLP server on the same release day.
Schema files live under spec/extensions/ in a directory named by their version. Changes are recorded in spec/CHANGELOG.md.