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

# Supported partner payout countries

> Check whether Biqli offers Stripe Connect or PayPal partner payouts in your country.

export const PartnerPayoutCountrySelector = () => {
  const stripeCountries = new Set(`
    AE AG AL AM AO AR AT AU AZ BA BD BE BG BH BJ BN BO BS BT BW CA CH CI CL
    CO CR CY CZ DE DK DO DZ EC EE EG ES ET FI FR GA GB GH GI GM GR GT GY HK
    HR HU ID IE IL IN IS IT JM JO JP KE KH KR KW KZ LA LC LI LK LT LU LV MA
    MC MD MG MK MN MO MT MU MX MY MZ NA NE NG NL NO NZ OM PA PE PH PK PL PT
    PY QA RO RS RW SA SE SG SI SK SM SN SV TH TN TR TT TW TZ US UY UZ VN ZA
  `.trim().split(/\s+/));
  const paypalCountries = new Set(`
    AD AE AR AT AU BE BH BM BR BS BW BG CA CH CL CO CR CY CZ C2 DE DK DO EC
    EE ES FI FO FR GB GE GI GL GR GT HK HN HR HU ID IE IL IN IS IT JM JO JP
    KE KY KW KZ LI LS LT LU LV MA MC MD MT MU MX MY MZ NI NL NO NZ OM PA PE
    PH PL PT QA RE RO RS SA SE SG SI SK SM SN SV TR US UY VE VN ZA
  `.trim().split(/\s+/));
  const countryNameOverrides = {
    C2: 'China'
  };
  const getCountryName = code => {
    if (countryNameOverrides[code]) return countryNameOverrides[code];
    try {
      return new Intl.DisplayNames(['en'], {
        type: 'region'
      }).of(code) || code;
    } catch {
      return code;
    }
  };
  const countries = [...new Set([...stripeCountries, ...paypalCountries])].map(code => ({
    code,
    name: getCountryName(code),
    method: stripeCountries.has(code) ? 'connect' : 'paypal'
  })).sort((a, b) => a.name.localeCompare(b.name));
  const payoutMethods = [{
    value: 'all',
    label: 'All'
  }, {
    value: 'connect',
    label: 'Bank account'
  }, {
    value: 'paypal',
    label: 'PayPal'
  }];
  const showCount = 21;
  const [expanded, setExpanded] = useState(false);
  const [searchQuery, setSearchQuery] = useState('');
  const [payoutMethod, setPayoutMethod] = useState('all');
  const query = searchQuery.trim().toLowerCase();
  const filtered = countries.filter(country => {
    const matchesSearch = !query || country.name.toLowerCase().includes(query) || country.code.toLowerCase().includes(query);
    const matchesMethod = payoutMethod === 'all' || country.method === payoutMethod;
    return matchesSearch && matchesMethod;
  });
  const displayed = expanded ? filtered : filtered.slice(0, showCount);
  const isCollapsed = filtered.length > showCount && !expanded;
  return <div className="not-prose relative my-6">
      <div className="flex flex-col gap-2 pb-2 md:flex-row">
        <input type="search" placeholder="Search countries..." value={searchQuery} onChange={event => {
    setSearchQuery(event.target.value);
    setExpanded(false);
  }} className="w-full rounded-lg border border-neutral-200 bg-white px-3 py-1.5 text-sm text-neutral-900 placeholder:text-neutral-400 focus:border-neutral-400 focus:outline-none focus:ring-1 focus:ring-neutral-400 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-100 dark:placeholder:text-neutral-500 dark:focus:border-neutral-600 dark:focus:ring-neutral-600" aria-label="Search supported payout countries" />

        <div className="biqli-payout-country-filters flex flex-wrap gap-2 md:flex-nowrap">
          {payoutMethods.map(({value, label}) => <button key={value} type="button" aria-pressed={payoutMethod === value} data-active={payoutMethod === value ? 'true' : 'false'} onClick={() => {
    setPayoutMethod(value);
    setExpanded(false);
  }} className="biqli-payout-country-filter">
              {label}
            </button>)}
        </div>
      </div>

      <div style={isCollapsed ? {
    maskImage: 'linear-gradient(to bottom, black calc(100% - 80px), transparent)',
    WebkitMaskImage: 'linear-gradient(to bottom, black calc(100% - 80px), transparent)',
    maxHeight: '420px',
    overflow: 'hidden'
  } : {
    paddingBottom: expanded ? '48px' : '0'
  }} className="grid grid-cols-2 gap-5 py-4 sm:grid-cols-3">
        {displayed.map(country => {
    const flagCode = country.code === 'C2' ? 'cn' : country.code.toLowerCase();
    const methodLabel = country.method === 'connect' ? 'Bank account' : 'PayPal';
    return <div key={country.code} className="flex items-start gap-3">
              <img src={`https://hatscripts.github.io/circle-flags/flags/${flagCode}.svg`} alt="" width={32} height={32} className="mt-0.5 size-5 shrink-0 rounded-full border border-neutral-200 shadow-sm dark:border-neutral-700" draggable={false} noZoom />
              <div className="min-w-0 flex-1">
                <div className="text-sm font-medium text-neutral-900 dark:text-neutral-100">
                  {country.name}
                </div>
                <div className="mt-0.5 flex items-center gap-1 text-[10px] leading-tight text-neutral-500 dark:text-neutral-400">
                  <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" className="size-2.5" aria-hidden="true">
                    <path d="M15.25 9.75H4.75c-1.105 0-2-.895-2-2v-4" fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" />
                    <polyline fill="none" points="11 5.5 15.25 9.75 11 14" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" />
                  </svg>
                  {methodLabel}
                </div>
              </div>
            </div>;
  })}
      </div>

      {filtered.length === 0 && <p className="py-6 text-center text-sm text-neutral-500 dark:text-neutral-400" aria-live="polite">
          No countries match your filters.
        </p>}

      {filtered.length > showCount && <button type="button" onClick={() => setExpanded(!expanded)} className="absolute left-1/2 -translate-x-1/2 transform rounded-full border border-neutral-200 bg-white px-4 py-1 text-sm text-neutral-500 shadow-sm hover:text-neutral-700 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-400 dark:hover:text-neutral-200" style={{
    bottom: isCollapsed ? '24px' : '-8px'
  }}>
          {expanded ? 'Show less' : `Show ${filtered.length - showCount} more`}
        </button>}
    </div>;
};

