# Publicação

## Endpoints

* ### Ocupação de playlist

**URL:** \<seuprojeto>.edgecontents.com/ds/api/playlistmedia/occupation

**Método:** GET

**Autenticação:** Basic Auth

**Parâmetros de Consulta:**

| Parâmetro | Tipo | Obrigatório | Descrição                                               |
| --------- | ---- | ----------- | ------------------------------------------------------- |
| playlist  | int  | Sim         | ID da playlist                                          |
| start     | date | Sim         | Data de início                                          |
| end       | date | Sim         | Data de fim                                             |
| screens   | int  | Sim         | Player (aceita múltiplos valores separados por vírgula) |
| sites     | int  | Sim         | Locais (aceita múltiplos valores separados por vírgula) |
| groups    | int  | Sim         | Grupos (aceita múltiplos valores separados por vírgula) |
| all       | int  | Sim         | Todos os players (aceita 0 e 1)                         |

**Observação:** entre os parâmetros "screens", "sites", "groups" e "all", é obrigatório o uso de apenas um deles.

**Exemplo de retorno:**

```json
{
    "6": {
        "screen_name": "Paulista Corporate - TV Entrada",
        "playlist": 26,
        "slots": [
            {
                "id": 263,
                "name": "Comercial - 1",
                "ocup": 0
            },
            {
                "id": 264,
                "name": "Comercial - 2",
                "ocup": 0
            },
            {
                "id": 265,
                "name": "Comercial - 3",
                "ocup": 4
            },
            {
                "id": 266,
                "name": "Comercial - 4",
                "ocup": 3
            }
        ]
    },
    "14": {
        "screen_name": "Paulista Corporate - PC UBUNTU 24.04",
        "playlist": 26,
        "slots": [
            {
                "id": 263,
                "name": "Comercial - 1",
                "ocup": 2
            },
            {
                "id": 264,
                "name": "Comercial - 2",
                "ocup": 2
            },
            {
                "id": 265,
                "name": "Comercial - 3",
                "ocup": 2
            },
            {
                "id": 266,
                "name": "Comercial - 4",
                "ocup": 2
            }
        ]
    }
}
```

* ### Adicionar publicação com nova mídia

**URL:** \<seuprojeto>.edgecontents.com/ds/api/playlistmedia/add

**Método:** POST

**Autenticação:** Basic Auth

**Corpo da Requisição (form-data):**

| Parâmetro     | Tipo | Obrigatório | Descrição                                                            |
| ------------- | ---- | ----------- | -------------------------------------------------------------------- |
| playlist      | Text | Sim         | ID da playlist                                                       |
| start         | Text | Sim         | Data de início                                                       |
| end           | Text | Sim         | Data de fim                                                          |
| screens       | Text | Não         | Player (aceita múltiplos valores separados por vírgula)              |
| sites         | Text | Não         | Locais (aceita múltiplos valores separados por vírgula)              |
| groups        | Text | Não         | Grupos (aceita múltiplos valores separados por vírgula)              |
| all           | Text | Não         | Todos os players (aceita 0 e 1)                                      |
| customer      | Text | Sim         | ID do cliente                                                        |
| campaign      | Text | Sim         | ID da campanha                                                       |
| playlistitems | Text | Sim         | ID de Playlistitems (aceita múltiplos valores separados por vírgula) |
| file\[]       | File | -           | Caminho do arquivo                                                   |
| file\_url     | Text | -           | URL da mídia                                                         |

**Exemplo de requisição com file:**

```postman_json
curl --location '<seuprojeto>.edgecontents.com/ds/api/playlistmedia/add' \
--header 'Authorization: ••••••' \
--header 'Cookie: PHPSESSID=moepqp8f4pu801' \
--form 'file[]=@"/C:/Users/lalca/Desktop/arquivo.png"' \
--form 'file[]=@"/C:/Users/lalca/Desktop/89eb7183-1e5c-4065-82af-91c6d936b9f9.jpeg"' \
--form 'customer="1"' \
--form 'campaign="30"' \
--form 'playlist="26"' \
--form 'playlistitems="265,266"' \
--form 'start="2025-12-03 00:00:00"' \
--form 'end="2025-12-12 23:59:59"' \
--form 'screens="8,6"'
```

