---
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`

## Request

- Base URL: `https://api.hibob.com/v1`
- URL: `https://api.hibob.com/v1/learning/lms-integrations/{provider-identifier}/xapi/statements`
- Auth: one of:
  - HTTP basic
  - HTTP bearer

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.dev/hibob/apis/bob-learning-api.md) - [All operations](https://skmtc.dev/hibob/apis/bob-learning-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hibob/apis/bob-learning-api/revisions/ee0ae2f3d3f8?raw)
