> For the complete documentation index, see [llms.txt](https://help.edgecontents.com/edgecontents/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.edgecontents.com/edgecontents/apis/publicacao.md).

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