> For the complete documentation index, see [llms.txt](https://help.citrusad.com/retail-media-interface/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.citrusad.com/retail-media-interface/integration/es/data-api/api-overview/oauth-20-authentication.md).

# Autenticación OAuth 2.0

{% hint style="info" %}
OAuth 2.0 solo está disponible en el endpoint /ads

Al integrar el informe de pedidos a través de la API, deberá integrar el endpoint /orders con autenticación Basic y su clave de API secreta.
{% endhint %}

## Client ID y Client Secret

El `client_id` y el `client_secret` serán proporcionados por su Technical Account Manager. El Client Secret es privado y no debe compartirse.

## Solicitud de Access Tokens

Para obtener un Access Token, debe enviar una solicitud que contenga el `client_id` y `client_secret`. Para hacerlo, el Retailer debe hacer una solicitud POST al Epsilon Retail Media endpoint del Authorization Server:

```http
https://$BASE_URL/v1/oauth2/token
```

{% hint style="info" %}
`/oauth2/token` solo proporciona el token correspondiente. Utilizará estos tokens para interactuar con los diversos endpoints de integración.
{% endhint %}

Su solicitud requerirá una Basic Authorization enviada a través del encabezado de solicitud Authorization que contenga el del Retailer `client_id` y `client_secret` codificado en base64:

`Authorization: "Basic" + base64encode(client_id + ":" + client_secret)`

Deberá añadir el siguiente parámetro utilizando el formato `application/x-www-form-urlencoded` en el cuerpo de la solicitud HTTP:

`grant_type=client_credentials`

La solicitud se verá de la siguiente manera:

```http
POST https://$BASE_URL/v1/oauth2/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <base64 encoded id+key>
grant_type=client_credentials
```

## Recepción de su Access Token

La respuesta contendrá la siguiente información

* `access_token`: El access token que se utilizará al llamar a las Epsilon Retail Media APIs
* `expires_in`: La cantidad, en segundos, hasta que el access token expire
* `token_type`: El tipo de token devuelto. Siempre será Bearer en este caso

A continuación se muestra una respuesta de ejemplo

```json
{
  "access_token": "xxxxx.yyyyy.zzzzz",
  "expires_in": 3600,
  "token_type": "Bearer"
}
```

## Uso del Token

Las llamadas a los Epsilon Retail Media endpoints de la API se pueden realizar simplemente añadiendo el Access Token generado al encabezado Authorization de la solicitud `Authorization: “Bearer “ <access_token>`

```http
POST $BASE_URL/v1/ads/generate HTTP/1.1
accept: application/json
content-type: application/json
Authorization: Bearer <access_token>
{
    "customerId": "wertg5432a",
    "sessionId": "ec9-4e07-881d-3e9",
    "placement": "category",
    "catalogId": "628dbe95-2ec9-4e07-881d-3e9f92ab2e0b",
    "productFilters": [
         ["category:Cupboard/Snacks"]
    ],
    "options": {
                             "filterMode": "AndOr"
                             },
    "maxNumberOfAds": 3
}
```

## Errores de solicitud

### Client no válido

Si el `client_id` or `client_secret` enviado en la solicitud es incorrecto, recibirá una respuesta como esta:

```json
{
  "error": "invalid_client"
}
```

Asegúrese de estar utilizando las credenciales correctas. Verifique nuevamente su `client_id` y `client_secret` y asegúrese de estar utilizando la Basic Authorization correctamente al llamar al endpoint /token. ##Solicitud no válida El Authorization Server devolverá un error de solicitud no válida si a la solicitud le falta un parámetro requerido, incluye un valor de parámetro no válido, incluye un parámetro más de una vez o tiene un formato incorrecto.

```json
{
  "error": "invalid_request"
}
```

Asegúrese de:

* Incluir únicamente `grant_type=client_credentials` en el cuerpo de la solicitud
* Establecer el `Content-Type` correcto en el encabezado de la solicitud


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.citrusad.com/retail-media-interface/integration/es/data-api/api-overview/oauth-20-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