Biqli uses the country stored in your partner profile to choose one payout
method. You do not choose between Stripe and PayPal in production.

* If Stripe Connect supports your country, Biqli offers a Stripe bank payout.
* If Stripe Connect does not support your country but PayPal does, Biqli offers
  PayPal as the fallback.
* If neither provider supports your country, Biqli keeps eligible earnings in
  your partner balance and cannot create a payout yet.

## Compare payout methods

|                       | Stripe Connect bank payout                            | PayPal fallback                                              |
| --------------------- | ----------------------------------------------------- | ------------------------------------------------------------ |
| When offered          | Stripe supports the partner country                   | Stripe is unavailable and PayPal supports the country        |
| Destination           | Bank account connected through Stripe                 | PayPal account email                                         |
| Currency              | Local currency confirmed during Stripe onboarding     | Currency accepted by the receiving PayPal account and payout |
| Timing shown by Biqli | 2 to 5 business days after provider processing begins | Sent directly to PayPal after provider processing begins     |
| Biqli application fee | None                                                  | None                                                         |

Your bank, Stripe, or PayPal can still apply currency conversion or receiving
fees.

## Supported payout countries

Here is the full list of countries where Biqli can send partner payouts, along
with the payout method available in each country. Search by country name or
two-letter code, or filter by payout method.

<PartnerPayoutCountrySelector />

Each country shows the one method Biqli offers in production. Stripe bank
payouts take priority. PayPal appears only where Stripe is unavailable.

The table reflects the country policies implemented by Biqli. Stripe and
PayPal can change availability or apply additional identity, bank, currency, or
regional restrictions during onboarding. Review the current
[Stripe Connect availability](https://docs.stripe.com/connect/accounts) and
[PayPal Payouts country features](https://developer.paypal.com/payouts/supported-features)
for provider-level requirements.

## How your country is selected

Biqli records the account country when your partner profile is created. That
country controls the payout method and cannot be edited from payout settings.
This prevents a payout account from being configured for a country that does
not match the partner profile.

Contact Biqli support if the recorded country is factually wrong or your legal
residence has changed. The support team must review the change before the
payout method can change.

## If your country is unavailable

Your approved commissions remain recorded in your Biqli partner balance. A
payout cannot be created until Biqli has a configured provider for your partner
country.

Do not select another country merely to expose a payout method. Provider
identity and banking checks can reject the account and Biqli may freeze the
partner profile for review.

## Frequently asked questions

### Can I choose PayPal when Stripe is available?

No. The production payout flow gives Stripe Connect priority. PayPal appears
only as a fallback when Stripe is unavailable for the partner country and
PayPal is supported.

### Why did Stripe ask for additional information?

Stripe controls its hosted identity, tax, and bank verification. A country
listed as supported can still require additional documents or reject bank
details that do not meet its requirements.

### Will changing my profile country move an active payout?

Country changes require support review and should not be attempted during an
active payout. The payout keeps the destination snapshot recorded when it was
created.
