TenderPoint API — backend-сервис для приложения TenderPoint, предназначенный для работы с данными государственных закупок из Единой информационной системы в сфере закупок, включая поиск закупок, импорт XML/ZIP, извлечение документов, хранение карточек закупок и передачу данных в iOS-приложение.
Система построена на FastAPI, использует PostgreSQL для хранения данных и поддерживает два источника информации: живой поиск по ЕИС и локальную базу, сформированную из XML/ZIP-выгрузок.
https://tenderpoint-api.ru.
Интерактивная документация доступна по адресу
/docs.
Общее описание
TenderPoint API решает задачу агрегации закупочной информации из ЕИС и подготовки её к удобному использованию в мобильном приложении. API умеет получать сведения о закупках, объединять данные из разных источников, сохранять файлы закупки и отдавать карточку закупки единым JSON-ответом.
Сервис ориентирован на читающий сценарий: получение, структурирование и анализ данных. Отправка документов в ЕИС, работа с электронной подписью и SOAP-интеграцией относятся ко второму этапу развития проекта.
Архитектура
Общая схема работы:
iOS-приложение TenderPoint
↓
Tenderpoint-API backend
↓
PostgreSQL
↓
Парсеры XML/ZIP ЕИС
↓
Карточка закупки · документы · жизненный цикл
Backend использует несколько логических контуров:
- живой поиск ЕИС — получение данных с публичных страниц zakupki.gov.ru;
- локальная XML-база — импорт XML/ZIP и сохранение данных в PostgreSQL;
- карточка закупки — объединение сведений о закупке и файлов;
- избранное — сохранение закупок пользователем;
- API-ключи — авторизация внешних клиентов.
Авторизация
Для защищённых API-запросов используется заголовок:
X-API-Key: ВАШ_API_КЛЮЧ
API-ключ создаётся в личном кабинете пользователя. Старые ключи после сброса пользователей становятся недействительными.
Основные endpoints
| Метод | Endpoint | Назначение |
|---|---|---|
| GET | /health |
Проверка работоспособности сервера. |
| GET | /docs |
Swagger-документация FastAPI. |
| GET | /api/v1/search/procurements |
Единый поиск закупок для iOS: local, eis или all. |
| GET | /api/v1/search/procurements/{purchase_number}/card |
Единая карточка закупки: данные закупки и файлы. |
| GET | /api/v1/contracts/search |
Живой поиск по данным ЕИС. |
| GET | /api/v1/contracts/{purchase_number}/files |
Получение файлов закупки из HTML/ XML-источников. |
| GET | /procurements/search |
Поиск по локальной базе импортированных XML-закупок. |
| GET | /procurements/{purchase_number}/card |
Карточка закупки из локальной XML-базы. |
| POST | /eis/import/xml |
Импорт одного XML-файла ЕИС. |
| POST | /eis/import/zip |
Импорт ZIP-архива с XML-файлами ЕИС. |
| GET | /api/v1/favorites |
Получение избранных закупок пользователя. |
| POST | /api/v1/favorites |
Добавление закупки в избранное. |
| DELETE | /api/v1/favorites/{favorite_id} |
Удаление закупки из избранного. |
Импорт XML/ZIP ЕИС
TenderPoint API поддерживает импорт XML-документов ЕИС и ZIP-архивов, содержащих несколько XML-файлов. При импорте система определяет номер закупки, название, заказчика, ИНН, цену, статус, регион, закон, способ закупки и список файлов.
Данные сохраняются в таблицы:
procurements— карточки закупок;procurement_files— файлы закупок;raw_eis_xml— исходные XML-документы.
Использование в iOS
Для iOS-приложения рекомендуется использовать единый API-контур:
| Экран iOS | Endpoint |
|---|---|
| Проверка сервера | GET /health |
| Поиск закупок | GET /api/v1/search/procurements |
| Карточка закупки | GET /api/v1/search/procurements/{purchase_number}/card |
| Избранное | GET /api/v1/favorites |
Примеры запросов
Проверка API
curl https://tenderpoint-api.ru/health
Поиск закупок
curl -G "https://tenderpoint-api.ru/api/v1/search/procurements" \ --data-urlencode "source=local" \ --data-urlencode "query=бумага" \ -H "X-API-Key: ВАШ_API_КЛЮЧ"
Получение карточки закупки
curl "https://tenderpoint-api.ru/api/v1/search/procurements/0373100001026000001/card" \ -H "X-API-Key: ВАШ_API_КЛЮЧ"
Импорт XML
curl -X POST "https://tenderpoint-api.ru/eis/import/xml" \ -F "file=@notice.xml"
Текущее состояние
Статус сервера: работает.
Основной публичный адрес: https://tenderpoint-api.ru.
Доступ к API осуществляется через HTTPS.