> ## Documentation Index
> Fetch the complete documentation index at: https://docs.whitebit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Institutional Onboarding

> Two-phase onboarding process for institutional partners: crypto operations access and fiat operations (EUR/SEPA) setup.

export const RegionBaseUrl = ({className = "", showBaseUrl = true}) => {
  const [region, setRegionState] = useState(() => {
    if (typeof window !== 'undefined') {
      return localStorage.getItem("api-region-preference") || "com";
    }
    return "com";
  });
  const [mounted, setMounted] = useState(false);
  const observerRef = useRef(null);
  const isSyncingRef = useRef(false);
  const updateAllContentOnPage = targetRegion => {
    try {
      const domainFrom = targetRegion === "eu" ? "whitebit.com" : "whitebit.eu";
      const domainTo = targetRegion === "eu" ? "whitebit.eu" : "whitebit.com";
      const links = document.querySelectorAll('a');
      links.forEach(link => {
        let href = link.getAttribute('href');
        if (href && href.includes(domainFrom)) {
          link.setAttribute('href', href.replace(domainFrom, domainTo));
        }
      });
      const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, {
        acceptNode: node => {
          if (node.parentElement?.closest('.region-toggle-component')) {
            return NodeFilter.FILTER_REJECT;
          }
          return node.textContent.includes(domainFrom) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
        }
      });
      let currentNode;
      while (currentNode = walker.nextNode()) {
        currentNode.textContent = currentNode.textContent.replace(new RegExp(domainFrom, 'g'), domainTo);
      }
      console.log(`[RegionSync] Global content updated to ${domainTo}`);
    } catch (e) {
      console.error("[RegionSync] Error updating content:", e);
    }
  };
  const updateRegion = (newRegion, source) => {
    if (region === newRegion) return;
    console.log(`[RegionBaseUrl] Updating to "${newRegion}" (Source: ${source})`);
    if (source === 'observer') {
      isSyncingRef.current = true;
      setTimeout(() => isSyncingRef.current = false, 1000);
    }
    setRegionState(newRegion);
    localStorage.setItem("api-region-preference", newRegion);
    updateAllContentOnPage(newRegion);
    if (source === 'user-click') {
      window.dispatchEvent(new CustomEvent("regionChange", {
        detail: newRegion
      }));
      attemptToUpdateNativeDropdown(newRegion, 0);
      setTimeout(() => attemptToUpdateNativeDropdown(newRegion, 1), 500);
      setTimeout(() => attemptToUpdateNativeDropdown(newRegion, 2), 1500);
    }
  };
  const attemptToUpdateNativeDropdown = (targetRegion, attempt) => {
    if (isSyncingRef.current) return;
    try {
      const targetUrl = targetRegion === "eu" ? "https://whitebit.eu" : "https://whitebit.com";
      const targetDesc = targetRegion === "eu" ? "EU Server" : "Production Server";
      const selects = document.querySelectorAll('select');
      for (const select of selects) {
        if (select.innerHTML.includes('whitebit.com') || select.innerHTML.includes('whitebit.eu')) {
          select.value = targetUrl;
          select.dispatchEvent(new Event('change', {
            bubbles: true
          }));
          return;
        }
      }
      const buttons = Array.from(document.querySelectorAll('button, [role="combobox"]'));
      const serverSelector = buttons.find(btn => {
        if (btn.closest('a') || btn.closest('[class*="card"]') || btn.closest('nav')) {
          return false;
        }
        const txt = btn.textContent || "";
        const isServerDropdown = (txt.includes('Production Server') || txt.includes('EU Server') || txt.includes('WhiteBIT Global Server') || txt.includes('WhiteBIT EU Server')) && !txt.includes('Run') && !txt.includes('Send') || btn.getAttribute('role') === 'combobox';
        return isServerDropdown;
      });
      if (serverSelector) {
        const currentText = serverSelector.textContent || "";
        if (currentText.includes(targetDesc)) return;
        serverSelector.click();
        setTimeout(() => {
          const options = document.querySelectorAll('[role="option"], li, button');
          for (const opt of options) {
            const optText = opt.textContent || "";
            if (optText.includes(targetDesc) || optText.includes(targetUrl)) {
              opt.click();
              return;
            }
          }
        }, 100);
      }
    } catch (e) {
      console.error("[Sync] Error:", e);
    }
  };
  useEffect(() => {
    setMounted(true);
    updateAllContentOnPage(region);
    const handleStorageChange = e => {
      if (e.key === "api-region-preference" && e.newValue) {
        updateRegion(e.newValue, 'storage');
      }
    };
    const handleRegionChange = e => {
      if (e.detail !== region) {
        updateRegion(e.detail, 'event');
      }
    };
    window.addEventListener("storage", handleStorageChange);
    window.addEventListener("regionChange", handleRegionChange);
    observerRef.current = new MutationObserver(mutations => {
      if (isSyncingRef.current) return;
      updateAllContentOnPage(region);
      for (const mutation of mutations) {
        if (mutation.type !== 'childList' && mutation.type !== 'characterData') continue;
        const target = mutation.target;
        const el = target.nodeType === Node.TEXT_NODE ? target.parentElement : target;
        if (el && (el.getAttribute('role') === 'option' || el.closest('[role="listbox"]'))) continue;
        const text = target.textContent || "";
        if (text.includes('WhiteBIT EU Server') || text.includes('https://whitebit.eu') && text.includes('Server')) {
          if (el && el.tagName !== 'A' && !el.closest('.region-toggle-component')) {
            if (region !== 'eu') updateRegion('eu', 'observer');
          }
        } else if (text.includes('WhiteBIT Global Server') || text.includes('https://whitebit.com') && text.includes('Server')) {
          if (el && el.tagName !== 'A' && !el.closest('.region-toggle-component')) {
            if (region !== 'com') updateRegion('com', 'observer');
          }
        }
      }
    });
    observerRef.current.observe(document.body, {
      childList: true,
      subtree: true,
      characterData: true
    });
    if (typeof window !== 'undefined') {
      const current = localStorage.getItem("api-region-preference");
      if (current) attemptToUpdateNativeDropdown(current, 'init');
    }
    return () => {
      window.removeEventListener("storage", handleStorageChange);
      window.removeEventListener("regionChange", handleRegionChange);
      if (observerRef.current) observerRef.current.disconnect();
    };
  }, [region]);
  const apiBaseUrl = region === "eu" ? "https://whitebit.eu" : "https://whitebit.com";
  if (!mounted) return null;
  return <div className={`flex items-center gap-2 flex-wrap my-4 region-toggle-component ${className}`}>
            <span className="text-sm text-gray-500 dark:text-gray-400 font-mono">
                Base URL
            </span>
            <span className="text-sm text-gray-400">(</span>
            <div className="inline-flex bg-gray-100 dark:bg-gray-800 rounded-lg p-0.5 border border-gray-200 dark:border-gray-700">
                <button onClick={() => updateRegion("com", "user-click")} className={`px-2 py-0.5 text-xs font-medium rounded-md transition-all ${region === "com" ? "bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 shadow-sm" : "text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200"}`}>
                    .com
                </button>
                <button onClick={() => updateRegion("eu", "user-click")} className={`px-2 py-0.5 text-xs font-medium rounded-md transition-all ${region === "eu" ? "bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 shadow-sm" : "text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200"}`}>
                    .eu
                </button>
            </div>
            <span className="text-sm text-gray-400">)</span>
            {showBaseUrl && <>
                    <span className="text-sm text-gray-400">:</span>
                    <a href={apiBaseUrl} target="_blank" rel="noopener noreferrer" className="text-sm font-mono text-primary dark:text-primary-light hover:underline">
                        {apiBaseUrl}
                    </a>
                </>}
        </div>;
};

