Сессия актора xAPI
const url = 'https://example.com/wp-json/wp2lms/turbo/v1/xapi-actor/session';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"email":"learner@example.com","name":"Анна Иванова"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/wp-json/wp2lms/turbo/v1/xapi-actor/session \ --header 'Content-Type: application/json' \ --data '{ "email": "learner@example.com", "name": "Анна Иванова" }'Публичный мост same-origin xAPI actor → cookie-сессия WordPress. PHP: находит пользователя по email или создаёт слушателя (UserProvisioner: роль wp2lms_learner если есть, иначе subscriber), затем wp_set_current_user + wp_set_auth_cookie и свежий nonce wp_rest.
Обязателен email (sanitize_email + is_email, иначе 400 invalid_email). name необязателен, по умолчанию пустая строка; если пользователь уже есть и name непустой — обновляет display_name.
Это не логин администратора: роли administrator/editor/author или права edit_posts / manage_options — 403 privileged_user. Мост должен быть включён (модуль платформы xapi_actor_session или фильтр wp2turbo/xapi/enable_actor_session), иначе 403 disabled. Нужен nonce wp_rest в X-WP-Nonce или _wpnonce (иначе 403 invalid_nonce). Cookie-сессия редактора не требуется.
Request Bodyrequired
Заголовок раздела «Request Bodyrequired»object
Email актора xAPI. Обязательно. PHP: sanitize_email; пустое/не email — 400 invalid_email. Используется как ключ поиска/создания WP-пользователя.
Отображаемое имя слушателя. Необязательно, дефолт ‘’. При создании пользователя, если пусто — login из локальной части email. У существующего непустой name обновляет display_name.
Example
{ "email": "learner@example.com", "name": "Анна Иванова"}Responses
Заголовок раздела «Responses»Сессия слушателя установлена. Тело: ok, created, user (id/email/display_name), nonce wp_rest.
object
PHP всегда true на HTTP 200 этого моста.
True, если wp_insert_user только что создал слушателя; false, если пользователь с этим email уже был.
Слушатель, для которого выставлена cookie-сессия. Не гость и не null.
object
ID пользователя WordPress.
User_email (или исходный email, если get_userdata не удался).
Display_name пользователя.
Свежий wp_create_nonce(‘wp_rest’) после установки сессии — для следующих запросов с cookie.
Example
{ "ok": true, "created": false, "user": { "id": 45, "email": "learner@example.com", "display_name": "Анна Иванова" }, "nonce": "a1b2c3d4e5"}Invalid_email — пустой или невалидный email после sanitize_email.
object
Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).
Человекочитаемое сообщение ошибки из PHP / WordPress REST.
Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.
object
Example
{ "code": "wp2lms_static_builder_busy", "message": "Build is currently building and cannot be updated.", "data": { "status": 409 }}Disabled — мост выключен; invalid_nonce — нет/неверный wp_rest nonce; privileged_user — email принадлежит привилегированному аккаунту.
object
Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).
Человекочитаемое сообщение ошибки из PHP / WordPress REST.
Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.
object
Example
{ "code": "wp2lms_static_builder_busy", "message": "Build is currently building and cannot be updated.", "data": { "status": 409 }}WP_Error из wp_insert_user без HTTP-status в data (часто existing_user_login / existing_user_email). WordPress REST отдаёт такие ошибки как 500.
object
Машинный код WP_Error (например wp2lms_static_builder_busy, rest_forbidden, invalid_nonce).
Человекочитаемое сообщение ошибки из PHP / WordPress REST.
Обычно { status: <HTTP-код> }. Если status нет, ядро REST часто отдаёт 500.
object
Example
{ "code": "wp2lms_static_builder_busy", "message": "Build is currently building and cannot be updated.", "data": { "status": 409 }}