Skip to main content

PayTo URI Scheme

Status: Draft

Informational specification describing how the Core ecosystem SHOULD use the RFC 8905 PayTo URI scheme for linking to payment targets on Core, and how wallets/SDKs SHOULD parse, validate, and act on those URIs.

Abstract

This CIP documents the adoption of the IETF PayTo URI scheme for Core. A PayTo URI always identifies the target of a payment and encodes a payment target type, a target identifier, and optional parameters like amount or message. We define Core-specific conventions so that wallets and applications can interoperate reliably across the ecosystem. (RFC Editor)

Motivation

Users and applications benefit from a common, linkable payment format that works across wallets, websites, QR codes, and desktop/mobile platforms. PayTo is a standardized URI scheme already used for bank accounts and cryptocurrency addresses. Standardizing Core usage enables:

  • clickable "Pay via XCB" links (XCB is the Core target type),
  • QR codes that launch Core wallets with prefilled details,
  • safer parsing and confirmation UX,
  • and long-term interoperability with other payment systems using the same URI scheme. (RFC Editor)

Specification

General 'PayTo' syntax (by reference)

Core adopts the generic PayTo syntax and semantics from RFC 8905 (Sections 2–3, 5). In short:

payto:// authority / path ? options

Where the authority is the payment target type, the path encodes the target identifier, and options include amount, receiver-name, sender-name, message, and instruction. (RFC Editor)

Core target type

  • Target type name: xcb for Mainnet, xab for Testnet, xce for Enterprise Network.
  • Path: an ICAN account address, cb… for Mainnet, ab… for Testnet, ce… for Enterprise Network.
  • Semantics: native CORE coin transfers to the address given in path.

Options

Core wallets and SDKs MUST support the generic options from RFC 8905: amount, etc. (RFC Editor)

amount

RFC 8905 defines:

amount = currency ":" unit [ "." fraction ]

with the constraints: unit < 2^53 and at most 8 fractional digits. (RFC Editor)

If no currency is specified, the default is CORE main unit.

Recommendations:

  • For native amounts, use amounts without currency and : colon. For example, amount=1 is 1 CORE.
  • For contract-based amounts, the amount is prefixed with contract address or contract ticker (for well-known contracts defined by application), divided by : colon. For example, amount=ctn:1 is 1 CTN.
  • If you want to keep just currency without amount, keep : colon typed to avoid confusion. For example, amount=ctn: is CTN currency with custom amount.

Examples

  • Human-friendly in CORE: payto://xcb/cb…?amount=1.25
  • Payment with CTN: payto://xcb/cb…?amount=ctn:1.14
  • Wallets SHOULD register PayTo handlers on supported platforms to open URIs.
  • QR codes SHOULD embed the full payto:// URI.
  • If multiple wallets are installed, the user SHOULD be able to choose which wallet to launch. (RFC Editor)

Rationale

  • Reuse of an IETF-standard URI decouples Core from vendor-specific deep link formats and eases multi-wallet support.
  • Keeping token/contract semantics out of scope avoids fragmentation; native coin payments can adopt immediately.

Backwards Compatibility

This proposal is non-breaking. It does not modify Core consensus or transaction formats. Wallets without PayTo handling remain functional; links simply won’t auto-open those apps.

Security Considerations

  • Wallets MUST require explicit user confirmation before sending and MUST take measures against clickjacking.
  • URIs received over unauthenticated channels might target the wrong account; wallets SHOULD display the full address and take care with homographs in labels/messages.
  • Avoid collecting unnecessary PII from sender-name/receiver-name fields; store only what is needed for receipts. (RFC Editor)

References

  • RFC 8905: The ‘payto’ URI Scheme for Payments — RFC Editor (syntax, semantics, options). (RFC Editor)
  • Core PayTo scheme documentation — core-laboratories/payto (implementation guidance and examples). (GitHub)
  • PayTo link generator — PayTo.Money

Copyright and related rights waived via CC0.