---
title: Импорт данных через API
description: Когда и как использовать API Twenty для массового импорта данных.
---
## Обзор
Twenty предоставляет как **GraphQL**, так и **REST API** для программного импорта данных. Используйте API, когда импорт CSV непрактичен для вашего объёма данных или когда вам нужен автоматизированный регулярный импорт.
## Когда использовать импорт через API
| Сценарий | Рекомендуемый метод |
| ------------------------------------ | -------------------------------------------- |
| Менее 10,000 записей | Импорт CSV |
| 10,000 - 50,000 записей | Импорт CSV (разбить на файлы) |
| **50,000+ записей** | **Импорт через API** |
| Однократная миграция | Любой из вариантов (в зависимости от объёма) |
| **Регулярный импорт** | **Импорт через API** |
| **Синхронизация в реальном времени** | **Импорт через API** |
| **Интеграция с другими системами** | **Импорт через API** |
Для наборов данных в сотни тысяч записей API значительно быстрее и надёжнее, чем многократный импорт CSV.
## Лимиты скорости API
Twenty применяет лимиты скорости для обеспечения стабильности системы:
| Лимит | Значение |
| --------------------------------------- | ------------------ |
| **Запросов в минуту** | 100 |
| **Записей на один пакетный вызов** | 60 |
| **Максимальная пропускная способность** | ~6,000 записей/мин |
**Планируйте импорт с учётом этих ограничений.**
Для 100,000 записей при максимальной пропускной способности ожидайте примерно 17 минут на импорт. Добавьте запас времени на обработку ошибок и повторные попытки.
## Начало работы
### Шаг 1: Получите свой API-ключ
1. Перейдите в **Настройки → Разработчики**
2. Нажмите **+ Создать API-ключ**
3. Дайте вашему ключу информативное имя
4. Сразу скопируйте API-ключ (он больше не будет показан)
5. Храните его в защищённом месте
**Держите ваш API-ключ в секрете.**
Любой, у кого есть ваш API-ключ, может получить доступ к данным вашего рабочего пространства и изменять их. Никогда не добавляйте его в репозитории кода и не публикуйте публично.
### Шаг 2: Выберите API
Twenty поддерживает два типа API:
| API | Лучше всего подходит для | Документация |
| ----------- | ------------------------------------------------------------ | --------------------------------------------- |
| **GraphQL** | Гибкие запросы, получение связанных данных, сложные операции | [Документация по API](/l/ru/developers/extend/api) |
| **REST** | Простые операции CRUD, привычные шаблоны REST | [Документация по API](/l/ru/developers/extend/api) |
Оба API поддерживают:
* Создание, чтение, обновление и удаление записей
* **Пакетные операции** — создание или обновление до 60 записей за один вызов
**Для импорта используйте пакетные операции**, чтобы максимизировать пропускную способность в рамках лимитов.
### Шаг 3: Спланируйте порядок импорта
Как и при импорте CSV, для связей **важен порядок**:
1. **Компании** в первую очередь (без зависимостей)
2. **Контакты** во вторую очередь (могут быть связаны с компаниями)
3. **Возможности** в третью очередь (могут быть связаны с компаниями и контактами)
4. **Задачи/Заметки** (могут быть связаны с любым из вышеперечисленных)
5. **Пользовательские объекты** (с учётом их зависимостей)
## Лучшие практики
### Объединяйте запросы в пакеты
* Не отправляйте записи по одной
* Группируйте до **60 записей на один вызов API**
* Так вы максимально используете пропускную способность в рамках лимитов
### Обрабатывайте ограничения скорости
* Реализуйте задержки между запросами (минимум 600 мс для длительных импортов)
* При достижении лимитов используйте экспоненциальное увеличение интервала повторных попыток
* Отслеживайте ответы 429 (Too Many Requests)
### Сначала проверьте данные
* Очистите и проверьте данные перед импортом
* Проверьте, что обязательные поля заполнены
* Убедитесь, что форматы соответствуют требованиям Twenty (см. [Сопоставление полей](/l/ru/user-guide/data-migration/capabilities/field-mapping))
### Логируйте всё
* Логируйте каждую импортированную запись (включая идентификаторы)
* Логируйте ошибки с полным контекстом
* Это помогает устранять неполадки и подтверждать завершение
### Сначала протестируйте
* Протестируйте на небольшой выборке (10-20 записей)
* Проверьте, что данные корректно отображаются в Twenty
* Затем запустите полный импорт
### Upsert для предотвращения дубликатов
GraphQL API поддерживает **пакетный upsert** — обновление, если запись существует, и создание, если нет. Это предотвращает дубликаты при повторном запуске импорта.
## Поиск названий объектов и полей
Чтобы увидеть доступные объекты и поля:
1. Перейдите в **Настройки → API и вебхуки**
2. Просмотрите **Metadata API**
3. Просмотрите все стандартные и пользовательские объекты и их поля
В документации перечислены все стандартные и пользовательские объекты, их поля и ожидаемые типы данных.
## Профессиональные услуги
Для сложных миграций по API наши партнёры могут помочь:
| Услуга | Что включено |
| -------------------------------- | ------------------------------------------------- |
| **Проектирование модели данных** | проектирование оптимальной структуры данных |
| **Скрипты миграции** | написание и запуск скриптов импорта |
| **Преобразование данных** | обработка сложного сопоставления и очистки данных |
| **Проверка и контроль качества** | проверка завершённости миграции |
**Лучше всего подходит для:**
* Миграции объёмом 100 000+ записей
* Сложные преобразования данных
* Сжатые сроки
* Команды без ресурсов на разработку
Свяжитесь с нами по адресу [contact@twenty.com](mailto:contact@twenty.com) или изучите наши [услуги по внедрению](/l/ru/user-guide/getting-started/capabilities/implementation-services).
## Часто задаваемые вопросы
GraphQL позволяет запрашивать ровно те данные, которые нужны, в одном запросе и лучше подходит для сложных операций. REST использует стандартные методы HTTP (GET, POST, PUT, DELETE) и может быть более привычен, если вы работали с традиционными API.
Да! Используйте мутации обновления (GraphQL) или запросы PUT/PATCH (REST) с `id` записи.
Сначала запросите существующие записи, используя уникальные идентификаторы (email, домен). Обновляйте, если запись существует, и создавайте, если нет.
Да, используйте мутации удаления (GraphQL) или запросы DELETE (REST).
Пока нет, но оба API работают с любым HTTP-клиентом на любом языке.
## Документация по API
Полная информация о реализации, примеры кода и справочник по схеме:
* [Документация по API](/l/ru/developers/extend/api)