What is embed multi-tenancy?

Pass a userId and each embed user gets a private template library, scoped and isolated from other users.

Updated

Give each of your users their own private workspace within your embedded Orshot instance. Users get their own templates, images, videos, fonts, audio and saved colors, and one user can never see or modify another user's.

Benefits#

  • Per-User Isolation: One user cannot see or modify another user's templates or assets
  • Seamless Integration: Pass user info via URL parameters, no additional auth required
  • Automatic Management: Users are created automatically on first visit
  • Plan-Based Limits: Control how many users can store data based on your subscription

How It Works#

  1. Enable Per-User Data & Templates in your embed settings
  2. Pass a unique userId parameter when loading the embed
  3. Users see two sections: "My Templates" (personal) and "Workspace Templates" (shared, unless Can see studio templates is turned off)
  4. All data created by users (templates, uploaded images, videos, audio, fonts, saved colors) is automatically linked to their account
  5. Optionally seed a user's library up front from your backend, see Per-User Brand Assets

Query Parameters#

ParameterRequiredDescription
userIdYesUnique identifier for the user (from your app)
userNameNoDisplay name for the user
userEmailNoEmail address for the user
metadataNoJSON string with custom user data

Basic Usage#

Add the userId parameter to your embed URL:

HTML
<iframe
  src="https://orshot.com/embeds/YOUR_EMBED_ID?userId=user_123"
  title="Orshot Embed"
  width="100%"
  height="700"
  style="border: none;"
  allow="clipboard-write"
></iframe>

With User Details#

Include optional user information:

HTML
<iframe
  src="https://orshot.com/embeds/YOUR_EMBED_ID?userId=user_123&userName=John%20Doe&userEmail=john@example.com"
  title="Orshot Embed"
  width="100%"
  height="700"
  style="border: none;"
  allow="clipboard-write"
></iframe>

With Custom Metadata#

Pass additional data as a JSON string:

JavaScript
const metadata = JSON.stringify({
  plan: "pro",
  company: "Acme Inc",
  role: "designer",
});

const embedUrl = `https://orshot.com/embeds/YOUR_EMBED_ID?userId=user_123&metadata=${encodeURIComponent(
  metadata,
)}`;

Dynamic User Loading (React Example)#

JavaScript
function DesignEditor({ user }) {
  const params = new URLSearchParams({
    userId: user.id,
    userName: user.name,
    userEmail: user.email,
  });

  return (
    <iframe
      src={`https://orshot.com/embeds/YOUR_EMBED_ID?${params}`}
      title="Orshot Embed"
      width="100%"
      height="700"
      style={{ border: "none" }}
      allow="clipboard-write"
    />
  );
}

Important Notes#

  • The userId must be unique per user in your system
  • Templates and assets reference the user by a hashed internal ID, so your original userId never appears on those rows. The original ID is kept on the embed user record and shown to you in the dashboard's user list
  • Without a userId parameter, templates save to the workspace (shared)
  • Users are automatically created on first embed load with a valid userId, or the first time you write an asset or template for them through the API

User Limits#

For plans that support multi-tenancy or per-user data, each plan has a maximum number of embed users. When the limit is reached:

  • New users will see a "User Limit Reached" message and the embed will not load for them
  • Existing users (already created before the limit was hit) will continue to work normally
  • Upgrade your plan to increase the allowed number of embed users

Fetching User Templates via API#

You can retrieve templates for a specific embed user using the Studio Templates API. Pass both embedId and embedUserId parameters to filter templates.

Get User's Templates#

JavaScript
await fetch(
  "https://api.orshot.com/v1/studio/templates/all?embedId=YOUR_EMBED_ID&embedUserId=user_123",
  {
    method: "GET",
    headers: {
      "Content-Type": "application/json",
      Authorization: "Bearer <ORSHOT_API_KEY>",
    },
  },
);

Query Parameters#

ParameterTypeRequiredDescription
embedIdStringYes*Your embed instance ID
embedUserIdStringYes*The user ID (same as userId in embed URL)

*Both parameters are required together for user-specific filtering.

Response#

Returns only templates belonging to that specific user:

JSON
{
  "data": [
    {
      "id": 456,
      "name": "User's Custom Template",
      "embed_user_id": "eui_a1B2c3D4e5F6g7H8",
      "thumbnail_url": "https://storage.orshot.com/thumbnails/template-456.png",
      ...
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 10,
    "total": 3,
    "totalPages": 1
  }
}

Per-User Brand Assets#

Templates are not the only thing that can be scoped to a user. Colors, images, fonts, videos and audio can be too, so each of your users gets a complete brand space rather than just a template library, and you can seed it from your backend before they ever open the editor.

See Per-User Brand Assets for how to push a brand's palette and files into one user's library, and for what each user actually sees.

Was this page helpful?

Ready to automate?

Start rendering images, PDFs and videos from your templates in under 2 minutes. Free plan, no credit card.

Get your API key
  • Image, PDF and video generation via API
  • Visual editor with AI and smart layouts
  • Zapier, Make, MCP and 50+ integrations
  • White-label embed for your own app
  • 30 free credits — no credit card required