Quick start
Embed live availability on your tour pages in three steps. Total time: about two minutes.
Create your widget API key
Sign in at admin.monumentpass.com. On first sign-in we route you through /welcome; one click generates a default widget key locked to your domains.
Need additional keys later? Manage them at admin.monumentpass.com/keys — keys can be server (unrestricted) or widget (origin-locked). Use widget keys for in-browser embeds.
Drop the snippet on your tour page
Paste this just before the closing </body> tag. Replace data-circuit with the slugs for the tour you're embedding on (e.g. clasica for Machu Picchu's Classic Route).
<script src="https://monumentpass.com/widget.js" data-api-key="mp_live_w_xxxx_yyyy" data-circuit="clasica" defer ></script>
Multi-circuit pages? Comma-separate slugs: data-circuit="clasica,tinferior". The widget renders inline where the script tag sits, inside its own Shadow DOM so your site's CSS can't bleed in.
(Optional) Map URLs to circuits
For sites with many tour pages, register your URLs in admin.monumentpass.com/tours. The widget then auto-resolves circuits from window.location.href — you don't need data-circuit in every embed.
<script src="https://monumentpass.com/widget.js" data-api-key="mp_live_w_xxxx_yyyy" defer ></script>
Reference
data-* attributes
| Attribute | Required | Description |
|---|---|---|
| data-api-key | required | Your widget key (mp_live_w_…). |
| data-circuit | optional | Comma-separated circuit slugs. Omit if you've registered the URL in /tours. |
| data-lang | optional | Forces the widget UI language: es | en | pt-br. Auto-detected from URL by default. |
| data-show-title | optional | "true" to render the widget title row. Off by default. |
| data-show-circuit | optional | "true" to render the circuit name row. |
| data-day-stepper | optional | "true" to add ‹/› arrows next to the date button. |
| data-allowed-domains | optional | Comma-separated domain allow-list. Wildcard via *.example.com. |
| data-max-width | optional | CSS width override (default 100%). |
Limits
Each plan has a per-minute burst (60 / 600 / 6000 req·min) and a monthly page-views cap. The widget self-rate-limits via localStorage so SPA navigations don't double-count. See pricing for the table.