API Эндпоинты

Полная справка по всем доступным эндпоинтам API. Параметры запросов, структура ответов и примеры использования.

Навигация по сервисам

Календарь для психологов

Архитектура и мультитенантность

API построено по модели мультитенантности. Каждый психолог (тенант) имеет:

  • Tenant — основная сущность психолога
    • domainSlug — уникальный идентификатор (например, "ivan-petrov")
    • apiKey — ключ доступа к API
    • config — настройки расписания (рабочие часы, таймзона, Telegram ID)
    • planLimit — лимит записей в месяц
  • Appointment — запись клиента на приём
    • clientData — данные клиента (имя, телефон, email)
    • startTime / endTime — время начала и конца приёма
    • status — статус записи (CONFIRMED, CANCELLED)
  • MediaFile — аудио/видео записи для AI-транскрипции
    • s3Key — ключ файла в облачном хранилище
    • transcription — текст расшифровки
    • summary — краткое резюме сессии
GET/api/v1/slots

Получение списка свободных слотов для записи на указанную дату.

Query Parameters

ПараметрТипОписание
datestringДата в формате YYYY-MM-DD (обязательно)
tenantIdstringID психолога (опционально, берётся из API-ключа)

Пример запроса

curl -X GET "https://api.vialine.ru/api/v1/slots?date=2024-10-20" \ -H "x-api-key: vl_live_1a2b3c4d5e6f7g8h9i0j"

Пример ответа (200 OK)

{ "success": true, "data": { "date": "2024-10-20", "slots": [ { "startTime": "2024-10-20T09:00:00Z", "endTime": "2024-10-20T10:00:00Z", "available": true }, { "startTime": "2024-10-20T10:00:00Z", "endTime": "2024-10-20T11:00:00Z", "available": true }, { "startTime": "2024-10-20T11:00:00Z", "endTime": "2024-10-20T12:00:00Z", "available": false } ] }, "meta": { "timezone": "Europe/Moscow", "totalSlots": 3, "availableSlots": 2 } }
POST/api/v1/appointments

Создание новой записи клиента на приём. Автоматически проверяет пересечения с существующими записями и отправляет уведомления.

Request Body

{ "clientData": { "name": "Иван Иванов", "phone": "+79991234567", "email": "ivan@example.com" }, "startTime": "2024-10-20T09:00:00Z", "endTime": "2024-10-20T10:00:00Z" }

Пример запроса

curl -X POST "https://api.vialine.ru/api/v1/appointments" \ -H "x-api-key: vl_live_1a2b3c4d5e6f7g8h9i0j" \ -H "Content-Type: application/json" \ -d '{ "clientData": { "name": "Иван Иванов", "phone": "+79991234567" }, "startTime": "2024-10-20T09:00:00Z", "endTime": "2024-10-20T10:00:00Z" }'

Пример ответа (201 Created)

{ "success": true, "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "CONFIRMED", "clientData": { "name": "Иван Иванов", "phone": "+79991234567" }, "startTime": "2024-10-20T09:00:00Z", "endTime": "2024-10-20T10:00:00Z", "createdAt": "2024-10-19T15:30:00Z" }, "message": "Запись успешно создана. Уведомление отправлено." }

Возможные ошибки

409 Conflict — Слот уже занят

{ "success": false, "error": { "code": "SLOT_ALREADY_BOOKED", "message": "Выбранное время уже занято" } }

400 Bad Request — Неверные данные

{ "success": false, "error": { "code": "VALIDATION_ERROR", "message": "Неверный формат данных клиента" } }

Лазерная резка DXF

Внимание: API находится в стадии активной разработки. Эндпоинты могут измениться. Следите за обновлениями документации.

POST/api/v1/laser-dxf/orders

Создание заказа на лазерную резку по DXF-файлу. Загрузка чертежа, указание параметров материала и расчёт стоимости.

Request Body (multipart/form-data)

ПолеТипОписание
dxfFilefileDXF-файл чертежа (обязательно)
materialstringМатериал (steel, aluminum, brass)
thicknessnumberТолщина материала (мм)
quantitynumberКоличество деталей
clientEmailstringEmail для уведомлений

Пример ответа (201 Created)

{ "success": true, "data": { "orderId": "dxf_550e8400e29b41d4", "status": "PENDING", "material": "steel", "thickness": 3.0, "quantity": 5, "estimatedCost": 4500.00, "estimatedTime": 180, "createdAt": "2024-10-19T15:30:00Z" }, "message": "Заказ создан. Расчёт стоимости в процессе." }
GET/api/v1/laser-dxf/orders/:id

Получение информации о заказе и его текущем статусе.

Пример запроса

curl -X GET "https://api.vialine.ru/api/v1/laser-dxf/orders/dxf_550e8400e29b41d4" \ -H "x-api-key: vl_live_1a2b3c4d5e6f7g8h9i0j"

Пример ответа (200 OK)

{ "success": true, "data": { "orderId": "dxf_550e8400e29b41d4", "status": "READY", "material": "steel", "thickness": 3.0, "quantity": 5, "estimatedCost": 4500.00, "estimatedTime": 180, "createdAt": "2024-10-19T15:30:00Z", "updatedAt": "2024-10-20T10:15:00Z", "statusHistory": [ { "status": "PENDING", "timestamp": "2024-10-19T15:30:00Z" }, { "status": "PROCESSING", "timestamp": "2024-10-19T16:00:00Z" }, { "status": "READY", "timestamp": "2024-10-20T10:15:00Z" } ] } }

Общие коды ошибок

400 Bad Request

Неверные параметры запроса или невалидные данные

401 Unauthorized

Отсутствует или недействителен API-ключ

403 Forbidden

Недостаточно прав или превышен лимит

404 Not Found

Запрашиваемый ресурс не найден

409 Conflict

Конфликт данных (например, слот уже занят)

429 Too Many Requests

Превышен rate limit

500 Internal Server Error

Внутренняя ошибка сервера

503 Service Unavailable

Сервис временно недоступен