Jat
REFERENCE

The seal:pay link format

A payment link is a URI that carries the two public keys of a Jat identity. The scheme is stable, so links keep working across clients.

Shape

seal:pay:<payload>

payload = base64url( spend_pub (32 bytes) || scan_pub (32 bytes) )

The payload is the recipient's public spend key followed by their public scan key, both 32-byte Ed25519 points, concatenated and encoded with URL-safe base64 and no padding. There are no secrets in the link.

Note
The seal:pay: scheme is the on-chain and client contract. The brand name changed but the scheme did not, so existing links and the deployed program stay compatible.

Reading a link

  1. Strip the seal:pay: prefix.
  2. base64url-decode the payload to 64 bytes.
  3. Bytes 0 to 31 are the spend public key; bytes 32 to 63 are the scan public key.

Using a link

A payer derives a one-time address from these two keys per payment, as described in stealth addresses. A recipient scans with the matching private scan key and spends with the matching private spend key, covered in keys and the scan model.

Embedding

The same string is what you pass to the no-code widget through the data-seal-pay attribute. See the embed page.