- You can get started with Documenso in minutes. We handle the infrastructure, so you can
- focus on signing documents.
-
-
-
-
-
- );
-};
diff --git a/apps/documentation/next-sitemap.config.js b/apps/documentation/next-sitemap.config.js
deleted file mode 100644
index 53571e850..000000000
--- a/apps/documentation/next-sitemap.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/** @type {import('next-sitemap').IConfig} */
-module.exports = {
- siteUrl: 'https://docs.documenso.com', // Replace with your actual site URL
- generateRobotsTxt: true, // Generates robots.txt
-};
diff --git a/apps/documentation/next.config.ts b/apps/documentation/next.config.ts
deleted file mode 100644
index f036b2d99..000000000
--- a/apps/documentation/next.config.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import type { NextConfig } from 'next';
-
-import nextra from 'nextra';
-
-const nextConfig: NextConfig = {
- transpilePackages: [
- '@documenso/assets',
- '@documenso/lib',
- '@documenso/tailwind-config',
- '@documenso/trpc',
- '@documenso/ui',
- ],
-};
-
-const withNextra = nextra({
- theme: 'nextra-theme-docs',
- themeConfig: './theme.config.tsx',
- codeHighlight: true,
-});
-
-export default withNextra(nextConfig);
diff --git a/apps/documentation/package.json b/apps/documentation/package.json
deleted file mode 100644
index 36c90cd2f..000000000
--- a/apps/documentation/package.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "@documenso/documentation",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev -p 3002",
- "build": "next build",
- "start": "next start -p 3002",
- "lint:fix": "next lint --fix",
- "clean": "rimraf .next && rimraf node_modules"
- },
- "dependencies": {
- "@documenso/assets": "*",
- "@documenso/lib": "*",
- "@documenso/tailwind-config": "*",
- "@documenso/trpc": "*",
- "@documenso/ui": "*",
- "next": "15.5.12",
- "next-plausible": "^3.12.5",
- "nextra": "^3",
- "nextra-theme-docs": "^3",
- "react": "^18",
- "react-dom": "^18"
- },
- "devDependencies": {
- "@types/node": "^20",
- "@types/react": "18.3.27",
- "@types/react-dom": "^18",
- "pagefind": "^1.2.0",
- "typescript": "5.6.2"
- }
-}
diff --git a/apps/documentation/pages/_app.tsx b/apps/documentation/pages/_app.tsx
deleted file mode 100644
index 61c300b07..000000000
--- a/apps/documentation/pages/_app.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-import React from 'react';
-
-import { PlausibleProvider } from '../providers/plausible';
-import '../styles.css';
-
-export type AppProps = {
- Component: React.ComponentType;
- pageProps: any;
-};
-
-export default function App({ Component, pageProps }: AppProps) {
- return (
-
-
-
- );
-}
diff --git a/apps/documentation/pages/_meta.js b/apps/documentation/pages/_meta.js
deleted file mode 100644
index 3d804ac10..000000000
--- a/apps/documentation/pages/_meta.js
+++ /dev/null
@@ -1,34 +0,0 @@
-export default {
- index: {
- type: 'page',
- title: 'Home',
- display: 'hidden',
- theme: {
- timestamp: false,
- },
- },
- users: {
- type: 'page',
- title: 'Users',
- },
- developers: {
- type: 'page',
- title: 'Developers',
- },
- updates: {
- title: "What's New",
- type: 'menu',
- items: {
- changelog: {
- title: 'Changelog',
- href: 'https://documenso.com/changelog',
- newWindow: true,
- },
- blog: {
- title: 'Blog',
- href: 'https://documenso.com/blog',
- newWindow: true,
- },
- },
- },
-};
diff --git a/apps/documentation/pages/developers/_meta.js b/apps/documentation/pages/developers/_meta.js
deleted file mode 100644
index 4286dc3a3..000000000
--- a/apps/documentation/pages/developers/_meta.js
+++ /dev/null
@@ -1,19 +0,0 @@
-export default {
- index: 'Introduction',
- '-- Development & Deployment': {
- type: 'separator',
- title: 'Development & Deployment',
- },
- 'local-development': 'Local Development',
- 'developer-mode': 'Developer Mode',
- 'self-hosting': 'Self Hosting',
- contributing: 'Contributing',
- '-- API & Integration Guides': {
- type: 'separator',
- title: 'API & Integration Guides',
- },
- 'public-api': 'Public API',
- embedding: 'Embedded Signing',
- 'embedded-authoring': 'Embedded Authoring',
- webhooks: 'Webhooks',
-};
diff --git a/apps/documentation/pages/developers/contributing/_meta.js b/apps/documentation/pages/developers/contributing/_meta.js
deleted file mode 100644
index 65d40b84e..000000000
--- a/apps/documentation/pages/developers/contributing/_meta.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
- index: 'Getting Started',
- 'contributing-translations': 'Contributing Translations',
-};
diff --git a/apps/documentation/pages/developers/contributing/contributing-translations.mdx b/apps/documentation/pages/developers/contributing/contributing-translations.mdx
deleted file mode 100644
index b8ffbb362..000000000
--- a/apps/documentation/pages/developers/contributing/contributing-translations.mdx
+++ /dev/null
@@ -1,64 +0,0 @@
----
-title: Contributing Translations
-description: Learn how to contribute translations to Documenso and become part of our community.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# Contributing Translations
-
-We are always open for help with translations! Currently we utilise AI to generate the initial translations for new languages, which are then improved over time by our awesome community.
-
-If you are looking for development notes on translations, you can find them [here](/developers/local-development/translations).
-
-
- Contributions are made through GitHub Pull Requests, so you will need a GitHub account to
- contribute.
-
-
-## Overview
-
-We store our translations in PO files, which are located in our GitHub repository [here](https://github.com/documenso/documenso/tree/main/packages/lib/translations).
-
-The translation files are organized into folders represented by their respective language codes (`en` for English, `de` for German, etc).
-
-Each PO file contains translations which look like this:
-
-```po
-#: apps/remix/app/(signing)/sign/[token]/no-longer-available.tsx:61
-msgid "Want to send slick signing links like this one? <0>Check out Documenso.0>"
-msgstr "Möchten Sie auffällige Signatur-Links wie diesen senden? <0>Überprüfen Sie Documenso.0>"
-```
-
-- `msgid`: The original text in English (never edit this manually)
-- `msgstr`: The translated text in the target language
-
-
- Notice the `<0>` tags? These represent HTML elements and must remain in both the `msgid` and `msgstr`. Make sure to translate the content between these tags while keeping the tags intact.
-
-
-## How to Contribute
-
-### Updating Existing Translations
-
-1. Fork the repository.
-2. Navigate to the appropriate language folder and open the PO file you want to update.
-3. Make your changes, ensuring you follow the PO file format.
-4. Commit your changes with a message such as `chore: update German translations`
-5. Create a Pull Request.
-
-### Adding a New Language
-
-If you want to add translations for a language that doesn't exist yet:
-
-1. Create an issue in our GitHub repository requesting the addition of the new language.
-2. Wait for our team to review and approve the request.
-3. Once approved, we will set up the necessary files and kickstart the translations with AI to provide initial coverage.
-
-## Need Help?
-
-
- If you have any questions, hop into our [Discord](https://documen.so/discord) and ask us directly!
-
-
-Thank you for helping make Documenso more accessible to users around the world!
diff --git a/apps/documentation/pages/developers/contributing/index.mdx b/apps/documentation/pages/developers/contributing/index.mdx
deleted file mode 100644
index ce690f66f..000000000
--- a/apps/documentation/pages/developers/contributing/index.mdx
+++ /dev/null
@@ -1,117 +0,0 @@
----
-title: Getting started
-description: Learn how to contribute to Documenso and become part of our community.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# Contributing to Documenso
-
-If you plan to contribute to Documenso, please take a moment to feel awesome. People like you are what open source is about. Any contributions, no matter how big or small, are highly appreciated.
-
-This guide will help you get started with contributing to Documenso.
-
-## Before Getting Started
-
-
-
-### Check the Existing Issues and Pull Requests
-
-Search the existing [issues](https://github.com/documenso/documenso/issues) to see if someone else reported the same issue. Or, check the [existing PRs](https://github.com/documenso/documenso/pulls) to see if someone else is already working on the same thing.
-
-### Creating a New Issue
-
-If there is no issue or PR for the problem you are facing, feel free to create a new issue. Make sure to provide as much detail as possible, including the steps to reproduce the issue.
-
-### Picking an Existing Issue
-
-If you pick an existing issue, take into consideration the discussion on the issue.
-
-### Contributor License Agreement
-
-Accept the [Contributor License Agreement](https://documen.so/cla) to ensure we can accept your contributions.
-
-
-
-## Taking Issues
-
-Before taking an issue, ensure that:
-
-- The issue has been assigned the public label.
-- The issue is clearly defined and understood.
-- No one has been assigned to the issue.
-- No one has expressed the intention to work on it.
-
-After that:
-
-1. Comment on the issue with your intention to work on it.
-2. Start working on the issue.
-
-Feel free to ask for help, clarification or guidance if needed. We are here to help you.
-
-## Developing
-
-The development branch is `main`, and all pull requests should be made against this branch. Here's how you can get started with developing:
-
-
-
-### Set Up Documenso Locally
-
-To set up your local environment, check out the [local development](/developers/local-development) guide.
-
-### Pick a Task
-
-Find an issue to work on or create a new one.
-
-> Before working on an issue, ensure that no one else is working on it. If no one is assigned to the issue, you can pick it up by leaving a comment and asking to assign it to you.
-
-Before creating a new issue, check the existing issues to see if someone else has already reported it.
-
-### Create a New Branch
-
-After you're assigned an issue, you can start working on it. Create a new branch for your feature or bug fix.
-
-When creating a branch, make sure that the branch name:
-
-- starts with the correct prefix: `feat/` for new features, `fix/` for bug fixes, etc.
-- includes the issue ID you are working on (if applicable).
-- is descriptive.
-
-```sh
-git checkout -b feat/issue-id-your-branch-name
-
-## Example
-git checkout -b feat/1234-add-share-button-to-articles
-```
-
-In the pull request description, include `references #yyyy` or `fixes #yyyy` to link it to the issue you are working on.
-
-### Implement Your Changes
-
-Start working on the issue you picked up and implement the changes. Make sure to test your changes locally and ensure that they work as expected.
-
-### Open a Pull Request
-
-After implementing your changes, open a pull request against the `main` branch.
-
-
-
-
- If you need help getting started, [join us on Discord](https://documen.so/discord).
-
-
-## Building
-
-Before pushing code or creating pull requests, please ensure you can successfully create a successful production build. You can build the project by running the following command in your terminal:
-
-```bash
-npm run build
-```
-
-Once the project builds successfully, you can push your code changes or create a pull request.
-
-
- Remember to run tests and perform any necessary checks before finalizing your changes. As a
- result, we can collaborate more effectively and maintain a high standard of code quality in our
- project.
-
diff --git a/apps/documentation/pages/developers/developer-mode/field-coordinates.mdx b/apps/documentation/pages/developers/developer-mode/field-coordinates.mdx
deleted file mode 100644
index 8f57a127d..000000000
--- a/apps/documentation/pages/developers/developer-mode/field-coordinates.mdx
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Field Coordinates
-description: Learn how to get the coordinates of a field in a document.
----
-
-## Field Coordinates
-
-Field coordinates represent the position of a field in a document. They are returned in the `pageX`, `pageY`, `width` and `height` properties of the field.
-
-To enable field coordinates, you can use the `devmode` query parameter.
-
-```bash
-# Legacy editor
-
-https://app.documenso.com/t//documents//legacy_editor?devmode=true
-```
-
-
-
-```bash
-# New editor
-
-https://app.documenso.com/t//documents//edit?step=addFields&devmode=true
-```
-
-
diff --git a/apps/documentation/pages/developers/embedded-authoring.mdx b/apps/documentation/pages/developers/embedded-authoring.mdx
deleted file mode 100644
index 4cf6fd659..000000000
--- a/apps/documentation/pages/developers/embedded-authoring.mdx
+++ /dev/null
@@ -1,396 +0,0 @@
----
-title: Embedded Authoring
-description: Learn how to use embedded authoring to create documents and templates in your application
----
-
-import { Callout } from 'nextra/components';
-
-
- The embedded authoring feature is an enterprise only feature. Please contact us if you are
- interested in using it.
-
-
-# Embedded Authoring
-
-In addition to embedding signing experiences, Documenso now supports embedded authoring, allowing you to integrate document and template creation and editing directly within your application.
-
-## Embedded Signing vs Embedded Authoring
-
-Embedded signing allows you to embed your Documenso documents into your application for signing. Your users will be able to sign the document directly in your application.
-
-Embedded authoring allows you to integrate Documenso's document and template creation and editing into your application. You will be able to create and edit documents and templates directly in your application.
-
-## How Embedded Authoring Works
-
-The embedded authoring feature enables your users to create and edit documents and templates without leaving your application. This process works through secure presign tokens that authenticate the embedding session and manage permissions.
-
-## Available Components
-
-The SDK provides four authoring components:
-
-- **`EmbedCreateDocumentV1`** - Create new documents
-- **`EmbedCreateTemplateV1`** - Create new templates
-- **`EmbedUpdateDocumentV1`** - Edit existing documents
-- **`EmbedUpdateTemplateV1`** - Edit existing templates
-
-React Example:
-
-```jsx
-import {
- EmbedCreateDocumentV1,
- EmbedCreateTemplateV1,
- EmbedUpdateDocumentV1,
- EmbedUpdateTemplateV1,
-} from '@documenso/embed-react';
-```
-
-## Creating Documents
-
-To implement document creation in your application, use the `EmbedCreateDocumentV1` component:
-
-```jsx
-import { EmbedCreateDocumentV1 } from '@documenso/embed-react';
-
-const DocumentCreator = () => {
- // You'll need to obtain a presign token using your API key
- const presignToken = 'YOUR_PRESIGN_TOKEN';
-
- return (
-
- {
- console.log('Document created with ID:', data.documentId);
- console.log('External reference ID:', data.externalId);
- }}
- />
-
- );
-};
-```
-
-## Obtaining a Presign Token
-
-Before using any of the authoring components, you'll need to obtain a presign token from your backend. This token authorizes the embedding session.
-
-You can create a presign token by making a request to:
-
-```
-POST /api/v2/embedding/create-presign-token
-```
-
-This API endpoint requires authentication with your Documenso API key. The token has a default expiration of 1 hour, but you can customize this duration based on your security requirements.
-
-You can find more details on this request at our [API Documentation](https://openapi.documenso.com/reference#tag/embedding)
-
-## Configuration Options
-
-All authoring components accept the following configuration options:
-
-| Option | Type | Description |
-| ------------------ | ------- | -------------------------------------------------------------------------- |
-| `presignToken` | string | **Required**. The authentication token for the embedding session. |
-| `externalId` | string | Optional reference ID from your system to link with the document/template. |
-| `host` | string | Optional custom host URL. Defaults to `https://app.documenso.com`. |
-| `css` | string | Optional custom CSS to style the embedded component. |
-| `cssVars` | object | Optional CSS variables for colors, spacing, and more. |
-| `darkModeDisabled` | boolean | Optional flag to disable dark mode. |
-| `className` | string | Optional CSS class name for the iframe. |
-| `additionalProps` | object | Optional additional props to pass to the iframe (for testing features). |
-| `features` | object | Optional feature toggles to customize the authoring experience. |
-
-### Update Component Specific Props
-
-The `EmbedUpdateDocument` and `EmbedUpdateTemplate` components also accept:
-
-| Option | Type | Description |
-| ---------------- | ------- | -------------------------------------------------------------------------------------------------------------- |
-| `documentId` | number | **Required for EmbedUpdateDocument**. The ID of the document to edit. |
-| `templateId` | number | **Required for EmbedUpdateTemplate**. The ID of the template to edit. |
-| `onlyEditFields` | boolean | Optional flag to restrict editing to fields only skipping the recipient configuration step (default: `false`). |
-
-## Feature Toggles
-
-You can customize the authoring experience by enabling or disabling specific features:
-
-```jsx
-
-```
-
-## Handling Events
-
-Each component provides callbacks for handling completion events:
-
-### Document Events
-
-```jsx
- {
- // Navigate to a success page
- navigate(`/documents/success?id=${data.documentId}`);
-
- // Or update your database with the document ID
- updateOrderDocument(data.externalId, data.documentId);
- }}
-/>
-
- {
- console.log('Document updated:', data.documentId);
- // Handle document update
- }}
-/>
-```
-
-### Template Events
-
-```jsx
- {
- console.log('Template created:', data.templateId);
- // Handle template creation
- }}
-/>
-
- {
- console.log('Template updated:', data.templateId);
- // Handle template update
- }}
-/>
-```
-
-All event callbacks receive an object with:
-
-- `documentId` or `templateId` - The ID of the created/updated document or template
-- `externalId` - Your external reference ID (if provided)
-
-## Styling the Embedded Component
-
-You can customize the appearance of the embedded component using standard CSS classes, custom CSS, and CSS variables:
-
-```jsx
-
-```
-
-## Complete Integration Example
-
-Here's a complete example of integrating document creation in a React application:
-
-```tsx
-import { useState } from 'react';
-
-import { EmbedCreateDocumentV1, EmbedUpdateDocumentV1 } from '@documenso/embed-react';
-
-function DocumentManager() {
- // In a real application, you would fetch this token from your backend
- // using your API key at /api/v2/embedding/create-presign-token
- const presignToken = 'YOUR_PRESIGN_TOKEN';
- const [documentId, setDocumentId] = useState(null);
- const [mode, setMode] = useState<'create' | 'edit'>('create');
-
- if (documentId && mode === 'create') {
- return (
-
- );
-}
-
-export default DocumentManager;
-```
-
-## Advanced Usage
-
-### Using Additional Props
-
-You can pass additional props to the iframe for testing features before they're officially supported:
-
-```jsx
-
-```
-
-### Restricting To Only Field Editing
-
-When updating documents or templates, you can restrict editing to fields only skipping the recipient configuration step:
-
-```jsx
- {
- console.log('Fields updated:', data.documentId);
- }}
-/>
-```
-
-With embedded authoring, your users can seamlessly create and edit documents and templates within your application, enhancing the overall user experience and streamlining document workflows.
diff --git a/apps/documentation/pages/developers/embedding/_meta.js b/apps/documentation/pages/developers/embedding/_meta.js
deleted file mode 100644
index c666bdaa1..000000000
--- a/apps/documentation/pages/developers/embedding/_meta.js
+++ /dev/null
@@ -1,10 +0,0 @@
-export default {
- index: 'Get Started',
- react: 'React Integration',
- vue: 'Vue Integration',
- svelte: 'Svelte Integration',
- solid: 'Solid Integration',
- preact: 'Preact Integration',
- angular: 'Angular Integration',
- 'css-variables': 'CSS Variables',
-};
diff --git a/apps/documentation/pages/developers/embedding/angular.mdx b/apps/documentation/pages/developers/embedding/angular.mdx
deleted file mode 100644
index 5bd169b20..000000000
--- a/apps/documentation/pages/developers/embedding/angular.mdx
+++ /dev/null
@@ -1,90 +0,0 @@
----
-title: Angular Integration
-description: Learn how to use our embedding SDK within your Angular application.
----
-
-# Angular Integration
-
-Our Angular SDK provides a simple way to embed a signing experience within your Angular application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-angular
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```typescript
-import { Component } from '@angular/core';
-import { EmbedDirectTemplate } from '@documenso/embed-angular';
-
-@Component({
- selector: 'app-embedding',
- template: `
-
- `,
- standalone: true,
- imports: [EmbedDirectTemplate],
-})
-export class EmbeddingComponent {
- token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-}
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field is signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field is unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```typescript
-import { Component } from '@angular/core';
-import { EmbedSignDocument } from '@documenso/embed-angular';
-
-@Component({
- selector: 'app-embedding',
- template: `
-
- `,
- standalone: true,
- imports: [EmbedSignDocument],
-})
-export class EmbeddingComponent {
- token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-}
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
diff --git a/apps/documentation/pages/developers/embedding/css-variables.mdx b/apps/documentation/pages/developers/embedding/css-variables.mdx
deleted file mode 100644
index d9259545e..000000000
--- a/apps/documentation/pages/developers/embedding/css-variables.mdx
+++ /dev/null
@@ -1,197 +0,0 @@
----
-title: CSS Variables
-description: Learn about all available CSS variables for customizing your embedded signing experience
----
-
-# CSS Variables
-
-Platform customers have access to a comprehensive set of CSS variables that can be used to customize the appearance of the embedded signing experience. These variables control everything from colors to spacing and can be used to match your application's design system.
-
-## Available Variables
-
-### Colors
-
-| Variable | Description | Default |
-| ----------------------- | ---------------------------------- | -------------- |
-| `background` | Base background color | System default |
-| `foreground` | Base text color | System default |
-| `muted` | Muted/subtle background color | System default |
-| `mutedForeground` | Muted/subtle text color | System default |
-| `popover` | Popover/dropdown background color | System default |
-| `popoverForeground` | Popover/dropdown text color | System default |
-| `card` | Card background color | System default |
-| `cardBorder` | Card border color | System default |
-| `cardBorderTint` | Card border tint/highlight color | System default |
-| `cardForeground` | Card text color | System default |
-| `fieldCard` | Field card background color | System default |
-| `fieldCardBorder` | Field card border color | System default |
-| `fieldCardForeground` | Field card text color | System default |
-| `widget` | Widget background color | System default |
-| `widgetForeground` | Widget text color | System default |
-| `border` | Default border color | System default |
-| `input` | Input field border color | System default |
-| `primary` | Primary action/button color | System default |
-| `primaryForeground` | Primary action/button text color | System default |
-| `secondary` | Secondary action/button color | System default |
-| `secondaryForeground` | Secondary action/button text color | System default |
-| `accent` | Accent/highlight color | System default |
-| `accentForeground` | Accent/highlight text color | System default |
-| `destructive` | Destructive/danger action color | System default |
-| `destructiveForeground` | Destructive/danger text color | System default |
-| `ring` | Focus ring color | System default |
-| `warning` | Warning/alert color | System default |
-
-### Spacing and Layout
-
-| Variable | Description | Default |
-| -------- | ------------------------------- | -------------- |
-| `radius` | Border radius size in REM units | System default |
-
-## Usage Example
-
-Here's how to use these variables in your embedding implementation:
-
-```jsx
-const cssVars = {
- // Colors
- background: '#ffffff',
- foreground: '#000000',
- primary: '#0000ff',
- primaryForeground: '#ffffff',
- accent: '#4f46e5',
- destructive: '#ef4444',
-
- // Spacing
- radius: '0.5rem'
-};
-
-// React/Preact
-
-
-// Vue
-
-
-// Svelte
-
-
-// Solid
-
-```
-
-## Color Format
-
-Colors can be specified in any valid CSS color format:
-
-- Hexadecimal: `#ff0000`
-- RGB: `rgb(255, 0, 0)`
-- HSL: `hsl(0, 100%, 50%)`
-- Named colors: `red`
-
-The colors will be automatically converted to the appropriate format internally.
-
-## Best Practices
-
-1. **Maintain Contrast**: When customizing colors, ensure there's sufficient contrast between background and foreground colors for accessibility.
-
-2. **Test Dark Mode**: If you haven't disabled dark mode, test your color variables in both light and dark modes.
-
-3. **Use Your Brand Colors**: Align the primary and accent colors with your brand's color scheme for a cohesive look.
-
-4. **Consistent Radius**: Use a consistent border radius value that matches your application's design system.
-
-## CSS Class Targets
-
-In addition to CSS variables, specific components in the embedded experience can be targeted using CSS classes for more granular styling:
-
-### Component Classes
-
-| Class Name | Description |
-| --------------------------------- | ----------------------------------------------------------------------- |
-| `.embed--Root` | Main container for the embedded signing experience |
-| `.embed--DocumentContainer` | Container for the document and signing widget |
-| `.embed--DocumentViewer` | Container for the document viewer |
-| `.embed--DocumentWidget` | The signing widget container |
-| `.embed--DocumentWidgetContainer` | Outer container for the signing widget, handles positioning |
-| `.embed--DocumentWidgetHeader` | Header section of the signing widget |
-| `.embed--DocumentWidgetContent` | Main content area of the signing widget |
-| `.embed--DocumentWidgetForm` | Form section within the signing widget |
-| `.embed--DocumentWidgetFooter` | Footer section of the signing widget |
-| `.embed--WaitingForTurn` | Container for the waiting screen when it's not the user's turn to sign |
-| `.embed--DocumentCompleted` | Container for the completion screen after signing |
-| `.field--FieldRootContainer` | Base container for document fields (signatures, text, checkboxes, etc.) |
-
-Field components also expose several data attributes that can be used for styling different states:
-
-| Data Attribute | Values | Description |
-| ------------------- | ---------------------------------------------- | ------------------------------------ |
-| `[data-field-type]` | `SIGNATURE`, `TEXT`, `CHECKBOX`, `RADIO`, etc. | The type of field |
-| `[data-inserted]` | `true`, `false` | Whether the field has been filled |
-| `[data-validate]` | `true`, `false` | Whether the field is being validated |
-
-### Field Styling Example
-
-```css
-/* Style all field containers */
-.field--FieldRootContainer {
- transition: all 200ms ease;
-}
-
-/* Style specific field types */
-.field--FieldRootContainer[data-field-type='SIGNATURE'] {
- background-color: rgba(0, 0, 0, 0.02);
-}
-
-/* Style inserted fields */
-.field--FieldRootContainer[data-inserted='true'] {
- background-color: var(--primary);
- opacity: 0.2;
-}
-
-/* Style fields being validated */
-.field--FieldRootContainer[data-validate='true'] {
- border-color: orange;
-}
-```
-
-### Example Usage
-
-```css
-/* Custom styles for the document widget */
-.embed--DocumentWidget {
- background-color: #ffffff;
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
-}
-
-/* Custom styles for the waiting screen */
-.embed--WaitingForTurn {
- background-color: #f9fafb;
- padding: 2rem;
-}
-
-/* Responsive adjustments for the document container */
-@media (min-width: 768px) {
- .embed--DocumentContainer {
- gap: 2rem;
- }
-}
-```
-
-## Related
-
-- [React Integration](/developers/embedding/react)
-- [Vue Integration](/developers/embedding/vue)
-- [Svelte Integration](/developers/embedding/svelte)
-- [Solid Integration](/developers/embedding/solid)
-- [Preact Integration](/developers/embedding/preact)
diff --git a/apps/documentation/pages/developers/embedding/index.mdx b/apps/documentation/pages/developers/embedding/index.mdx
deleted file mode 100644
index 6d8d6531a..000000000
--- a/apps/documentation/pages/developers/embedding/index.mdx
+++ /dev/null
@@ -1,200 +0,0 @@
----
-title: Get Started
-description: Learn how to use embedding to bring signing to your own website or application
----
-
-# Embedded Signing
-
-Our embedding feature lets you integrate our document signing experience into your own application or website. Whether you're building with React, Preact, Vue, Svelte, Solid, Angular, or using generalized web components, this guide will help you get started with embedding Documenso.
-
-## Embedded Signing vs Embedded Authoring
-
-Embedded signing allows you to embed your Documenso documents into your application for signing. Your users will be able to sign the document directly in your application.
-
-Embedded authoring allows you to integrate Documenso's document and template creation and editing into your application. You will be able to create and edit documents and templates directly in your application.
-
-## Availability
-
-Embedding is currently available for all users on a **Teams Plan** and above, as well as **Early Adopter's** within a team (Early Adopters can create a team for free).
-
-Our **Platform Plan** offers enhanced customization features including:
-
-- Custom CSS and styling variables
-- Dark mode controls
-- The removal of Documenso branding from the embedding experience
-
-## How Embedding Works
-
-Embedding with Documenso allows you to handle document signing in two main ways:
-
-1. **Using Direct Templates**: Using direct templates you can have an evergreen template that upon completion will create a new document within Documenso.
-2. **Using a Signing Token**: A more advanced option for those running rich integrations with Documenso already. Given a recipients signing token you can embed the signing experience in your application rather than direct the recipient to Documenso.
-
-_For most use-cases we recommend using direct templates, however if you have a need for a more advanced integration, we are happy to help you get started._
-
-## Customization Options
-
-### Styling and Theming
-
-Platform customers have access to advanced styling options to customize the embedding experience:
-
-1. **Custom CSS**: You can provide custom CSS to style the embedded component:
-
-```jsx
-
-```
-
-2. **CSS Variables**: Fine-tune the appearance using CSS variables for colors, spacing, and more:
-
-```jsx
-
-```
-
-For a complete list of available CSS variables and their usage, see our [CSS Variables](/developers/embedding/css-variables) documentation.
-
-3. **Dark Mode Control**: Disable dark mode if it doesn't match your application's theme:
-
-```jsx
-
-```
-
-These customization options are available for both Direct Templates and Signing Token embeds.
-
-## Supported Frameworks
-
-We support embedding across a range of popular JavaScript frameworks, including:
-
-| Framework | Package |
-| --------- | ---------------------------------------------------------------------------------- |
-| React | [@documenso/embed-react](https://www.npmjs.com/package/@documenso/embed-react) |
-| Preact | [@documenso/embed-preact](https://www.npmjs.com/package/@documenso/embed-preact) |
-| Vue | [@documenso/embed-vue](https://www.npmjs.com/package/@documenso/embed-vue) |
-| Svelte | [@documenso/embed-svelte](https://www.npmjs.com/package/@documenso/embed-svelte) |
-| Solid | [@documenso/embed-solid](https://www.npmjs.com/package/@documenso/embed-solid) |
-| Angular | [@documenso/embed-angular](https://www.npmjs.com/package/@documenso/embed-angular) |
-
-Additionally, we provide **web components** for more generalized use. However, please note that web components are still in their early stages and haven't been extensively tested.
-
-## Embedding with Direct Templates
-
-#### Instructions
-
-To get started with embedding using a Direct Template we will need the URL segment which is also referred to as the token for the template.
-
-You can find your URL/Token by performing the following steps:
-
-1. **Navigate to your team's templates within Documenso**
-
-
-
-2. **Click on the direct link template you want to embed**
-
-This will copy the URL to your clipboard, e.g. `https://stg-app.documenso.com/d/-WoSwWVT-fYOERS2MI37k`
-
-**For the above url the token is `-WoSwWVT-fYOERS2MI37k`**
-
-3. Provide the token to the `EmbedDirectTemplate` component in your frameworks SDK
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
----
-
-**Converting a regular template to a direct link template**
-
-If you don't currently have any direct link templates you can easily create one by selecting the "Direct Link" option within the actions dropdown on the templates table.
-
-This will show a dialog which will ask you to configure which recipient should be used as the direct link signer.
-
-
-
----
-
-## Embedding with Signing Tokens
-
-To embed the signing process for an ordinary document, you'll need a **document signing token** for the recipient. This token provides the necessary access to load the document and facilitate the signing process securely.
-
-#### Instructions
-
-1. Retrieve the signing token for the recipient document you want to embed
-
-This will typically be done using an API integration where signing tokens are provided as part of the response when creating a document. Alternatively you can manually get a signing link by clicking hovering over a recipients avatar and clicking their email on a document that you own.
-
-
-
-With the signing url on our clipboard we can extract the token the same way we did for the direct link template.
-
-So `https://stg-app.documenso.com/sign/lm7Tp2_yhvFfzdeJQzYQF` will become `lm7Tp2_yhvFfzdeJQzYQF`
-
-2. Provide the token to the `EmbedSignDocument` component in your frameworks SDK
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
----
-
-## Using Embedding in Your Application
-
-Once you've obtained the appropriate tokens, you can integrate the signing experience into your application. For framework-specific instructions, please refer to the guides provided in our documentation for:
-
-- [React](/developers/embedding/react)
-- [Preact](/developers/embedding/preact)
-- [Vue](/developers/embedding/vue)
-- [Svelte](/developers/embedding/svelte)
-- [Solid](/developers/embedding/solid)
-- [Angular](/developers/embedding/angular)
-
-If you're using **web components**, the integration process is slightly different. Keep in mind that web components are currently less tested but can still provide flexibility for general use cases.
-
-## Embedded Authoring
-
-In addition to embedding signing experiences, Documenso now supports **embedded authoring**, allowing your users to create documents and templates directly within your application.
-
-With embedded authoring, you can:
-
-- Create new documents with custom fields
-- Configure document properties and settings
-- Set up recipients and signing workflows
-- Customize the authoring experience
-
-For detailed implementation instructions and code examples, see our [Embedded Authoring](/developers/embedding/authoring) guide.
-
-## Related
-
-- [React Integration](/developers/embedding/react)
-- [Vue Integration](/developers/embedding/vue)
-- [Svelte Integration](/developers/embedding/svelte)
-- [Solid Integration](/developers/embedding/solid)
-- [Preact Integration](/developers/embedding/preact)
-- [Angular Integration](/developers/embedding/angular)
-- [CSS Variables](/developers/embedding/css-variables)
-- [Embedded Authoring](/developers/embedding/authoring)
diff --git a/apps/documentation/pages/developers/embedding/preact.mdx b/apps/documentation/pages/developers/embedding/preact.mdx
deleted file mode 100644
index 3f6f579f5..000000000
--- a/apps/documentation/pages/developers/embedding/preact.mdx
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: Preact Integration
-description: Learn how to use our embedding SDK within your Preact application.
----
-
-# Preact Integration
-
-Our Preact SDK provides a simple way to embed a signing experience within your Preact application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-preact
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-preact';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| css | string (optional) | Custom CSS to style the embedded component (Platform Plan only) |
-| cssVars | object (optional) | CSS variables for customizing colors, spacing, etc. (Platform Plan only) |
-| darkModeDisabled | boolean (optional) | Disable dark mode functionality (Platform Plan only) |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-preact';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-
-### Styling and Theming (Platform Plan)
-
-Platform customers have access to advanced styling options:
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-preact';
-
-const MyEmbeddingComponent = () => {
- const token = 'your-token';
- const customCss = `
- .documenso-embed {
- border-radius: 8px;
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
- }
- `;
- const cssVars = {
- primary: '#0000FF',
- background: '#F5F5F5',
- radius: '8px',
- };
-
- return (
-
- );
-};
-```
diff --git a/apps/documentation/pages/developers/embedding/react.mdx b/apps/documentation/pages/developers/embedding/react.mdx
deleted file mode 100644
index 2c259ddb8..000000000
--- a/apps/documentation/pages/developers/embedding/react.mdx
+++ /dev/null
@@ -1,111 +0,0 @@
----
-title: React Integration
-description: Learn how to use our embedding SDK within your React application.
----
-
-# React Integration
-
-Our React SDK provides a simple way to embed a signing experience within your React application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-react
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| css | string (optional) | Custom CSS to style the embedded component (Platform Plan only) |
-| cssVars | object (optional) | CSS variables for customizing colors, spacing, etc. (Platform Plan only) |
-| darkModeDisabled | boolean (optional) | Disable dark mode functionality (Platform Plan only) |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-
-### Styling and Theming (Platform Plan)
-
-Platform customers have access to advanced styling options:
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- return (
-
- );
-};
-```
diff --git a/apps/documentation/pages/developers/embedding/solid.mdx b/apps/documentation/pages/developers/embedding/solid.mdx
deleted file mode 100644
index 135e93ff6..000000000
--- a/apps/documentation/pages/developers/embedding/solid.mdx
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: Solid.js Integration
-description: Learn how to use our embedding SDK within your Solid.js application.
----
-
-# Solid.js Integration
-
-Our Solid.js SDK provides a simple way to embed a signing experience within your Solid.js application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-solid
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-solid';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| css | string (optional) | Custom CSS to style the embedded component (Platform Plan only) |
-| cssVars | object (optional) | CSS variables for customizing colors, spacing, etc. (Platform Plan only) |
-| darkModeDisabled | boolean (optional) | Disable dark mode functionality (Platform Plan only) |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-solid';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-
-### Styling and Theming (Platform Plan)
-
-Platform customers have access to advanced styling options:
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-solid';
-
-const MyEmbeddingComponent = () => {
- const token = 'your-token';
- const customCss = `
- .documenso-embed {
- border-radius: 8px;
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
- }
- `;
- const cssVars = {
- primary: '#0000FF',
- background: '#F5F5F5',
- radius: '8px',
- };
-
- return (
-
- );
-};
-```
diff --git a/apps/documentation/pages/developers/embedding/svelte.mdx b/apps/documentation/pages/developers/embedding/svelte.mdx
deleted file mode 100644
index 126b43e10..000000000
--- a/apps/documentation/pages/developers/embedding/svelte.mdx
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: Svelte Integration
-description: Learn how to use our embedding SDK within your Svelte application.
----
-
-# Svelte Integration
-
-Our Svelte SDK provides a simple way to embed a signing experience within your Svelte application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-svelte
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```html
-
-
-
-
-
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| css | string (optional) | Custom CSS to style the embedded component (Platform Plan only) |
-| cssVars | object (optional) | CSS variables for customizing colors, spacing, etc. (Platform Plan only) |
-| darkModeDisabled | boolean (optional) | Disable dark mode functionality (Platform Plan only) |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-svelte';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-
-### Styling and Theming (Platform Plan)
-
-Platform customers have access to advanced styling options:
-
-```html
-
-
-
-```
diff --git a/apps/documentation/pages/developers/embedding/vue.mdx b/apps/documentation/pages/developers/embedding/vue.mdx
deleted file mode 100644
index dc68f979d..000000000
--- a/apps/documentation/pages/developers/embedding/vue.mdx
+++ /dev/null
@@ -1,114 +0,0 @@
----
-title: Vue Integration
-description: Learn how to use our embedding SDK within your Vue application.
----
-
-# Vue Integration
-
-Our Vue SDK provides a simple way to embed a signing experience within your Vue application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-vue
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```html
-
-
-
-
-
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| css | string (optional) | Custom CSS to style the embedded component (Platform Plan only) |
-| cssVars | object (optional) | CSS variables for customizing colors, spacing, etc. (Platform Plan only) |
-| darkModeDisabled | boolean (optional) | Disable dark mode functionality (Platform Plan only) |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-vue';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-
-### Styling and Theming (Platform Plan)
-
-Platform customers have access to advanced styling options:
-
-```html
-
-
-
-
-
-```
diff --git a/apps/documentation/pages/developers/index.mdx b/apps/documentation/pages/developers/index.mdx
deleted file mode 100644
index 4a65b2d3b..000000000
--- a/apps/documentation/pages/developers/index.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Developer Documentation
-description: Learn how to run Documenso locally, use our API, integrate webhooks, contribute to the project, and self-host Documenso.
----
-
-import { Cards } from 'nextra/components';
-
-# Developer Documentation
-
-The developer documentation is a comprehensive guide to help you:
-
-
-
-
-
-
-
-
diff --git a/apps/documentation/pages/developers/local-development/_meta.js b/apps/documentation/pages/developers/local-development/_meta.js
deleted file mode 100644
index f092f5133..000000000
--- a/apps/documentation/pages/developers/local-development/_meta.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export default {
- index: 'Get Started',
- quickstart: 'Developer Quickstart',
- manual: 'Manual Setup',
- gitpod: 'Gitpod',
- 'signing-certificate': 'Signing Certificate',
- translations: 'Translations',
-};
diff --git a/apps/documentation/pages/developers/local-development/gitpod.mdx b/apps/documentation/pages/developers/local-development/gitpod.mdx
deleted file mode 100644
index be62eacdf..000000000
--- a/apps/documentation/pages/developers/local-development/gitpod.mdx
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Run in Gitpod
-description: Get started with Documenso in a ready-to-use Gitpod workspace in your browser.
----
-
-# Run in Gitpod
-
-Click below to launch a ready-to-use Gitpod workspace in your browser.
-
-[](https://gitpod.io/#https://github.com/documenso/documenso)
diff --git a/apps/documentation/pages/developers/local-development/index.mdx b/apps/documentation/pages/developers/local-development/index.mdx
deleted file mode 100644
index bf9f92723..000000000
--- a/apps/documentation/pages/developers/local-development/index.mdx
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: Local Development
-description: Learn how to set up Documenso for local development.
----
-
-# Local development
-
-There are multiple ways of setting up Documenso for local development. At the moment of writing this documentation, there are 3 ways of running Documenso locally:
-
-- [Using the developer quickstart with Docker](/developers/local-development/quickstart)
-- [Manually setting up the development environment](/developers/local-development/manual)
-- [Using Gitpod](/developers/local-development/gitpod)
-
-Pick the one that fits your needs the best.
-
-## Tech Stack
-
-- [Typescript](https://www.typescriptlang.org/) - Language
-- [React Router](https://reactrouter.com/) - Framework
-- [Prisma](https://www.prisma.io/) - ORM
-- [Tailwind](https://tailwindcss.com/) - CSS
-- [shadcn/ui](https://ui.shadcn.com/) - Component Library
-- [react-email](https://react.email/) - Email Templates
-- [tRPC](https://trpc.io/) - API
-- [@documenso/pdf-sign](https://www.npmjs.com/package/@documenso/pdf-sign) - PDF Signatures
-- [React-PDF](https://github.com/wojtekmaj/react-pdf) - Viewing PDFs
-- [PDF-Lib](https://github.com/Hopding/pdf-lib) - PDF manipulation
-- [Stripe](https://stripe.com/) - Payments
-
-
diff --git a/apps/documentation/pages/developers/local-development/manual.mdx b/apps/documentation/pages/developers/local-development/manual.mdx
deleted file mode 100644
index ed98338cf..000000000
--- a/apps/documentation/pages/developers/local-development/manual.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: Manual Setup
-description: Manually set up Documenso on your machine for local development.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# Manual Setup
-
-Follow these steps to set up Documenso on your local machine:
-
-
-
-### Fork Documenso
-
-Fork the [Documenso repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) to your GitHub account.
-
-### Clone Repository
-
-After forking the repository, clone it to your local device by using the following command:
-
-```bash
-git clone https://github.com//documenso
-```
-
-### Install Dependencies
-
-Run `npm i` in the root directory to install the dependencies required for the project.
-
-### Set Up Environment Variables
-
-Set up the following environment variables in the `.env` file:
-
-```bash
-NEXTAUTH_SECRET
-NEXT_PUBLIC_WEBAPP_URL
-NEXT_PRIVATE_DATABASE_URL
-NEXT_PRIVATE_DIRECT_DATABASE_URL
-NEXT_PRIVATE_SMTP_FROM_NAME
-NEXT_PRIVATE_SMTP_FROM_ADDRESS
-```
-
-Alternatively, you can run `cp .env.example .env` to get started with our handpicked defaults.
-
-### Create Database Schema
-
-Create the database schema by running the following command:
-
-```bash
-npm run prisma:migrate-dev
-```
-
-### Optional: Seed the Database
-
-Seed the database with test data by running the following command:
-
-```bash
-npm run prisma:seed -w @documenso/prisma
-```
-
-### Start the Application
-
-Run `npm run dev` in the root directory to start the application.
-
-### Access the Application
-
-Access the Documenso application by visiting `http://localhost:3000` in your web browser.
-
-
-
-
- Optional: Create your signing certificate. To generate your own using these steps and a Linux
- Terminal or Windows Subsystem for Linux (WSL), see **[Create your signing
- certificate](/developers/local-development/signing-certificate)**.
-
diff --git a/apps/documentation/pages/developers/local-development/quickstart.mdx b/apps/documentation/pages/developers/local-development/quickstart.mdx
deleted file mode 100644
index 563505024..000000000
--- a/apps/documentation/pages/developers/local-development/quickstart.mdx
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: Developer Quickstart
-description: Quickly set up Documenso on your machine for local development with Docker and Docker Compose.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# Developer Quickstart
-
-
- **Note**: This guide assumes that you have both [docker](https://docs.docker.com/get-docker/) and
- [docker-compose](https://docs.docker.com/compose/) installed on your machine.
-
-
-Want to get up and running quickly? Follow these steps:
-
-
-
-### Fork Documenso
-
-Fork the [Documenso repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) to your GitHub account.
-
-### Clone Repository
-
-After forking the repository, clone it to your local device by using the following command:
-
-```bash
-git clone https://github.com//documenso
-```
-
-### Set Up Environment Variables
-
-Set up your environment variables in the `.env` file using the `.env.example` file as a reference.
-
-Alternatively, you can run `cp .env.example .env` to get started with our handpicked defaults.
-
-### Start Database and Mail Server
-
-Run `npm run dx` in the root directory.
-
-This will spin up a Postgres database and inbucket mailserver in a docker container.
-
-### Start the Application
-
-Run `npm run dev` in the root directory to start the application.
-
-### (Optional) Fasten the Process
-
-Want it even faster? Just use:
-
-```sh
-npm run d
-```
-
-
-
-### Access Points for the Project
-
-You can access the following services:
-
-- Main application - http://localhost:3000
-- Incoming Mail Access - http://localhost:9000
-- Database Connection Details:
- - Port: 54320
- - Connection: Use your favorite database client to connect to the database.
-- S3 Storage Dashboard - http://localhost:9001
diff --git a/apps/documentation/pages/developers/local-development/signing-certificate.mdx b/apps/documentation/pages/developers/local-development/signing-certificate.mdx
deleted file mode 100644
index b8c5b4812..000000000
--- a/apps/documentation/pages/developers/local-development/signing-certificate.mdx
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: Signing Certificate
-description: Learn how to create a free, self-signed certificate for local development.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# Create Your Signing Certificate
-
-Digitally signing documents requires a signing certificate in `.p12` format. You can either purchase one or create a free self-signed certificate.
-
-Follow the steps below to create a free, self-signed certificate for local development.
-
-
- These steps should be run on a UNIX based system, otherwise you may run into an error.
-
-
-
-
-### Generate Private Key
-
-Generate a private key using OpenSSL by running the following command:
-
-```bash
-openssl genrsa -out private.key 2048
-```
-
-This command generates a 2048-bit RSA key.
-
-### Generate Self-Signed Certificate
-
-Using the private key, generate a self-signed certificate by running the following command:
-
-```bash
-openssl req -new -x509 -key private.key -out certificate.crt -days 365
-```
-
-You will be prompted to enter some information, such as the certificate's Common Name (CN). Ensure that you provide the correct details. The `—days` parameter specifies the certificate's validity period.
-
-### Create `p12` Certificate
-
-Combine the private key and the self-signed certificate to create a `.p12` certificate. Use the following command:
-
-```bash
-openssl pkcs12 -export -out certificate.p12 -inkey private.key -in certificate.crt -legacy
-```
-
-
-When running the application in Docker, you may encounter permission issues when attempting to sign documents using your certificate (.p12) file. This happens because the application runs as a non-root user inside the container and needs read access to the certificate.
-
-To resolve this, you'll need to update the certificate file permissions to allow the container user 1001, which runs NextJS, to read it:
-
-```bash
-sudo chown 1001 certificate.p12
-```
-
-
-
-### `p12` Certificate Password
-
-When you create the `.p12` certificate, you will be prompted to enter a password. Enter a strong password and keep it secure. Remember this password, as it will be required when using the certificate.
-
-Note that for local development, the password can be left empty.
-
-### Add Certificate to the Project
-
-Use the `NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH` environment variable to point at the certificate you created.
-
-Details about environment variables associated with certificates can be found [here](/developers/self-hosting/signing-certificate#configure-documenso-to-use-the-certificate).
-
-
diff --git a/apps/documentation/pages/developers/local-development/translations.mdx b/apps/documentation/pages/developers/local-development/translations.mdx
deleted file mode 100644
index 2fbb6eb96..000000000
--- a/apps/documentation/pages/developers/local-development/translations.mdx
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: Translations
-description: Handling translations in code.
----
-
-# About
-
-Documenso uses the following stack to handle translations:
-
-- [Lingui](https://lingui.dev/) - React i10n library
-- [Crowdin](https://crowdin.com/) - Handles syncing translations
-- [OpenAI](https://openai.com/) - Provides AI translations
-
-Additional reading can be found in the [Lingui documentation](https://lingui.dev/introduction).
-
-## Quick guide
-
-If you require more in-depth information, please see the [Lingui documentation](https://lingui.dev/introduction).
-
-### HTML
-
-Wrap all text to translate in **``** tags exported from **@lingui/react/macro**.
-
-```html
-
- Title
-
-```
-
-For text that is broken into elements, but represent a whole sentence, you must wrap it in a Trans tag so ensure the full message is extracted correctly.
-
-```html
-
-```
-
-### Constants outside of react components
-
-```tsx
-import { msg } from '@lingui/core/macro';
-import { useLingui } from '@lingui/react';
-import { Trans } from '@lingui/react/macro';
-
-// Wrap text in msg`text to translate` when it's in a constant here, or another file/package.
-export const CONSTANT_WITH_MSG = {
- foo: msg`Hello`,
- bar: msg`World`,
-};
-
-export const SomeComponent = () => {
- const { _ } = useLingui();
-
- return (
-
- {/* This will render the correct translated text. */}
-
{_(CONSTANT_WITH_MSG.foo)}
-
- );
-};
-```
-
-### Plurals
-
-Lingui provides a Plural component to make it easy. See full documentation [here.](https://lingui.dev/ref/macro#plural-1)
-
-```tsx
-// Basic usage.
-
-```
-
-### Dates
-
-Lingui provides a [DateTime instance](https://lingui.dev/ref/core#i18n.date) with the configured locale.
-
-```tsx
-import { Trans } from '@lingui/macro';
-import { useLingui } from '@lingui/react';
-
-export const SomeComponent = () => {
- const { i18n } = useLingui();
-
- return The current date is {i18n.date(new Date(), { dateStyle: 'short' })};
-};
-```
diff --git a/apps/documentation/pages/developers/public-api/_meta.js b/apps/documentation/pages/developers/public-api/_meta.js
deleted file mode 100644
index 0db8e0114..000000000
--- a/apps/documentation/pages/developers/public-api/_meta.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
- index: 'Get Started',
- authentication: 'Authentication',
- 'rate-limits': 'Rate Limits',
- versioning: 'Versioning',
-};
diff --git a/apps/documentation/pages/developers/public-api/authentication.mdx b/apps/documentation/pages/developers/public-api/authentication.mdx
deleted file mode 100644
index afbea7033..000000000
--- a/apps/documentation/pages/developers/public-api/authentication.mdx
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: API Authentication
-description: Learn how to create a Documenso API key and authenticate your API requests.
----
-
-# API Authentication
-
-Documenso uses API keys for authentication. An API key is a unique token that is generated for each client. The client must provide the key whenever it makes an API call. This way, Documenso can identify the clients making the requests and authorize their access to the API.
-
-## Creating an API Key
-
-To create an API key, navigate to the user settings page. Click on your avatar in the top right corner of the dashboard and select "Team Settings" from the dropdown menu.
-
-
-
-Once you're on the settings page, navigate to the **API Tokens** tab. This page lists your existing keys and enables you to create new ones.
-
-
-
-To create a new API key, you must:
-
-- Choose a name (e.g. "zapier-key")
- - We recommend using a descriptive name that helps you quickly identify the key and its purpose.
-- Choose an expiration date
- - You can set the key never to expire or choose when to become invalid: 7 days, 1 month, 3 months, 6 months, or 1 year.
-
-After providing the required information, click the "Create token" button to generate the API key.
-
-
-
-Once you've created the token, Documenso will display the key on the screen. Make sure to copy the key and store it securely. You won't be able to see the key again once you refresh/leave the page.
-
-## Using the API Key
-
-You must include the API key in the `Authorization` request header to authenticate your API requests. The format is `Authorization: api_xxxxxxxxxxxxxxxx`.
-
-Here's a sample API request using cURL:
-
-```bash
-curl --location 'https://app.documenso.com/api/v2/envelope/create' \
---header 'Authorization: api_xxxxxxxxxxxxxxxx' \
---form 'payload={ "title": "Some Title", "type": "DOCUMENT" }'
-```
-
-Here's a sample response from the API based on the above cURL request:
-
-```json
-{
- "id": "envelope_xxxxxxxxxxxxx"
-}
-```
-
-The API key has access to your account and all its resources. Please keep it secure and do not share it with others. If you suspect your key has been compromised, you can revoke it from the same page you created it from.
diff --git a/apps/documentation/pages/developers/public-api/index.mdx b/apps/documentation/pages/developers/public-api/index.mdx
deleted file mode 100644
index 1c844c394..000000000
--- a/apps/documentation/pages/developers/public-api/index.mdx
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: Public API
-description: Learn how to interact with your documents programmatically using the Documenso public API.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# Public API
-
-Documenso provides a public REST API enabling you to interact with your documents programmatically. The API exposes various HTTP endpoints that allow you to perform operations such as:
-
-- Retrieving, uploading, deleting, and sending documents for signing
-- Creating, updating, and deleting recipients
-- Creating, updating, and deleting document fields
-
-The documentation walks you through creating API keys and using them to authenticate your API requests. You'll also learn about the available endpoints, request and response formats, and how to use the API.
-
-## API V2 - Stable
-
-Check out the [API V2 documentation](https://documen.so/api-v2-docs) for details about the API endpoints, request parameters, response formats, and authentication methods.
-
-Our new API V2 supports the following typed SDKs:
-
-- [TypeScript](https://github.com/documenso/sdk-typescript)
-- [Python](https://github.com/documenso/sdk-python)
-- [Go](https://github.com/documenso/sdk-go)
-
-
- For the staging API, please use the following base URL: `https://stg-app.documenso.com/api/v2/`
-
-
-## API V1 - Deprecated
-
-
- API V1 is deprecated.
-
- The V1 API will continue to be supported for the foreseeable future, but it is limited to
- Legacy Documents (Documents created using the old non-envelope editor).
-
- Important: To work with the new Envelope document system, you
- must use the
- V2 API.
-
-
-Check out the [API V1 documentation](https://app.documenso.com/api/v1/openapi) for details about the API endpoints, request parameters, response formats, and authentication methods.
-
-## Availability
-
-The API is available to individual users, teams and higher plans. [Fair Use](https://documen.so/fair) applies.
diff --git a/apps/documentation/pages/developers/public-api/rate-limits.mdx b/apps/documentation/pages/developers/public-api/rate-limits.mdx
deleted file mode 100644
index 82ee1b046..000000000
--- a/apps/documentation/pages/developers/public-api/rate-limits.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: Rate Limits
-description: Learn about the rate limits for the Documenso Public API.
----
-
-import { Callout } from 'nextra/components';
-
-# Rate Limits
-
-Documenso enforces rate limits on all API endpoints to ensure service stability.
-
-## HTTP Rate Limits
-
-**Limit:** 100 requests per minute per IP address
-**Response:** 429 Too Many Requests
-
-### Rate Limit Response
-
-```json
-{
- "error": "Too many requests, please try again later."
-}
-```
-
-
- No rate limit headers are currently provided. When you receive a 429 response, wait at least 60
- seconds before retrying.
-
-
-## Resource Limits
-
-Beyond HTTP rate limits, your account has usage limits based on your subscription plan.
-
-### Plan Limits
-
-| Resource | Free | Paid | Self-hosted | Enterprise |
-| ---------------- | ---- | --------- | ----------- | ---------- |
-| Documents/month | 5 | Unlimited | Unlimited | Unlimited |
-| Total Recipients | 10 | Unlimited | Unlimited | Unlimited |
-| Direct Templates | 3 | Unlimited | Unlimited | Unlimited |
-
-### Error Response
-
-When you exceed a resource limit:
-
-```json
-{
- "error": "You have reached your document limit for this month. Please upgrade your plan.",
- "code": "LIMIT_EXCEEDED",
- "statusCode": 400
-}
-```
-
-## Error Codes
-
-| Code | Status | Description |
-| ------------------- | ------ | ----------------------------- |
-| `TOO_MANY_REQUESTS` | 429 | HTTP rate limit exceeded |
-| `LIMIT_EXCEEDED` | 400 | Resource usage limit exceeded |
diff --git a/apps/documentation/pages/developers/public-api/reference.mdx b/apps/documentation/pages/developers/public-api/reference.mdx
deleted file mode 100644
index ab8c57bc8..000000000
--- a/apps/documentation/pages/developers/public-api/reference.mdx
+++ /dev/null
@@ -1,456 +0,0 @@
----
-title: API Reference
-description: Reference documentation for the Documenso public API.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# API Reference
-
-On this page we will refer to both Documents and Templates as Envelopes for convenience, unless otherwise specified.
-
-
- This page is used to demonstrate some of the endpoints and how to use them. For the full API
- reference, please see the [API Reference](https://openapi.documenso.com/).
-
-
-## Get Envelope
-
-For the vast majority of use cases, you will need to retrieve the envelope to get details for further operations.
-
-The main details you generally want to extract are the following:
-
-- **Recipients** - The individuals who will be signing the document
-- **Fields** - The fields the user will sign
-- **Items** - The PDF files the user will see and sign
-
-This is done by doing a the following GET [request](https://openapi.documenso.com/reference#tag/envelope/POST/envelope/create)
-
-```sh
-curl -X GET "https://app.documenso.com/api/v2/envelope/envelope_xxxxxxxxxxxxx" \
- -H "Authorization: api_xxxxxxxxxxxxxx"
-```
-
-A successful response looks as follows:
-
-```json
-{
- "internalVersion": 2,
- "type": "TEMPLATE",
- "status": "DRAFT",
- "source": "TEMPLATE",
- "visibility": "EVERYONE",
- "templateType": "PRIVATE",
- "id": "envelope_xxxxxxxxxxxxxxxx",
- "secondaryId": "template_9",
- "externalId": null,
- "createdAt": "2025-11-12T11:36:38.391Z",
- "updatedAt": "2025-11-12T11:36:55.648Z",
- "completedAt": null,
- "deletedAt": null,
- "title": "Title",
- "recipients": [
- {
- "envelopeId": "envelope_xxxxxxxxxxxxxxxx",
- "role": "SIGNER",
- "readStatus": "NOT_OPENED",
- "signingStatus": "NOT_SIGNED",
- "sendStatus": "NOT_SENT",
- "id": 0,
- "email": "recipient+1@documenso.com",
- "name": "",
- "token": "cxH2Ss79Hj94M1U3PxRAG",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": null,
- "authOptions": {
- "accessAuth": [],
- "actionAuth": []
- },
- "signingOrder": 1,
- "rejectionReason": null
- }
- ]
- "envelopeItems": [
- {
- "envelopeId": "envelope_xxxxxxxxxxxxxxxx",
- "id": "envelope_item_xxxxxxxxxxxxxxxxx",
- "title": "FileOne",
- "order": 1
- }
- ],
- // Other attributes
-}
-```
-
-## Create Envelope
-
-This example request will create a document with the following:
-
-- Two PDF files
-- Two recipients with one field each
-
-You will need to:
-
-- Replace api_xxxxxxxxxxxxxx with your API key
-- Replace the file paths with the actual paths to your files
-
-Note that the identifier on a field is linking to the files you upload. It can either be the index of the file or the filename. In this example it uses the index of the file.
-
-```sh
-curl -X POST "https://app.documenso.com/api/v2/envelope/create" \
- -H "Authorization: api_xxxxxxxxxxxxxx" \
- -H "Content-Type: multipart/form-data" \
- -F 'payload={
- "type": "DOCUMENT",
- "title": "Envelope Full Field Test",
- "recipients": [
- {
- "email": "recipient+1@example.com",
- "name": "Recipient One",
- "role": "SIGNER",
- "fields": [
- {
- "identifier": 0,
- "type": "SIGNATURE",
- "page": 1,
- "positionX": 0,
- "positionY": 0,
- "width": 50,
- "height": 50
- }
- ]
- },
- {
- "email": "recipient-2@example.com",
- "name": "Recipient Two",
- "role": "SIGNER",
- "fields": [
- {
- "identifier": 1,
- "type": "SIGNATURE",
- "page": 1,
- "positionX": 0,
- "positionY": 0,
- "width": 50,
- "height": 50
- }
- ]
- }
- ]
- }' \
- -F "files=@./field-font-alignment.pdf;type=application/pdf" \
- -F "files=@./field-meta.pdf;type=application/pdf"
-```
-
-
- See the full request and response formats for the create endpoint
- [here](https://openapi.documenso.com/reference#tag/envelope/POST/envelope/create)
-
-
-## Use Template
-
-Documenso allows you to generate documents from templates. This is useful when you have a standard document format you want to reuse.
-
-The API endpoint for generating a document from a template is `/api/v2/envelopes/use`, and it takes a JSON payload with the following fields:
-
-
- See the full request and response formats for the use endpoint
- [here](https://openapi.documenso.com/reference#tag/envelope/POST/envelope/use)
-
-
-
-
-### Grab the Template ID
-
-The first step is to retrieve the ID of the template you want to use. This can be done via the API or from the Documenso UI.
-
-You can get the ID by navigating to the template page and looking at the URL. The ID is the last part of the URL which looks like this "envelope_xxxxxxxx"
-
-### Retrieve the Recipient(s) ID(s)
-
-Once you have the template ID, you will want to retrieve the full template so you can see the recipients.
-
-This is optional, and you only will want to do this if you want to modify the recipient details prior to creating the new document.
-
-See the [Get Envelope](#get-envelope) section for more details on how to retrieve the envelope.
-
-### Generate the Document
-
-To generate a document from the template, you need to make a POST request to the [`/api/v2/envelope/use`](https://openapi.documenso.com/reference#tag/envelope/POST/envelope/use) endpoint.
-
-You will need to replace the following:
-
-- `api_xxxxxxxxxxxxxx` with your API key
-- `envelope_xxxxxxxxxxxxxxx` with the template ID
-- `RECIPIENT_ID_HERE` with the recipient ID you want to modify prior to sending
-- `RECIPIENT_EMAIL_HERE` with the new recipient email you want to use
-- `RECIPIENT_NAME_HERE` with the new recipient name you want to use
-
-If you want to send the document immediately, you can add the `distributeDocument` parameter to the payload.
-
-```sh
-curl -X POST "https://app.documenso.com/api/v2/envelope/use" \
- -H "Authorization: api_xxxxxxxxxxxxxx" \
- -H "Content-Type: multipart/form-data" \
- -F 'payload={
- "envelopeId": "envelope_xxxxxxxxxxxxxxx",
- "recipients": [
- {
- "id": RECIPIENT_ID_HERE,
- "email": "RECIPIENT_EMAIL_HERE",
- "name": "RECIPIENT_NAME_HERE"
- }
- ]
- }'
-```
-
-#### Generate the Document with Custom Files
-
-You can also generate a document from a template using custom PDF files to replace the template's default PDF files.
-
-To do this, you will need to grab the `envelopeItemId` of the item you want to replace, this is found in the GET request in the previous step.
-
-You will need to replace the following:
-
-- `CUSTOM_FILE_NAME_HERE.pdf` with the custom file name
-- `envelope_item_xxxxxxxxxxxxxxxxx` with the `envelopeItemId` of the item you want to replace
-
-```sh
-curl -X POST "https://app.documenso.com/api/v2/envelope/use" \
- -H "Authorization: api_xxxxxxxxxxxxxx" \
- -H "Content-Type: multipart/form-data" \
- -F 'payload={
- "envelopeId": "envelope_xxxxxxxxxxxxxxx",
- "recipients": [
- {
- "id": RECIPIENT_ID_HERE,
- "email": "RECIPIENT_EMAIL_HERE",
- "name": "RECIPIENT_NAME_HERE"
- }
- ],
- "customDocumentData": [
- {
- "identifier": "CUSTOM_FILE_NAME_HERE.pdf",
- "envelopeItemId": "envelope_item_xxxxxxxxxxxxxxxxx"
- }
- ]
- }' \
- -F "files=@./CUSTOM_FILE_NAME_HERE.pdf;type=application/pdf"
-```
-
-You can now access the document in your Documenso account dashboard.
-
-#### Pre-fill Fields On Document Creation
-
-The API allows you to pre-fill fields on document creation. This is useful when you want to create a document from an existing template and pre-fill the fields with specific values.
-
-```json
-{
- "prefillFields": [
- {
- "id": 21,
- "type": "text",
- "label": "my-label",
- "placeholder": "my-placeholder",
- "value": "my-value"
- },
- {
- "id": 22,
- "type": "number",
- "label": "my-label",
- "placeholder": "my-placeholder",
- "value": "123"
- },
- {
- "id": 23,
- "type": "checkbox",
- "label": "my-label",
- "placeholder": "my-placeholder",
- "value": ["option-1", "option-2"]
- }
- ]
- // Other payload properties...
-}
-```
-
-
-
-## Add Recipients
-
-The API allows you to add recipients to an envelope via the [`/api/v2/envelope/recipient/create-many`](https://openapi.documenso.com/reference#tag/envelope-recipients/POST/envelope/recipient/create-many) endpoint.
-
-The following is an example of a request which creates 2 new recipients on the envelope.
-
-```sh
-curl https://app.documenso.com/api/v2/envelope/recipient/create-many \
- --request POST \
- --header 'Authorization: api_xxxxxxxxxxxxxx' \
- --header 'Content-Type: application/json' \
- --data '{
- "envelopeId": "envelope_brxkyaxywuxkyeuv",
- "data": [
- {
- "name": "Recipient Name",
- "email": "example@documenso.com",
- "role": "SIGNER"
- },
- {
- "name": "Recipient Two",
- "email": "example+2@documenso.com",
- "role": "APPROVER"
- }
- ]
- }'
-```
-
-## Add Fields
-
-The API allows you to add fields to an envelope via the [`/api/v2/envelope/field/create-many`](https://openapi.documenso.com/reference#tag/envelope-fields/POST/envelope/field/create-many) endpoint.
-
-Before adding fields to an envelope, you will need the following details:
-
-- **Envelope ID** - Which envelope the field will be added to
-- **Recipient ID** - Which recipient the field will be added to
-- **Envelope Item ID** - Which file the field will be added to. If blank, the field will be added to the first file.
-
-See the [Get Envelope](#get-envelope) section for more details on how to retrieve these details.
-
-### Coordinate-Based Positioning
-
-The following is an example of a request which creates 2 new fields on the first page of the envelope.
-
-Note that width, height, positionX and positionY are percentage numbers between 0 and 100, which scale the field relative to the size of the PDF.
-
-```sh
-curl https://app.documenso.com/api/v2/envelope/field/create-many \
- --request POST \
- --header 'Authorization: api_xxxxxxxxxxxxxx' \
- --header 'Content-Type: application/json' \
- --data '{
- "envelopeId": "envelope_xxxxxxxxxx",
- "data": [
- {
- "recipientId": recipient_id_here,
- "envelopeItemId": "envelope_item_id_here",
- "type": "TEXT",
- "page": 1,
- "positionX": 0,
- "positionY": 0,
- "width": 50,
- "height": 50,
- "fieldMeta": {
- "type": "text",
- "label": "First test field"
- }
- },
- {
- "recipientId": recipient_id_here,
- "envelopeItemId": "envelope_item_id_here",
- "type": "TEXT",
- "page": 1,
- "positionX": 50,
- "positionY": 50,
- "width": 50,
- "height": 50,
- "fieldMeta": {
- "type": "text",
- "label": "Second test field"
- }
- }
- ]
- }'
-```
-
-### Placeholder-Based Positioning
-
-Instead of specifying exact coordinates, you can position fields using placeholder text in the PDF. The API will search for the text and place the field at that location.
-
-This is useful when:
-
-- You have PDFs with designated placeholder text (e.g., `{{signature}}`, `[SIGN HERE]`)
-- You want field positions to adapt to document content changes
-- You're working with templated documents generated from other systems
-
-```sh
-curl https://app.documenso.com/api/v2/envelope/field/create-many \
- --request POST \
- --header 'Authorization: api_xxxxxxxxxxxxxx' \
- --header 'Content-Type: application/json' \
- --data '{
- "envelopeId": "envelope_xxxxxxxxxx",
- "data": [
- {
- "recipientId": recipient_id_here,
- "type": "SIGNATURE",
- "placeholder": "{{signature}}"
- },
- {
- "recipientId": recipient_id_here,
- "type": "NAME",
- "placeholder": "{{name}}",
- "width": 30,
- "height": 5
- }
- ]
- }'
-```
-
-#### Placeholder Parameters
-
-| Parameter | Type | Required | Description |
-| ------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
-| `placeholder` | string | Yes | Text to search for in the PDF. The field is placed at the location of this text. |
-| `width` | number | No | Override the field width (percentage). If omitted, uses the placeholder text width. |
-| `height` | number | No | Override the field height (percentage). If omitted, uses the placeholder text height. |
-| `matchAll` | boolean | No | When `true`, creates a field at every occurrence of the placeholder. Default is `false` (first occurrence only). |
-
-
- The placeholder text is automatically covered with a white rectangle after field creation, so it
- won't appear in the final signed document.
-
-
-#### Multiple Occurrences
-
-If your PDF contains the same placeholder text multiple times (e.g., initials on every page), use `matchAll: true` to create fields at all occurrences:
-
-```json
-{
- "recipientId": 123,
- "type": "INITIALS",
- "placeholder": "{{initials}}",
- "matchAll": true
-}
-```
-
-This will create one INITIALS field for each occurrence of `{{initials}}` in the PDF.
-
-#### Mixing Positioning Methods
-
-You can combine coordinate-based and placeholder-based positioning in the same request:
-
-```json
-{
- "envelopeId": "envelope_xxxxxxxxxx",
- "data": [
- {
- "recipientId": 123,
- "type": "SIGNATURE",
- "placeholder": "{{signature}}"
- },
- {
- "recipientId": 123,
- "type": "DATE",
- "page": 1,
- "positionX": 70,
- "positionY": 85,
- "width": 20,
- "height": 3
- }
- ]
-}
-```
-
-Field meta allows you to further configure fields, for example it will allow you to add multiple items for checkboxes or radios.
-
-A successful request will return a JSON response with the newly added fields.
diff --git a/apps/documentation/pages/developers/public-api/versioning.mdx b/apps/documentation/pages/developers/public-api/versioning.mdx
deleted file mode 100644
index 6aca5bcfc..000000000
--- a/apps/documentation/pages/developers/public-api/versioning.mdx
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: API Versioning
-description: Versioning information for the Documenso public API.
----
-
-import { Callout } from 'nextra/components';
-
-# API Versioning
-
-Documenso uses API versioning to manage changes to the public API. This allows us to introduce new features, fix bugs, and make other changes without breaking existing integrations.
-
-The current version of the API is `v2`.
-
-The API version is specified in the URL. For example, the base URL for the `v2` API is `https://app.documenso.com/api/v2`.
-
-We may make changes to the API without incrementing the version number. We will always try to avoid breaking changes, but in some cases, it may be necessary to make changes that are not backward compatible. In these cases, we will increment the version number and provide information about the changes in the release notes.
-
-Also, we may deprecate certain features or endpoints in the API. When we deprecate a feature or endpoint, we will provide information about the deprecation in the release notes and give a timeline for when the feature or endpoint will be removed.
diff --git a/apps/documentation/pages/developers/self-hosting/_meta.js b/apps/documentation/pages/developers/self-hosting/_meta.js
deleted file mode 100644
index b8edc6838..000000000
--- a/apps/documentation/pages/developers/self-hosting/_meta.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export default {
- index: 'Getting Started',
- 'signing-certificate': 'Signing Certificate',
- 'how-to': 'How To',
- 'setting-up-oauth-providers': 'Setting up OAuth Providers',
- telemetry: 'Telemetry',
- 'ai-features': 'AI Recipient & Field Detection',
-};
diff --git a/apps/documentation/pages/developers/self-hosting/ai-features.mdx b/apps/documentation/pages/developers/self-hosting/ai-features.mdx
deleted file mode 100644
index 6b7e934b0..000000000
--- a/apps/documentation/pages/developers/self-hosting/ai-features.mdx
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: AI Recipient & Field Detection (Self-hosting)
-description: Configure Google Vertex AI so Documenso can detect recipients and fields automatically.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# AI Recipient & Field Detection (Self-hosting)
-
-This guide covers how to enable the AI recipient and field detection features when you self-host Documenso.
-
-## What this enables
-
-- Detect recipients from uploaded PDFs (roles, names, emails when present).
-- Detect and place fields (signature, initials, name, email, date, text, number, radio, checkbox) onto draft envelopes.
-- Built-in rate limits (3 requests per minute per IP) to prevent abuse.
-
-## Prerequisites
-
-- A Google Cloud project with the **Vertex AI API** enabled and billing active.
-- A **Vertex AI Express API key** with access to Gemini models (create via the [Vertex AI Express flow](https://cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview) and manage keys in [API keys](https://cloud.google.com/vertex-ai/generative-ai/docs/start/api-keys)).
-- Documenso version that includes the AI detection feature and the corresponding database migration.
-
-## Configure environment variables
-
-Add these variables to your deployment `.env` (or secret manager):
-
-```
-GOOGLE_VERTEX_PROJECT_ID=""
-GOOGLE_VERTEX_API_KEY=""
-# Optional, defaults to "global"
-GOOGLE_VERTEX_LOCATION="global"
-```
-
-
- Use a region close to your users if you need data residency considerations (e.g. `europe-west1`).
- If you omit the location, Documenso uses `global`. Not all models are available in every region;
- if a model is unavailable, switch to a supported region.
-
-
-## Deploy with the published container
-
-- Use the official Documenso image (DockerHub or GHCR) and supply the Vertex env vars above.
-- Ensure migrations run on startup (the container runs `prisma migrate deploy` in production mode).
-- Restart the container after adding or changing Vertex env vars.
-
-## Enable the feature in Documenso
-
-Once the service is running with the Vertex env vars:
-
-
-### Organisation settings
-
-Go to **Settings → Document Preferences → AI Features** and set to **Enabled**. Teams that inherit organisation defaults will pick this up.
-
-### Team settings
-
-If a team overrides organisation defaults, go to **Team Settings → Document Preferences → AI Features** and choose **Enabled** (or **Inherit** to follow the organisation).
-
-### Verify in the editor
-
-Open a draft envelope. In **Recipients**, you should see the sparkle button for AI detection. In **Fields**, you should see **Detect with AI** available.
-
-
-
-## Troubleshooting
-
-- **Too many requests**: Wait a minute or two and retry (rate limit is 3/min per IP).
-- **AI options hidden**: Ensure the env vars are set, the server was restarted after setting them, and `aiFeaturesEnabled` is enabled at organisation/team level.
-- **Detection fails immediately**: Confirm the Vertex API key is valid and the project has Vertex AI enabled. Check server logs for status codes from Vertex.
-
-If issues persist, recheck env vars, restart the service, and confirm the Prisma migration was applied.
diff --git a/apps/documentation/pages/developers/self-hosting/how-to.mdx b/apps/documentation/pages/developers/self-hosting/how-to.mdx
deleted file mode 100644
index e12e05529..000000000
--- a/apps/documentation/pages/developers/self-hosting/how-to.mdx
+++ /dev/null
@@ -1,399 +0,0 @@
----
-title: How to Self-Host Documenso
-description: Learn how to self-host Documenso on your server or cloud infrastructure using Docker or other deployment methods.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-import { CallToAction } from '../../../components/call-to-action';
-
-# Self Hosting
-
-We support various deployment methods and are actively working on adding more. Please let us know if you have a specific deployment method in mind!
-
-## Manual Deployment
-
-The following guide will walk you through setting up Documenso manually on your server or cloud infrastructure.
-
-
-### Clone the Repository
-
-The first step is to clone the repository:
-
-```bash
-git clone https://github.com/documenso/documenso.git
-```
-
-### Configure the Environment Variables
-
-Navigate to the `documenso` folder and create a `.env` file from the example `.env.example` file:
-
-```bash
-cp .env.example .env
-```
-
-Open the `.env` file and fill in the following variables:
-
-```bash
-- NEXTAUTH_SECRET
-- NEXT_PUBLIC_WEBAPP_URL
-- NEXT_PRIVATE_DATABASE_URL
-- NEXT_PRIVATE_DIRECT_DATABASE_URL
-- NEXT_PRIVATE_SMTP_FROM_NAME
-- NEXT_PRIVATE_SMTP_FROM_ADDRESS
-```
-
-
- If you use a reverse proxy in front of Documenso, don't forget to provide the public URL for the
- `NEXT_PUBLIC_WEBAPP_URL` variable!
-
-
-### Install the Dependencies
-
-Install the project dependencies as follows:
-
-```bash
-npm i
-npm run build
-npm run prisma:migrate-deploy
-```
-
-### Start the Application
-
-Finally, start the application:
-
-```bash
-npm run start
-```
-
-This will start the server on `localhost:3000`. Any reverse proxy can handle the front end and SSL termination.
-
-
- If you want to run with another port than `3000`, you can start the application with `next -p ` from the `apps/remix` folder.
-
-
-
-
-## Docker
-
-The following guide will walk you through setting up Documenso using Docker. You can choose between a Docker Compose production setup or a standalone container.
-
-We provide a Docker container for Documenso, published on both DockerHub and GitHub Container Registry.
-
-- [DockerHub](https://hub.docker.com/r/documenso/documenso)
-- [GitHub Container Registry](https://ghcr.io/documenso/documenso)
-
-You can pull the Docker image from either of these registries and run it with your preferred container hosting provider.
-
-Please note that you must provide environment variables for connecting to the database, mail server, and other services.
-
-### Option 1: Production Docker Compose Setup
-
-This setup includes a PostgreSQL database and the Documenso application. You will need to provide your own SMTP details using environment variables.
-
-
-
-### Download the Docker Compose File
-
-Download the Docker Compose file from the Documenso repository - [compose.yml](https://raw.githubusercontent.com/documenso/documenso/release/docker/production/compose.yml).
-
-### Navigate to the `compose.yml` File
-
-Once downloaded, navigate to the directory containing the `compose.yml` file.
-
-### Set Up Environment Variables
-
-Create a `.env` file in the same directory as the `compose.yml` file.
-
-Then add your SMTP details as well as the following environment variables:
-
-```bash
-NEXTAUTH_SECRET=""
-NEXT_PRIVATE_ENCRYPTION_KEY=""
-NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=""
-NEXT_PUBLIC_WEBAPP_URL=""
-NEXT_PRIVATE_SMTP_TRANSPORT="smtp-auth"
-NEXT_PRIVATE_SMTP_HOST=""
-NEXT_PRIVATE_SMTP_PORT=
-NEXT_PRIVATE_SMTP_USERNAME=""
-NEXT_PRIVATE_SMTP_PASSWORD=""
-```
-
-For full AI setup details (including model availability notes), see the [AI Recipient & Field Detection (Self-hosting)](./ai-features) page.
-
-### Set Up Your Signing Certificate
-
-
- This is the most common source of issues for self-hosters. Please follow these steps carefully.
-
-
-The `cert.p12` file is required to sign and encrypt documents. You have three options:
-
-#### Option A: Generate Certificate Inside Container (Recommended)
-
-This method avoids file permission issues by creating the certificate directly inside the Docker container:
-
-1. Start your containers:
-
- ```bash
- docker-compose up -d
- ```
-
-2. Set certificate password securely and generate certificate inside the container:
-
- ```bash
- # Set certificate password securely (won't appear in command history)
- read -s -p "Enter certificate password: " CERT_PASS
- echo
-
- # Generate certificate inside container using environment variable
- docker exec -e CERT_PASS="$CERT_PASS" -it documenso-production-documenso-1 bash -c "
- mkdir -p /app/certs && \
- openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
- -keyout /tmp/private.key \
- -out /tmp/certificate.crt \
- -subj '/C=US/ST=State/L=City/O=Organization/CN=localhost' && \
- openssl pkcs12 -export -out /app/certs/cert.p12 \
- -inkey /tmp/private.key -in /tmp/certificate.crt \
- -passout env:CERT_PASS && \
- rm /tmp/private.key /tmp/certificate.crt
- "
- ```
-
-3. Add the certificate passphrase to your `.env` file:
-
- ```bash
- NEXT_PRIVATE_SIGNING_PASSPHRASE="your_password_here"
- ```
-
-4. Restart the container to apply changes:
- ```bash
- docker-compose restart documenso
- ```
-
-#### Option B: Use an Existing Certificate File
-
-If you have an existing `.p12` certificate file:
-
-1. **Place your certificate file** in an accessible location on your host system
-2. **Set proper permissions:**
-
- ```bash
- # Make sure the certificate is readable
- chmod 644 /path/to/your/cert.p12
-
- # For Docker, ensure proper ownership
- chown 1001:1001 /path/to/your/cert.p12
- ```
-
-3. **Update the volume binding** in the `compose.yml` file:
-
- ```yaml
- volumes:
- - /path/to/your/cert.p12:/opt/documenso/cert.p12:ro
- ```
-
-4. **Add certificate configuration** to your `.env` file:
- ```bash
- NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12
- NEXT_PRIVATE_SIGNING_PASSPHRASE=your_certificate_password
- ```
-
-
- Your certificate MUST have a password. Certificates without passwords will cause "Failed to get
- private key bags" errors.
-
-
-After setting up your certificate, save the `compose.yml` file and run the following command to start the containers:
-
-```bash
-docker-compose --env-file ./.env up -d
-```
-
-The command will start the PostgreSQL database and the Documenso application containers.
-
-### Access the Application
-
-Access the Documenso application by visiting `http://localhost:3000` in your web browser.
-
-
-
-### Option 2: Standalone Docker Container
-
-If you prefer to host the Documenso application on a specific container provider, use the pre-built Docker image from DockerHub or GitHub's Package Registry. You will need to provide your own database and SMTP host.
-
-
-
-### Pull the Docker Image
-
-Pull the Documenso Docker image from DockerHub:
-
-```bash
-docker pull documenso/documenso
-```
-
-Or, pull the image from GitHub Container Registry:
-
-```bash
-docker pull ghcr.io/documenso/documenso
-```
-
-### Run the Docker Container
-
-Run the Docker container with the required environment variables:
-
-```bash
-docker run -d \
- -p 3000:3000 \
- -e NEXTAUTH_SECRET=""
- -e NEXT_PRIVATE_ENCRYPTION_KEY=""
- -e NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=""
- -e NEXT_PUBLIC_WEBAPP_URL=""
- -e NEXT_PRIVATE_DATABASE_URL=""
- -e NEXT_PRIVATE_DIRECT_DATABASE_URL=""
- -e NEXT_PRIVATE_SMTP_TRANSPORT=""
- -e NEXT_PRIVATE_SMTP_FROM_NAME=""
- -e NEXT_PRIVATE_SMTP_FROM_ADDRESS=""
- -v /path/to/your/keyfile.p12:/opt/documenso/cert.p12
- documenso/documenso
-```
-
-Replace the placeholders with the actual values.
-
-### Access the Application
-
-You can access the Documenso application by visiting the URL you provided for the `NEXT_PUBLIC_WEBAPP_URL` environment variable in your web browser.
-
-
-
-### Advanced Configuration
-
-The environment variables listed above are a subset of those available for configuring Documenso. The table below provides a complete list of environment variables and their descriptions.
-
-For AI setup specifics, see the [AI Recipient & Field Detection (Self-hosting)](./ai-features) page.
-
-| Variable | Description |
-| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `PORT` | The port on which the Documenso application runs. It defaults to `3000`. |
-| `NEXTAUTH_SECRET` | The secret key used by NextAuth.js for encryption and signing. |
-| `NEXT_PRIVATE_ENCRYPTION_KEY` | The primary encryption key for symmetric encryption and decryption (at least 32 characters). |
-| `NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY` | The secondary encryption key for symmetric encryption and decryption (at least 32 characters). |
-| `NEXT_PRIVATE_GOOGLE_CLIENT_ID` | The Google client ID for Google authentication (optional). |
-| `NEXT_PRIVATE_GOOGLE_CLIENT_SECRET` | The Google client secret for Google authentication (optional). |
-| `NEXT_PRIVATE_MICROSOFT_CLIENT_ID` | The Microsoft client ID for Microsoft authentication (optional). |
-| `NEXT_PRIVATE_MICROSOFT_CLIENT_SECRET` | The Microsoft client secret for Microsoft authentication (optional). |
-| `NEXT_PRIVATE_OIDC_CLIENT_ID` | The OIDC client ID for OIDC authentication (optional). |
-| `NEXT_PRIVATE_OIDC_CLIENT_SECRET` | The OIDC client secret for OIDC authentication (optional). |
-| `NEXT_PRIVATE_OIDC_WELL_KNOWN` | The well-known URL for the OIDC provider (optional). |
-| `NEXT_PRIVATE_OIDC_PROVIDER_LABEL` | The label to display for the OIDC provider button (optional). |
-| `NEXT_PRIVATE_OIDC_SKIP_VERIFY` | Whether to skip email verification for OIDC accounts (optional, default `false`). |
-| `NEXT_PUBLIC_WEBAPP_URL` | The URL for the web application. |
-| `NEXT_PUBLIC_SUPPORT_EMAIL` | The support email address displayed to users (default `support@documenso.com`). |
-| `NEXT_PRIVATE_DATABASE_URL` | The URL for the primary database connection (with connection pooling). |
-| `NEXT_PRIVATE_DIRECT_DATABASE_URL` | The URL for the direct database connection (without connection pooling). |
-| `NEXT_PRIVATE_SIGNING_TRANSPORT` | The signing transport to use. Available options: local (default), gcloud-hsm |
-| `NEXT_PRIVATE_SIGNING_PASSPHRASE` | The passphrase for the key file. |
-| `NEXT_PRIVATE_SIGNING_LOCAL_FILE_CONTENTS` | The base64-encoded contents of the key file will be used instead of the file path. |
-| `NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH` | The path to the key file, default `/opt/documenso/cert.p12`. |
-| `NEXT_PRIVATE_SIGNING_TIMESTAMP_AUTHORITY` | Comma-separated list of timestamp authority URLs for PDF signing. Enables LTV and archival timestamps. |
-| `NEXT_PUBLIC_SIGNING_CONTACT_INFO` | Contact info to embed in PDF signatures. Defaults to the webapp URL. |
-| `NEXT_PRIVATE_USE_LEGACY_SIGNING_SUBFILTER` | Set to "true" to use the legacy adbe.pkcs7.detached subfilter instead of ETSI.CAdES.detached. |
-| `NEXT_PUBLIC_UPLOAD_TRANSPORT` | The transport for file uploads (database or s3). |
-| `NEXT_PRIVATE_UPLOAD_ENDPOINT` | The endpoint for the S3 storage transport (for third-party S3-compatible providers). |
-| `NEXT_PRIVATE_UPLOAD_FORCE_PATH_STYLE` | Whether to force path-style URLs for the S3 storage transport. |
-| `NEXT_PRIVATE_UPLOAD_REGION` | The region for the S3 storage transport (defaults to us-east-1). |
-| `NEXT_PRIVATE_UPLOAD_BUCKET` | The bucket to use for the S3 storage transport. |
-| `NEXT_PRIVATE_UPLOAD_ACCESS_KEY_ID` | The access key ID for the S3 storage transport. |
-| `NEXT_PRIVATE_UPLOAD_SECRET_ACCESS_KEY` | The secret access key for the S3 storage transport. |
-| `NEXT_PRIVATE_SMTP_TRANSPORT` | The transport to send emails (smtp-auth, smtp-api, resend, or mailchannels). |
-| `NEXT_PRIVATE_SMTP_HOST` | The host for the SMTP server for SMTP transports. |
-| `NEXT_PRIVATE_SMTP_PORT` | The port for the SMTP server for SMTP transports. |
-| `NEXT_PRIVATE_SMTP_USERNAME` | The username for the SMTP server for the `smtp-auth` transport. |
-| `NEXT_PRIVATE_SMTP_PASSWORD` | The password for the SMTP server for the `smtp-auth` transport. |
-| `NEXT_PRIVATE_SMTP_APIKEY_USER` | The API key user for the SMTP server for the `smtp-api` transport. |
-| `NEXT_PRIVATE_SMTP_APIKEY` | The API key for the SMTP server for the `smtp-api` transport. |
-| `NEXT_PRIVATE_SMTP_SECURE` | Whether to force the use of TLS for the SMTP server for SMTP transports. |
-| `NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS` | Whether to ignore TLS errors for the SMTP server (useful for self-signed certificates). |
-| `NEXT_PRIVATE_SMTP_FROM_ADDRESS` | The email address for the "from" address. |
-| `NEXT_PRIVATE_SMTP_FROM_NAME` | The sender name for the "from" address. |
-| `NEXT_PRIVATE_RESEND_API_KEY` | The API key for Resend.com for the `resend` transport. |
-| `NEXT_PRIVATE_MAILCHANNELS_API_KEY` | The optional API key for MailChannels (if using a proxy) for the `mailchannels` transport. |
-| `NEXT_PRIVATE_MAILCHANNELS_ENDPOINT` | The optional endpoint for the MailChannels API (if using a proxy) for the `mailchannels` transport. |
-| `NEXT_PRIVATE_MAILCHANNELS_DKIM_DOMAIN` | The domain for DKIM signing with MailChannels for the `mailchannels` transport. |
-| `NEXT_PRIVATE_MAILCHANNELS_DKIM_SELECTOR` | The selector for DKIM signing with MailChannels for the `mailchannels` transport. |
-| `NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY` | The private key for DKIM signing with MailChannels for the `mailchannels` transport. |
-| `NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT` | The maximum document upload limit displayed to the user (in MB). |
-| `NEXT_PUBLIC_POSTHOG_KEY` | The optional PostHog key for analytics and feature flags. |
-| `NEXT_PUBLIC_DISABLE_SIGNUP` | Whether to disable user signups through the /signup page. |
-| `NEXT_PRIVATE_BROWSERLESS_URL` | The URL for a Browserless.io instance to generate PDFs (optional). |
-| `DOCUMENSO_DISABLE_TELEMETRY` | Set to `true` to disable anonymous telemetry (see [Telemetry](#telemetry) section below). |
-| `GOOGLE_VERTEX_PROJECT_ID` | Google Cloud project ID used for Vertex AI (required for AI detection). |
-| `GOOGLE_VERTEX_API_KEY` | Vertex AI Express API key with access to Gemini models (required for AI detection). See [AI Recipient & Field Detectionfor](./ai-features) for details. |
-| `GOOGLE_VERTEX_LOCATION` | Optional Vertex region, defaults to `global`. Not all models are available in every region. |
-
-## Telemetry
-
-Documenso collects anonymous telemetry data to help us understand how the software is being used and improve the product. This telemetry is **enabled by default** for self-hosted instances.
-
-### What We Collect
-
-We collect minimal, privacy-preserving data:
-
-- **App Version**: The version of Documenso you are running
-- **Installation ID**: A unique identifier for your installation (stored in your database)
-- **Node ID**: A unique identifier for each server/container instance (stored in the OS temp directory)
-
-We do **not** collect any personal data, document contents, user information, or usage patterns.
-
-### Events
-
-- **Server Startup**: Captured once when the server starts
-- **Server Heartbeat**: Captured every hour while the server is running
-
-### Disabling Telemetry
-
-To disable telemetry, set the following environment variable:
-
-```bash
-DOCUMENSO_DISABLE_TELEMETRY=true
-```
-
-This will completely disable all telemetry data collection.
-
-## Run as a Service
-
-You can run the application using a `systemd.service` file. Here is a simple example of the service running on port `3500` (using `3000` by default):
-
-```bash
-[Unit]
-Description=documenso
-After=network.target
-
-[Service]
-Environment=PATH=/path/to/your/node/binaries
-Type=simple
-User=www-data
-WorkingDirectory=/var/www/documenso/apps/remix
-ExecStart=/usr/bin/next start -p 3500
-TimeoutSec=15
-Restart=always
-
-[Install]
-WantedBy=multi-user.target
-```
-
-We offer several alternative deployment methods for Documenso if you need more options.
-
-## Railway
-
-[](https://railway.app/template/bG6D4p)
-
-## Render
-
-[](https://render.com/deploy?repo=https://github.com/documenso/documenso)
-
-## Koyeb
-
-[](https://app.koyeb.com/deploy?type=git&repository=github.com/documenso/documenso&branch=main&name=documenso-app&builder=dockerfile&dockerfile=/docker/Dockerfile)
-
-
diff --git a/apps/documentation/pages/developers/self-hosting/index.mdx b/apps/documentation/pages/developers/self-hosting/index.mdx
deleted file mode 100644
index 0da06a66b..000000000
--- a/apps/documentation/pages/developers/self-hosting/index.mdx
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Getting Started with Self-Hosting
-description: A step-by-step guide to setting up and hosting your own Documenso instance.
----
-
-import { CallToAction } from '../../../components/call-to-action';
-
-# Getting Started with Self-Hosting
-
-This is a step-by-step guide to setting up and hosting your own Documenso instance. Before getting started, [select the right license for you](/users/licenses).
-
-
diff --git a/apps/documentation/pages/developers/self-hosting/setting-up-oauth-providers.mdx b/apps/documentation/pages/developers/self-hosting/setting-up-oauth-providers.mdx
deleted file mode 100644
index efebb4092..000000000
--- a/apps/documentation/pages/developers/self-hosting/setting-up-oauth-providers.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: Setting up OAuth Providers
-description: Learn how to set up OAuth providers for your own instance of Documenso.
----
-
-## Google OAuth (Gmail)
-
-To use Google OAuth, you will need to create a Google Cloud Platform project and enable the Google Identity and Access Management (IAM) API. You will also need to create a new OAuth client ID and download the client secret.
-
-### Create and configure a new OAuth client ID
-
-1. Go to the [Google Cloud Platform Console](https://console.cloud.google.com/)
-2. From the projects list, select a project or create a new one
-3. If the APIs & services page isn't already open, open the console left side menu and select APIs & services
-4. On the left, click Credentials
-5. Click New Credentials, then select OAuth client ID
-6. When prompted to select an application type, select Web application
-7. Enter a name for your client ID, and click Create
-8. Click the download button to download the client secret
-9. Set the authorized javascript origins to `https://`
-10. Set the authorized redirect URIs to `https:///api/auth/callback/google`
-11. In the Documenso environment variables, set the following:
-
-```
-NEXT_PRIVATE_GOOGLE_CLIENT_ID=
-NEXT_PRIVATE_GOOGLE_CLIENT_SECRET=
-```
-
-Finally verify the signing in with Google works by signing in with your Google account and checking the email address in your profile.
-
-## Microsoft OAuth (Azure AD)
-
-To use Microsoft OAuth, you will need to create an Azure AD application registration in the Microsoft Azure portal. This will allow users to sign in with their Microsoft accounts.
-
-### Create and configure a new Azure AD application
-
-1. Go to the [Azure Portal](https://portal.azure.com/)
-2. Navigate to **Azure Active Directory** (or **Microsoft Entra ID** in newer Azure portals)
-3. In the left sidebar, click **App registrations**
-4. Click **New registration**
-5. Enter a name for your application (e.g., "Documenso")
-6. Under **Supported account types**, select **Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)** to allow any Microsoft account to sign in
-7. Under **Redirect URI**, select **Web** and enter: `https:///api/auth/callback/microsoft`
-8. Click **Register**
-
-### Configure the application
-
-1. After registration, you'll be taken to the app's overview page
-2. Copy the **Application (client) ID** - this will be your `NEXT_PRIVATE_MICROSOFT_CLIENT_ID`
-3. In the left sidebar, click **Certificates & secrets**
-4. Under **Client secrets**, click **New client secret**
-5. Add a description and select an expiration period
-6. Click **Add** and copy the **Value** (not the Secret ID) - this will be your `NEXT_PRIVATE_MICROSOFT_CLIENT_SECRET`
-7. In the Documenso environment variables, set the following:
-
-```
-NEXT_PRIVATE_MICROSOFT_CLIENT_ID=
-NEXT_PRIVATE_MICROSOFT_CLIENT_SECRET=
-```
diff --git a/apps/documentation/pages/developers/self-hosting/signing-certificate.mdx b/apps/documentation/pages/developers/self-hosting/signing-certificate.mdx
deleted file mode 100644
index a8d12d305..000000000
--- a/apps/documentation/pages/developers/self-hosting/signing-certificate.mdx
+++ /dev/null
@@ -1,73 +0,0 @@
----
-title: Signing Certificate
-description: Learn how to generate or buy a signing certificate for your Documenso instance.
----
-
-import { Callout, Steps } from 'nextra/components';
-
-# Generate or Buy
-
-Self-hosting your Documenso instance requires your own certificate to sign documents. [This article](https://documenso.com/blog/building-documenso-pt1) explains why.
-
-When it comes to certificates, you have two options:
-
-- generate your certificate
-- buy one from the Certificate Authority (CA)
-
-
- A self-signed certificate should suffice if your industry has no special signing regulation. For
- example, Deel.com makes hundreds of millions in revenue based on a platform without any signing
- certificate, making your self-signed instance technically more secure. Of course, this is not
- legal advice.
-
-
-## Generating A Certificate
-
-If you don't have special requirements for the signature of your signed documents, you can use a self-generated (self-signed) certificate.
-
-The main drawback is that mainstream PDF readers like Adobe won't recognize the signature as a trusted source or show a green checkmark. The certificate will still include your company/personal data to prove your Documenso instance signed the document. It also guarantees that the document wasn't altered after signing.
-
-You can generate your signing certificate by following [this guide](/developers/local-development/signing-certificate).
-
-## Buying a Certificate
-
-If you want more "officially backed" _(for lack of a better word)_ signatures, you will need to buy a certificate from a CA (Certificate Authority). If you want a green checkmark in Adobe PDF, you will need a vendor trusted by Adobe. Check out all Adobe vendors with a green checkmark for the signature on the [Adobe Trust List](https://helpx.adobe.com/acrobat/kb/approved-trust-list1.html).
-
-If you are based in Europe, it might make sense to go with a European one, though there is no hard requirement. While the pricing can vary from vendor to vendor, the certificate's properties don't. The usual case would be a corporate certificate detailing the company's name to which it was issued.
-
-### Technical Process
-
-Receiving your signing certificate is similar to receiving an SSL certificate. Since you need the actual certificate as part of the Documenso config, you must generate a secret private key and a CSR (Certificate Signing Request).
-
-
-
-### Generate a private key
-
-Generate a private key (on a secure machine or in an HSM, depending on your security needs and the provider's requirements).
-
-### Create a CSR
-
-Have the Certificate Authority sign the Certificate Signing Request.
-
-### Configure Documenso to use the certificate
-
-Configure your instance to use the new certificate by configuring the following environment variables in your `.env` file:
-
-| Environment Variable | Description |
-| :------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |
-| `NEXT_PRIVATE_SIGNING_TRANSPORT` | The transport used for document signing. Available options: local (default), gcloud-hsm |
-| `NEXT_PRIVATE_SIGNING_PASSPHRASE` | The passphrase for the local file-based signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH` | The local file path to the .p12 file to use for the local signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_LOCAL_FILE_CONTENTS` | The base64-encoded contents of the .p12 file to use for the local signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_GCLOUD_HSM_KEY_PATH` | The Google Cloud HSM key path for the gcloud-hsm signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_GCLOUD_HSM_PUBLIC_CRT_FILE_PATH` | The path to the Google Cloud HSM public certificate file to use for the gcloud-hsm signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_GCLOUD_HSM_PUBLIC_CRT_FILE_CONTENTS` | The base64-encoded contents of the Google Cloud HSM public certificate file for the gcloud-hsm signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_GCLOUD_APPLICATION_CREDENTIALS_CONTENTS` | The base64-encoded Google Cloud Credentials for the gcloud-hsm signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_GCLOUD_HSM_CERT_CHAIN_FILE_PATH` | The path to the certificate chain file for the gcloud-hsm signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_GCLOUD_HSM_CERT_CHAIN_CONTENTS` | The base64-encoded contents of the certificate chain for the gcloud-hsm signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_GCLOUD_HSM_SECRET_MANAGER_CERT_PATH` | The Google Secret Manager path to retrieve the certificate for the gcloud-hsm signing transport. This field is optional. |
-| `NEXT_PRIVATE_SIGNING_TIMESTAMP_AUTHORITY` | Comma-separated list of timestamp authority URLs for PDF signing. Enables LTV and archival timestamps. This field is optional. |
-| `NEXT_PUBLIC_SIGNING_CONTACT_INFO` | Contact info to embed in PDF signatures. Defaults to the webapp URL. This field is optional. |
-| `NEXT_PRIVATE_USE_LEGACY_SIGNING_SUBFILTER` | Set to "true" to use the legacy adbe.pkcs7.detached subfilter instead of ETSI.CAdES.detached. This field is optional. |
-
-
diff --git a/apps/documentation/pages/developers/self-hosting/telemetry.mdx b/apps/documentation/pages/developers/self-hosting/telemetry.mdx
deleted file mode 100644
index 3a0b83eac..000000000
--- a/apps/documentation/pages/developers/self-hosting/telemetry.mdx
+++ /dev/null
@@ -1,90 +0,0 @@
----
-title: Telemetry
-description: Learn about the telemetry data that Documenso collects from self-hosted instances.
----
-
-# Telemetry
-
-Documenso collects anonymous telemetry data from self-hosted instances to help us understand how the software is being used and make improvements to the product. This telemetry is enabled by default, but you can easily disable it if you prefer.
-
-## What We Collect
-
-We collect minimal, privacy-preserving information that helps us understand the health and adoption of self-hosted installations:
-
-- **App Version**: The version of Documenso you are running. This helps us understand which versions are in use and prioritize support for older versions.
-
-- **Installation ID**: A unique identifier for your installation. This is stored in your database and helps us count distinct installations without knowing who you are.
-
-- **Node ID**: A unique identifier for each server or container instance. This is stored in your operating system's temporary directory and helps us understand deployment patterns (for example, how many instances are running in a cluster).
-
-### What We Don't Collect
-
-We do **not** collect any of the following:
-
-- Personal information about you or your users
-- Document contents or file names
-- User email addresses or names
-- Usage patterns or feature usage statistics
-- Server logs or error messages
-- Any data that could identify your organization or users
-
-## Why We Collect Telemetry
-
-The telemetry data we collect serves several important purposes:
-
-1. **Product Improvement**: Understanding which versions are in use helps us prioritize bug fixes and security updates for the versions that matter most.
-
-2. **Support Planning**: Knowing how many installations exist and their deployment patterns helps us plan support resources and documentation.
-
-3. **Feature Development**: Understanding deployment patterns (like cluster sizes) helps us make better architectural decisions for future features.
-
-4. **Community Health**: Tracking adoption helps us understand the growth of the self-hosted community and allocate resources accordingly.
-
-All of this is done anonymously and in aggregate. We cannot identify you, your organization, or your users from the telemetry data we collect.
-
-## Events We Track
-
-We track two simple events:
-
-- **Server Startup**: Captured once when your server starts. This tells us when installations are first set up or restarted.
-
-- **Server Heartbeat**: Captured every hour while your server is running. This helps us understand how many active installations exist and their uptime patterns.
-
-## How to Disable Telemetry
-
-If you prefer not to send telemetry data, you can disable it by setting an environment variable.
-
-### Using Environment Variables
-
-Add the following to your environment configuration:
-
-```bash
-DOCUMENSO_DISABLE_TELEMETRY=true
-```
-
-### Docker
-
-If you're using Docker, you can set this in your `docker-compose.yml`:
-
-```yaml
-services:
- app:
- environment:
- - DOCUMENSO_DISABLE_TELEMETRY=true
-```
-
-Or pass it when running a container:
-
-```bash
-docker run -e DOCUMENSO_DISABLE_TELEMETRY=true ...
-```
-
-### After Disabling
-
-Once you set `DOCUMENSO_DISABLE_TELEMETRY=true` and restart your server, no telemetry data will be sent. The telemetry client will not initialize, and no network requests will be made to our telemetry servers.
-
-Note: If you previously had telemetry enabled, the installation ID stored in your database will remain, but it will no longer be used or sent anywhere.
-
-## Questions or Concerns
-
-If you have questions about our telemetry practices or concerns about privacy, please reach out to us. We're committed to transparency and respect your choice to disable telemetry if you prefer.
diff --git a/apps/documentation/pages/developers/webhooks.mdx b/apps/documentation/pages/developers/webhooks.mdx
deleted file mode 100644
index 6626fb6cb..000000000
--- a/apps/documentation/pages/developers/webhooks.mdx
+++ /dev/null
@@ -1,659 +0,0 @@
----
-title: Webhooks
-description: Learn how to use webhooks to receive real-time notifications about your documents.
----
-
-# Webhooks
-
-Webhooks are HTTP callbacks triggered by specific events. When you subscribe to a specific event and that event occurs, the webhook makes an HTTP request to the URL you provide. The request can be a simple notification or carry a payload with more information about the event.
-
-Some of the common use cases for webhooks include:
-
-1. **Real-time Data Syncing**: Webhooks provide a way to keep data in sync across different platforms. For example, you can keep your system up-to-date with your Documenso documents by subscribing to events like document creation or signing.
-2. **Automating Workflows**: They can trigger automated workflows that start when an event occurs. For example, the webhook could trigger an email when a document is signed.
-3. **Integrating Third-Party Services**: Webhooks can be used to integrate Documenso with third-party services. For example, you could use a webhook to send data to a CRM system when a document is signed.
-
-Documenso supports Webhooks and allows you to subscribe to the following events:
-
-- `document.created`
-- `document.sent`
-- `document.opened`
-- `document.signed`
-- `document.completed`
-- `document.rejected`
-- `document.cancelled`
-
-## Create a webhook subscription
-
-You can create a webhook subscription from the team settings page. Click your avatar in the top right corner of the dashboard and select "Team settings" from the dropdown menu.
-
-
-
-Then, navigate to the "Webhooks" tab, which takes you to the webhooks main page.
-
-
-
-Clicking on the "**Create Webhook**" button opens a modal to create a new webhook subscription.
-
-To create a new webhook subscription, you need to provide the following information:
-
-- Enter the webhook URL that will receive the event payload.
-- Select the event(s) you want to subscribe to: `document.created`, `document.sent`, `document.opened`, `document.signed`, `document.completed`, `document.rejected`, `document.cancelled`.
-- Optionally, you can provide a secret key that will be used to sign the payload. This key will be included in the `X-Documenso-Secret` header of the request.
-
-
-
-After you have filled in the required information, click on the "**Create Webhook**" button to save your subscription.
-
-The screenshot below illustrates a newly created webhook subscription.
-
-
-
-You can edit, view the logs, or delete your webhook subscriptions by clicking the three dots (...) under the "Action" column. You can also access the webhook logs by clicking on the webhook subscription directly.
-
-
-
-You can go even further and check the execution details of each call by clicking on a specific webhook call.
-
-
-
-This page shows the details of the webhook call such as:
-
-- status
-- event
-- date when the webhook was sent
-- response code
-- request body
-- response body and headers
-
-## Webhook fields
-
-The payload sent to the webhook URL contains the following fields:
-
-| Field | Type | Description |
-| -------------------------------------------- | --------- | ----------------------------------------------------- |
-| `event` | string | The type of event that triggered the webhook. |
-| `payload.id` | number | The id of the document. |
-| `payload.externalId` | string? | External identifier for the document. |
-| `payload.userId` | number | The id of the user who owns the document. |
-| `payload.authOptions` | json? | Authentication options for the document. |
-| `payload.formValues` | json? | Form values for the document. |
-| `payload.visibility` | string | Document visibility (e.g., EVERYONE). |
-| `payload.title` | string | The title of the document. |
-| `payload.status` | string | The current status of the document. |
-| `payload.documentDataId` | string | The identifier for the document data. |
-| `payload.createdAt` | datetime | The creation date and time of the document. |
-| `payload.updatedAt` | datetime | The last update date and time of the document. |
-| `payload.completedAt` | datetime? | The completion date and time of the document. |
-| `payload.deletedAt` | datetime? | The deletion date and time of the document. |
-| `payload.teamId` | number? | The id of the team if document belongs to a team. |
-| `payload.templateId` | number? | The id of the template if created from template. |
-| `payload.source` | string | The source of the document (e.g., DOCUMENT, TEMPLATE) |
-| `payload.documentMeta.id` | string | The id of the document metadata. |
-| `payload.documentMeta.subject` | string? | The subject of the document. |
-| `payload.documentMeta.message` | string? | The message associated with the document. |
-| `payload.documentMeta.timezone` | string | The timezone setting for the document. |
-| `payload.documentMeta.password` | string? | The password protection if set. |
-| `payload.documentMeta.dateFormat` | string | The date format used in the document. |
-| `payload.documentMeta.redirectUrl` | string? | The URL to redirect after signing. |
-| `payload.documentMeta.signingOrder` | string | The signing order (e.g., PARALLEL, SEQUENTIAL). |
-| `payload.documentMeta.typedSignatureEnabled` | boolean | Whether typed signatures are enabled. |
-| `payload.documentMeta.language` | string | The language of the document. |
-| `payload.documentMeta.distributionMethod` | string | The method of distributing the document. |
-| `payload.documentMeta.emailSettings` | json? | Email notification settings. |
-| `payload.Recipient[].id` | number | The id of the recipient. |
-| `payload.Recipient[].documentId` | number? | The id of the document for this recipient. |
-| `payload.Recipient[].templateId` | number? | The template id if from a template. |
-| `payload.Recipient[].email` | string | The email address of the recipient. |
-| `payload.Recipient[].name` | string | The name of the recipient. |
-| `payload.Recipient[].token` | string | The unique token for this recipient. |
-| `payload.Recipient[].documentDeletedAt` | datetime? | When the document was deleted for this recipient. |
-| `payload.Recipient[].expired` | datetime? | When the recipient's access expired. |
-| `payload.Recipient[].signedAt` | datetime? | When the recipient signed the document. |
-| `payload.Recipient[].authOptions` | json? | Authentication options for this recipient. |
-| `payload.Recipient[].signingOrder` | number? | The order in which this recipient should sign. |
-| `payload.Recipient[].rejectionReason` | string? | The reason if the recipient rejected the document. |
-| `payload.Recipient[].role` | string | The role of the recipient (e.g., SIGNER, VIEWER). |
-| `payload.Recipient[].readStatus` | string | Whether the recipient has read the document. |
-| `payload.Recipient[].signingStatus` | string | The signing status of this recipient. |
-| `payload.Recipient[].sendStatus` | string | The sending status for this recipient. |
-| `createdAt` | datetime | The creation date and time of the webhook event. |
-| `webhookEndpoint` | string | The endpoint URL where the webhook is sent. |
-
-## Example payloads
-
-Below are examples of the payloads that are sent for each of the supported events. The payloads are sent as JSON data in the body of the POST request.
-
-Example payload for the `document.created` event:
-
-```json
-{
- "event": "DOCUMENT_CREATED",
- "payload": {
- "id": 10,
- "externalId": null,
- "userId": 1,
- "authOptions": null,
- "formValues": null,
- "visibility": "EVERYONE",
- "title": "documenso.pdf",
- "status": "DRAFT",
- "documentDataId": "hs8qz1ktr9204jn7mg6c5dxy0",
- "createdAt": "2024-04-22T11:44:43.341Z",
- "updatedAt": "2024-04-22T11:44:43.341Z",
- "completedAt": null,
- "deletedAt": null,
- "teamId": null,
- "templateId": null,
- "source": "DOCUMENT",
- "documentMeta": {
- "id": "doc_meta_123",
- "subject": "Please sign this document",
- "message": "Hello, please review and sign this document.",
- "timezone": "UTC",
- "password": null,
- "dateFormat": "MM/DD/YYYY",
- "redirectUrl": null,
- "signingOrder": "PARALLEL",
- "typedSignatureEnabled": true,
- "language": "en",
- "distributionMethod": "EMAIL",
- "emailSettings": null
- },
- "Recipient": [
- {
- "id": 52,
- "documentId": 10,
- "templateId": null,
- "email": "signer@documenso.com",
- "name": "John Doe",
- "token": "vbT8hi3jKQmrFP_LN1WcS",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": null,
- "authOptions": null,
- "signingOrder": 1,
- "rejectionReason": null,
- "role": "SIGNER",
- "readStatus": "NOT_OPENED",
- "signingStatus": "NOT_SIGNED",
- "sendStatus": "NOT_SENT"
- }
- ]
- },
- "createdAt": "2024-04-22T11:44:44.779Z",
- "webhookEndpoint": "https://mywebhooksite.com/mywebhook"
-}
-```
-
-Example payload for the `document.sent` event:
-
-```json
-{
- "event": "DOCUMENT_SENT",
- "payload": {
- "id": 10,
- "externalId": null,
- "userId": 1,
- "authOptions": null,
- "formValues": null,
- "visibility": "EVERYONE",
- "title": "documenso.pdf",
- "status": "PENDING",
- "documentDataId": "hs8qz1ktr9204jn7mg6c5dxy0",
- "createdAt": "2024-04-22T11:44:43.341Z",
- "updatedAt": "2024-04-22T11:48:07.569Z",
- "completedAt": null,
- "deletedAt": null,
- "teamId": null,
- "templateId": null,
- "source": "DOCUMENT",
- "documentMeta": {
- "id": "doc_meta_123",
- "subject": "Please sign this document",
- "message": "Hello, please review and sign this document.",
- "timezone": "UTC",
- "password": null,
- "dateFormat": "MM/DD/YYYY",
- "redirectUrl": null,
- "signingOrder": "PARALLEL",
- "typedSignatureEnabled": true,
- "language": "en",
- "distributionMethod": "EMAIL",
- "emailSettings": null
- },
- "Recipient": [
- {
- "id": 52,
- "documentId": 10,
- "templateId": null,
- "email": "signer2@documenso.com",
- "name": "Signer 2",
- "token": "vbT8hi3jKQmrFP_LN1WcS",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": null,
- "authOptions": null,
- "signingOrder": 1,
- "rejectionReason": null,
- "role": "VIEWER",
- "readStatus": "NOT_OPENED",
- "signingStatus": "NOT_SIGNED",
- "sendStatus": "SENT"
- },
- {
- "id": 53,
- "documentId": 10,
- "templateId": null,
- "email": "signer1@documenso.com",
- "name": "Signer 1",
- "token": "HkrptwS42ZBXdRKj1TyUo",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": null,
- "authOptions": null,
- "signingOrder": 2,
- "rejectionReason": null,
- "role": "SIGNER",
- "readStatus": "NOT_OPENED",
- "signingStatus": "NOT_SIGNED",
- "sendStatus": "SENT"
- }
- ]
- },
- "createdAt": "2024-04-22T11:48:07.945Z",
- "webhookEndpoint": "https://mywebhooksite.com/mywebhook"
-}
-```
-
-Example payload for the `document.opened` event:
-
-```json
-{
- "event": "DOCUMENT_OPENED",
- "payload": {
- "id": 10,
- "externalId": null,
- "userId": 1,
- "authOptions": null,
- "formValues": null,
- "visibility": "EVERYONE",
- "title": "documenso.pdf",
- "status": "PENDING",
- "documentDataId": "hs8qz1ktr9204jn7mg6c5dxy0",
- "createdAt": "2024-04-22T11:44:43.341Z",
- "updatedAt": "2024-04-22T11:48:07.569Z",
- "completedAt": null,
- "deletedAt": null,
- "teamId": null,
- "templateId": null,
- "source": "DOCUMENT",
- "documentMeta": {
- "id": "doc_meta_123",
- "subject": "Please sign this document",
- "message": "Hello, please review and sign this document.",
- "timezone": "UTC",
- "password": null,
- "dateFormat": "MM/DD/YYYY",
- "redirectUrl": null,
- "signingOrder": "PARALLEL",
- "typedSignatureEnabled": true,
- "language": "en",
- "distributionMethod": "EMAIL",
- "emailSettings": null
- },
- "Recipient": [
- {
- "id": 52,
- "documentId": 10,
- "templateId": null,
- "email": "signer2@documenso.com",
- "name": "Signer 2",
- "token": "vbT8hi3jKQmrFP_LN1WcS",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": null,
- "authOptions": null,
- "signingOrder": 1,
- "rejectionReason": null,
- "role": "VIEWER",
- "readStatus": "OPENED",
- "signingStatus": "NOT_SIGNED",
- "sendStatus": "SENT"
- }
- ]
- },
- "createdAt": "2024-04-22T11:50:26.174Z",
- "webhookEndpoint": "https://mywebhooksite.com/mywebhook"
-}
-```
-
-Example payload for the `document.signed` event:
-
-```json
-{
- "event": "DOCUMENT_SIGNED",
- "payload": {
- "id": 10,
- "externalId": null,
- "userId": 1,
- "authOptions": null,
- "formValues": null,
- "visibility": "EVERYONE",
- "title": "documenso.pdf",
- "status": "COMPLETED",
- "documentDataId": "hs8qz1ktr9204jn7mg6c5dxy0",
- "createdAt": "2024-04-22T11:44:43.341Z",
- "updatedAt": "2024-04-22T11:52:05.708Z",
- "completedAt": "2024-04-22T11:52:05.707Z",
- "deletedAt": null,
- "teamId": null,
- "templateId": null,
- "source": "DOCUMENT",
- "documentMeta": {
- "id": "doc_meta_123",
- "subject": "Please sign this document",
- "message": "Hello, please review and sign this document.",
- "timezone": "UTC",
- "password": null,
- "dateFormat": "MM/DD/YYYY",
- "redirectUrl": null,
- "signingOrder": "PARALLEL",
- "typedSignatureEnabled": true,
- "language": "en",
- "distributionMethod": "EMAIL",
- "emailSettings": null
- },
- "Recipient": [
- {
- "id": 51,
- "documentId": 10,
- "templateId": null,
- "email": "signer1@documenso.com",
- "name": "Signer 1",
- "token": "HkrptwS42ZBXdRKj1TyUo",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": "2024-04-22T11:52:05.688Z",
- "authOptions": {
- "accessAuth": null,
- "actionAuth": null
- },
- "signingOrder": 1,
- "rejectionReason": null,
- "role": "SIGNER",
- "readStatus": "OPENED",
- "signingStatus": "SIGNED",
- "sendStatus": "SENT"
- }
- ]
- },
- "createdAt": "2024-04-22T11:52:18.577Z",
- "webhookEndpoint": "https://mywebhooksite.com/mywebhook"
-}
-```
-
-Example payload for the `document.completed` event:
-
-```json
-{
- "event": "DOCUMENT_COMPLETED",
- "payload": {
- "id": 10,
- "externalId": null,
- "userId": 1,
- "authOptions": null,
- "formValues": null,
- "visibility": "EVERYONE",
- "title": "documenso.pdf",
- "status": "COMPLETED",
- "documentDataId": "hs8qz1ktr9204jn7mg6c5dxy0",
- "createdAt": "2024-04-22T11:44:43.341Z",
- "updatedAt": "2024-04-22T11:52:05.708Z",
- "completedAt": "2024-04-22T11:52:05.707Z",
- "deletedAt": null,
- "teamId": null,
- "templateId": null,
- "source": "DOCUMENT",
- "documentMeta": {
- "id": "doc_meta_123",
- "subject": "Please sign this document",
- "message": "Hello, please review and sign this document.",
- "timezone": "UTC",
- "password": null,
- "dateFormat": "MM/DD/YYYY",
- "redirectUrl": null,
- "signingOrder": "PARALLEL",
- "typedSignatureEnabled": true,
- "language": "en",
- "distributionMethod": "EMAIL",
- "emailSettings": null
- },
- "Recipient": [
- {
- "id": 50,
- "documentId": 10,
- "templateId": null,
- "email": "signer2@documenso.com",
- "name": "Signer 2",
- "token": "vbT8hi3jKQmrFP_LN1WcS",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": "2024-04-22T11:51:10.055Z",
- "authOptions": {
- "accessAuth": null,
- "actionAuth": null
- },
- "signingOrder": 1,
- "rejectionReason": null,
- "role": "VIEWER",
- "readStatus": "OPENED",
- "signingStatus": "SIGNED",
- "sendStatus": "SENT"
- },
- {
- "id": 51,
- "documentId": 10,
- "templateId": null,
- "email": "signer1@documenso.com",
- "name": "Signer 1",
- "token": "HkrptwS42ZBXdRKj1TyUo",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": "2024-04-22T11:52:05.688Z",
- "authOptions": {
- "accessAuth": null,
- "actionAuth": null
- },
- "signingOrder": 2,
- "rejectionReason": null,
- "role": "SIGNER",
- "readStatus": "OPENED",
- "signingStatus": "SIGNED",
- "sendStatus": "SENT"
- }
- ]
- },
- "createdAt": "2024-04-22T11:52:18.277Z",
- "webhookEndpoint": "https://mywebhooksite.com/mywebhook"
-}
-```
-
-Example payload for the `document.rejected` event:
-
-```json
-{
- "event": "DOCUMENT_REJECTED",
- "payload": {
- "id": 10,
- "externalId": null,
- "userId": 1,
- "authOptions": null,
- "formValues": null,
- "visibility": "EVERYONE",
- "title": "documenso.pdf",
- "status": "PENDING",
- "documentDataId": "hs8qz1ktr9204jn7mg6c5dxy0",
- "createdAt": "2024-04-22T11:44:43.341Z",
- "updatedAt": "2024-04-22T11:48:07.569Z",
- "completedAt": null,
- "deletedAt": null,
- "teamId": null,
- "templateId": null,
- "source": "DOCUMENT",
- "documentMeta": {
- "id": "doc_meta_123",
- "subject": "Please sign this document",
- "message": "Hello, please review and sign this document.",
- "timezone": "UTC",
- "password": null,
- "dateFormat": "MM/DD/YYYY",
- "redirectUrl": null,
- "signingOrder": "PARALLEL",
- "typedSignatureEnabled": true,
- "language": "en",
- "distributionMethod": "EMAIL",
- "emailSettings": null
- },
- "Recipient": [
- {
- "id": 52,
- "documentId": 10,
- "templateId": null,
- "email": "signer@documenso.com",
- "name": "Signer",
- "token": "vbT8hi3jKQmrFP_LN1WcS",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": "2024-04-22T11:48:07.569Z",
- "authOptions": {
- "accessAuth": null,
- "actionAuth": null
- },
- "signingOrder": 1,
- "rejectionReason": "I do not agree with the terms",
- "role": "SIGNER",
- "readStatus": "OPENED",
- "signingStatus": "REJECTED",
- "sendStatus": "SENT"
- }
- ]
- },
- "createdAt": "2024-04-22T11:48:07.945Z",
- "webhookEndpoint": "https://mywebhooksite.com/mywebhook"
-}
-```
-
-Example payload for the `document.cancelled` event:
-
-```json
-{
- "event": "DOCUMENT_CANCELLED",
- "payload": {
- "id": 7,
- "externalId": null,
- "userId": 3,
- "authOptions": null,
- "formValues": null,
- "visibility": "EVERYONE",
- "title": "documenso.pdf",
- "status": "PENDING",
- "documentDataId": "cm6exvn93006hi02ru90a265a",
- "createdAt": "2025-01-27T11:02:14.393Z",
- "updatedAt": "2025-01-27T11:03:16.387Z",
- "completedAt": null,
- "deletedAt": null,
- "teamId": null,
- "templateId": null,
- "source": "DOCUMENT",
- "documentMeta": {
- "id": "cm6exvn96006ji02rqvzjvwoy",
- "subject": "",
- "message": "",
- "timezone": "Etc/UTC",
- "password": null,
- "dateFormat": "yyyy-MM-dd hh:mm a",
- "redirectUrl": "",
- "signingOrder": "PARALLEL",
- "typedSignatureEnabled": true,
- "language": "en",
- "distributionMethod": "EMAIL",
- "emailSettings": {
- "documentDeleted": true,
- "documentPending": true,
- "recipientSigned": true,
- "recipientRemoved": true,
- "documentCompleted": true,
- "ownerDocumentCompleted": true,
- "recipientSigningRequest": true
- }
- },
- "recipients": [
- {
- "id": 7,
- "documentId": 7,
- "templateId": null,
- "email": "mybirihix@mailinator.com",
- "name": "Zorita Baird",
- "token": "XkKx1HCs6Znm2UBJA2j6o",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": null,
- "authOptions": { "accessAuth": null, "actionAuth": null },
- "signingOrder": 1,
- "rejectionReason": null,
- "role": "SIGNER",
- "readStatus": "NOT_OPENED",
- "signingStatus": "NOT_SIGNED",
- "sendStatus": "SENT"
- }
- ],
- "Recipient": [
- {
- "id": 7,
- "documentId": 7,
- "templateId": null,
- "email": "signer@documenso.com",
- "name": "Signer",
- "token": "XkKx1HCs6Znm2UBJA2j6o",
- "documentDeletedAt": null,
- "expired": null,
- "signedAt": null,
- "authOptions": { "accessAuth": null, "actionAuth": null },
- "signingOrder": 1,
- "rejectionReason": null,
- "role": "SIGNER",
- "readStatus": "NOT_OPENED",
- "signingStatus": "NOT_SIGNED",
- "sendStatus": "SENT"
- }
- ]
- },
- "createdAt": "2025-01-27T11:03:27.730Z",
- "webhookEndpoint": "https://mywebhooksite.com/mywebhook"
-}
-```
-
-## Webhook events testing
-
-You can trigger test webhook events to test the webhook functionality. To do so, navigate to the webhook subscription details page and click the "Test" button.
-
-
-
-This opens a dialog where you can select the event type to test.
-
-
-
-Choose the event you want to test and click "Send". You’ll then receive a test payload from Documenso with sample data.
-
-## Webhook events resending
-
-To resend a webhook call, you need to navigate to the webhook call page and click the "Resend" button.
-
-
-
-This will send the webhook event to the webhook URL again.
-
-## Availability
-
-Webhooks are available to teams only.
diff --git a/apps/documentation/pages/index.mdx b/apps/documentation/pages/index.mdx
deleted file mode 100644
index bdedcfb47..000000000
--- a/apps/documentation/pages/index.mdx
+++ /dev/null
@@ -1,73 +0,0 @@
----
-title: Home
-description: Documenso aims to be the world's most trusted document-signing tool. Join us in creating the next generation of open trust infrastructure.
----
-
-import Image from 'next/image';
-import Link from 'next/link';
-
-import backgroundPattern from '@documenso/assets/images/background-pattern.png';
-import cardBeautifulFigure from '@documenso/assets/images/card-beautiful-figure.png';
-import cardConnectionsFigure from '@documenso/assets/images/card-connections-figure.png';
-import cardPaidFigure from '@documenso/assets/images/card-paid-figure.png';
-import cardSharingFigure from '@documenso/assets/images/card-sharing-figure.png';
-import { cn } from '@documenso/ui/lib/utils';
-import { Card, CardContent, CardTitle } from '@documenso/ui/primitives/card';
-
-export const Wrapper = ({ children }) => {
- return
{children}
;
-};
-
-
-
-
- Document signing, finally open source
- Documenso aims to be the world's most trusted document-signing tool. Join us in creating the next generation of open trust infrastructure.
-
-
-
-
-
-
-
-
- Learn
- Learn how to get started with your account and leverage our advanced features to level up your productivity.
-
-
-
-
-
-
-
-
-
-
-
-
- Build
- Everything you need to set up your local development environment.
- Use our API and utilize webhooks for seamless integration.
-
-