Developer docs

Embed Inboard in a minute.

One script tag, one embed key, and Inboard renders the right install template for whichever platform your customer lands on. Here's everything you can configure.

Getting started

Quick start

Add the Inboard widget to any page with a single script tag. Replace YOUR_EMBED_KEY with the key from your project settings.

HTML
<script
  src="https://app.inboard.dev/widget/inboard-widget.js"
  data-embed-key="YOUR_EMBED_KEY"
  async
></script>

The widget renders inside a container with the class .inboard-widget. It auto-detects the user's platform and shows the appropriate install template.

To target a specific install template, add the data-guide-slug attribute:

HTML
<script
  src="https://app.inboard.dev/widget/inboard-widget.js"
  data-embed-key="YOUR_EMBED_KEY"
  data-guide-slug="getting-started"
  async
></script>

Configure

Configuration

Configure the widget declaratively with data attributes on the script tag, or programmatically via Inboard.init().

Data attributes

AttributeDescriptionExample
data-embed-keyYour project embed key (required)abc123
data-guide-slugShow a specific install template by sluggetting-started
data-platformPre-select a platformwordpress
data-inboard-localeForce a locale for translationses
data-inboard-varsPass variables as JSON{"apiKey":"sk-..."}
data-api-urlOverride the API base URLhttps://your-api.com

Programmatic init

Use Inboard.init() to configure the widget after the script loads:

JavaScript
Inboard.init({
  vars: { apiKey: "sk-your-key", projectId: "proj_123" },
  platform: "shopify",
  locale: "fr",
  styles: { primaryColor: "#7c3aed" }
});

Configure

Variables

Pass dynamic values into install templates — API keys, project IDs, custom domains. Define variables in the dashboard, then pass them when embedding.

Via data attribute

HTML
<script
  src=".../inboard-widget.js"
  data-embed-key="YOUR_KEY"
  data-inboard-vars='{"apiKey":"sk-live-abc","domain":"app.example.com"}'
  async
></script>

Via JavaScript

JavaScript
Inboard.init({
  vars: {
    apiKey: "sk-live-abc",
    domain: "app.example.com"
  }
});

Required variables that aren't provided will show an error in the widget. Variables with default values in the dashboard will use those as fallbacks.

Customize

Custom styling

The widget inherits your project's theme from the dashboard — colours, radius, layout. For additional customisation, use CSS overrides or the programmatic styles API.

CSS overrides

Target the widget container and its child elements:

CSS
.inboard-widget .ib-container {
  font-family: "Inter", sans-serif;
  --ib-primary: #7c3aed;
}

.inboard-widget .ib-step-content {
  font-size: 15px;
  line-height: 1.7;
}

Programmatic styles

JavaScript
Inboard.init({
  styles: {
    primaryColor: "#7c3aed",
    borderRadius: "12px",
    fontFamily: "Inter, sans-serif"
  }
});

Dashboard settings

Most styling is configured in your project's Widget Configuration panel: theme (light / dark / auto), primary colour, container style (card / flat / bordered), layout (stepper / tabs / sidebar / accordion), and custom CSS.

Reference

API reference

The widget uses a public REST API. You can also call it directly for custom integrations.

GET/api/v1/guides/:embedKey

Returns all published install templates for a project.

Shell
curl https://api.inboard.dev/v1/guides/YOUR_EMBED_KEY

Query parameters

ParameterDescription
platformFilter by platform slug or ID
localeReturn translated content for this locale
draftInclude draft versions (true / false)
POST/api/v1/events

Track installation events (views, step completions, verifications).

JavaScript
fetch("/api/v1/events", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    embedKey: "YOUR_EMBED_KEY",
    sessionId: "session_abc",
    eventType: "step_complete",
    installTemplateId: "tpl_123",
    stepId: "step_456",
    metadata: {}
  })
});
POST/api/v1/verify

Run verification checks for a completed installation step.

Rate limits

Public endpoints are rate-limited per client IP. Exceeded requests return 429 Too Many Requests with a Retry-After header. Authenticated dashboard and admin endpoints have their own per-account limits.

EndpointLimitNotes
GET /v1/guides/:embedKey60 / min / IPWidget render lookups and direct integrations
POST /v1/events30 / min / IPInstaller step / view events
POST /v1/verify10 / min / IPVerification checks
POST /v1/installs5 / min / IPCreate install session
POST /v1/intelligence10 / min / IPSite intelligence lookups

New SaaS accounts publishing snippets are additionally subject to a per-account publish throttle for their first 30 days. Limits are configurable and may change without notice; treat the values above as a current guide, not a contract.

Reference

Security

Inboard enforces domain whitelisting on all API endpoints. Configure allowed domains in your project settings to prevent unauthorised access.

Domain whitelisting

In the dashboard, go to Settings → Domains and add the domains where your widget will be embedded. Only requests from whitelisted origins will receive install template data.

  • Wildcards supported: *.example.com
  • Localhost is allowed by default in development
  • API events and verification endpoints enforce the same whitelist

Embed keys

Embed keys are project-scoped and read-only — they can fetch published install templates but cannot modify data. Rotate keys in the dashboard if needed.

Something missing?

We ship docs alongside features. If an endpoint or option isn't listed here, email us and we'll either clarify it or add it.

Email us

Start free

Your next install actually finishes.

Drop the widget on your dashboard, declare your requirements, and stop losing users to “paste this in your header.”

  • Free for 50 installs/mo
  • No credit card required
  • Ship your first install template in a day