**Exemplo de requisição com file\_url:**

```postman_json
curl --location '<seuprojeto>.edgecontents.com/ds/api/playlistmedia/add' \
--header 'Authorization: ••••••' \
--header 'Cookie: PHPSESSID=moepqp8f4pu801' \
--form 'file_url="https://images.com/img/2022/11/18/10-segundos-horizontal.mp4"' \
--form 'customer="1"' \
--form 'campaign="30"' \
--form 'playlist="26"' \
--form 'playlistitems="265,266"' \
--form 'start="2025-12-03 00:00:00"' \
--form 'end="2025-12-12 23:59:59"' \
--form 'screens="8,6"'
```

**Exemplo de retorno:**

```json
{
    "successes": [
        {
            "id": "876",
            "name": "arquivo",
            "playlistitem": "Comercial - 3"
        },
        {
            "id": "877",
            "name": "arquivo",
            "playlistitem": "Comercial - 4"
        },
        {
            "id": "878",
            "name": "89eb7183-1e5c-4065-82af-91c6d936b9f9",
            "playlistitem": "Comercial - 3"
        },
        {
            "id": "879",
            "name": "89eb7183-1e5c-4065-82af-91c6d936b9f9",
            "playlistitem": "Comercial - 4"
        }
    ],
    "errors": []
}
```

* ### Adicionar publicação com mídia já existente

**URL:** \<seuprojeto>.edgecontents.com/ds/api/playlistmedia/add

**Método:** POST

**Autenticação:** Basic Auth

**Corpo da Requisição (json):**

| Parâmetro     | Tipo | Obrigatório | Descrição                                                 |
| ------------- | ---- | ----------- | --------------------------------------------------------- |
| playlist      | int  | Sim         | ID da playlist                                            |
| start         | date | Sim         | Data de início                                            |
| end           | date | Sim         | Data de fim                                               |
| screens       | int  | Não         | ID de Player (aceita múltiplos valores como array)        |
| sites         | int  | Não         | ID de Locais (aceita múltiplos valores como array)        |
| groups        | int  | Não         | ID de Grupos (aceita múltiplos valores como array)        |
| all           | int  | Não         | Todos os players (aceita 0 e 1)                           |
| media         | int  | Sim         | ID de Mídias (aceita múltiplos valores como array)        |
| playlistitems | int  | Sim         | ID de Playlistitems (aceita múltiplos valores como array) |

**Exemplo de requisição:**

```postman_json
[
    {
        "playlist": 26,
        "playlistitems": [265,266],
        "start":  "2025-12-25 00:00:00",
        "end": "2025-12-31 23:59:59",
        "all": 1,
        "media": [318,321]
    }
]
```

**Exemplo de retorno:**

```json
{
    "successes": [
        {
            "id": "880",
            "name": "#67220_governoargentina_visitechecking_1080x1920",
            "playlistitem": "Comercial - 3"
        },
        {
            "id": "881",
            "name": "#67220_governoargentina_visitechecking_1080x1920",
            "playlistitem": "Comercial - 4"
        },
        {
            "id": "882",
            "name": "89eb7183-1e5c-4065-82af-91c6d936b9f9",
            "playlistitem": "Comercial - 3"
        },
        {
            "id": "883",
            "name": "89eb7183-1e5c-4065-82af-91c6d936b9f9",
            "playlistitem": "Comercial - 4"
        }
    ],
    "errors": []
}
```

\ <br>

## 🟡 Publicação – Reserva de Espaço (Sem Mídia)

### 📌 Descrição

Cria uma publicação (*playmedia*) **sem mídia vinculada**, reservando espaço para uma campanha.

Essa reserva pode ser preenchida posteriormente com mídias.

***

### 📥 Requisição

**URL:** \<seuprojeto>.edgecontents.com/ds/api/playlistmedia/add

**Método:** POST

**Autenticação:** Basic Auth

**Corpo da Requisição (json):**

***

#### Parâmetros

