> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Primeros pasos

> Aprenda a autenticarse y a empezar a usar la Automation API de Kameleoon.

La **Automation API** es un servicio conforme a REST que le permite realizar de forma programática la mayoría de las acciones disponibles en la interfaz web de Kameleoon. Use la Automation API para crear software personalizado que interactúe con la plataforma Kameleoon y sus funcionalidades principales.

Por ejemplo, puede utilizar la Automation API para:

* Conectar Kameleoon con repositorios Git para gestionar el código de las variaciones.
* Diseñar dashboards personalizados con resultados de experimentos en tiempo real.
* Automatizar la creación de objetivos y segmentos en varios proyectos.

<Warning>
  Kameleoon puede cambiar endpoints y parámetros en nuevas versiones de la Automation API. Suscríbase a las actualizaciones del [changelog de Kameleoon](https://changelog.kameleoon.com/en/) para recibir notificaciones sobre los cambios previstos.
</Warning>

<Warning>
  La Automation API no admite altos volúmenes de solicitudes. Limite las llamadas a **12 por minuto** por cuenta o usuario. No use la Automation API para hacer seguimiento de alta frecuencia de cada visitante del sitio web. Para volúmenes de solicitudes mayores, use la [Data API](../../data-api-rest/overview).
</Warning>

<Note>
  Contacte con el equipo de Kameleoon para solicitar una mejora de la Automation API. Apreciamos sus comentarios y podemos añadir rápidamente a la API funcionalidades ya existentes en la interfaz.
</Note>

## Tutoriales

### Crear un experimento

Este tutorial proporciona instrucciones paso a paso para realizar tareas clave en la plataforma Kameleoon. Aprenderá a:

* [Crear un nuevo experimento](../tutorials/experiments/create-a-new-experiment)
* [Añadir y modificar código JavaScript en una variación](../tutorials/experiments/add-and-edit-javascript-in-the-variant-of-your-new-experiment)
* [Crear un nuevo segmento](../tutorials/experiments/create-a-segment-to-target-visitors-by-page-url)
* [Crear un nuevo objetivo](../tutorials/experiments/create-a-new-goal-for-an-experiment)
* [Actualizar y lanzar un experimento](../tutorials/experiments/add-a-goal-and-segment-to-your-experiment-before-launching)

### Recuperar los resultados de un experimento

Una vez que lanza un experimento, este genera resultados que aportan información para determinar la variación con mejor rendimiento. Aprenda a solicitar los resultados e identificar la variación ganadora en el tutorial [Recuperar los resultados de los experimentos](../tutorials/experiments/retrieving-experiment-results-using-the-automation-api).

## Autenticación

La Automation API utiliza el framework OAuth 2.0 para la autorización. Kameleoon admite dos flujos principales según el caso de uso:

* **Client Credentials Flow**: use este flujo si es cliente de Kameleoon y utiliza la API con fines internos. Este flujo le permite gestionar de forma programática su propia cuenta y sus propiedades web.
* **Authorization Code Flow**: use este flujo si es un socio tecnológico que integra una aplicación con Kameleoon. Este flujo le permite acceder de forma segura a los datos en nombre de otros usuarios de Kameleoon.

### Flujo Client Credentials

El flujo Client Credentials es el método de autenticación más sencillo. Para usar este flujo, intercambie sus credenciales de cliente por un access token.

<Tip>
  Puede encontrar su `client_id` y `client_secret` en la plataforma Kameleoon. Vaya a **Account > My profile** y haga clic en **See my API credentials**.
</Tip>

#### 1. Obtener un access token

Envíe una solicitud POST al endpoint de token con sus credenciales.

```bash curl theme={null}
curl -X POST "https://api.kameleoon.com/oauth/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=client_credentials" \
     -d "client_id=YOUR_CLIENT_ID" \
     -d "client_secret=YOUR_CLIENT_SECRET"
```

El servidor de autorización responde con un objeto JSON que contiene el `access_token`:

```json theme={null}
{
  "access_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9..."
}
```

#### 2. Acceder a la API

Incluya el access token como Bearer token en la cabecera HTTP `Authorization` de sus solicitudes.

```bash curl theme={null}
curl -H "Authorization: Bearer <ACCESS_TOKEN>" \
     -H "Content-Type: application/json" \
     "https://api.kameleoon.com/experiments"
```

* Los access tokens son válidos durante **2 horas** por defecto.
* El flujo Client Credentials no utiliza refresh tokens.
* Debe usar **HTTPS** para todas las solicitudes a la API. Las solicitudes realizadas sobre HTTP en claro fallarán.

### Flujo Authorization Code

El flujo Authorization Code permite a los desarrolladores externos integrar sus aplicaciones con los datos de Kameleoon. Debe obtener permiso explícito de un usuario para acceder a los recursos de su cuenta.

<Note>
  Contacte con su Technical Account Manager de Kameleoon para solicitar una aplicación OAuth. Debe proporcionar una URL de redirección para su aplicación. A continuación, Kameleoon le proporcionará un `client_id` y un `client_secret`.
</Note>

#### 1. Redirigir al usuario para la autorización

Redirija a los usuarios desde su aplicación a la URL de autorización:

```https theme={null}
https://api.kameleoon.com/oauth/authorize?client_id=my-application-name&response_type=code&redirect_uri=https://application.company.com/
```

Tras conceder el permiso, Kameleoon redirige al usuario a la URL de su aplicación con un código de autorización:

```https theme={null}
https://application.company.com/?code=AUTHORIZATION_CODE
```

#### 2. Obtener access y refresh tokens

Intercambie el código de autorización por tokens. Codifique en Base64 la cadena `client_id:client_secret` e inclúyala en la cabecera `Authorization: Basic`.

```bash curl theme={null}
curl -X POST "https://api.kameleoon.com/oauth/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -H "Authorization: Basic <BASE64_ENCODED_CREDENTIALS>" \
     -d "grant_type=authorization_code" \
     -d "code=AUTHORIZATION_CODE" \
     -d "redirect_uri=https://application.company.com/"
```

La respuesta contiene tanto el access token como el refresh token:

```json theme={null}
{
  "access_token": "...",
  "refresh_token": "..."
}
```

#### 3. Renovar un token caducado

Para obtener un nuevo access token sin tener que volver a autorizar al usuario:

```bash curl theme={null}
curl -X POST "https://api.kameleoon.com/oauth/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -H "Authorization: Basic <BASE64_ENCODED_CREDENTIALS>" \
     -d "grant_type=refresh_token" \
     -d "refresh_token=YOUR_REFRESH_TOKEN"
```

## Limitación de tasa (rate limiting)

La limitación de tasa de la Automation API se aplica por access token de usuario. Kameleoon utiliza dos ventanas de rate limiting:

* **Intervalo de 10 segundos**: hasta 50 solicitudes.
* **Intervalo de 1 hora**: hasta 1.000 solicitudes.

Si supera estos límites, la API devuelve un error `HTTP 429 Too Many Requests`. Para minimizar la limitación de tasa:

* **Implemente caché**: almacene las respuestas de la API localmente y evite llamar a la API en cada carga de página.
* **Use la Data API**: si su aplicación requiere tracking en tiempo real a gran escala, use la [Data API](../../data-api-rest/overview).

## Códigos de estado HTTP

| Código | Estado            | Descripción                                                                                                          |
| :----- | :---------------- | :------------------------------------------------------------------------------------------------------------------- |
| 200    | OK                | La solicitud fue correcta.                                                                                           |
| 201    | Created           | El recurso se creó correctamente.                                                                                    |
| 400    | Bad Request       | El cuerpo de la solicitud no es válido. Asegúrese de que la cabecera `Content-Type: application/json` esté presente. |
| 401    | Unauthorized      | El token de API falta o está mal formado.                                                                            |
| 403    | Forbidden         | No tiene los permisos necesarios o el token ha sido revocado.                                                        |
| 429    | Too Many Requests | Ha superado el límite de tasa.                                                                                       |
| 5xx    | Server Error      | Se ha producido un error interno. Contacte con el soporte de Kameleoon si el problema persiste.                      |

## Parámetros de consulta

Para los endpoints que recuperan varios objetos, use parámetros de consulta para paginar, filtrar u ordenar los datos.

### Paginación

Las consultas devuelven **20 elementos por página** por defecto (máximo 200). Use `perPage=-1` para recuperar el máximo permitido.

| Parámetro | Tipo    | Descripción                                        |
| :-------- | :------ | :------------------------------------------------- |
| `page`    | integer | El número de página que se va a recuperar.         |
| `perPage` | integer | Elementos por página (por defecto 20, máximo 200). |
| `filter`  | array   | Parámetros de filtrado.                            |
| `sort`    | array   | Parámetros de ordenación.                          |

### Filtrado

Debe codificar los filtros con porcentaje (percent-encode) cuando los envíe en una URL.
**Ejemplo**: `filter=[{"field":"name","operator":"EQUAL","parameters":["Test"]}]`

| Campo        | Tipo   | Descripción                                                                                   |
| :----------- | :----- | :-------------------------------------------------------------------------------------------- |
| `field`      | string | El campo por el que filtrar.                                                                  |
| `operator`   | enum   | Las opciones incluyen: `EQUAL`, `NOT_EQUAL`, `LESS`, `GREATER`, `LIKE`, `IN`, `IS_NULL`, etc. |
| `parameters` | array  | Los valores específicos con los que se debe coincidir.                                        |

### Ordenación

| Campo       | Tipo   | Descripción                                |
| :---------- | :----- | :----------------------------------------- |
| `field`     | string | El campo por el que ordenar.               |
| `direction` | enum   | `ASC` (ascendente) o `DESC` (descendente). |
