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

# Lote Silver

> POST /batch/silver — normalizar uma seleção ou catálogo inteiro pelo estágio Silver do pipeline.

## Endpoint

```
POST /api/workspace/{workspaceId}/catalogs/{catalogId}/batch/silver
```

Aciona o estágio de normalização Silver para uma seleção de produtos ou o catálogo inteiro. O Silver normaliza valores de campos, mapeia campos de origem para o schema do Alana, valida URLs de imagens e detecta produtos duplicados.

***

## Parâmetros de path

| Parâmetro     | Tipo   | Obrigatório | Descrição              |
| ------------- | ------ | :---------: | ---------------------- |
| `workspaceId` | string |     Sim     | Seu ID de workspace    |
| `catalogId`   | string |     Sim     | O catálogo a processar |

***

## Corpo da requisição

```json theme={null}
{
  "productIds": ["prod_abc", "prod_def"],
  "scope": "selection"
}
```

| Campo        | Tipo      | Obrigatório | Descrição                                                               |
| ------------ | --------- | :---------: | ----------------------------------------------------------------------- |
| `productIds` | string\[] |     Não     | IDs de produtos a processar. Obrigatório quando `scope` é `"selection"` |
| `scope`      | string    |     Sim     | `"selection"` ou `"all"`. Quando `"all"`, `productIds` é ignorado       |

***

## Resposta

```json theme={null}
{
  "results": [
    {
      "productId": "prod_abc",
      "status": "success",
      "fieldsNormalized": 4,
      "duplicateOf": null,
      "urlsValidated": 3
    },
    {
      "productId": "prod_def",
      "status": "success",
      "fieldsNormalized": 2,
      "duplicateOf": "prod_xyz",
      "urlsValidated": 1
    }
  ],
  "processed": 2,
  "duration_ms": 1240
}
```

***

## Exemplos

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://app.alana.shopping/api/workspace/ws_123/catalogs/cat_456/batch/silver" \
    -H "Authorization: Bearer sk_live_sua_chave_api" \
    -H "Content-Type: application/json" \
    -d '{
      "productIds": ["prod_abc", "prod_def"],
      "scope": "selection"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    `https://app.alana.shopping/api/workspace/${workspaceId}/catalogs/${catalogId}/batch/silver`,
    {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.ALANA_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        productIds: ['prod_abc', 'prod_def'],
        scope: 'selection',
      }),
    }
  );
  const { results, processed, duration_ms } = await response.json();
  console.log(`Processados ${processed} produtos em ${duration_ms}ms`);
  ```

  ```python Python theme={null}
  import requests, os

  response = requests.post(
      f"https://app.alana.shopping/api/workspace/{workspace_id}/catalogs/{catalog_id}/batch/silver",
      headers={"Authorization": f"Bearer {os.environ['ALANA_API_KEY']}"},
      json={"productIds": ["prod_abc", "prod_def"], "scope": "selection"}
  )
  data = response.json()
  print(f"Processados {data['processed']} produtos em {data['duration_ms']}ms")
  ```
</CodeGroup>

***

## Respostas de erro

| Status HTTP | Código                     | Descrição                                  |
| ----------- | -------------------------- | ------------------------------------------ |
| 400         | `VALIDATION_ERROR`         | `scope` ausente ou inválido                |
| 403         | `INSUFFICIENT_PERMISSIONS` | Chave API sem `catalogs:write`             |
| 404         | `CATALOG_NOT_FOUND`        | Catálogo não existe no workspace           |
| 409         | `JOB_ALREADY_RUNNING`      | Um job Silver ou Gold já está em andamento |
| 429         | `RATE_LIMIT_EXCEEDED`      | Aguarde o valor do header `Retry-After`    |
