Inputs

Resolved callback: https://app.example.com/auth/receiz/callback

Kit Modules
Public links
Live Twin: https://receiz.com/world/embed/your_receiz_username
Scheduler: https://receiz.com/calendar/your_receiz_username
Payments: https://receiz.com/payments/your_receiz_username
Action card: https://receiz.com/action-card/your_receiz_username
Starter HTML

Copy this starter and trim it down to the surfaces you want to ship first.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Receiz Site Kit</title>
  <style>
    body { font-family: "Georgia", serif; margin: 0; background: #eef3ff; color: #0f1830; }
    main { max-width: 1080px; margin: 0 auto; padding: 32px 16px 60px; }
    .kit-grid { display: grid; gap: 20px; }
    .kit-card { border: 1px solid #d4e0f6; border-radius: 24px; background: rgba(255,255,255,0.92); padding: 20px; }
    h1 { margin: 0 0 12px; font-size: 42px; }
    h2 { margin: 0 0 12px; font-size: 20px; }
  </style>
</head>
<body>
  <main>
    <h1>Receiz Site Kit</h1>
    <p>Callback URL: https://app.example.com/auth/receiz/callback</p>
    <div class="kit-grid">
  <section class="kit-card">
    <h2>Login</h2>
    <div
  class="receiz-login-embed"
  data-username="your_receiz_username"
  data-redirect-path="/auth/receiz/callback"
></div>
<script src="https://receiz.com/receiz-login-embed.js" async></script>
  </section>

  <section class="kit-card">
    <h2>Verify</h2>
    <input id="receiz-file" type="file" />
    <button id="receiz-verify">Verify file</button>
    <pre id="receiz-result"></pre>
  </section>

  <section class="kit-card">
    <h2>Live Twin</h2>
    <iframe
  src="https://receiz.com/world/embed/your_receiz_username"
  title="Receiz Live Twin"
  width="100%"
  height="780"
  style="border:1px solid #d2def5;border-radius:24px;overflow:hidden;background:#f6f9ff;"
  loading="lazy"
></iframe>
  </section>

  <section class="kit-card">
    <h2>Schedule</h2>
    <iframe
  src="https://receiz.com/calendar/your_receiz_username"
  title="Receiz Scheduler"
  width="100%"
  height="860"
  style="border:1px solid #d2def5;border-radius:20px;overflow:hidden;"
  loading="lazy"
></iframe>
  </section>

  <section class="kit-card">
    <h2>Pay</h2>
    <div class="receiz-pay-embed" data-username="your_receiz_username"></div>
<script src="https://receiz.com/receiz-pay-embed.js" async></script>
  </section>

  <section class="kit-card">
    <h2>Action Card</h2>
    <iframe
  src="https://receiz.com/action-card/your_receiz_username"
  title="Receiz Action Card"
  width="100%"
  height="900"
  style="border:1px solid #d2def5;border-radius:24px;overflow:hidden;"
  loading="lazy"
></iframe>
  </section>
    </div>
  </main>

  <script>

async function verifyReceiz(file) {
  const form = new FormData();
  form.set("file", file);
  const response = await fetch("https://receiz.com/api/document-verify", { method: "POST", body: form });
  const payload = await response.json();
  if (!response.ok) throw new Error(payload?.error || "verify_failed");
  return payload;
}

document.getElementById("receiz-verify")?.addEventListener("click", async () => {
  const input = document.getElementById("receiz-file");
  const output = document.getElementById("receiz-result");
  const file = input instanceof HTMLInputElement ? input.files?.[0] ?? null : null;
  if (!(output instanceof HTMLElement) || !file) return;
  output.textContent = "Verifying...";
  try {
    const payload = await verifyReceiz(file);
    output.textContent = JSON.stringify(payload, null, 2);
  } catch (error) {
    output.textContent = String(error);
  }
});
  </script>
</body>
</html>
Routes In Play
/api/connect/login/bootstrap/[username]
GET · No Auth

Username-based login bootstrap surface returning OIDC launch configuration for copy-paste login embeds.

/api/oidc/authorize
GET · No Auth

OIDC Authorization Code + PKCE authorization endpoint.

/api/oidc/token
POST · OAuth Client Auth

OIDC token exchange and refresh token rotation endpoint.

/api/oidc/userinfo
GET, POST · Bearer Access Token

OpenID user claims endpoint scoped by issued access tokens.

/api/document-seal
POST · No Auth

Seal uploaded files into portable Receiz artifacts.

/api/document-verify
POST · No Auth

Verify sealed files and package artifacts deterministically.

/api/verify
POST · No Auth

Verify claim coordinates and return canonical verdict envelopes.

/api/payments/embed/checkout
POST · No Auth

Create embedded or hosted checkout sessions that settle directly to a target Receiz username wallet.

/api/payments/embed/note-claim
POST · No Auth

Accept uploaded note artifacts (or note tokens) and claim value directly into a target Receiz username wallet.

/api/world/profile/[username]
GET · No Auth

Load a profile's Live Twin surface, public world profile, availability preview, and visitor thread context.

/api/world/profile/[username]/stream
POST · No Auth

Stream Live Twin updates for live retrieval, message continuity, and incremental public profile responses.

/api/world/profile/[username]
POST · No Auth

Send a visitor message to a Live Twin or request booking through the public profile surface, subject to policy and rate limits.