Documentation

Embed

Embed your Boarbs feedback board inside your application via iframe.

Embed

Embed your feedback board inside your app as an iframe. Users can vote, comment, and submit requests without leaving your product.

How It Works

  1. Your backend creates an embed session via API (with the user's identity)
  2. The API returns an embed URL with a session token
  3. Your frontend renders that URL in an <iframe>

1. Create an API Key

Go to Settings → API Keys, create a read-write key, and add it to your backend environment:

BOARBS_API_KEY=sk_...
BOARBS_BOARD_ID=your_board_id

2. Create an Embed Session (Backend)

// Your backend — e.g. Express, Next.js API route, etc.
const response = await fetch('https://app.boarbs.com/api/embed/sessions', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.BOARBS_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    boardId: process.env.BOARBS_BOARD_ID,
    userId: user.id,          // Your user's ID
    email: user.email,
    firstName: user.firstName, // optional
    lastName: user.lastName,   // optional
    avatarUrl: user.avatarUrl, // optional
    plan: user.plan,           // optional — hides branding on paid plans
    expiresInSeconds: 604800,  // optional — default 30 days
  }),
});

const { embedUrl } = await response.json();

Session Fields

FieldRequiredDescription
boardIdYesBoard to embed
userIdYesYour user's unique ID
emailYesUser's email
firstNameNoDisplay name
lastNameNoDisplay name
avatarUrlNoAvatar image URL
planNoUser's plan — hides "Powered by Boarbs" on paid plans
metadataNoArbitrary key-value data for segmentation
expiresInSecondsNoSession TTL (default: 30 days)

3. Render the Iframe (Frontend)

<iframe
  src="EMBED_URL_FROM_BACKEND"
  width="100%"
  height="700"
  frameborder="0"
  title="Feedback"
/>

React Example

'use client';
import { useEffect, useState } from 'react';

export function FeedbackEmbed() {
  const [url, setUrl] = useState<string | null>(null);

  useEffect(() => {
    fetch('/api/feedback-embed-url')
      .then(r => r.json())
      .then(d => setUrl(d.embedUrl));
  }, []);

  if (!url) return <div>Loading...</div>;

  return (
    <iframe src={url} width="100%" height="700" frameBorder="0" title="Feedback" />
  );
}

URL Parameters

Filter the embedded board with query parameters on the embed URL:

ParameterExampleDescription
statusplannedFilter by status
sortBymostVotedSort order
searchdark modeSearch query
tagsbug,featureComma-separated tags
https://yourorg.boarbs.com/embed?token=TOKEN&status=planned&sortBy=mostVoted

Security

  • Never expose your API key in client-side code — always create sessions from your backend
  • Treat session tokens like credentials — transmit only over HTTPS
  • Set appropriate expiresInSeconds for your use case

Next Steps