wellemo
top menu
wellemo logo wellemo

Wellemo B2B API v1

Подключите Wellemo к вашей HR-системе: заводите сотрудников, назначайте курсы, забирайте прогресс и результаты, получайте события вебхуками.

OpenAPI JSON Базовый URL: https://wellemo.com/api/b2b/v1

Как начать

  1. Администратор компании в бизнес-кабинете: Интеграции → Токены → Создать. Токен показывается один раз, привязан к компании, можно ограничить scope и срок.
  2. Каждый запрос — с заголовком Authorization: Bearer <token>. Все тела и ответы — JSON, даты — ISO 8601.
  3. Ответ: {"result": "success", "data": {...}} или {"result": "error", "message": "..."} с HTTP-кодом 400/401/403/404/409.
  4. Идентификаторы: ваши externalId для сотрудников и назначений — операции по ним идемпотентны.
curl -X POST https://wellemo.com/api/b2b/v1/employees/provision \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"externalId":"EMP-001","email":"user@company.ru","name":"Иван Иванов"}'

curl -X POST https://wellemo.com/api/b2b/v1/assignments \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"employeeExternalId":"EMP-001","courseId":45,"externalId":"ASSIGN-1","deadline":"2026-12-31T23:59:59Z","isRequired":true}'

curl https://wellemo.com/api/b2b/v1/assignments/by-external-id/ASSIGN-1/progress -H "Authorization: Bearer $TOKEN"

Scopes

  • b2b_read — чтение: сотрудники, курсы, назначения, прогресс, отчёты.
  • b2b_provision — сотрудники: создание/привязка, изменение, offboarding, удаление.
  • b2b_assignment — назначения: создать, массово, отозвать.

Методы

