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

# Lister les produits parents

> Récupérer la liste de tous les produits parents de votre espace de travail

## Autorisation

<ParamField header="Authorization" type="string" required>
  Jeton Bearer pour l'authentification. Format : `Bearer qwoty_your_token`
</ParamField>

## Exemples

<CodeGroup>
  ```bash cURL theme={null}
  curl https://qwoty.app/api/product-parents \
    -H "Authorization: Bearer qwoty_your_token"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://qwoty.app/api/product-parents', {
    headers: {
      Authorization: 'Bearer qwoty_your_token',
    },
  })

  const data = await response.json()
  ```

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

  response = requests.get(
      'https://qwoty.app/api/product-parents',
      headers={
          'Authorization': 'Bearer qwoty_your_token'
      }
  )

  data = response.json()
  ```
</CodeGroup>

## Réponse

<ResponseField name="success" type="boolean">
  Indique si la requête a été effectuée avec succès
</ResponseField>

<ResponseField name="data" type="array">
  Tableau d'objets produits parents

  <Expandable title="Objet Produit Parent">
    <ResponseField name="id" type="string">
      Identifiant unique (UUID)
    </ResponseField>

    <ResponseField name="name" type="string">
      Nom du produit parent
    </ResponseField>

    <ResponseField name="api_name" type="string">
      Identifiant API
    </ResponseField>

    <ResponseField name="reference" type="string">
      Référence interne
    </ResponseField>

    <ResponseField name="description" type="string">
      Description du produit
    </ResponseField>

    <ResponseField name="is_active" type="boolean">
      Statut actif
    </ResponseField>

    <ResponseField name="recurrence_type" type="string">
      Modèle de facturation (`one_off` ou `recurring`)
    </ResponseField>

    <ResponseField name="catalog_ids" type="array">
      IDs des catalogues liés
    </ResponseField>

    <ResponseField name="product_ids" type="array">
      IDs des produits liés
    </ResponseField>

    <ResponseField name="id_crm" type="string">
      ID CRM externe
    </ResponseField>

    <ResponseField name="id_erp" type="string">
      ID ERP externe
    </ResponseField>

    <ResponseField name="id_accounting" type="string">
      ID comptabilité externe
    </ResponseField>

    <ResponseField name="created_at" type="string">
      Horodatage ISO 8601
    </ResponseField>

    <ResponseField name="updated_at" type="string">
      Horodatage ISO 8601
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json Réponse en cas de succès theme={null}
  {
    "success": true,
    "data": [
      {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "catalog_ids": ["660e8400-e29b-41d4-a716-446655440001"],
        "product_ids": ["770e8400-e29b-41d4-a716-446655440002"],
        "name": "Premium Widget",
        "api_name": "premium_widget",
        "recurrence_type": "recurring",
        "reference": "PROD-001",
        "description": "High-quality widget for professional use",
        "is_active": true,
        "id_crm": "crm_123",
        "id_erp": "erp_456",
        "id_accounting": "acc_789",
        "created_at": "2024-12-21T10:30:00Z",
        "updated_at": "2024-12-21T10:30:00Z"
      }
    ]
  }
  ```
</ResponseExample>

## Réponses d'erreur

<ResponseExample>
  ```json Non autorisé theme={null}
  {
    "success": false,
    "error": "Invalid API token"
  }
  ```
</ResponseExample>
