Admin portal #

The admin portal is release-pinned because Bitcoin operators care about exact bytes and checksums. Use the generated release docs for copy-paste config:

@qpayd/admin is a browser-only UI that talks directly to the qpayd admin API. Configure the qpayd base URL and store id when mounting it; the login form asks for the store API token.

<main id="qpayd-admin"></main>
<script type="module">
  import { mountQPaydAdmin } from "@qpayd/admin";

  mountQPaydAdmin("#qpayd-admin", {
    baseUrl: "https://pay.example.com",
    storeId: "main"
  });
</script>

Set admin_allowed_origins for the store when hosting the admin panel on a different browser origin than the API:

[[stores]]
id = "main"
admin_allowed_origins = ["https://admin.example.com"]

qpayd can serve a minimal /admin bootstrap page that loads a pinned admin asset. The daemon does not bundle the admin UI. Use the generated release doc above for the exact asset_source and asset_integrity values.

[server.admin]
enabled = true
store_id = "main"
asset_source = "https://cdn.jsdelivr.net/npm/@qpayd/admin@VERSION/src/index.js"
asset_integrity = "sha384-..."

Remote admin assets require asset_integrity and must use https.