---
title: "Submit xAPI statement"
method: POST
path: "/learning/lms-integrations/{provider-identifier}/xapi/statements"
tags: ["Provider integrations"]
---

# Submit xAPI statement

`POST /learning/lms-integrations/{provider-identifier}/xapi/statements`

Submits a single xAPI statement to record learner progress for a course. On success, returns `200 OK` with `accepted: true` and the echoed `statementId`.

Submitting the same statement `id` (UUID) more than once returns `409 Conflict`. Statements with an unrecognised verb are silently ignored and return `204 No Content` with no body.

**Before using this endpoint:**
<ul>
  <li>An active LMS integration must exist for the `provider-identifier` — create one using <a href="/reference/post_learning-lms-integrations" target="_blank">Create integration</a>.</li>
  <li>The `actor.mbox` email must match the work email of an active employee in Bob.</li>
  <li>The `object.id` should correspond to the `sourceLink` of a known training content item pushed via <a href="/reference/post_learning-lms-integrations-provider-identifier-training-content" target="_blank">Create training content</a>.</li>
  <li>Supply a unique `id` (UUID) per statement for idempotency — resubmitting the same UUID returns `409`.</li>
</ul>

**Testing notes:** Open the **Examples** panel and select a **Request Example** to inspect the body parameters. Supported xAPI verbs include `completed`, `passed`, and `failed`. The `result` object is optional but recommended.

## Path parameters

- `provider-identifier` string, required

## Request body

- XapiProgressStatement — xAPI statement accepted by `XapiProgressStatement`. Unknown JSON fields may be ignored where annotated with `@JsonIgnoreProperties(ignoreUnknown = true)` on nested types.
  - `id` string, uuid — Optional statement UUID.
  - `timestamp` string, required — Statement timestamp (multiple ISO formats supported server-side).
  - `actor` XapiActor, required
    - `objectType` string — Object type identifier for the actor, typically `Agent`.
    - `mbox` string, required — Mailto IRI for the actor (for example `mailto:user@acme.com`).
    - `name` string — Display name of the actor.
  - `verb` XapiVerb, required
    - `id` string, required — Verb IRI.
    - `display` object — Language map (RFC 5646 language tags to display strings). Other locale keys may appear in payloads.
      - `en-US` string — Display string for the verb in `en-US`.
  - `object` XapiObject, required
    - `id` string, required — Activity id IRI.
    - `objectType` string — Object type identifier, typically `Activity`.
    - `definition` XapiObjectDefinition
      - `name` object — Language map for the activity name. Other locale keys may appear in payloads.
        - `en-US` string — Activity name in `en-US`.
  - `result` XapiResult
    - `completion` boolean — Whether the activity was completed.
    - `score` object — Score object (`XapiScore` — scaled value).
      - `scaled` number, double — Normalized score between -1 and 1 (decimal fraction).
    - `extensions` object — Optional extension map. Keys are typically IRIs; values are strings in the service model.
    - `duration` string — ISO-8601 duration string (for example `PT45M`).

## Response `200`

Statement accepted and processed successfully

- XapiStatementsResponse — Successful xAPI ingest response (`XapiStatementsResponse`).
  - `accepted` boolean — Whether the statement was accepted.
  - `statementId` string, nullable — Statement id echoed from the request when present.

## Other responses

- `204` — No content — statement ignored (unknown type)
- `400` — Validation failed
- `401` — Authentication failed
- `403` — Forbidden — feature disabled or missing permissions
- `404` — Not found — employee or integration
- `409` — Conflict — duplicate statement id (idempotency)
- `422` — Unprocessable entity — invalid xAPI statement
- `429` — Rate limit exceeded
- `500` — Processing error

---

[API](https://skmtc.net/hibob/apis/employee-data-api.md) · [All operations](https://skmtc.net/hibob/apis/employee-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/hibob/employee-data-api/revisions/0781ebbdda91/schema)
