# Developer Docs Documentation
> The Developer Docs is where you'll find comprehensive guides and documentation to help you start working with Bob as quickly as possible.
Fetch the complete documentation index at: https://apidocs.hibob.com/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.
## API Reference: Bob Learning API
- [Provider integrations](https://apidocs.hibob.com/reference/provider-integrations.md): Use the Bob Learning API to add course providers and training content
- [Create integration](https://apidocs.hibob.com/reference/post_learning-lms-integrations.md): Registers a new LMS integration for the company. Once created, use the `providerIdentifier` as the `provider-identifier` path parameter to push training content and submit learner progress. **Before using this endpoint:**
- Obtain the provider identifier from your Learning provider — this is the stable key used to register the integration.
- If you are using a service user, ensure it has the relevant permissions. See Required permissions.
- If you are developing an app, ensure it has the relevant scopes. See Required permissions.
**Testing notes:** Open the **Examples** panel and select a **Request Example** to inspect the body parameters.
- [Delete integration (soft delete)](https://apidocs.hibob.com/reference/delete_learning-lms-integrations-provider-identifier.md): Removes the LMS integration for the given provider. The integration is soft-deleted — the record is marked as inactive rather than permanently removed. Returns `404` if the integration does not exist or the LMS feature is not enabled for the company.
- [Create training content (bulk insert)](https://apidocs.hibob.com/reference/post_learning-lms-integrations-provider-identifier-training-content.md): Creates one or more training content items for the integration in a single request (up to 500 items per call). Each item requires a unique `/trainingContent/externalIdentifier` and a `/trainingContent/title`. All other fields are optional. If the same `externalIdentifier` appears more than once in a request, only the last occurrence is used. Returns `200 OK` with a `success` array of processed identifiers and an `errors` array for any items that failed. Returns `403` with no body if the LMS feature is disabled for the company. **Before using this endpoint:** - Create an integration first using Create integration — the `provider-identifier` path parameter must match an active integration.
- Each item must include `/trainingContent/externalIdentifier` (unique per provider) and `/trainingContent/title`. All other fields are optional.
- The `externalIdentifier` is your stable, idempotency key for the content row — use the same value to update or archive the item later.
**Testing notes:** Open the **Examples** panel and select a **Request Example** to inspect the body parameters. The response body contains a `success` array of processed identifiers and an `errors` array for any failures.
- [Update training content (bulk patch)](https://apidocs.hibob.com/reference/patch_learning-lms-integrations-provider-identifier-training-content.md): Updates one or more existing training content items. Only the fields you include in the request are changed — fields you omit remain as they are. Use `/trainingContent/externalIdentifier` in each item to identify which content row to update. Returns `200 OK` with a `success` array of updated identifiers and an `errors` array for any items that could not be found. **Before using this endpoint:** - Training content items must already exist — create them first using Create training content.
- Include `/trainingContent/externalIdentifier` in each item to identify the content row to update.
- Only the fields you provide will be updated (patch semantics). Omitted fields are left unchanged.
**Testing notes:** Open the **Examples** panel and select a **Request Example** to inspect the body parameters.
- [Archive training content (bulk)](https://apidocs.hibob.com/reference/patch_learning-lms-integrations-provider-identifier-training-content-archive.md): Marks one or more training content items as archived. Archived items are hidden from learners but the records are not permanently deleted. Returns `200 OK` with a `success` array of archived identifiers and an `errors` array for any identifiers that could not be found. **Before using this endpoint:** - Training content items must already exist — use the `externalIdentifier` values from the create step.
- Archiving is non-destructive — archived content is hidden from learners but can be restored if needed.
- Unknown identifiers are not treated as a fatal error; they are reported in the `errors` array.
**Testing notes:** Open the **Examples** panel and select a **Request Example** to inspect the body parameters.
- [Submit xAPI statement](https://apidocs.hibob.com/reference/post_learning-lms-integrations-provider-identifier-xapi-statements.md): 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:** - An active LMS integration must exist for the `provider-identifier` — create one using Create integration.
- The `actor.mbox` email must match the work email of an active employee in Bob.
- The `object.id` should correspond to the `sourceLink` of a known training content item pushed via Create training content.
- Supply a unique `id` (UUID) per statement for idempotency — resubmitting the same UUID returns `409`.
**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.