# Volzet > Multi-tenant restaurant reservation SaaS (Dutch market). Embeddable booking > widget, hosted booking pages, staff/owner dashboard. ## Integrating the booking widget - Floating button: - Inline form: add
anywhere on the page (same script tag). - Custom trigger: any element with data-volzet-action="open". - Events: window "volzet:booking:created" CustomEvent; JS API: window.Volzet.open(). - The embedding domain must be registered in the restaurant's dashboard (CORS). - Hosted page (no embed needed): https://book.volzet.nl/{slug} - Self-serve signup: create an account at https://app.volzet.nl/signup (verify email, 30-day trial, then EUR 39/month excl. BTW, monthly-cancellable). Manual provisioning is still available on request: info@volzet.nl. - MCP server for agents: https://mcp.volzet.nl/mcp — tools: start_signup, resend_verification, get_signup_status, get_embed_snippet, start_domain_claim, verify_domain. - Verification mail: get_signup_status also returns verification_email_status — the delivery state of the most recent verification email for that owner at that restaurant, or null when none was ever sent (most often a Google one-click signup, which sends none). "queued", "sent", "delivered" and "delayed" all mean it is on its way or already there — keep waiting, do not resend ("queued" flips to "sent" within seconds). On "bounced" (the address does not exist or refuses) and on "complained" (the mail DID arrive, but the recipient reported it as spam — re-sending then harms deliverability) do not call resend_verification: the address cannot be changed through the MCP server, so tell the human owner. On "failed" one resend is worth trying. "suppressed" does not occur on this field in practice (platform mail is exempt from the daily quota that writes it); if you ever see it, hand over to the human owner. - Token lifetime: the onboarding token stops working once the owner of that account signs in to the dashboard (password, password reset, or "Doorgaan met Google"). Every call then answers HTTP 401 with code not_authenticated, byte-identical to an expired or invalid token, so it cannot be told apart from one. That is expected and final: do not retry, and do not call start_signup again (the address is already registered, which answers 400) — the owner continues in the console. Signing in with Google also completes verification, so on that route get_signup_status may never report email_verified true. ## Docs - Integration guide: https://volzet.nl/docs