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

# Clonar e Assinar

> POST /clone e /subscribe — adquirir acesso a um catálogo do Marketplace Hub.

## Clone vs. Assinatura

| Operação    | Endpoint                            | Comportamento                                           |
| ----------- | ----------------------------------- | ------------------------------------------------------- |
| **Clonar**  | `POST /hub/catalogs/{id}/clone`     | Cópia estática — snapshot único dos produtos            |
| **Assinar** | `POST /hub/catalogs/{id}/subscribe` | Cópia dinâmica — sincroniza quando o publisher atualiza |

***

## POST /clone

```
POST /api/hub/catalogs/{catalogId}/clone
```

Cria uma cópia estática do catálogo publicado no workspace da conta autenticada. As mudanças futuras do publisher **não** afetam o clone.

### Corpo da requisição

```json theme={null}
{
  "targetCatalogName": "Coleção Primavera 2026 (cópia)"
}
```

### Resposta

```json theme={null}
{
  "catalogId": "cat_new_789",
  "name": "Coleção Primavera 2026 (cópia)",
  "productCount": 512,
  "clonedAt": "2026-03-18T12:00:00Z"
}
```

***

## POST /subscribe

```
POST /api/hub/catalogs/{catalogId}/subscribe
```

Cria uma assinatura ativa. Quando o publisher lança uma nova versão, os produtos assinados recebem atualizações automaticamente (sujeito à sua política de resolução de conflitos).

### Corpo da requisição

```json theme={null}
{
  "targetCatalogName": "Coleção Primavera 2026 (assinatura)",
  "conflictResolution": "manual_review"
}
```

| Campo                | Tipo   | Obrigatório | Descrição                                                       |
| -------------------- | ------ | :---------: | --------------------------------------------------------------- |
| `targetCatalogName`  | string |     Sim     | Nome para o catálogo assinado no seu workspace                  |
| `conflictResolution` | string |     Não     | `"keep_local"`, `"accept_remote"` ou `"manual_review"` (padrão) |

### Resposta

```json theme={null}
{
  "subscriptionId": "sub_abc123",
  "catalogId": "cat_new_456",
  "status": "active",
  "subscribedAt": "2026-03-18T12:00:00Z"
}
```

***

## Exemplos

<CodeGroup>
  ```bash cURL theme={null}
  # Clonar
  curl -X POST "https://app.alana.shopping/api/hub/catalogs/hub_cat_9x8k2m/clone" \
    -H "Authorization: Bearer sk_live_sua_chave_api" \
    -H "Content-Type: application/json" \
    -d '{"targetCatalogName": "Coleção Primavera 2026 (cópia)"}'

  # Assinar
  curl -X POST "https://app.alana.shopping/api/hub/catalogs/hub_cat_9x8k2m/subscribe" \
    -H "Authorization: Bearer sk_live_sua_chave_api" \
    -H "Content-Type: application/json" \
    -d '{"targetCatalogName": "Assinatura Primavera 2026", "conflictResolution": "manual_review"}'
  ```

  ```javascript JavaScript theme={null}
  // Clonar
  const clone = await fetch(
    `https://app.alana.shopping/api/hub/catalogs/${catalogId}/clone`,
    {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.ALANA_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ targetCatalogName: 'Coleção Primavera 2026 (cópia)' }),
    }
  ).then(r => r.json());
  console.log(`Catálogo clonado: ${clone.catalogId}`);
  ```

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

  headers = {
      "Authorization": f"Bearer {os.environ['ALANA_API_KEY']}",
      "Content-Type": "application/json",
  }
  result = requests.post(
      f"https://app.alana.shopping/api/hub/catalogs/{catalog_id}/subscribe",
      headers=headers,
      json={"targetCatalogName": "Assinatura Primavera", "conflictResolution": "manual_review"}
  ).json()
  print(f"Assinatura criada: {result['subscriptionId']}")
  ```
</CodeGroup>
