---
title: "Клієнти"
description: "Шукайте та створюйте клієнтів із довірених серверних інтеграцій."
canonical_url: "https://requiply.com/docs/uk/developers/typescript-sdk/clients"
---
# Клієнти

> Шукайте та створюйте клієнтів із довірених серверних інтеграцій.

Ресурси клієнтів містять дані клієнтів і потребують секретного ключа в довіреному серверному коді.

## `clients.lookup()`

```ts
clients.lookup(
  input: ClientLookupInput,
  options?: RequiplyRequestOptions,
): Promise<ClientLookupResponse>
```

Передайте `email`, `phone` або `search`; потрібен щонайменше один параметр. Метод працює у двох режимах:

<table>
<thead>
  <tr>
    <th>
      Вхідні дані
    </th>
    
    <th>
      Режим
    </th>
    
    <th>
      Відповідь
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        email
      </code>
      
       та/або <code>
        phone
      </code>
    </td>
    
    <td>
      Точний збіг з урахуванням регістру. Якщо передано обидва, клієнт має мати обидва.
    </td>
    
    <td>
      <code>
        client
      </code>
      
       є клієнтом, що збігся, або <code>
        null
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        search
      </code>
    </td>
    
    <td>
      Нечіткий пошук за імʼям, прізвищем, email і телефоном.
    </td>
    
    <td>
      <code>
        client
      </code>
      
       дорівнює <code>
        null
      </code>
      
      ; <code>
        matches
      </code>
      
       перелічує до 10 клієнтів.
    </td>
  </tr>
</tbody>
</table>

```ts
const { client } = await requiply.clients.lookup({ email: 'customer@example.com' });

const { matches } = await requiply.clients.lookup({ search: 'Olena Koval' });
```

`search` розбиває текст на слова (до чотирьох). Клієнт збігається, коли кожне слово трапляється десь у його імені, прізвищі, email чи телефоні. Українські імена також шукаються в іншому алфавіті, тож `Olena` знаходить *Олена*, а `Галина` знаходить *Halyna*.

Кожен клієнт має поля `id`, `name`, `lastName`, `email`, `phone`, `discountPercentage` (`0` без знижки). Імʼя, прізвище, email і телефон можуть бути `null`.

## `clients.create()`

```ts
clients.create(
  input: ClientCreateInput,
  options?: RequiplyRequestOptions,
): Promise<ClientCreateResponse>
```

Вхідні дані приймають необовʼязкові поля `name`, `lastName`, `email`, `phone`. Потрібне щонайменше одне з полів `email` або `phone`.

```ts
const { client, created } = await requiply.clients.create({
  name: 'Alex',
  lastName: 'Morgan',
  email: 'alex@example.com',
  phone: '+380951234567',
});
```

<warning>

**phone має бути в міжнародному форматі E.164:** на початку `+`, потім код країни, загалом від 7 до 15 цифр, наприклад `+380951234567`. Номер у національному форматі відхиляється з `400` і повідомленням *"Phone must be in international E.164 format with a country code, e.g. +380951234567"*. Те саме правило діє у формах клієнта в застосунку та для AI-асистентів, які створюють клієнтів.

</warning>

Відповідь повертає клієнта та `created`. `clients.create()` захищений від дублікатів: якщо клієнт із таким email (або, якщо email немає, з таким телефоном) уже існує, ви отримаєте цього клієнта з `created: false` замість другого запису.


## Sitemap

See the full [sitemap](https://requiply.com/docs/sitemap.md) for all pages.
