# API pro onboarding obchodníků (/cs/platform-api/merchant_onboarding)





Všechny požadavky na této stránce používají váš Server Secret Token. Viz [Autentizace](/platform-api#authentication).

<Callout title="Jeden onboarding pro platby v prodejně i online" type="info">
  Obchodník může v jedné žádosti o onboarding požádat o [Přijímání plateb v prodejně](/in-store), [online platby](/online) nebo o obojí. Tato stránka platí pro každou integraci: Accept SDK, aplikaci Tapaya Terminal i
  Checkout. Použijte ji k vytváření a správě obchodníků přes API místo Tapaya Platform UI. Požádejte o platební funkce, které obchodník potřebuje. Samotné schválení pro platby v prodejně online platby nepovoluje.
</Callout>

Vytvořením obchodníka pomocí `POST /integrator/merchant` nebo pomocí `POST /merchant/auth/register` v
[integraci Accept SDK](/in-store/integration/backend_integration#merchant-authentication-accept-sdk-integrations)
se vytvoří jeho účet, ale obchodník nemůže přijímat ostré platby v prodejně ani online, dokud není onboarding dokončen.
Pro online platby požádejte o funkci Checkout a počkejte na schválení online zpracovatelem a na nastavení brány. Obchodníci se automaticky zobrazí v [nastavení Checkoutu](/online/integration/checkout_settings), kde můžete ověřit jejich připravenost a nastavit klíče a peněženky. Tapaya podporuje několik způsobů onboardingu; všechny lze spravovat z Tapaya Platform UI a tam, kde je to vhodné, automatizovat.

| Postup                 | Kdy jej použít                                                                                                 | Vstupní bod API                                                                                                                                                                                                                                  |
| ---------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Tapaya Platform UI** | Onboarding za obchodníka dokončí váš provozní tým.                                                             | Vytvořte nebo vyberte obchodníka v Tapaya Platform UI a otevřete tam hostovaný onboarding.                                                                                                                                                       |
| **Vlastní UI**         | Údaje pro onboarding shromažďujete a ověřujete ve svém produktu.                                               | Ověřte jednotlivé části pomocí `POST /integrator/merchant/onboarding/validate/*` a poté je odešlete pomocí `POST /integrator/merchant/onboarding`. Podrobnosti níže.                                                                             |
| **E-mailová pozvánka** | Známý obchodník obdrží jednorázovou pozvánku k samostatnému onboardingu.                                       | Pozvánku odešlete pomocí `POST /integrator/merchant/send-registration-invite`; uveďte `merchantToken`, chcete-li pozvánku svázat s existujícím základním záznamem obchodníka, a poté ji vypište nebo zrušte přes `/integrator/merchant/invites`. |
| **Odkaz kampaně**      | Více obchodníků nebo dosud neznámí obchodníci používají opakovaně použitelný odkaz pro samostatnou registraci. | Odkaz vytvořte pomocí `POST /integrator/merchant/reusable-registration-invites`; odkazy vypíšete nebo zrušíte přes tentýž endpoint.                                                                                                              |

Podrobné srovnání těchto postupů najdete v [průvodci onboardingem obchodníků](/merchants/onboarding).

## Žádost o funkce online plateb [#request-online-payment-capabilities]

`POST /integrator/merchant/onboarding` vyžaduje `capability`. Stejnou hodnotu funkce použijte při ověřování obchodního profilu:

| Hodnota | Funkce    | Údaje o kanálu                                                        |
| ------- | --------- | --------------------------------------------------------------------- |
| `1`     | Obojí     | Uveďte `terminal` i `online`. Každý kanál vyžaduje vlastní schválení. |
| `2`     | Terminály | Uveďte `terminal` pro platby v prodejně.                              |
| `3`     | Checkout  | Uveďte `online` pro online platby. Terminál není potřeba.             |

Pro Checkout přidejte vedle identity obchodníka, adresy, sdíleného objektu `business` a údajů KYB následující pole nejvyšší úrovně. Stejná pole kanálu platí i pro `POST /integrator/merchant/onboarding/validate/business`:

```json
{
	"capability": 3,
	"online": {
		"mcc": "5411",
		"statementDescriptor": "ACME CORP",
		"productDescription": "Groceries sold online",
		"averageItemValue": 2500,
		"expectedMonthlyTurnover": 500000,
		"url": "https://www.acme.example.com",
		"purchaseChargeTiming": 1,
		"averageDeliveryDays": 2,
		"topCountries": [{ "countryId": 1, "percentage": 100 }]
	}
}
```

Částky jsou v nejmenších jednotkách měny. Web pro online prodej musí používat HTTP nebo HTTPS a jeho název hostitele musí obsahovat `www`. `statementDescriptor` má 5 až 22 znaků. `purchaseChargeTiming` je `1` pro zadání objednávky, `2` pro odeslání nebo `3` pro doručení. `averageDeliveryDays` je 0 až 999. Uveďte jednu až čtyři jedinečné `topCountries`, jejichž procentní podíly dávají v součtu 100.

Sdílené údaje o podpoře a finanční údaje ponechte v `business`. V režimu oddílů kanálů uveďte MCC, popis na výpisu (statement descriptor), popis produktu a odhady transakcí v příslušném objektu `terminal` nebo `online`. Před odesláním onboardingu payload ověřte a opravte vrácené chyby polí specifické pro daný kanál.

## Pozvání obchodníka k dokončení hostovaného onboardingu [#invite-a-merchant-to-complete-hosted-onboarding]

Tento postup použijte, když má formulář KYB hostovat Tapaya, ale vytváření obchodníků chcete i nadále řídit ze svého
backendu.

<Callout title="Doporučeno, pokud merchantToken spravujete vy" type="info">
  Pokud identifikátor obchodníka, který později používá SDK nebo váš back office, spravuje váš systém, nejprve vytvořte
  základní záznam obchodníka pomocí `POST /merchant/auth/register` nebo `POST /integrator/merchant` a poté zavolejte
  `POST /integrator/merchant/send-registration-invite` se stejným `merchantToken`. Hostovaný
  onboarding tak zůstane připojený k tomuto obchodníkovi a nevytvoří se druhý.
</Callout>

Doporučený postup je:

1. Vytvořte základní záznam obchodníka:
   * `POST /merchant/auth/register`, nebo
   * `POST /integrator/merchant`
2. Odešlete pozvánku k hostovanému onboardingu pomocí `POST /integrator/merchant/send-registration-invite`
3. V případě potřeby sdílejte vrácenou adresu `registrationUrl` s obchodníkem a nechte jej vyplnit formulář hostovaný společností Tapaya
4. Připravenost obchodníka zjišťujte dotazováním přes `GET /integrator/merchant/{merchantId}/status`

**Endpoint:** `POST /integrator/merchant/send-registration-invite`

<CodeBlockTabs defaultValue="curl" groupId="http-client">
  <CodeBlockTabsList>
    <CodeBlockTabsTrigger value="curl">
      cURL
    </CodeBlockTabsTrigger>
  </CodeBlockTabsList>

  <CodeBlockTab value="curl">
    ```bash
    curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/send-registration-invite' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: REPLACE_ME' \
    -d '{
            "email": "admin@acme.com",
            "merchantToken": "unique_merchant_id_from_your_db"
        }'
    ```
  </CodeBlockTab>
</CodeBlockTabs>

**Parametry:**

| Pole            | Typ      | Povinné | Popis                                                                                                                                                                                                                                                                   |
| --------------- | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `email`         | `string` | ✓       | E-mailová adresa, na kterou má přijít odkaz na hostovaný onboarding.                                                                                                                                                                                                    |
| `merchantToken` | `string` |         | Existující token obchodníka, se kterým se má pozvánka svázat. Použijte jej, pokud jste již základní záznam obchodníka vytvořili a chcete, aby hostovaný onboarding vyplnil právě tohoto obchodníka. Pokud jej vynecháte, dokončením pozvánky se vytvoří nový obchodník. |

**Odpovědi:**

| Kód   | Popis                                                  |
| ----- | ------------------------------------------------------ |
| `200` | Pozvánka vytvořena. Odpověď obsahuje `registrationUrl` |
| `400` | Chyba ověření požadavku                                |
| `401` | Neautorizováno                                         |
| `404` | Organizace nebo obchodník nenalezen                    |
| `409` | Konflikt                                               |

**Tělo odpovědi:**

```json
{
    "registrationUrl": "https://platform.tapaya.com/invite-merchant?token=...&merchantToken=unique_merchant_id_from_your_db"
}
```

Tapaya se také pokusí tento odkaz odeslat e-mailem. Doručení e-mailu však není zaručeno, proto vrácenou adresu
`registrationUrl` vždy považujte za rozhodující zdroj pro své UI a nástroje podpory.

<Callout title="Nezaměňujte s pozvánkou uživatele obchodníka" type="warn">
  `POST /integrator/merchant/{merchantId}/invite` je jiný postup. Zve uživatele platformy k přístupu k již
  existujícímu účtu obchodníka. **Nezahajuje** onboarding KYB a nevytváří ani neaktualizuje profil
  obchodníka.
</Callout>

## Odeslání onboardingu přes API [#submit-onboarding-through-the-api]

Pokud chcete údaje pro onboarding shromažďovat ve vlastním produktu místo přesměrování obchodníků na Tapaya Platform, odešlete je přímo. Každou část ověřujte průběžně, jak ji obchodník vyplňuje, pomocí níže uvedených endpointů `validate/*` a poté vše odešlete jedním voláním, které vytvoří obchodníka spolu s jeho onboardingovým profilem a zaregistruje jej u preferovaného zpracovatele plateb vaší organizace.

<Callout title="Souhlas obchodníka a informace o ochraně osobních údajů" type="warn">
  Před odesláním údajů pro onboarding přes API musíte získat souhlas obchodníka s
  [obchodními podmínkami Tapaya pro integrátory](https://tapaya.com/terms) a
  [zásadami ochrany osobních údajů Tapaya](https://tapaya.com/privacy). Přidejte do svého onboardingového formuláře zaškrtávací políčko s odkazy na
  oba dokumenty, nebo na dokumenty Tapaya odkažte z textu podmínek, se kterými obchodník souhlasí. Tapaya musíte také
  uvést jako zpracovatele osobních údajů ve svých vlastních zásadách ochrany osobních údajů.
</Callout>

<Callout title="Při selhání se obchodník nevytvoří" type="warn">
  `POST /integrator/merchant/onboarding` vytvoří obchodníka **a zároveň** odešle onboarding jediným voláním. Pokud
  jsou údaje pro onboarding neplatné, vrátí `422` s chybami na úrovni polí a **žádný obchodník se nevytvoří**; neexistuje
  tedy žádný obchodník s rozpracovaným onboardingem, kterého by bylo nutné odstranit nebo u něhož by bylo nutné pokračovat.
</Callout>

<div className="fd-steps [&_h3]:fd-step">
  ### Ověření identity [#validate-identity]

  **Endpoint:** `POST /integrator/merchant/onboarding/validate/identity`

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/identity' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: REPLACE_ME' \
      -d '{
              "legalName": "Acme Corp s.r.o.",
              "businessTypeId": 2,
              "email": "admin@acme.com",
              "registrationNumber": "12345678",
              "vatNumber": "CZ12345678",
              "incorporationDate": "2018-04-01"
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Parametry:**

  | Pole                 | Typ      | Povinné | Popis                                                                      |
  | -------------------- | -------- | ------- | -------------------------------------------------------------------------- |
  | `legalName`          | `string` | ✓       | Oficiální název firmy nebo jméno fyzické osoby, která je držitelem účtu.   |
  | `businessTypeId`     | `int`    | ✓       | Typ podnikatelského subjektu (`BusinessTypeEnum`).                         |
  | `email`              | `string` | ✓       | Kontaktní e-mailová adresa.                                                |
  | `registrationNumber` | `string` | ✓       | Oficiální registrační číslo firmy. Kontroluje se na duplicity v rámci vaší |
  | organizace.          |          |         |                                                                            |
  | `vatNumber`          | `string` |         | DIČ (registrační číslo pro DPH), pokud existuje.                           |
  | `incorporationDate`  | `date`   |         | Datum právního vzniku firmy (`YYYY-MM-DD`).                                |

  **Tělo odpovědi:**

  ```json
  {
      "valid": true,
      "errors": []
  }
  ```

  Hodnota `registrationNumber`, kterou již používá jiný obchodník ve vaší organizaci, se vrátí jako chyba `valid: false`
  s `code: "DUPLICATE_REGISTRATION_NUMBER"`, nikoli jako `409`; tento endpoint vždy vrací `200`.

  ### Ověření adresy [#validate-address]

  **Endpoint:** `POST /integrator/merchant/onboarding/validate/address`

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/address' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: REPLACE_ME' \
      -d '{
              "line1": "Wenceslas Square 1",
              "city": "Prague",
              "postalCode": "11000",
              "countryId": 1
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Parametry:**

  | Pole         | Typ      | Povinné | Popis                                     |
  | ------------ | -------- | ------- | ----------------------------------------- |
  | `line1`      | `string` | ✓       | První řádek adresy.                       |
  | `line2`      | `string` |         | Druhý řádek adresy, je-li potřeba.        |
  | `city`       | `string` | ✓       | Název města.                              |
  | `postalCode` | `string` | ✓       | PSČ.                                      |
  | `state`      | `string` |         | Spolkový stát nebo region, je-li potřeba. |
  | `countryId`  | `int`    | ✓       | Země (`CountryEnum`).                     |

  **Tělo odpovědi:** stejný tvar `{valid, errors}` jako u [Ověření identity](#validate-identity).

  ### Ověření obchodního profilu [#validate-business-profile]

  **Endpoint:** `POST /integrator/merchant/onboarding/validate/business`

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/business' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: REPLACE_ME' \
      -d '{
              "capability": 2,
              "mcc": "5411",
              "url": "https://acme.example.com",
              "supportPhone": "+420123456789",
              "statementDescriptor": "ACME CORP"
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Parametry:**

  | Pole                      | Typ      | Povinné | Popis                                                                                                                                  |
  | ------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------- |
  | `capability`              | `int`    | ✓       | Použijte funkci, kterou odešlete v onboardingu. Pro Checkout nebo Obojí uveďte [údaje o kanálu](#request-online-payment-capabilities). |
  | `mcc`                     | `string` | ✓       | Čtyřmístný kód kategorie obchodníka (Merchant Category Code). V režimu oddílů kanálů použijte `terminal.mcc` nebo `online.mcc`.        |
  | `url`                     | `string` |         | URL webu firmy. Povinné je buď `url`, nebo `productDescription`.                                                                       |
  | `productDescription`      | `string` |         | Popis produktů nebo služeb. Povinné je buď `url`, nebo                                                                                 |
  | `productDescription`.     |          |         |                                                                                                                                        |
  | `supportPhone`            | `string` | ✓       | Telefonní číslo zákaznické podpory ve formátu E.164.                                                                                   |
  | `statementDescriptor`     | `string` | ✓       | Text zobrazený na bankovních výpisech zákazníků (1–22 znaků).                                                                          |
  | `averageItemValue`        | `long`   |         | Průměrná hodnota transakce v nejmenších jednotkách měny.                                                                               |
  | `expectedMonthlyTurnover` | `long`   |         | Očekávaný měsíční obrat v nejmenších jednotkách měny.                                                                                  |
  | `numberOfEmployees`       | `int`    |         | Počet zaměstnanců firmy.                                                                                                               |
  | `annualTurnover`          | `long`   |         | Roční obrat v nejmenších jednotkách měny.                                                                                              |
  | `balanceSheetTotal`       | `long`   |         | Bilanční suma v nejmenších jednotkách měny.                                                                                            |

  **Tělo odpovědi:** stejný tvar `{valid, errors}` jako u [Ověření identity](#validate-identity).

  ### Ověření KYB [#validate-kyb]

  **Endpoint:** `POST /integrator/merchant/onboarding/validate/kyb`

  Uveďte právě jedno z polí `individual` (OSVČ / živnostník) nebo `company`. U `company` uveďte v `people` každého
  vlastníka, ředitele a oprávněnou podepisující osobu.

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/kyb' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: REPLACE_ME' \
      -d '{
              "businessTypeId": 2,
              "bankAccount": {
                  "iban": "CZ6508000000192000145399",
                  "bic": "GIBACZPX",
                  "currencyId": 1,
                  "beneficiaryName": "Acme Corp s.r.o."
              },
              "company": {
                  "name": "Acme Corp s.r.o.",
                  "registrationNumber": "12345678",
                  "people": [
                      {
                          "email": "jane@acme.com",
                          "firstName": "Jane",
                          "lastName": "Doe",
                          "role": {
                              "isOwner": true,
                              "isAuthorizedSignatory": true
                          }
                      }
                  ]
              }
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Parametry:**

  | Pole                                                                                              | Typ      | Povinné | Popis                                                                                               |
  | ------------------------------------------------------------------------------------------------- | -------- | ------- | --------------------------------------------------------------------------------------------------- |
  | `businessTypeId`                                                                                  | `int`    |         | Typ podnikatelského subjektu (`BusinessTypeEnum`); určuje, zda jsou povinná pole `individual`, nebo |
  | `company`.                                                                                        |          |         |                                                                                                     |
  | `bankAccount`                                                                                     | `object` |         | Bankovní účet pro výplaty (číslo účtu/IBAN + BIC, měna, příjemce a adresa                           |
  | banky).                                                                                           |          |         |                                                                                                     |
  | `individual`                                                                                      | `object` |         | Údaje o vlastníkovi, který je fyzickou osobou, pro OSVČ. Vzájemně se vylučuje s `company`.          |
  | `company`                                                                                         | `object` |         | Údaje o společnosti, včetně pole `people` s vlastníky, řediteli a oprávněnými                       |
  | podepisujícími osobami a volitelného `verificationDocument`. Vzájemně se vylučuje s `individual`. |          |         |                                                                                                     |

  Každá osoba v `people` (a `individual`) nese příznaky `role.isOwner` / `isDirector` / `isRepresentative` /
  `isAuthorizedSignatory` a volitelná identifikační pole (`dateOfBirth`, `nationalityCountryId`,
  `officialIdType`/`officialIdNumber`, `address`, `ownershipPercentage`, `verificationDocuments`). Záznam osoby
  musí být buď typu „jen pozvánka“, nebo plně vyplněný; částečně vyplněné záznamy osob jsou odmítnuty. Osobu lze odeslat
  dvěma způsoby:

  * **Jen pozvánka:** odešlete jen `email` a `role`. Osoba obdrží e-mail s pokyny, jak sama a přímo doplnit
    své osobní údaje a provést ověření identity, včetně nahrání vlastního dokladu totožnosti;
    nemusíte za ni shromažďovat nic dalšího a na vaší straně není nutné nahrávat žádný dokument.
  * **Plně vyplněná:** všechny osobní údaje osoby (jméno, datum narození, úřední doklad, adresu
    atd.) odešlete sami. V takovém případě musíte za tuto osobu také [nahrát doklad totožnosti](#upload-a-persons-id-document);
    pro každou plně vyplněnou osobu je to povinné, nikoli volitelné.

  Dokumenty se nahrávají až poté, co obchodník existuje, protože [endpoint pro nahrání
  dokumentu](#upload-a-persons-id-document) potřebuje `merchantId` vrácené voláním [Vytvoření obchodníka s
  onboardingem](#create-merchant-with-onboarding). Nahraný dokument každé osoby se k ní přiřadí podle
  `relatedOfficialIdNumber`. Volitelná pole `verificationDocuments.identityDocument`,
  `verificationDocuments.additionalDocument` a `company.verificationDocument` přijímají objekt
  `{frontFileId, backFileId}` a mohou odkazovat jen na již nahrané soubory, proto je při
  vytváření nového obchodníka vynechte.

  Bez ohledu na to, kolik osob je zadaných jen pozvánkou a kolik plně vyplněných, musíte vždy [nahrát registrační
  či zakládací dokument společnosti](#upload-the-company-document), než bude možné obchodníka odeslat ke kontrole
  KYC.

  **Tělo odpovědi:** stejný tvar `{valid, errors}` jako u [Ověření identity](#validate-identity).

  ### Vytvoření obchodníka s onboardingem [#create-merchant-with-onboarding]

  Odešle vše z předchozích čtyř kroků jedním voláním, vytvoří obchodníka a zaregistruje jej u preferovaného
  zpracovatele plateb vaší organizace.

  **Endpoint:** `POST /integrator/merchant/onboarding`

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: REPLACE_ME' \
      -d '{
              "name": "Acme Corp",
              "capability": 2,
              "merchantToken": "unique_merchant_id_from_your_db",
              "identity": {
                  "legalName": "Acme Corp s.r.o.",
                  "businessTypeId": 2,
                  "email": "admin@acme.com",
                  "registrationNumber": "12345678",
                  "vatNumber": "CZ12345678"
              },
              "address": {
                  "line1": "Wenceslas Square 1",
                  "city": "Prague",
                  "postalCode": "11000",
                  "countryId": 1
              },
              "business": {
                  "mcc": "5411",
                  "url": "https://acme.example.com",
                  "supportPhone": "+420123456789",
                  "statementDescriptor": "ACME CORP"
              },
              "kyb": {
                  "bankAccount": {
                      "iban": "CZ6508000000192000145399",
                      "bic": "GIBACZPX",
                      "currencyId": 1,
                      "beneficiaryName": "Acme Corp s.r.o."
                  },
                  "company": {
                      "people": [
                          {
                              "email": "jane@acme.com",
                              "firstName": "Jane",
                              "lastName": "Doe",
                              "role": {
                                  "isOwner": true,
                                  "isAuthorizedSignatory": true
                              }
                          }
                      ]
                  }
              }
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Parametry:**

  | Pole            | Typ      | Povinné      | Popis                                                                                                                     |
  | --------------- | -------- | ------------ | ------------------------------------------------------------------------------------------------------------------------- |
  | `capability`    | `int`    | ✓            | `1` pro Obojí, `2` pro Terminály nebo `3` pro Checkout. Viz [funkce online plateb](#request-online-payment-capabilities). |
  | `terminal`      | `object` | Podle funkce | Údaje o terminálovém kanálu pro Terminály nebo Obojí.                                                                     |
  | `online`        | `object` | Podle funkce | Údaje o online kanálu pro Checkout nebo Obojí.                                                                            |
  | `name`          | `string` | ✓            | Název obchodníka.                                                                                                         |
  | `merchantToken` | `string` |              | Jedinečný stabilní identifikátor z vašeho systému. Pokud jej neuvedete, vygeneruje se                                     |
  | náhodný token.  |          |              |                                                                                                                           |
  | `identity`      | `object` | ✓            | Stejný tvar jako u [Ověření identity](#validate-identity).                                                                |
  | `address`       | `object` | ✓            | Stejný tvar jako u [Ověření adresy](#validate-address).                                                                   |
  | `business`      | `object` | ✓            | Stejný tvar jako u [Ověření obchodního profilu](#validate-business-profile).                                              |
  | `kyb`           | `object` | ✓            | Stejný tvar jako u [Ověření KYB](#validate-kyb).                                                                          |

  **Odpovědi:**

  | Kód   | Popis                                                                   |
  | ----- | ----------------------------------------------------------------------- |
  | `201` | Obchodník vytvořen a onboarding odeslán                                 |
  | `422` | Neplatné údaje pro onboarding, viz `errors`; obchodník se **nevytvoří** |

  **Tělo odpovědi (`201`):**

  ```json
  {
      "merchantId": "018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e",
      "merchantToken": "unique_merchant_id_from_your_db",
      "name": "Acme Corp",
      "email": "admin@acme.com",
      "processors": [
          {
              "processorId": 5,
              "registered": true,
              "onboardingUrl": null
          }
      ]
  }
  ```

  `onboardingUrl` je vyplněné, když zpracovatel vyžaduje, aby obchodník dokončil další hostovaný
  onboarding (např. ověření identity), než bude moci přijímat ostré platby.

  **Tělo odpovědi (`422`):**

  ```json
  {
      "errors": [
          {
              "step": "identity",
              "field": "registrationNumber",
              "message": "A merchant with this registration number is already onboarded under this integrator (merchantId: 018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e).",
              "code": "DUPLICATE_REGISTRATION_NUMBER"
          }
      ]
  }
  ```

  ### Nahrání dokladu totožnosti osoby [#upload-a-persons-id-document]

  Povinné pro každou plně vyplněnou osobu v `kyb.company.people` / `kyb.individual` (viz [Ověření
  KYB](#validate-kyb)); osoby zadané jen pozvánkou nahrávají svůj doklad samy přes odkaz z e-mailu.

  **Endpoint:** `POST /integrator/merchant/{merchantId}/document`

  Tělo požadavku je `multipart/form-data`, nikoli JSON.

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e/document' \
      -H 'Authorization: REPLACE_ME' \
      -F 'paymentProcessorId=5' \
      -F 'documentType=2' \
      -F 'relatedOfficialIdNumber=123456789' \
      -F 'frontFile=@./jane-doe-id-front.jpg' \
      -F 'backFile=@./jane-doe-id-back.jpg'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Parametry:**

  | Pole                                                                                                                                | Typ       | Povinné | Popis                                                                                             |
  | ----------------------------------------------------------------------------------------------------------------------------------- | --------- | ------- | ------------------------------------------------------------------------------------------------- |
  | `paymentProcessorId`                                                                                                                | `int`     | ✓       | Vždy `5`.                                                                                         |
  | `documentType`                                                                                                                      | `int`     | ✓       | Typ dokumentu (`DocumentTypeEnum`: `1` Other, `2` Id, `3` Address, `4` Company,                   |
  | `5` BankStatement, `6` Passport, `7` RecentFinancials).                                                                             |           |         |                                                                                                   |
  | `frontFile`                                                                                                                         | `file`    | ✓       | Snímek přední strany dokumentu.                                                                   |
  | `backFile`                                                                                                                          | `file`    |         | Snímek zadní strany dokumentu, pokud ji dokument má.                                              |
  | `relatedOfficialIdNumber`                                                                                                           | `string`  |         | `officialIdNumber` osoby z [Ověření KYB](#validate-kyb).                                          |
  | Povinné jen tehdy, když je `documentType` vázaný na osobu (např. Id, Passport, Address); jinak se ignoruje.                         |           |         |                                                                                                   |
  | `submitMerchant`                                                                                                                    | `boolean` |         | Zde ponechte nenastavené/`false`: doklad totožnosti osoby není posledním nahraným souborem dávky. |
  | Na `true` jej nastavte jen při [nahrání dokumentu společnosti](#upload-the-company-document), jakmile budou nahrány dokumenty všech |           |         |                                                                                                   |
  | osob.                                                                                                                               |           |         |                                                                                                   |

  **Tělo odpovědi (`200`):**

  ```json
  {
      "frontFileId": "file_1NqtHo2eZvKYlo2CZPg8Xt5h",
      "backFileId": "file_1NqtHp2eZvKYlo2CRTg9Xm3k",
      "uploadedAt": "2026-07-17T12:00:00Z"
  }
  ```

  ### Nahrání dokumentu společnosti [#upload-the-company-document]

  Povinné právě jednou pro každého obchodníka. Pokud údaje o osobách nebyly vyplněny, oprávněná podepisující osoba bude moci
  tento dokument nahrát přes odkaz z onboardingového e-mailu a tento endpoint není nutné volat.

  **Endpoint:** `POST /integrator/merchant/{merchantId}/document`

  Tělo požadavku je `multipart/form-data`, nikoli JSON.

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e/document' \
      -H 'Authorization: REPLACE_ME' \
      -F 'paymentProcessorId=5' \
      -F 'documentType=4' \
      -F 'frontFile=@./acme-corp-register-extract.pdf' \
      -F 'submitMerchant=true'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Parametry:**

  | Pole                                                                        | Typ       | Povinné | Popis                                                 |
  | --------------------------------------------------------------------------- | --------- | ------- | ----------------------------------------------------- |
  | `paymentProcessorId`                                                        | `int`     | ✓       | Vždy `5`.                                             |
  | `documentType`                                                              | `int`     | ✓       | V tomto kroku vždy `4` (`Company`).                   |
  | `frontFile`                                                                 | `file`    | ✓       | Registrační či zakládací dokument společnosti.        |
  | `submitMerchant`                                                            | `boolean` |         | Nastavte na `true`, aby se po nahrání všech povinných |
  | dokumentů spustila kontrola KYC u zpracovatele. Výchozí hodnota je `false`. |           |         |                                                       |

  **Tělo odpovědi (`200`):**

  ```json
  {
      "frontFileId": "file_1NqtHo2eZvKYlo2CZPg8Xt5h",
      "backFileId": null,
      "uploadedAt": "2026-07-17T12:00:00Z"
  }
  ```
</div>
