# HTMLvault — Full Reference > The IT-approved HTML sharing platform: generate HTML (proposals, dashboards, lead lists, landing pages, training material) and get back a secure, trackable, optionally white-labeled link. This is the extended companion to https://htmlvault.dev/llms.txt. It inlines the full tier comparison, the complete REST API and MCP tool reference, and integration setup, so a model can answer detailed questions without fetching additional pages. ## What HTMLvault does Many tools now generate HTML — AI assistants (Claude, ChatGPT, Gemini), automation platforms (Zapier, Make, n8n), and data tools (Clay) — but there is no safe, branded, measurable way to share that output. HTMLvault is that layer. A user (or their AI tool) sends HTML; HTMLvault stores it, scans it for PII and secrets, returns a clean shareable link, and tracks every interaction. Core guarantees on every link: scanned for PII/secrets before publish, never indexed by search engines (X-Robots-Tag: noindex on viewer routes), configurable auto-expiry, configurable data-retention windows (down to auto-delete), and optional password protection. Cost model: HTMLvault funds zero AI tokens. The default scanner is regex-based and runs both client-side (pre-upload warning) and server-side. Pro+ users connect their own Anthropic/OpenAI/Google API key for an AI scan layer on top of the regex scanner. HTMLvault never pays for tokens. ## Tier comparison ### Free — $0 - links per month: 50 - link expiry: 7 days - data retention: 90 days - channels per link: 3 - Regex PII scanning & redaction - Basic view count - Never indexed by search engines - Delete links on demand ### Pro — $12/mo ($10/mo billed annually) - links per month: unlimited - link expiry: 1 hr – never (configurable) - data retention: auto-delete – 2 years (configurable) - channels per link: unlimited - webhooks max: 5 - Full link analytics — views, unique visitors, repeat visits - 100K tracked views/mo included — additional views via prepaid blocks ($10 per 100K, $50 per 1M, non-expiring) - Geo, device, scroll depth & time-on-page - UTM & referrer tracking, server-side channel attribution - Inject GA4, Meta Pixel, or any tracking code - BYOK AI PII scanning (OpenAI, Anthropic, Gemini) - REST API + MCP server - Webhooks for real-time link events - Branded subdomain hosting (you.hvlt.io) - 1 white-label custom domain included, then $10/mo or $100/yr each - Password-protected links - Edit HTML after publishing ### Enterprise — $1,199/mo ($999/mo billed annually) - Everything in Pro - Unlimited seats — no per-user fees, ever - Self-serve card checkout — no trial, no sales call - SSO / SAML — self-serve setup via WorkOS Admin Portal (Okta, Azure AD, Google & more) - 1M tracked views/mo included — same prepaid blocks for overage ($10 per 100K, $50 per 1M) - 3 white-label domains included, then $10/mo or $100/yr each - Team dashboard, admin controls & audit logs - Custom AI scan policies per team - Org-level API keys - Priority support & SLA - Invoicing (annual plans) ## Native analytics Tracked automatically on every Pro/Enterprise link: total views, unique visitors, repeat visits, geo (country/city), device & browser, referrer source, scroll depth, time-on-page, channel attribution (server-side UTM). Users can additionally inject their own tracking codes (Google Analytics 4, Meta Pixel, or any custom script) into the link viewer. ## PII & secret scanning The default scanner is regex-based (zero API tokens) and detects: ssn, financial, api_key, passport, address, person, dob, email, phone. It runs client-side before upload (a warning) and server-side at publish (enforced). Pro+ users can layer BYOK AI scanning on top, with selectable sensitivity (strict / balanced / permissive). Enterprise admins can set org-level scan policies with an immutable, append-only audit log and three escalation tiers (allow / warn / block). ## Integrations HTMLvault is integration-first. Any tool that can make an authenticated HTTP request can create links. Integration names below describe interoperability only and do not imply partnership or endorsement. - Claude (MCP + project instructions) - ChatGPT (Custom GPT action schema) - Zapier - Clay - Gemini - any tool that can call a REST API ### Authentication All API and MCP requests authenticate with a bearer token in the Authorization header: ``` Authorization: Bearer htmlvault_xxxxxxxxxxxxxxxxxxxxxxxx ``` Personal API keys are available to Pro and Enterprise users; org-level keys are available to Enterprise admins. Keys are generated and managed at https://htmlvault.dev/connect. ## REST API reference Base URL: https://htmlvault.dev ### POST /api/v1/links — create a link Publishes HTML and returns a shareable, tracked link. Re-runs PII scanning; sensitive content is blocked. Request body (JSON): - html (string, required) — complete self-contained HTML with inline CSS - title (string) — short descriptive title shown in the sender's dashboard - expiresIn (string, optional) — one of 1h, 24h, 3d, 7d, 30d; omit for no expiry - domain (string, optional) — serve this link from one of your verified custom domains; accepts a domain id or hostname (e.g. links.acme.com). Must be an active domain on your account — returns 400 { "error": "unknown_domain" } otherwise. Omit to inherit your account's default domain. Response (201): { "slug", "url", "created_at" } The returned url reflects the serving domain: the domain you specified, else your account default, else HTMLvault's share domain. ### GET /api/v1/links — list your links Query params: limit (default 20, max 100), offset (default 0). Response (200): { "links": [ { "slug", "url", "title", "created_at", "expires_at", "view_count" } ], "total", "limit", "offset" } ### GET /api/v1/links/{slug} — get one link Response (200): { "slug", "url", "title", "created_at", "expires_at", "view_count", "has_password" }. Returns 404 if not found or not owned. ### PATCH /api/v1/links/{slug} — update HTML Request body: { "html": "string" } (required). Re-runs the PII scan; returns 422 with findings if sensitive data is detected. Response (200): { "slug", "url", "updated_at" } ### DELETE /api/v1/links/{slug} — delete a link Response (200): { "deleted": "slug" }. Returns 404 if not found or already deleted. ### POST /api/v1/links/{slug}/variants — create a channel Creates a clean shareable URL pointing to the parent link's HTML, with UTM attribution stored server-side (no params appear in the URL). At least one of utm_source, utm_medium, or utm_campaign is required. Request body (JSON): - utm_source (string) — e.g. twilio - utm_medium (string) — e.g. sms - utm_campaign (string) — e.g. q3-promo - utm_content (string) — also used as the channel display name in the HTMLvault UI - utm_term (string) — optional audience or persona tag Response (201): { "channel": { "id", "slug", "url", "utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "view_count" } }. Returns 400 if no UTM is provided, 403 if the free-plan channel limit is reached, 404 if the parent link is not found. ## MCP server Endpoint: https://htmlvault.dev/api/mcp (Streamable HTTP, JSON-RPC 2.0). Authenticated with the same bearer key. Tools exposed: - list_links - get_link - create_link - update_link - delete_link - scan_html - get_analytics Tool parameter schemas: - list_links(limit?: int = 20, max 100; cursor?: string; created_after?: ISO8601; created_before?: ISO8601) → { links[], next_cursor, has_more }. Cursor-paginated, newest first. - get_link(slug: string) → link metadata + html_content + url. - get_analytics(slug: string, period?: "7d"|"30d"|"90d"|"all" = "30d") → totals (views, unique_views, repeat_views, bot_views), engagement (avg_time_on_page_seconds, avg_scroll_depth_pct), breakdowns (countries, devices, channels, referrers). Bot traffic excluded from views; reported separately as bot_views. - create_link(html: string [required], title: string [required], expiresIn?: "1h"|"24h"|"3d"|"7d"|"30d"|"never", tracking?: "none", domain?: string) → { slug, url, title }. Runs Safe Browsing + PII policy gates; blocks on unsafe_content or pii_detected (policy=block). - update_link(slug: string, html: string) → { slug, url, updated_at }. Same gates; slug and URL unchanged. - delete_link(slug: string) → { deleted: slug }. Immediate, irreversible hard delete; cascades view records; blocked by legal hold. - scan_html(html: string) → { hasSensitiveData, findings[] }. Regex scan only; never publishes. Auth: Authorization: Bearer (Pro/Enterprise). Org keys act in the org owner's workspace. Per-key rate limit (HTTP 429 with Retry-After on exceed). Full reference: https://htmlvault.dev/docs/mcp ## Webhooks Pro/Enterprise accounts can register up to 5 endpoints (webhook settings screen) for signed, real-time HTTP notifications. Five events fire: - link.created — authenticated uploads (web, REST, or MCP create_link). data: { slug, title, url, created_at } - link.updated — HTML replaced in place (dashboard, REST PATCH, or MCP update_link). data: { slug, title, url, updated_at } - link.viewed — a view of an owned link. data: { slug, view_id, is_unique, visit_number, country, city, browser, os, device_type, referrer } - link.expired — retention cron purged the content. data: { slug, title, reason: "expiry"|"retention", expired_at } - usage.threshold — tracked-view usage crossed the alert threshold (daily cron, once per period). data: { period, tracked, included, blockRemaining, deficit, pct, threshold } Envelope: { id, event, timestamp, data }. The id is a stable UUID (same across retries — dedupe on it). Signing: X-HTMLvault-Signature = hex HMAC-SHA256 of the raw request body, keyed with the per-endpoint secret; verify on raw bytes before parsing with a timing-safe compare, then reject if the envelope timestamp is older than 5 minutes. Also sent: X-HTMLvault-Event and X-HTMLvault-Delivery (fresh UUID per attempt). Delivery: 1 inline attempt + 3 retries (+1m/+15m/+1h), 10s per-attempt timeout, auto-disable after 5 consecutive exhausted deliveries. Full reference: https://htmlvault.dev/docs/webhooks ### Claude Code (one line) ``` claude mcp add --transport http htmlvault https://htmlvault.dev/api/mcp --header "Authorization: Bearer htmlvault_YOUR_KEY" ``` ### Claude Desktop (config) ```json { "mcpServers": { "htmlvault": { "command": "npx", "args": ["-y", "mcp-remote", "https://htmlvault.dev/api/mcp", "--header", "Authorization: Bearer htmlvault_YOUR_KEY"] } } } ``` ## ChatGPT Custom GPT action Import the OpenAPI schema served at the connect page, with bearer auth. Operations: createHTMLvaultLink, listHTMLvaultLinks, getHTMLvaultLink, updateHTMLvaultLink, deleteHTMLvaultLink, createHTMLvaultChannel. Typical instruction: when the user says "create a link," "vault this," or "make this shareable," call createHTMLvaultLink with the HTML and a short title, then return the url. ## White-labeling - **Pro**: branded subdomain (you.hvlt.io) plus 1 full white-label custom domain included; additional domains $10/mo or $100/yr each - **Enterprise**: branded subdomain (you.hvlt.io) plus 3 full white-label custom domains included; additional domains $10/mo or $100/yr each When a link is served from a custom domain, it is fully white-labeled: the URL is on the customer's own hostname and the viewer renders without HTMLvault branding. This matters for both brand consistency and email deliverability — links on the customer's own domain avoid the reputation and spam-filter penalties of a shared third-party domain. ## Who uses it - **Sales / RevOps leaders** — proposals, pricing, demos, slide decks shared as trackable links - **Marketing** — landing pages, email-embeddable links, campaign materials - **Ops** — reports, dashboards, lead lists, internal training material - **IT / Security** — the stakeholder who approves the tool; cares about PII scanning, retention, SSO, audit logs ## Contact - Sales & general: rob@htmlvault.dev - Support: support@htmlvault.dev - Business address: 704 13th St East, Suite 600, Whitefish, MT 59937