| Parâmetro       | Tipo      | Obrigatório | Descrição                     |
| --------------- | --------- | ----------- | ----------------------------- |
| `playlist`      | int       | ✅ Sim       | ID da playlist                |
| `playlistitems` | int\[]    | ✅ Sim       | IDs dos playlist items        |
| `start`         | datetime  | ✅ Sim       | Data de início                |
| `end`           | datetime  | ✅ Sim       | Data de fim                   |
| `campaign`      | int       | ✅ Sim       | ID da campanha                |
| `screens`       | int\[]    | ❌ Não       | IDs de players                |
| `sites`         | int\[]    | ❌ Não       | IDs de locais                 |
| `groups`        | int\[]    | ❌ Não       | IDs de grupos                 |
| `all`           | int (0/1) | ❌ Não       | Aplicar para todos os players |

***

### ⚠️ Regras

* ❌ **Não enviar `media`**
* ✅ `campaign` é obrigatória
* Será criado um *playmedia* **sem mídia associada**
* O campo `name` no retorno poderá ser `null`

***

### 📥 Exemplo

```
[
  {
    "playlist": 215,
    "playlistitems": [1070, 1071],
    "start": "2026-03-18 00:00:00",
    "end": "2026-03-31 23:59:59",
    "all": 1,
    "campaign": 30
  }
]
```

***

### 📤 Resposta

```
{
  "successes": [
    {
      "id": "28914503",
      "name": null,
      "playlistitem": "Comercial - 3"
    }
  ],
  "errors": []
}
```

***

## 🔁 Publicação – Adicionar Mídia em Reserva

### 📌 Descrição

Preenche uma ou mais reservas existentes (sem mídia), associando mídias a elas.

As reservas antigas são marcadas como deletadas e novas publicações são criadas com as mídias.

***

### 📥 Requisição

**URL:** \<seuprojeto>.edgecontents.com/ds/api/playlistmedia/add

**Método:** POST

**Autenticação:** Basic Auth

**Corpo da Requisição (json):**

***

#### Parâmetros

| Parâmetro       | Tipo      | Obrigatório | Descrição                             |
| --------------- | --------- | ----------- | ------------------------------------- |
| `playlist`      | int       | ✅ Sim       | ID da playlist                        |
| `playlistitems` | int\[]    | ✅ Sim       | IDs dos playlist items                |
| `start`         | datetime  | ✅ Sim       | Data de início                        |
| `end`           | datetime  | ✅ Sim       | Data de fim                           |
| `media`         | int\[]    | ✅ Sim       | IDs das mídias                        |
| `campaign`      | int       | ✅ Sim       | ID da campanha                        |
| `reserves_id`   | int\[]    | ✅ Sim       | IDs das reservas a serem substituídas |
| `screens`       | int\[]    | ❌ Não       | IDs de players                        |
| `sites`         | int\[]    | ❌ Não       | IDs de locais                         |
| `groups`        | int\[]    | ❌ Não       | IDs de grupos                         |
| `all`           | int (0/1) | ❌ Não       | Aplicar para todos os players         |

***

### ⚠️ Regras

* ✅ `media` é obrigatória
* ✅ `campaign` é obrigatória
* ✅ `reserves_id` é obrigatório
* As reservas informadas devem:
  * Pertencer à mesma campanha
  * Estar sem mídia (`cd_media_med = null`)
* O sistema irá:
  1. Criar novos *playmedias* com as mídias informadas
  2. Marcar as reservas antigas como deletadas (`fl_deleted_plm = 1`)

***

### 📥 Exemplo

```
[
  {
    "playlist": 215,
    "playlistitems": [1070, 1071],
    "start": "2026-03-18 00:00:00",
    "end": "2026-03-31 23:59:59",
    "all": 1,
    "media": [123, 456],
    "campaign": 30,
    "reserves_id": [28914504, 28914503]
  }
]
```

***

### 📤 Resposta

```
{
  "successes": [
    {
      "id": "900",
      "name": "video_123.mp4",
      "playlistitem": "Comercial - 3"
    }
  ],
  "errors": []
}
```

***

## 🧠 Observação importante

```
O preenchimento de reservas não atualiza registros existentes.
Ele cria novos registros e marca os anteriores como deletados.
```


---

# Agent Instructions: 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:

```
GET https://help.edgecontents.com/edgecontents/apis/publicacao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
