> For the complete documentation index, see [llms.txt](https://docs.metacopier.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.metacopier.io/b2b/white-label.md).

# White-Label

## Overview

MetaCopier’s White Label setup lets you create your own branded version of the platform using your name, logo, and website address. It is a great option if you want to offer copy trading to your clients without building your own system. This guide will help you through every step of the setup process. You will learn how to add your logo, connect your domain, customize settings, and get your platform ready to launch. Everything is explained in simple terms so you can feel confident as you go.

{% hint style="success" %}
If you don’t have a Stripe account or a custom domain, there are other ways you can connect MetaCopier to your customers. For example, you can use our [Signal Sharing](/features/signal-sharing.md) feature or build your own app and [connect it to our APIs](/rest-api/sdk.md).
{% endhint %}

## Requirements & Prerequisites

Before you start setting up your white label platform, please review the [limitations](#limitations) and ensure that you have the following prepared:

### Credit Card

To enable the white-label feature, a valid credit card is required. Once added, you still have full flexibility: you can choose to **manually fund your project at any time**, or allow **automatic monthly billing**, which will be processed at the beginning of each month.

### Stripe Key

To process payments and issue invoices through your white-label platform, you’ll need a **live API key** from Stripe. Stripe is used as the billing and CRM system and is therefore mandatory.

If you don’t yet have a Stripe account, you can create one at **stripe.com**. Please note that Stripe requires business verification as part of the setup process. This includes providing a website that clearly describes your product or service, so make sure your homepage is ready before applying.

If you prefer to handle invoicing yourself, you may alternatively use a **test API key**. In that case, automatic Stripe charges are disabled and you take care of billing, either fully outside MetaCopier, or via the built-in **Manual collection** mode that still generates real-amount invoices and tracks paid/unpaid status for you. See [Manual billing](#manual-billing-real-amount-no-auto-charge) for the full workflow.

{% hint style="info" %}
If you are interested in additional integrations, please let us know.
{% endhint %}

### Domain Name with DNS Access

To use your own web address (like [www.yourbrand.com](http://www.yourbrand.com)), you need to have a domain name and access to its DNS settings. This is where you will connect your domain to the MetaCopier white label platform. If you are not sure how to do this, your domain provider (like GoDaddy or Namecheap) usually has a control panel where you can manage DNS settings.

***

## Initial Configuration

First, you need to create an account on MetaCopier and add a project. If you need help with this step, please check our [Quick Start Guide](/tutorials/quick-start-guide.md). Once your project is set up, select it from your dashboard and go to the **White Label** section in the left-hand menu.

<figure><img src="/files/ORK12rQLaeaHV5eh6cFH" alt=""><figcaption><p>White Label Section</p></figcaption></figure>

Now it's time to fill in the configuration settings for your white label platform. Here’s what you’ll need to do:

### Stripe Setup

Enter your **Stripe live key** in this section. This key allows the platform to generate and send invoices on your behalf. Once you save it, the system will automatically check if the key is valid.

### Domain Verification

* **Brand or Business Name**: Enter the name you want to display throughout your platform. This could be your company name or your personal brand.
* **Subdomain**: Choose the URL where your white label platform will be hosted, for example `trade.example.com`.\
  **Important:** You must use a subdomain. Top-level or apex domains (like `example.com`) are not supported. Also, make sure the domain matches the one configured in your Stripe account.

Once you enter your subdomain, the system will show you the DNS records you need to add. Follow the instructions provided to update your DNS settings.\
Please note that it might take a few minutes (in some cases up to 24 hours) for the changes to take effect, depending on your DNS provider.

### Branding

Customize how your platform looks and feels to match your brand identity.

* **Logo URL:** Provide a publicly accessible URL (PNG) or a CDN path to your logo. The logo will be used in system emails and throughout the white-label user interface.
* **Theme (Pro):** Select a visual theme for the white-label solution, including colors and general styling. This option is available with the PRO plan.
* **Layout (Pro):** Choose the layout structure of the white-label interface, defining how navigation and content are arranged. This option is available with the PRO plan.

### Additional settings

Configure pricing, feature availability, and usage limits for your white-label platform. Default values follow MetaCopier standards.

#### Pricing configuration

* **Account Price (Shared):** Daily price (USD) for shared projects.
* **Feature Price (Pro):** Daily price (USD) for PRO features.
* **Account Price (Dedicated):** Daily price (USD) for dedicated projects.
* **Account Price (Dedicated – Minimum):** Minimum daily price (USD) for dedicated projects after volume discounts.

#### Allowed account types

* **Allowed account types:** Select which account types are available for the white-label solution. If not specified, all account types are allowed.

#### Allowed regions

* **Allowed regions:** Select which regions are available for account deployment on the white-label platform. If not specified, all regions are allowed. When configured, users will only be able to select from the allowed regions when adding a new account.

#### Broker OAuth credentials (cTrader & Tradovate)

cTrader and Tradovate use OAuth-based authentication, where users connect their broker account by logging in through the broker's own login page. On a white-label, that login page must be tied to **your own OAuth application** rather than MetaCopier's. Otherwise the broker would display "MetaCopier" to your customers and the connection would be tied to our app instead of yours.

For this reason, if you want to offer cTrader and/or Tradovate on your white-label, you must register your own OAuth application with each broker and enter the resulting credentials below.

How the credentials interact with the **Allowed account types** field:

* If you **explicitly include** cTrader or Tradovate in the allowed account types list, the matching client ID and secret are **required**. Saving the white-label settings without them will be rejected with a validation error.
* If the allowed account types list is **left empty** (which means "all account types are allowed"), saving is not blocked even when the OAuth credentials are missing. In that case, cTrader and/or Tradovate will simply **not appear** in the account-type dropdown on your white-label until you add the corresponding credentials. This lets you launch the white-label first and add broker-specific OAuth apps later, without being forced to fill them in up front.
* **cTrader Client ID:** Your cTrader OAuth Client ID, used to enable support for cTrader accounts on your white-label platform. Generate it from the cTrader Open API portal.
  * Permission: Access any available account and trade
* **cTrader Client Secret:** Your cTrader OAuth Client Secret, used together with the Client ID to authenticate cTrader account connections.
* **Tradovate Client ID:** Your Tradovate OAuth Client ID, used to enable support for Tradovate accounts on your white-label platform. Generate it from the Tradovate API/OAuth portal.

  <figure><img src="/files/7C4TELpfJIIkVQnhbir0" alt=""><figcaption></figcaption></figure>
* **Tradovate Client Secret:** Your Tradovate OAuth Client Secret, used together with the Client ID to authenticate Tradovate account connections.

{% hint style="info" %}
When you save the white-label settings, the client secrets are stored encrypted and are never returned to the dashboard in plain text. If you need to rotate a secret later, simply enter the new value and save again.
{% endhint %}

**Redirect URLs to register at each broker**

When you create the OAuth application at cTrader and Tradovate, both portals will ask you for a **redirect URL** (sometimes called "callback URL" or "redirect URI"). This is the page the broker sends users back to after they have logged in and approved the connection. It must point to your white-label subdomain, **not** to MetaCopier's domain.

Replace `trade.example.com` in the examples below with the exact subdomain you configured in the [Domain Verification](#domain-verification) step. The URL is case-sensitive, must use `https://`, and must match what the broker portal has on file character-for-character, including the trailing path and **no trailing slash**.

| Broker        | Redirect URL to register              |
| ------------- | ------------------------------------- |
| **cTrader**   | `https://trade.example.com/ctrader`   |
| **Tradovate** | `https://trade.example.com/tradovate` |

Specifically:

* **cTrader**: In the [cTrader Open API portal](https://openapi.ctrader.com/), open your application, scroll down to the **Redirect URIs** section, and add `https://<your-subdomain>/ctrader`. You can register multiple redirect URIs on the same application if needed. Note that Spotware manually reviews and approves new Open API applications, so submit the application early and provide a clear description of how it will be used (a copy-trading white-label built on top of MetaCopier).
* **Tradovate**: When you register your OAuth application with Tradovate, set the `redirect_uri` to `https://<your-subdomain>/tradovate`. Tradovate does not currently expose a self-service OAuth-app portal the way cTrader does. To obtain a `client_id` / `client_secret` for OAuth, you generally need an active Tradovate account with API access and have to contact Tradovate (or your introducing broker) to register the application and whitelist your redirect URI. See the [Tradovate OAuth example](https://github.com/tradovate/example-api-oauth) and the [Tradovate API documentation](https://api.tradovate.com/#tag/Authentication/operation/oAuthToken) for details. The same OAuth credentials are used against both `live.tradovateapi.com` (real accounts) and `demo.tradovateapi.com` (simulation), so a single registered redirect URI covers both.

{% hint style="warning" %}
If the redirect URL configured at the broker does not exactly match your white-label subdomain, the OAuth popup will close with an error (typically "invalid redirect\_uri") and users will not be able to connect. Double-check protocol (`https`), host, path (`/ctrader` or `/tradovate`), and the absence of a trailing slash.
{% endhint %}

#### Feature controls

* **Disable invoicing:** Disable automatic invoice generation. When enabled, no Stripe charge is attempted and your customers are not billed by MetaCopier. By default, invoices are still produced for audit purposes but with a zero amount. Combine this with **Manual collection** below if you want real-amount invoices that you collect yourself.
* **Manual collection (real amount, no auto-charge):** Available only when **Disable invoicing** is on. When enabled, MetaCopier still generates invoices using the prices configured in your white-label settings, with the real amount, but **never charges them through Stripe**. The invoices stay in `OPEN` status and you collect payment from each customer externally (bank transfer, crypto, cash, etc.). Once paid, mark the invoice as paid from the admin dashboard. See [Manual billing](#manual-billing-real-amount-no-auto-charge) for the full workflow.
* **Send statement email to customers:** Available only when **Manual collection** is on. When enabled, each customer receives a branded "Your monthly statement" email at the start of the billing cycle, containing the invoice details and the payment instructions you configured. When disabled, customers are not emailed and you handle communication yourself.
* **Payment instructions:** A free-text block (up to 2,000 characters) included in the customer statement email. Use it to specify your IBAN, crypto wallet, PayPal link, expected reference, payment deadline, etc. Required when **Send statement email to customers** is on.
* **Disable adding copiers:** Disable the ability to add new copiers. When enabled, users cannot add new copiers.
* **Disable dedicated projects:** Disable the creation of dedicated projects. When enabled, users can only create shared projects.
* **Disable dedicated IP purchase:** Disable the purchase of dedicated IPs. When enabled, users cannot buy dedicated IPs.
* **Hide broker in signal provider:** Broker information is hidden in signal provider listings.
* **Hide current balance in signal provider:** When enabled, balance and equity values are hidden in signal provider listings, detail pages, and analytics dialogs. The growth chart remains visible. This is useful for privacy when you don't want to expose your account balance to followers.
* **Disable marketplace subscription:** Disable the Subscribe button on the marketplace. When enabled, the Subscribe button is hidden on all signal provider listings, preventing users from subscribing to signals directly from the marketplace.
* **Show score on marketplace:** Show signal scores on the marketplace. When enabled, signal scores are visible to users on the white-label marketplace.
* **Enable TradingView Webhook:** Enable the TradingView Webhook feature for your white-label platform. When enabled, users can create TradingView webhook accounts to receive and execute alerts from TradingView. This feature requires a DNS alias and ingress configuration on our side, so please contact support after enabling this option to complete the activation.
* **Enable Telegram Signals:** Enable the Telegram Signal Integration feature for your white-label platform. When enabled, users can create Telegram connector accounts to receive and execute trading signals from Telegram channels and groups.
* **Signal Provider alias:** Replace the "Signal Provider" / "Signal" terminology throughout your white-label UI with a custom term (max 30 characters). This is useful for regulatory reasons or to better match your brand language. For example, setting the alias to "EA Expert" will replace all occurrences of "Signal Provider" with "EA Expert" and "Signal" with "EA Expert" in the marketplace and related pages. Leave empty to use the default terminology.

#### Navigation links

* **Home link:** An optional URL that adds a "Home" menu item to the left-hand navigation of your white-label dashboard. When set, clicking the logo will also navigate to this URL instead of the internal dashboard. Useful for linking back to your main website. Leave empty to hide the menu item.
* **Support link:** An optional URL that adds a "Support" menu item to the navigation. This allows your customers to quickly reach your help desk or support page. Leave empty to hide the menu item.

#### Registration restriction (Pro)

{% hint style="info" %}
This feature is only available on the **PRO plan**.
{% endhint %}

Restrict access to your white-label platform to specific email addresses or email domains. When enabled, only users whose email matches the allowed list can access the platform. Users with unauthorized emails will be shown an error message and logged out automatically.

* **Restrict registration:** Toggle to enable or disable registration restriction. When disabled, any user can register.
* **Registration page link:** A URL to redirect unauthorized users to when they are denied access (e.g., your signup or contact page). This field is **required** when registration restriction is enabled. Users who fail the restriction check will be logged out and redirected to this URL.
* **Allowed email addresses:** A list of specific email addresses that are authorized to access your platform (e.g., `john@company.com`, `jane@company.com`).
* **Allowed email domains:** A list of email domains (without `@`) that are authorized (e.g., `company.com`, `partner.org`). All emails from these domains will be allowed.

You can manage both lists using either an interactive list view (add/remove individual entries) or a bulk textarea view (one entry per line). Switch between views using the toggle buttons.

{% hint style="warning" %}
Make sure to include your own email address or domain in the allowed list. Otherwise, you may lock yourself out of your own platform.
{% endhint %}

#### Resource limits

* **Maximum accounts per project:** Maximum number of accounts allowed per project. Set to `0` to use the platform default.
* **Maximum projects per user:** Maximum number of projects a user can create. Set to `0` to use the platform default.

#### Custom CSS & JavaScript (Pro)

{% hint style="info" %}
This feature is only available on the **PRO plan**.
{% endhint %}

{% hint style="warning" %}
Custom JavaScript runs with full access to the page. Only use trusted scripts from verified providers. Malicious or broken scripts may affect the user experience on your platform.
{% endhint %}

Inject custom CSS or JavaScript into your white-label frontend to further customize the user experience. This is useful for integrating third-party tools (e.g., chatbots, analytics, or tracking scripts) or applying custom styling beyond the built-in theme options.

* **Custom CSS:** Add custom CSS rules that will be injected into the `<head>` of your white-label platform. Use this to override styles, adjust colors, hide elements, or add custom fonts. Maximum 50,000 characters.
* **Custom JavaScript:** Add custom JavaScript or HTML script tags that will be injected into the `<body>` of your white-label platform. Use this to embed third-party widgets like chatbots (e.g., Intercom, Crisp, Tidio), analytics tools (e.g., Google Analytics, Hotjar), or any other script-based integration. Maximum 50,000 characters.

**Example – Embedding a chatbot:**

```html
<script src="https://cdn.example.com/chatbot-widget.js"></script>
<script>
  ChatbotWidget.init({ apiKey: 'your-api-key', position: 'bottom-right' });
</script>
```

**Example – Custom CSS:**

{% hint style="info" %}
To avoid collisions with MetaCopier's internal styles, always scope your custom CSS using the `[data-wl="your-brand-name"]` attribute selector that is automatically added to the `<body>` element of your white-label platform.
{% endhint %}

```css
[data-wl="yourbrand"] .sidebar { background-color: #1a1a2e; }
[data-wl="yourbrand"] .logo-text { font-family: 'Inter', sans-serif; }
```

**Example – Custom chat widget (full working example):**

The following example creates a floating chat button with a contact dialog. Paste the CSS into the **Custom CSS** field and the JavaScript into the **Custom JavaScript** field.

Custom CSS:

```css
[data-wl] .wl-chat-btn {
  position: fixed;
  bottom: 24px;
  right: 24px;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: #4f46e5;
  color: white;
  border: none;
  cursor: pointer;
  box-shadow: 0 4px 12px rgba(0,0,0,0.25);
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s, background 0.2s;
}
[data-wl] .wl-chat-btn:hover {
  transform: scale(1.1);
  background: #4338ca;
}
[data-wl] .wl-chat-btn svg {
  width: 28px;
  height: 28px;
}
[data-wl] .wl-chat-dialog {
  position: fixed;
  bottom: 96px;
  right: 24px;
  width: 360px;
  max-height: 500px;
  background: white;
  border-radius: 12px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.2);
  z-index: 9999;
  display: none;
  flex-direction: column;
  overflow: hidden;
}
[data-wl] .wl-chat-dialog.open {
  display: flex;
}
[data-wl] .wl-chat-header {
  background: #4f46e5;
  color: white;
  padding: 16px;
  font-weight: 600;
  font-size: 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
[data-wl] .wl-chat-close {
  background: none;
  border: none;
  color: white;
  font-size: 20px;
  cursor: pointer;
  line-height: 1;
}
[data-wl] .wl-chat-body {
  padding: 20px;
  flex: 1;
  overflow-y: auto;
}
[data-wl] .wl-chat-body p {
  margin: 0 0 12px;
  color: #374151;
  font-size: 14px;
  line-height: 1.5;
}
[data-wl] .wl-chat-body a {
  color: #4f46e5;
  text-decoration: underline;
}

@media (max-width: 480px) {
  [data-wl] .wl-chat-dialog {
    width: calc(100vw - 32px);
    right: 16px;
    bottom: 88px;
  }
}
```

Custom JavaScript:

```html
<script>
(function() {
  var btn = document.createElement('button');
  btn.className = 'wl-chat-btn';
  btn.setAttribute('aria-label', 'Open chat');
  btn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"/></svg>';

  var dialog = document.createElement('div');
  dialog.className = 'wl-chat-dialog';
  dialog.innerHTML = ''
    + '<div class="wl-chat-header">'
    + '  <span>Chat with us</span>'
    + '  <button class="wl-chat-close">&times;</button>'
    + '</div>'
    + '<div class="wl-chat-body">'
    + '  <p>👋 Hi! How can we help you today?</p>'
    + '  <p>Send us a message at <a href="mailto:support@yourbrand.com">support@yourbrand.com</a></p>'
    + '  <p><a href="https://wa.me/1234567890" target="_blank">💬 WhatsApp</a></p>'
    + '  <p><a href="https://t.me/yourbrand" target="_blank">✈️ Telegram</a></p>'
    + '</div>';

  document.body.appendChild(btn);
  document.body.appendChild(dialog);

  btn.addEventListener('click', function() {
    dialog.classList.toggle('open');
  });
  dialog.querySelector('.wl-chat-close').addEventListener('click', function() {
    dialog.classList.remove('open');
  });
})();
</script>
```

After completing the initial configuration, you should be able to view your portal by visiting your URL in a browser. If needed, you can revisit the configuration settings at any time to make adjustments.

## Functional configuration

### Signal sharing

If you want to provide your customers with a signal to follow, you can do so using the **Signal sharing** feature. You can set up a signal provider as explained in the [Signal Sharing](/features/signal-sharing.md) section, and your customers will be able to follow that signal within your white label platform.

In a white label setup, the signal provider works just like it does on MetaCopier, with a couple of key differences:

* **Your public signals are only visible to your white label customers.** MetaCopier users outside of your platform will not see them.
* **Your white label customers cannot create their own signals.** Only you, as the provider, can share a signal with them.

This makes it a great option if you want to broadcast a strategy or share your trades with your user base in a simple and controlled way.

{% hint style="warning" %}
Signal providers must be created after the white label configuration is complete
{% endhint %}

***

## Billing

The white-label billing system involves **two separate invoices** each month: one for your customers and one for you as the platform owner.

{% hint style="info" %}
**At a glance**

* **2nd of each month**: invoices are sent to your customers for their usage of the previous month.
* **15th of each month**: MetaCopier invoices you for MetaCopier's platform cost, aggregated across all customer projects linked to your white-label.
  {% endhint %}

### How it works

#### 1. Your customers receive an invoice (2nd of each month)

On the **2nd of each month**, MetaCopier generates an invoice for each of your customer's projects. The invoice is charged through **your connected Stripe account**, so all customer payments go directly to you without any middleman.

The pricing on these invoices is based on the prices you configured in your white-label settings:

| Charge type                   | Default price            | Configurable |
| ----------------------------- | ------------------------ | ------------ |
| Account (Shared)              | 0.27 USD / account / day | Yes          |
| Account (Dedicated)           | 0.32 USD / account / day | Yes          |
| Account (Dedicated – Minimum) | 0.22 USD / account / day | Yes          |
| Feature PRO                   | 0.10 USD / account / day | Yes          |

You can set your own prices for each of these in the white-label configuration. For example, you could charge your customers 0.50 USD per account per day on a shared project while MetaCopier charges you the platform rate.

Billing is calculated per **account-day**: each account is billed for the exact number of days it was active during the month. If an account was created on the 10th and the month has 30 days, it is billed for 21 days.

#### 2. You receive an invoice from MetaCopier (15th of each month)

On the **15th of each month**, MetaCopier generates an invoice for you as the white-label owner. This invoice covers MetaCopier's platform cost for **all accounts across all customer projects** linked to your white-label.

This invoice is charged at MetaCopier's base platform rates (not your custom prices):

| Charge type         | MetaCopier platform rate            |
| ------------------- | ----------------------------------- |
| Account (Shared)    | 0.27 USD / account / day            |
| Account (Dedicated) | Volume-based (starting at 0.32 USD) |
| Feature PRO         | 0.10 USD / account / day            |
| Dedicated IP        | 6.00 USD / IP / month               |

The white-label owner invoice aggregates all paid customer invoices from the previous period and sums up the whitelabel amount stored in each customer invoice. This ensures you are only billed for usage that has actually been invoiced and processed on the customer side.

{% hint style="info" %}
The 15-day delay between customer billing (1st) and your billing (15th) ensures that all customer payments have enough time to be processed before you are charged.
{% endhint %}

### Billing examples

#### Example 1: Shared project – 25 accounts, full month

You run a white-label platform and set the shared account price to **0.50 USD/day** for your customers. One of your customers has a project with **25 accounts** that were active for the entire month (30 days).

**Your customer's invoice (charged via your Stripe):**

| Item                             | Calculation    | Amount         |
| -------------------------------- | -------------- | -------------- |
| 25 accounts × 30 days × 0.50 USD | 25 × 30 × 0.50 | **375.00 USD** |

**Your invoice from MetaCopier (charged on the 15th):**

| Item                             | Calculation    | Amount         |
| -------------------------------- | -------------- | -------------- |
| 25 accounts × 30 days × 0.27 USD | 25 × 30 × 0.27 | **202.50 USD** |

**Your margin:** 375.00 − 202.50 = **172.50 USD**

#### Example 2: Multiple customers, mixed activity

You have 3 customers on your white-label (shared price set to **0.40 USD/day**):

| Customer   | Accounts | Days active          | Customer invoice                | MetaCopier cost                |
| ---------- | -------- | -------------------- | ------------------------------- | ------------------------------ |
| Customer A | 10       | 30 (full month)      | 10 × 30 × 0.40 = **120.00 USD** | 10 × 30 × 0.27 = **81.00 USD** |
| Customer B | 8        | 30 (full month)      | 8 × 30 × 0.40 = **96.00 USD**   | 8 × 30 × 0.27 = **64.80 USD**  |
| Customer C | 5        | 15 (added mid-month) | 5 × 15 × 0.40 = **30.00 USD**   | 5 × 15 × 0.27 = **20.25 USD**  |

**Total you collect from customers:** 120.00 + 96.00 + 30.00 = **246.00 USD**\
**Your invoice from MetaCopier:** 81.00 + 64.80 + 20.25 = **166.05 USD**\
**Your margin:** 246.00 − 166.05 = **79.95 USD**

#### Example 3: With PRO features

A customer has **10 accounts**, of which **4 have PRO features** enabled for the full month (30 days). Your prices: shared = 0.40 USD/day, PRO = 0.15 USD/day.

**Your customer's invoice:**

| Item                                | Calculation | Amount         |
| ----------------------------------- | ----------- | -------------- |
| 10 accounts × 30 days × 0.40 USD    |             | 120.00 USD     |
| 4 PRO features × 30 days × 0.15 USD |             | 18.00 USD      |
| **Total**                           |             | **138.00 USD** |

**Your invoice from MetaCopier:**

| Item                                | Calculation | Amount        |
| ----------------------------------- | ----------- | ------------- |
| 10 accounts × 30 days × 0.27 USD    |             | 81.00 USD     |
| 4 PRO features × 30 days × 0.10 USD |             | 12.00 USD     |
| **Total**                           |             | **93.00 USD** |

**Your margin:** 138.00 − 93.00 = **45.00 USD**

### White-Label PRO fee

If you have enabled the **PRO plan** for your white-label and the total number of active or stopped accounts across all your white-label customer projects is **50 or fewer**, a flat fee of **99.00 USD/month** is added to your MetaCopier invoice. Once you exceed 50 accounts, this fee is waived.

### Currency handling

All prices are calculated in USD. If a customer's project uses a different currency, the amount is converted using the current exchange rate. The same conversion is applied to your MetaCopier invoice if your project currency is not USD.

### Manual billing (real amount, no auto-charge)

If you do not want MetaCopier to auto-charge your customers (e.g. you collect payment by bank transfer, crypto, cash, or your own external invoicing tool), you can use the built-in **Manual collection** mode. MetaCopier still generates the monthly invoices with the real amount and keeps a per-customer billing dashboard for you, but it never attempts a Stripe charge.

**How to enable it:**

1. Open your white-label configuration and enable **Disable invoicing** in the Feature controls section.
2. Enable **Manual collection (real amount, no auto-charge)** directly below it.
3. Optional: enable **Send statement email to customers** and fill in the **Payment instructions** field (IBAN, crypto wallet, PayPal link, payment reference, due date, etc.) if you want each customer to receive a branded statement email at the start of the cycle. If you turn this off, no email is sent and you handle communication yourself.
4. Save. Existing white-labels are not affected by this change, so you have to explicitly opt in.

**What happens each month:**

* On the 2nd of the month, MetaCopier generates an invoice per customer project with the real amount, using the prices you configured. The invoice is created in `OPEN` status and **no Stripe charge is attempted**.
* If you enabled the customer statement email, each customer receives a branded email with their invoice details and your payment instructions.
* On the 3rd of the month, you (the white-label owner) receive a digest email summarising every customer with an outstanding balance, with a link back to your white-label admin dashboard.
* Customers pay you directly through whatever channel you specified.
* You record each payment in the admin dashboard (see below). Once an invoice is marked as paid, it transitions from `OPEN` to `PAID` and is removed from the outstanding list.

**Marking invoices as paid:**

The white-label admin dashboard shows a per-customer view of outstanding amounts, current-month charges, and lifetime paid totals (only when manual collection is on). For each customer you can:

* Open the **Customer details** drilldown to see all open invoices and mark them paid one at a time.
* Use **Mark all paid** on the customer row to settle every open invoice for that customer in one click (useful when a customer pays a single bank transfer covering multiple months).

When you mark an invoice as paid, you can optionally record:

* **External reference** (max 100 characters), for example `WIRE-2026-04-15-001`, the transaction ID from your payment provider, the crypto tx hash, etc.
* **Note** (max 120 characters), for example `Paid in cash on 2026-04-15`.

Both fields are stored on the invoice and on the resulting internal transaction for your records. Once marked paid, an invoice cannot be marked paid again, and auto-charged invoices (from white-labels not in manual collection mode) cannot be marked paid with this action: only the dedicated manual flow can.

**Automating via REST API:**

Everything you can do from the admin dashboard is also exposed through the [MetaCopier REST API](/rest-api/api.md), so you can wire it up to your own bookkeeping, accounting tool, or payment-reconciliation workflow. The relevant endpoints (scoped to your white-label project and feature) are:

* `GET /projects/{projectId}/features/{featureId}/whitelabel/customers/{customerId}/invoices?status=OPEN`: list invoices for a single customer, optionally filtered by status.
* `PUT /projects/{projectId}/features/{featureId}/whitelabel/invoices/{invoiceNumber}/paid`: mark a single invoice as paid. Body: `{ "externalReference": "...", "note": "..." }` (both optional).
* `PUT /projects/{projectId}/features/{featureId}/whitelabel/customers/{customerId}/invoices/paid`: mark every open invoice of a single customer as paid in one call (same optional body).

Typical automation patterns:

* **Bank-feed reconciliation:** poll your bank statement for incoming wire transfers, match by reference, and call the per-invoice endpoint with the transaction ID as `externalReference`.
* **Crypto payment provider:** listen for the provider's "invoice paid" webhook and trigger the corresponding `PUT` call with the on-chain tx hash as `externalReference`.
* **Bulk settlement:** when a customer pays multiple months in a single transfer, call the per-customer endpoint to close all open invoices at once.

Authentication uses your existing project API key (see [Access Policy](/rest-api/access-policy.md)). The same validation rules as the dashboard apply: only the white-label owner can mark invoices as paid, the invoice must be in `OPEN` status, and only invoices generated in manual-collection mode are eligible.

**Validation rules:**

* **Manual collection** can only be enabled together with **Disable invoicing**.
* **Send statement email to customers** requires **Manual collection** to be enabled.
* **Payment instructions** are required when the customer statement email is enabled.

Switching back to Stripe-driven billing at any time is just a matter of turning the toggles off and re-enabling a live Stripe key. Already-generated manual invoices stay where they are; future months go back to auto-charge.

{% hint style="info" %}
If you only want to suppress all invoicing (neither charge customers via Stripe nor generate real-amount invoices for them), keep **Disable invoicing** on and leave **Manual collection** off. This is the behaviour MetaCopier has always had for white-labels with invoicing disabled, and it is still the default.
{% endhint %}

#### Alternative: invoice fully outside MetaCopier

If you prefer to invoice fully outside MetaCopier (no per-customer dashboard, no statement emails, no `OPEN`/`PAID` state), keep **Disable invoicing** on and leave **Manual collection** off. In that case MetaCopier will not produce real-amount invoices for your customers at all, so you are entirely responsible for tracking who pays you and for revoking access to non-payers. The signal-provider followers list (see [Signal sharing](/features/signal-sharing.md)) is a convenient place to find each customer's email address.

Because there are no invoices in this mode, MetaCopier cannot auto-block non-payers for you (auto-block is only triggered by unpaid invoices, whether Stripe-charged or manually collected). To help you revoke access without going project by project, the admin dashboard exposes a **Block customer** action that stops and deletes every project of a given customer email under your white-label. See [Blocking non-paying customers](#blocking-non-paying-customers).

## Admin dashboard

The admin dashboard gives you a quick overview of your white label platform, including the number of created projects and active accounts. It’s an easy way to track usage and growth.

<figure><img src="/files/9TF2hVYQnpUmS4AbqwtG" alt=""><figcaption><p>Example dashboard metrics</p></figcaption></figure>

### Manual-collection billing overview

When **Manual collection** is enabled (see [Manual billing](#manual-billing-real-amount-no-auto-charge)), the dashboard switches to a per-customer billing view designed for owners who collect payment externally:

* **Total outstanding banner** at the top of the dashboard, summing all unpaid invoices across every customer in the current cycle.
* **Customer drilldown** with three monetary columns visible only in manual-collection mode:
  * **Outstanding**: sum of all `OPEN` invoices for this customer.
  * **This month**: outstanding amount limited to the current billing cycle.
  * **Paid lifetime**: total amount this customer has paid you so far.
* **Per-row actions** to mark a single invoice as paid (with optional external reference and note) or to mark every open invoice of a customer as paid in one click.
* **Manual / Auto badge** on the All-invoices view so you can tell at a glance which invoices were generated under manual collection.

These views appear automatically when manual collection is on and disappear when you turn it off, so your existing Stripe-driven dashboards are unchanged.

{% hint style="info" %}
You do not need to manually block non-payers in manual-collection mode. Once an invoice stays `OPEN` past its grace period, MetaCopier automatically blocks the affected project just as it does for Stripe auto-charge invoices. The **Block customer** action described below is meant for owners who invoice fully outside MetaCopier (**Disable invoicing** on, **Manual collection** off), where no invoices exist and auto-block cannot trigger.
{% endhint %}

### Blocking non-paying customers

This action is intended for the "invoice fully outside MetaCopier" mode (**Disable invoicing** on, **Manual collection** off). In that mode there are no MetaCopier invoices, so auto-block never triggers and you (the white-label owner) have to revoke access yourself when a customer stops paying. In Stripe auto-charge mode and in manual-collection mode you normally do not need this: unpaid invoices already trigger the standard auto-block flow.

**How it works:**

1. Open the **Customers** dialog from the white-label admin dashboard.
2. Click the red **Block** icon on the row of the non-paying customer, or open the customer drilldown and use the **Block customer** button at the top.
3. In the confirmation dialog, retype the customer email to confirm the destructive action. Optionally add a reason (max 255 characters) that will be included in the summary email.
4. The request is accepted immediately (the UI does not wait for the block to finish) and MetaCopier schedules the block on an internal worker.

**What gets blocked:**

* Every project of that customer that is linked to your white-label. Projects the same customer owns under other white-labels or standalone are never touched.
* All accounts inside each blocked project are stopped and deleted.
* Each project is flagged as blocked and hidden from the customer.
* Your own white-label owner project is never blocked, even if you accidentally enter your own email.

**What is not sent:**

The blocked customer does not receive any notification from MetaCopier. Communicating the block (and its reason) to the customer is your responsibility as the white-label owner.

**Summary email to you:**

When the background job finishes, you receive an internal MetaCopier notification email at your account address containing:

* The customer email that was blocked and the optional reason you provided.
* The list of blocked project IDs with per-project status.
* The number of successful and failed blocks and the total duration.
* If no matching projects were found under your white-label, the email still arrives so you know the request was processed.

This email is deliberately sent from metacopier.io (not from your white-label domain) because it is an internal admin notification to you, not a customer-facing message.

**Automating via REST API:**

The same action is exposed through the [MetaCopier REST API](/rest-api/api.md):

* `PUT /projects/{projectId}/features/{featureId}/whitelabel/customers/block`: schedule a block for the given customer email. Body: `{ "email": "customer@example.com", "reason": "Non-payment of 3 months" }` (`reason` is optional). Response: `{ "accepted": true, "email": "customer@example.com", "queuedProjectCount": 4, "queuedProjectIds": ["..."], "notificationEmail": "owner@example.com" }`.

The endpoint returns 202-style right away and the actual block runs in the background. Only the white-label owner can call this endpoint. It works in every mode, but as noted above, in modes with real invoices you rarely need it because auto-block already handles non-payers.

{% hint style="danger" %}
Blocking is destructive and permanent. Blocked projects are hidden and their accounts are stopped and deleted. There is no unblock in MetaCopier: neither from the UI, the API, nor through support. Use the retype-email confirmation as your last chance to abort.
{% endhint %}

## Pricing

White Label is available in a Basic plan, with a Pro plan (available Q4/2025). Enjoy our **Basic plan** at no cost. Upgrade to the **Pro plan** for just 99 USD/month, or get it for free if your average number of connected accounts is over 50. Here's a quick overview:

<table><thead><tr><th width="426">Feature</th><th data-type="checkbox">Basic</th><th data-type="checkbox">Pro</th></tr></thead><tbody><tr><td>Admin dashboard</td><td>true</td><td>true</td></tr><tr><td>Custom domain</td><td>true</td><td>true</td></tr><tr><td>Custom logo</td><td>true</td><td>true</td></tr><tr><td>Custom domain address sender</td><td>true</td><td>true</td></tr><tr><td>Stripe integration</td><td>true</td><td>true</td></tr><tr><td>SSL certificate</td><td>true</td><td>true</td></tr><tr><td>Web Application Firewall</td><td>true</td><td>true</td></tr><tr><td>DDoS protection</td><td>true</td><td>true</td></tr><tr><td>Navigation links (Home / Support)</td><td>true</td><td>true</td></tr><tr><td>Registration restriction</td><td>false</td><td>true</td></tr><tr><td>No "Powered by MetaCopier"</td><td>false</td><td>true</td></tr><tr><td>Priority support</td><td>false</td><td>true</td></tr><tr><td>Advanced customization</td><td>false</td><td>true</td></tr></tbody></table>

## Security Specifications

Our platform includes several built-in protections to help keep your white label instance fast, secure, and reliable, even under challenging conditions. While no system can offer perfect protection, these measures are designed to significantly reduce risk and improve stability.

* **Defend against common attacks with WAF**\
  The Web Application Firewall (WAF) helps protect your platform from many of the most common online threats, including vulnerabilities highlighted by OWASP. This covers risks such as SQL injection, cross-site scripting, and other well-known attack patterns.
* **Protect against zero-day threats**\
  The WAF also includes mechanisms to help detect and block some types of zero-day vulnerabilities before they can be exploited.
* **DDoS protection**\
  The platform is equipped with strong protection against Distributed Denial of Service attacks. Although no solution can offer absolute prevention, this system ensures your platform remains stable and accessible, even during heavy or malicious traffic. It delivers reliability that is as close as possible to full uptime.

## Maintenance & Updates

Your white label platform runs on top of the MetaCopier system, which means you automatically get all the latest improvements, security updates, and new features. There is no need to manage any technical updates yourself. We take care of everything in the background so you can focus on your users and your business. If an update includes something that may affect the look or feel of your platform, we make sure your branding stays in place. You can always go back to your settings and adjust them if needed. For larger changes, we will let you know in advance so you have time to prepare.

## Troubleshooting & FAQ

### Do you have a demo site where I can check how it looks?

We don't have a separate demo site at the moment. However, the white label platform looks very similar to MetaCopier itself, just with your own branding, domain, and pricing. If you're familiar with MetaCopier, you'll have a good idea of what your white label version will look and feel like.

### Can I customize the branding?

Absolutely. You can fully customize the platform to match your brand. This includes uploading your logo, setting brand colors, using your own domain, and even customizing pricing. All branding options are available in the White Label section of your project dashboard.

### Will my customers receive the MetaCopier newsletter?

No, your customers will not receive any emails or newsletters from MetaCopier. Since your platform is fully white labeled, all communication with your users is under your brand.

### Can I disable the free trial balance for white label customers?

At the moment, this is not possible. The trial balance is enabled by default to help new users explore the platform and understand how copy trading works before connecting a real account. It lowers the entry barrier, builds trust, and often leads to higher conversion rates. We may consider adding an option to disable it in future updates based on demand.

### How can I delete a white label setup?

At the moment, there is no direct "delete" button for a white label configuration. However, you can contact our support team, and we will assist you in removing or resetting the setup for your project. We’re also working on adding this functionality to the dashboard in a future update.

## Limitations

While the white label platform offers a wide range of features and flexibility, there are still a few things to keep in mind. Below are some current limitations you should be aware of when setting up and using your branded version.

* **No Social Login:** At the moment, users cannot log in using social accounts like Google or Facebook. All users must register and sign in with an email and password.
* **cTrader and Tradovate Require Your Own OAuth Credentials:** If you plan to offer cTrader or Tradovate accounts through your white-label platform, you must generate your own OAuth client ID and secret directly from each broker (cTrader Open API portal / Tradovate API portal) and enter them in the white-label settings. This step cannot be handled automatically from the MetaCopier side and must be done manually. If you explicitly add cTrader or Tradovate to the allowed account types but the matching credentials are missing, saving the white-label settings will be rejected. If the allowed account types list is left empty (all types allowed) and the credentials are missing, saving still works, but cTrader and Tradovate will simply be hidden from the account-type dropdown on your white-label until you add the credentials.
* **Telegram notifications:** Telegram notifications are not available yet, but they’re on our roadmap and coming soon. Once released, you’ll be able to send important updates, like trade alerts or system messages, directly to your users via Telegram. We’ll let you know as soon as this feature is ready so you can start using it right away.
* **No Affiliations:** The affiliate system is not available for white label platforms because you operate under your own brand and pricing. Our affiliate program is tied to the main MetaCopier platform and designed for direct referrals.
* **Single Signal Provider:** Only the owner of the white label platform can share trading signals with their users. Customers within your white label environment cannot create, share, or sell their own signals. This ensures that all signals and strategies remain exclusive to the platform owner’s management.
* **E-mail Notifications:** Email notifications (such as registration emails) are sent via Mailgun. If you are already using Mailgun with your top-level domain, you will not be able to authenticate Mailgun again for the MetaCopier white label. In this case, there is currently no workaround, and we recommend using a separate domain for the white label application.
* **No Documentation Link in UI:** The white label interface does not include a direct link to documentation, as documentation is not embedded within the white label environment.
