Embedded UI 0.1.0-beta

Get started with Embedded UI

Install the domain packages you need, configure App Connect once, and mount production accounting workflows inside your application shell. You can use the Web Components, typed resources, or both.

This page tracks the published 0.1.0-beta package line. Read Overview first if you need the backend-for-frontend (BFF) auth model or package boundaries.

Prerequisites

  • A sandbox company with App Connect credentials
  • Scopes for the surfaces you mount (minimum for COA + journals v1):
Text
accounting:account-list
accounting:journal-list
accounting:journal-add

Install

Shell
npm install @paprel/embed-core @paprel/embed-accounting @paprel/embed-reports

Configure once at app boot

Call configureAccounting before mounting components. Every accounting and report widget reads auth and API base URL from this shared context:

TypeScript
import { configureAccounting } from "@paprel/embed-accounting";

configureAccounting({
  baseUrl: "https://api.paprel.com", // or "" when proxying /v1 on same origin
  locale: "en", // en | ko | es | ru
  auth: {
    partnerDomain: "app.yourproduct.com",
    async getTokens() {
      const res = await fetch("/api/embed-token", { credentials: "include" });
      if (!res.ok) throw new Error("Embed token failed");
      const { accessToken, expiresAt, permissions, companyId } = await res.json();
      return { accessToken, expiresAt, permissions, companyId };
    },
    onSessionExpired() {
      window.location.href = "/login";
    },
  },
});

// Register custom elements after configure
import "@paprel/embed-accounting";
import "@paprel/embed-reports";

The main imports register their custom elements and include component styles. No separate stylesheet or @paprel/embed-ui import is required.

Mount components

HTML
<paprel-chart-of-accounts></paprel-chart-of-accounts>

<paprel-journal-list page="1"></paprel-journal-list>
<paprel-journal-detail journal-id=""></paprel-journal-detail>

<paprel-journal-editor currency="USD"></paprel-journal-editor>

<paprel-account-select label="Account"></paprel-account-select>

<paprel-trial-balance as-of-date="2026-08-25" currency="USD"></paprel-trial-balance>

No React provider tree required. Use the same tags in Vue (:journal-id), React (pass attributes as props on the custom element), or plain HTML.

Headless escape hatch

TypeScript
import { createAccountingClient } from "@paprel/embed-accounting";

const client = createAccountingClient({ baseUrl, auth });
const tree = await client.accounts.tree();
const journals = await client.journals.list({ page: 1 });

Same auth contract, no Web Components.

Next steps

Evaluate Paprel

Build in sandbox, launch with a production trial

Use sandbox for developer testing with no billing. When you are ready for real workflows, start production on a monthly plan with a 14-day free trial.

API-First Delivery
Audit-Ready Controls
Sandbox And Guided Rollout
We use cookies to improve your experience.