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

# Autenticación

Cada organización tiene un par de credenciales —una **API key** y una
**secret access**— que la plataforma genera y que identifican a tu
integración.

Las dos van en **todos** los requests, como headers separados. Siempre las
dos: falta una y el request se rechaza.

```bash
curl https://www.crehana.com/api/v5/rest/org/mi-org/learning/content/knowledge-hub/catalog/elevate/ \
  -H "Api-Key: $API_KEY" \
  -H "Secret-Access: $SECRET_ACCESS"
```

| Header          | Descripción                      |
| --------------- | -------------------------------- |
| `Api-Key`       | API key de la organización       |
| `Secret-Access` | Secret access de la organización |

## Errores de autenticación

Falte un header o sean inválidas las credenciales, la respuesta es la misma:
`401`, sin distinguir cuál de los dos casos fue.

```json
{
  "detail": {
    "errors": ["AuthenticationError: User is not authenticated in centralized"]
  }
}
```

Es a propósito: decirte *cuál* de las dos credenciales no sirve le serviría
igual a quien las está probando a ciegas. Si te llega un `401`, revisá los dos
headers antes que las credenciales — que falte uno es bastante más frecuente que
que estén mal.

> **Note**
>
> Las credenciales se validan por formato antes de cualquier consulta, así que un
> valor evidentemente mal formado —vacío, o de un largo imposible— se rechaza sin
> llegar a verificarse. No cambia lo que ves: sigue siendo un `401`.

> **Warning**
>
> Tratá la secret access como una contraseña. No la pongas en código cliente ni
> la commitees — desde el navegador no hay forma segura de usarla, porque
> cualquiera puede leer los headers que manda tu página.