POST /employees/provision Создать/привязать сотрудника по externalId (идемпотентно)
Тело:
{
    "externalId": "EMP-001",
    "email": "user@company.ru",
    "name": "Иван Иванов"
}
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 101,
        "externalId": "EMP-001",
        "email": "user@company.ru",
        "status": "created"
    }
}
GET /employees Список сотрудников
Параметры: page (query), limit (query), externalId (query), email (query), tag (query)
Ответ 200:
{
    "result": "success",
    "data": {
        "items": [
            {
                "id": 101,
                "externalId": "EMP-001",
                "email": "user@company.ru",
                "name": "Иван Иванов",
                "role": "employee",
                "tags": [
                    "sales"
                ],
                "joinedAt": "2026-08-01T10:00:00+00:00"
            }
        ],
        "pagination": {
            "page": 1,
            "limit": 100,
            "total": 1,
            "pages": 1
        }
    }
}
GET /employees/{externalId} Сотрудник и его назначения
Параметры: externalId
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 101,
        "externalId": "EMP-001",
        "email": "user@company.ru",
        "name": "Иван Иванов",
        "role": "employee",
        "tags": [
            "sales"
        ],
        "joinedAt": "2026-08-01T10:00:00+00:00",
        "assignments": [
            {
                "id": 505,
                "externalId": "ASSIGN-1",
                "employeeExternalId": "EMP-001",
                "employeeEmail": "user@company.ru",
                "courseId": 45,
                "courseName": "Onboarding",
                "status": "started",
                "statusCategory": "in_progress",
                "isOverdue": false,
                "completionPercent": 45.5,
                "score": null,
                "numberOfAttempts": 1,
                "isRequired": true,
                "assignedAt": "2026-08-01T10:00:00+00:00",
                "deadline": "2026-08-31T23:59:59+00:00",
                "startedAt": "2026-08-02T09:00:00+00:00",
                "completedAt": null,
                "lastActivityAt": "2026-08-02T09:30:00+00:00"
            }
        ]
    }
}
PATCH /employees/{externalId} Изменить имя/теги; active=false — offboarding (отзыв назначений, выход из компании)
Параметры: externalId
Тело:
{
    "name": "Иван Иванов",
    "tags": [
        "sales",
        "moscow"
    ],
    "active": true
}
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 101,
        "externalId": "EMP-001",
        "email": "user@company.ru",
        "name": "Иван Иванов",
        "role": "employee",
        "tags": [
            "sales"
        ],
        "joinedAt": "2026-08-01T10:00:00+00:00"
    }
}
DELETE /employees/{externalId} Удалить сотрудника из компании с персональными данными (152-ФЗ): назначения удаляются, результаты обезличиваются
Параметры: externalId
Ответ 200:
{
    "result": "success",
    "data": {
        "externalId": "EMP-001",
        "status": "deleted"
    }
}
GET /courses Список курсов компании (включая срезы)
Ответ 200:
{
    "result": "success",
    "data": {
        "items": [
            {
                "id": 45,
                "name": "Onboarding",
                "externalId": null,
                "isAssessment": false
            }
        ]
    }
}
POST /assignments Назначить курс сотруднику (идемпотентно по externalId)
Тело:
{
    "employeeExternalId": "EMP-001",
    "courseId": 45,
    "externalId": "ASSIGN-1",
    "deadline": "2026-12-31T23:59:59Z",
    "isRequired": true
}
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 505,
        "externalId": "ASSIGN-1",
        "status": "assigned",
        "statusCategory": "not_started",
        "isOverdue": false,
        "assignedAt": "2026-08-01T10:00:00+00:00",
        "deadline": "2026-12-31T23:59:59+00:00"
    }
}
GET /assignments Список назначений
Параметры: employeeExternalId (query), status (query), courseId (query), updatedSince (query), page (query), limit (query)
Ответ 200:
{
    "result": "success",
    "data": {
        "items": [
            {
                "id": 505,
                "externalId": "ASSIGN-1",
                "employeeExternalId": "EMP-001",
                "employeeEmail": "user@company.ru",
                "courseId": 45,
                "courseName": "Onboarding",
                "status": "started",
                "statusCategory": "in_progress",
                "isOverdue": false,
                "completionPercent": 45.5,
                "score": null,
                "numberOfAttempts": 1,
                "isRequired": true,
                "assignedAt": "2026-08-01T10:00:00+00:00",
                "deadline": "2026-08-31T23:59:59+00:00",
                "startedAt": "2026-08-02T09:00:00+00:00",
                "completedAt": null,
                "lastActivityAt": "2026-08-02T09:30:00+00:00"
            }
        ],
        "pagination": {
            "page": 1,
            "limit": 100,
            "total": 1,
            "pages": 1
        }
    }
}
POST /assignments/bulk Массовое назначение (до 500)
Тело:
{
    "items": [
        {
            "employeeExternalId": "EMP-001",
            "courseId": 45,
            "externalId": "ASSIGN-1",
            "deadline": "2026-12-31T23:59:59Z",
            "isRequired": true
        }
    ]
}
Ответ 200:
{
    "result": "success",
    "data": {
        "results": [
            {
                "index": 0,
                "ok": true,
                "assignmentId": 505,
                "status": "assigned"
            }
        ]
    }
}
GET /assignments/{id} Назначение
Параметры: id
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 505,
        "externalId": "ASSIGN-1",
        "employeeExternalId": "EMP-001",
        "employeeEmail": "user@company.ru",
        "courseId": 45,
        "courseName": "Onboarding",
        "status": "started",
        "statusCategory": "in_progress",
        "isOverdue": false,
        "completionPercent": 45.5,
        "score": null,
        "numberOfAttempts": 1,
        "isRequired": true,
        "assignedAt": "2026-08-01T10:00:00+00:00",
        "deadline": "2026-08-31T23:59:59+00:00",
        "startedAt": "2026-08-02T09:00:00+00:00",
        "completedAt": null,
        "lastActivityAt": "2026-08-02T09:30:00+00:00"
    }
}
DELETE /assignments/{id} Отозвать назначение
Параметры: id
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 505,
        "revoked": true
    }
}
GET /assignments/{id}/progress Прогресс
Параметры: id
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 505,
        "completionPercent": 45.5,
        "lastActivityAt": "2026-08-02T11:30:00+00:00",
        "status": "started",
        "statusCategory": "in_progress",
        "isOverdue": false
    }
}
GET /assignments/{id}/results Результаты
Параметры: id
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 505,
        "score": 85,
        "numberOfAttempts": 2,
        "status": "completed",
        "statusCategory": "completed",
        "completedAt": "2026-08-02T12:00:00+00:00",
        "resultSummary": {
            "completionState": "success",
            "isPassed": true,
            "finalScore": 85,
            "summary": "Completed with score 85%"
        }
    }
}
GET /assignments/by-external-id/{externalId} Назначение по externalId (также /progress, /results)
Параметры: externalId
Ответ 200:
{
    "result": "success",
    "data": {
        "id": 505,
        "externalId": "ASSIGN-1",
        "employeeExternalId": "EMP-001",
        "employeeEmail": "user@company.ru",
        "courseId": 45,
        "courseName": "Onboarding",
        "status": "started",
        "statusCategory": "in_progress",
        "isOverdue": false,
        "completionPercent": 45.5,
        "score": null,
        "numberOfAttempts": 1,
        "isRequired": true,
        "assignedAt": "2026-08-01T10:00:00+00:00",
        "deadline": "2026-08-31T23:59:59+00:00",
        "startedAt": "2026-08-02T09:00:00+00:00",
        "completedAt": null,
        "lastActivityAt": "2026-08-02T09:30:00+00:00"
    }
}
GET /reports/assignments.csv Отчёт по назначениям (CSV; также .xlsx)
Параметры: status (query)
GET /reports/employees.csv Отчёт по сотрудникам (CSV; также .xlsx)

Вебхуки

В кабинете (Интеграции → Вебхуки) укажите URL и выберите события. Мы отправим POST с JSON: {"event":"assignment.completed","companyId":1,"occurredAt":"...","data":{...}}. Подпись — заголовок X-Wellemo-Signature: sha256=<HMAC-SHA256(body, secret)>; проверяйте её и отвечайте 2xx. При ошибке повторяем до 6 раз с нарастающей задержкой; лог доставок виден в кабинете.

События: assignment.created, assignment.completed, assignment.failed, assignment.overdue, employee.joined, employee.removed.

Статусы назначений

status: assigned → started → completed | failed → needs_retry. statusCategory: not_started, in_progress, completed, overdue.

Нужна интеграция под вас?

Напишите на info@wellemo.com — обсудим сценарий и поможем с подключением.

О бизнес-кабинете