licence api

give your software on Giver.EU as a limited run of licences. every licence is an edition token (Token-2022, fixed supply) and, if you want, also a classic licence key. your program can check either. no accounts, no SDK, two GET requests.

the model

a licence key is bound to the wallet that holds its edition token. the key verifies as valid only while that wallet still owns the token. when the token is exchanged or passed on, the old key stops verifying and the new owner presses claim my licence key on the item page to re-bind it. scarcity is enforced on-chain, transferability comes for free, and you never run a licence server.

1 · verify a licence key

GET https://giver.eu/api/license/{listing_id}/key/{key}

{ "valid": true, "edition_no": 3, "holder": "7fye…qEEQ", "listing_id": 42, "title": "…" }
{ "valid": false, "reason": "unknown key" | "key not redeemed yet" | "the holder no longer owns the edition token" }

2 · token-gate by wallet

for web apps and tools that already let users connect a solana wallet (have them sign a message to prove it is theirs):

GET https://giver.eu/api/license/{listing_id}/wallet/{wallet}

{ "valid": true, "editions_held": 1, "mint": "…", "listing_id": 42 }

examples

# shell
curl -s https://giver.eu/api/license/42/key/GIVR-7FX5X-H7NMG-3G45F-FG4KK | jq .valid

# python
import requests
ok = requests.get(f"https://giver.eu/api/license/42/key/{key}", timeout=10).json()["valid"]

// javascript
const { valid } = await (await fetch(`https://giver.eu/api/license/42/key/${key}`)).json();

tip: cache a positive answer for a few days so your software also works offline.

embed knots on your website

show the newest knots, a giver's shop or a hand-picked selection on any page. public data only, no cookies, readable from any origin, cached for two minutes.

<!-- script widget: renders in a shadow root, follows the width of its container -->
<div data-giver-knots data-limit="6" data-theme="kyberia"></div>
<script src="https://giver.eu/embed.js" async></script>

<!-- or an iframe, no script at all -->
<iframe src="https://giver.eu/api/embed/frame?limit=6&theme=kyberia"
        style="width:100%;height:520px;border:0" loading="lazy" title="Giver.EU knots"></iframe>

# or the data, for a server-side include (php, perl, …) or your own rendering
GET https://giver.eu/api/embed/knots?limit=6
{ "count": 6, "knots": [ { "id": 5, "title": "…", "teaser": "…", "url": "https://giver.eu/k/5-…",
  "image": "https://giver.eu/imgs/….jpg", "price": 230, "currency": "GANESHA", "editions_left": 100,
  "editions_total": 100, "kind": "digital", "giver": { "alias": "DDH", "wallet": "…", "url": "…" }, … } ] }

# rss feed of the newest knots
GET https://giver.eu/api/embed/knots.rss

parameters (as data-* attributes or query string): limit 1–24 · kind digital | physical · giver wallet address · q search · sort new | trending | views · ids e.g. 5,4,2 (these knots, in this order) · theme kyberia | dark | light (widget also: inherit) · layout grid | list · data-title heading of the widget (empty hides it).

protocol

the full construction (HPKE envelopes, escrow state machine, security analysis) is described in the whitepaper v1.0 by Prospero, Guild of Exchange & Transport of Kyberia.

for givers

pick licence keys or software on the give page. paste your own keys (one per line: their count becomes the number of editions) or let Giver.EU generate GIVR-XXXXX-XXXXX-XXXXX-XXXXX keys. export all keys with their edition number and holder as csv from your shop.