> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.crehana.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.crehana.com/_mcp/server.

# Asignar contenido

Asignar contenido son dos pasos: encontrar qué asignar, y asignárselo a un
conjunto de personas.

## 1. Encontrar el contenido

Cada organización tiene acceso a distintos catálogos según su plan:

| Catálogo | Endpoint                                                  | Qué trae                                     |
| -------- | --------------------------------------------------------- | -------------------------------------------- |
| Crehana  | `/learning/content/knowledge-hub/catalog/v2/crehana/`     | Contenido producido por Crehana              |
| Elevate  | `/learning/content/knowledge-hub/catalog/v2/elevate/`     | Catálogo Elevate                             |
| Terceros | `/learning/content/knowledge-hub/catalog/v2/third-party/` | Contenido licenciado de proveedores externos |

```bash
curl "https://www.crehana.com/api/v5/rest/org/acme/learning/content/knowledge-hub/catalog/v2/crehana/?first=20" \
  -H "Api-Key: $API_KEY" -H "Secret-Access: $SECRET_ACCESS"
```

De la respuesta te interesa el identificador de cada curso: es lo que va en
`content_value` al asignar.

## 2. Asignar a varios usuarios

```bash
curl -X POST https://www.crehana.com/api/v5/rest/org/acme/learning/content/knowledge-hub/enrollments/v2/assign-course/ \
  -H "Api-Key: $API_KEY" -H "Secret-Access: $SECRET_ACCESS" \
  -H "Content-Type: application/json" \
  -d '{
        "content_value": "abc123",
        "centralized_user_list_ids": [101, 102, 103]
      }'
```

Para un track —una secuencia ordenada de cursos sobre un mismo tema— el
endpoint es `assign-track/` y recibe los mismos campos.

> **Note**
>
> Los dos aceptan además `send_email_to_all_selected_users`. Si asignás en lote
> conviene decidirlo explícitamente: es la diferencia entre una notificación por
> persona o ninguna.

> **Warning**
>
> Estos endpoints devuelven **`422`** cuando la llamada no termina asignando a
> ningún usuario, aunque el cuerpo sea válido y la respuesta anterior haya sido
> `200`. Pasa, por ejemplo, si todos los usuarios de la lista ya tenían el curso
> asignado.
>
> No lo trates como un error de validación: significa "no había nada que hacer".

## Asignar a un equipo entero

No hay un endpoint que asigne por área o por cargo. El patrón es resolver
primero el conjunto de usuarios y después asignar:

#### Listá los usuarios

`GET /users/user-organizations/` te devuelve cada usuario con su área,
sede y cargo.

#### Filtrá del lado tuyo

Quedate con los que correspondan al equipo que buscás.

#### Asigná en lotes

Mandá los `user_ids` en grupos en vez de uno por request.

## Verificar el resultado

Los reportes de la sección `Reports` muestran qué se asignó y cómo va el
progreso:

```
GET /org/{slug}/reports/learning/general-v2/
```

> **Note**
>
> Si estás empezando, usá `general-v2` y no `general`: expone campos que la
> primera versión no tiene. La v1 sigue funcionando por compatibilidad.