<RegionBaseUrl />

Institutional onboarding involves two distinct phases: crypto operations access (required for all partners) and fiat operations access (optional, for EUR/SEPA). Each phase has a separate compliance review cycle.

## Overview

The onboarding process involves KYC, KYB, compliance review cycles, and (for fiat) additional documentation through a fiat processing partner. Listing the requirements upfront helps partners prepare documentation before starting, reducing back-and-forth delays.

**Timeline:** Timeline varies depending on corporate structure, document availability, and compliance feedback cycles. Allow 2-4 weeks for Phase 1 and an additional 2-4 weeks for Phase 2. Contact [institutional@whitebit.com](mailto:institutional@whitebit.com) for current processing estimates. {/* verify timeline with Dzhavid */}

## Phase 1: Crypto Operations Access

Phase 1 grants access to crypto trading, [sub-accounts](/products/sub-accounts/overview), [lending](/products/lending/overview), and all API endpoints.

<Steps>
  <Step title="Create a WhiteBIT account">
    Register at [whitebit.com/auth/register](https://whitebit.com/auth/register). Use the corporate email address that will serve as the primary account contact.
  </Step>

  <Step title="Complete KYC for the director or responsible person">
    Navigate to account verification settings. Complete individual identity verification for the person with signing authority.
  </Step>

  <Step title="Initiate KYB (Know Your Business)">
    Navigate to [whitebit.com/verification-business](https://whitebit.com/verification-business). Click "Get link" to generate the KYB verification form. Complete and submit the form with corporate documentation.
  </Step>

  <Step title="Compliance review">
    The WhiteBIT compliance team reviews the submission. Expect clarification requests and additional documentation requirements. Respond to compliance feedback promptly -- the review cycle involves back-and-forth until all requirements are met.
  </Step>

  <Step title="Approval and access">
    Upon approval, full crypto operations become available. Generate API keys at [whitebit.com/settings/api](https://whitebit.com/settings/api). Begin API integration using the [First API Call](/guides/first-api-call) guide.
  </Step>
</Steps>

<Note>
  **Enabling crypto deposits.** Crypto deposits are disabled by default. Once enabled for the
  account, the capability applies to the account and its [sub-accounts](/products/sub-accounts/overview);
  enablement is not available via API. To request it, contact your assigned Account Manager or
  email [institutional@whitebit.com](mailto:institutional@whitebit.com).
</Note>

## Phase 2: Fiat Operations Access (EUR/SEPA)

Phase 2 adds EUR deposit and withdrawal capabilities via SEPA. Phase 2 requires additional onboarding through WhiteBIT and a fiat processing partner.

<Note>
  WhiteBIT manages the fiat processing partner onboarding on behalf of the partner.
  Partners do not contact the fiat processing partner directly.
</Note>

### Required Documents

The fiat processing partner typically requests the following. All documents must be in English (translated if necessary), apostilled, and less than 3 months old.

**Corporate documents:**

* Memorandum and Articles of Association
* Extract from Register of Legal Entities

**Beneficial owner source of funds/wealth:**

* Annual tax declaration
* Salary payslips (most recent 6 months)
* Bank statements (most recent 6 months)
* Relevant agreements and invoices

**Company source of funds:**

* Annual tax declaration
* Financial statement or audit report
* Bank statements (most recent 6 months)
* Relevant agreements and invoices

<Warning>
  Document requirements may vary based on jurisdiction and corporate structure.
  Contact [institutional@whitebit.com](mailto:institutional@whitebit.com) for current requirements before preparing documents.
</Warning>

### Process

After WhiteBIT submits the documentation to the fiat processing partner, the fiat processing partner's compliance team reviews the submission. Expect an iterative review cycle similar to Phase 1. Upon final approval, EUR/SEPA operations become available on the account.

## Contact

For institutional onboarding inquiries, partnership discussions, or to check the status of an in-progress application, contact **[institutional@whitebit.com](mailto:institutional@whitebit.com)**.

## What's Next

<CardGroup cols={2}>
  <Card title="Institutional Overview" icon="building" href="/institutional/overview">
    Explore the full catalog of institutional products and services.
  </Card>

  <Card title="Compliance" icon="shield-check" href="/institutional/compliance">
    MiCA, Travel Rule, and regional regulatory requirements affecting API behavior.
  </Card>
</CardGroup>
