> 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/pt-br/data-api/api-overview/oauth-20-authentication.md).

# Autenticação OAuth 2.0

{% hint style="info" %}
O OAuth 2.0 está disponível apenas no endpoint /ads

Ao integrar o relatório de pedidos via API, você precisará integrar o endpoint /orders com a autenticação Basic e sua chave secreta da API.
{% endhint %}

## ID do cliente e Segredo do cliente

O `client_id` e o `client_secret` serão fornecidos pelo seu Gestor de Contas Técnico. O Segredo do Cliente é privado e não deve ser compartilhado.

## Solicitando Tokens de Acesso

Para obter um Token de Acesso, você deve enviar uma solicitação contendo o `client_id` e `client_secret`Para fazer isso, o Varejista deve fazer uma solicitação POST para o Epsilon Retail Media endpoint do Servidor de Autorização:

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

{% hint style="info" %}
`/oauth2/token` apenas fornece o token relevante. Você usará esses tokens para interagir com os vários endpoints de integração.
{% endhint %}

Sua solicitação exigirá uma Autorização Basic enviada por meio do cabeçalho de solicitação Authorization contendo o do Varejista `client_id` e `client_secret` codificado em base64:

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

Você precisará adicionar o seguinte parâmetro usando o `application/x-www-form-urlencoded` formato no corpo da solicitação HTTP:

`grant_type=client_credentials`

A solicitação será semelhante a esta:

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

## Recebendo seu Token de Acesso

A resposta conterá as seguintes informações

* `access_token`: O token de acesso a ser usado ao chamar as Epsilon Retail Media APIs
* `expires_in`: A quantidade, em segundos, até que o token de acesso expire
* `token_type`: O tipo do token retornado. Será sempre Bearer neste caso

Uma resposta de exemplo está abaixo

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

## Usando o Token

Fazer chamadas para os Epsilon Retail Media endpoints da API pode ser feito simplesmente adicionando o Token de Acesso gerado ao cabeçalho Authorization na solicitação `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
}
```

## Erros de Solicitação

### Cliente Inválido

Se o `client_id` or `client_secret` enviado na solicitação estiver incorreto, você receberá uma resposta como esta:

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

Certifique-se de que está usando as credenciais corretas. Verifique novamente seu `client_id` e `client_secret` e certifique-se de que está usando a Autorização Basic corretamente ao chamar o endpoint /token. ##Solicitação Inválida Um erro de solicitação inválida será retornado do Servidor de Autorização se a solicitação não contiver um parâmetro obrigatório, incluir um valor de parâmetro inválido, incluir um parâmetro mais de uma vez ou estiver malformatada de outra forma.

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

Certifique-se de:

* Incluir apenas `grant_type=client_credentials` ao corpo da solicitação
* Definir o correto `Content-Type` ao cabeçalho da solicitação


---

# 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/pt-br/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.
