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

# Obtenir un devis

> Récupérer le devis complet pour un projet spécifique

## Autorisation

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

## Paramètres de chemin

<ParamField path="id" type="string" required>
  UUID du projet
</ParamField>

## Exemples

<CodeGroup>
  ```bash cURL theme={null}
  curl https://qwoty.app/api/quote/550e8400-e29b-41d4-a716-446655440000 \
    -H "Authorization: Bearer qwoty_your_token"
  ```

  ```javascript JavaScript theme={null}
  const id = '550e8400-e29b-41d4-a716-446655440000'

  const response = await fetch(`https://qwoty.app/api/quote/${id}`, {
    headers: {
      Authorization: 'Bearer qwoty_your_token',
    },
  })

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

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

  id = '550e8400-e29b-41d4-a716-446655440000'

  response = requests.get(
    f'https://qwoty.app/api/quote/{id}',
      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="object">
  L'enveloppe contenant les données du devis

  <Expandable title="Objet Devis">
    <ResponseField name="quote" type="object">
      Informations complètes du devis

      <Expandable title="Structure du devis">
        <ResponseField name="id" type="string">
          Identifiant unique du devis (UUID)
        </ResponseField>

        <ResponseField name="number" type="string">
          Numéro de devis lisible par l'humain
        </ResponseField>

        <ResponseField name="status" type="string">
          Statut du devis (ex. : 'draft', 'sent', 'accepted')
        </ResponseField>

        <ResponseField name="publish" type="boolean">
          Indique si le devis est actuellement publié
        </ResponseField>

        <ResponseField name="issue_date" type="string">
          Date du premier envoi au destinataire (`email_sent_timestamp` du premier destinataire envoyé)
        </ResponseField>

        <ResponseField name="owner" type="object">
          Informations sur le propriétaire du devis

          <Expandable title="Propriétaire">
            <ResponseField name="id" type="string">UUID du profil du propriétaire</ResponseField>
            <ResponseField name="first_name" type="string">Prénom</ResponseField>
            <ResponseField name="last_name" type="string">Nom</ResponseField>
            <ResponseField name="email" type="string">Adresse e-mail</ResponseField>

            <ResponseField name="external_ids" type="object">
              Identifiants des systèmes externes : `crm`, `erp`, `accounting`
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="expiration_date" type="string">
          Date d'expiration au format ISO 8601
        </ResponseField>

        <ResponseField name="currency" type="string">
          Code de devise (ex. : 'EUR', 'USD')
        </ResponseField>

        <ResponseField name="language" type="string">
          Code de langue (ex. : 'en', 'fr')
        </ResponseField>

        <ResponseField name="title" type="string">
          Titre du devis
        </ResponseField>

        <ResponseField name="opportunity_id" type="string">
          ID de l'opportunité CRM associée
        </ResponseField>

        <ResponseField name="pdf_link" type="string | null">
          URL pré-signée (valide 1 heure) pointant vers le PDF généré. `null` si aucun PDF n'a encore été généré pour ce devis (ex. : le devis n'a jamais été téléchargé ou signé).
        </ResponseField>

        <ResponseField name="dealroom_link" type="string">
          URL vers la salle de négociation client
        </ResponseField>

        <ResponseField name="business_unit" type="object">
          Informations sur l'unité commerciale, incluant la marque, l'adresse, le logo et les numéros fiscaux
        </ResponseField>

        <ResponseField name="customer" type="object">
          Informations client incluant les détails de l'entreprise, les contacts, les adresses de facturation et de livraison

          <Expandable title="Client">
            <ResponseField name="id" type="string">UUID du client</ResponseField>
            <ResponseField name="type" type="string">Type d'entité : `company` ou `individual`</ResponseField>
            <ResponseField name="name" type="string">Nom de l'entreprise ou de la personne</ResponseField>

            <ResponseField name="external_ids" type="object">
              Identifiants des systèmes externes : `crm`, `erp`, `accounting`
            </ResponseField>

            <ResponseField name="contacts" type="array">Liste des contacts avec `id`, `first_name`, `last_name`, `email`, `role`</ResponseField>

            <ResponseField name="billing_address" type="object">
              Adresse de facturation avec `line1`, `line2`, `city`, `postal_code`, `country` (nom complet), `country_code` (ISO 3166-1 alpha-2)
            </ResponseField>

            <ResponseField name="shipping_address" type="object">
              Adresse de livraison avec `line1`, `line2`, `city`, `postal_code`, `country` (nom complet), `country_code` (ISO 3166-1 alpha-2)
            </ResponseField>

            <ResponseField name="custom_properties" type="object">
              Carte clé/valeur des valeurs de champs personnalisés définis pour ce client. Les clés sont les noms API des définitions de champs personnalisés. Présent uniquement lorsqu'au moins un champ personnalisé a une valeur.
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="pricing_table" type="object">
          Structure tarifaire complète avec sections, lignes et périodes

          <Expandable title="Tableau de tarification">
            <ResponseField name="catalog" type="object">
              Données du catalogue associé
            </ResponseField>

            <ResponseField name="pricebook" type="object">
              Données du tarif associé
            </ResponseField>

            <ResponseField name="markup" type="object">
              Configuration de la marge (activée, pourcentage)
            </ResponseField>

            <ResponseField name="settings" type="object">
              Paramètres d'affichage (is\_prices\_hidden, etc.)
            </ResponseField>

            <ResponseField name="sections" type="array">
              Tableau de sections du devis avec les lignes, organisées par phases/périodes
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="summary" type="object">
          Résumé financier (détail du contrat)

          <Expandable title="Résumé">
            <ResponseField name="one_off" type="object">
              Totaux ponctuels : `net_amount`, `tax_amount`, `total_amount`
            </ResponseField>

            <ResponseField name="recurring" type="array">
              Totaux récurrents par intervalle avec `interval`, `interval_count` et les montants
            </ResponseField>

            <ResponseField name="metrics" type="object">
              Indicateurs clés de performance : `mrr`, `arr`, `tcv`
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="discounts" type="object">
          Remises appliquées au niveau des lignes et au niveau global
        </ResponseField>

        <ResponseField name="taxes" type="object">
          Configuration et montants des taxes
        </ResponseField>

        <ResponseField name="payment_terms" type="object">
          Conditions de paiement et échéanciers
        </ResponseField>

        <ResponseField name="payment_methods" type="object">
          Moyens de paiement acceptés
        </ResponseField>

        <ResponseField name="customer_balance" type="object">
          Informations sur le solde du compte client
        </ResponseField>

        <ResponseField name="content" type="array">
          Blocs de contenu pour la personnalisation du devis (textes, images, etc.)
        </ResponseField>

        <ResponseField name="contracts" type="array">
          Contrats associés avec le statut de signature
        </ResponseField>

        <ResponseField name="recipients" type="object">
          Destinataires de signature regroupés par `signers` et `viewers`, avec `signature_type` et `signing_order`
        </ResponseField>

        <ResponseField name="metadata" type="object">
          Horodatages de création/mise à jour et métadonnées contextuelles
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json Success Response (Simplified) theme={null}
  {
    "success": true,
    "data": {
      "quote": {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "number": "Q-2024-001",
        "status": "sent",
        "publish": true,
        "issue_date": "2026-03-10T09:15:00.000Z",
        "owner": {
          "id": "2f4c94f0-a27d-45e3-8b5e-b4ad0c9f57c9",
          "first_name": "Paul",
          "last_name": "Martin",
          "email": "paul@acme.com",
          "external_ids": {
            "crm": "CRM-7654321",
            "erp": "ERP-7654321",
            "accounting": "ACC-7654321"
          }
        },
        "expiration_date": "2024-12-31T23:59:59Z",
        "currency": "EUR",
        "language": "en",
        "title": "Q4 2024 Services Proposal",
        "opportunity_id": "opp_123456",
        "pdf_link": "https://storage.qwoty.io/project/path/to/quote.pdf?token=...&expires=1744233600",
        "dealroom_link": "https://qwoty.app/dealroom/abc123",
        "business_unit": {
          "id": "bu_123",
          "type": "company",
          "brand": "Acme",
          "name": "Acme Corporation",
          "logo": {
            "url": "https://storage.qwoty.io/logos/acme.png",
            "alt": "Acme Logo"
          },
          "tax_ids": [
            {
              "code": "VAT",
              "value": "FR12345678901"
            }
          ],
          "address": {
            "line1": "123 Main Street",
            "city": "Paris",
            "postal_code": "75001",
            "country": "France",
            "country_code": "FR"
          }
        },
        "customer": {
          "id": "cust_456",
          "type": "company",
          "name": "Customer Inc.",
          "external_ids": {
            "crm": "CRM-1234567",
            "erp": null,
            "accounting": "ACC-1234567"
          },
          "contacts": [
            {
              "id": "contact_789",
              "first_name": "John",
              "last_name": "Doe",
              "email": "john.doe@customer.com",
              "role": "decision_maker"
            }
          ],
          "billing_address": {
            "line1": "456 Customer Ave",
            "line2": null,
            "city": "Lyon",
            "postal_code": "69001",
            "country": "France",
            "country_code": "FR"
          },
          "shipping_address": null,
          "custom_properties": {
            "industry": "SaaS",
            "account_manager": "Sophie Dubois"
          }
        },
        "pricing_table": {
          "settings": {
            "is_prices_hidden": false
          },
          "sections": [
            {
              "id": "section_001",
              "type": "standard",
              "rank": 1,
              "name": "Professional Services",
              "phases": [
                {
                  "id": "period_001",
                  "name": "Year 1",
                  "rank": 1,
                  "line_items": [
                    {
                      "id": "item_001",
                      "rank": 1,
                      "product": {
                        "product_id": "prod_123",
                        "name": "Consulting Services",
                        "unit_of_measure": "hour"
                      },
                      "quantity": 100,
                      "pricing": {
                        "model": "per_unit",
                        "list_price": 150.0,
                        "currency": "EUR"
                      }
                    }
                  ]
                }
              ]
            }
          ]
        },
        "summary": {
          "one_off": {
            "net_amount": 50000.0,
            "tax_amount": 10000.0,
            "total_amount": 60000.0
          },
          "recurring": [
            {
              "interval": "month",
              "interval_count": 1,
              "net_amount": 5000.0,
              "tax_amount": 1000.0,
              "total_amount": 6000.0
            }
          ],
          "metrics": {
            "mrr": 5000.0,
            "arr": 60000.0,
            "tcv": 180000.0
          }
        },
        "recipients": {
          "signature_type": "restricted",
          "signing_order": "parallel",
          "signers": [
            {
              "rank": 1,
              "name": "Michel Lee",
              "email": "michel.lee@external.com",
              "type": "external",
              "status": "not_viewed"
            }
          ],
          "viewers": [
            {
              "name": "Emmanuel Laureau",
              "email": "emmanuel.laureau@company.com",
              "user_id": "usr_001",
              "type": "internal",
              "status": "not_viewed"
            }
          ]
        },
        "metadata": {
          "created_at": "2024-12-01T10:00:00Z",
          "updated_at": "2024-12-15T14:30:00Z",
          "template_id": "tmpl_123",
          "workspace_id": "ws_123",
          "organisation_id": "org_123"
        }
      }
    }
  }
  ```
</ResponseExample>

## Réponses d'erreur

<ResponseExample>
  ```json Not Found theme={null}
  {
    "success": false,
    "error": "Project not found"
  }
  ```

  ```json Unauthorized theme={null}
  {
    "success": false,
    "error": "Invalid API token"
  }
  ```

  ```json Quote Not Generated theme={null}
  {
    "success": false,
    "error": "Quote has not been generated for this project"
  }
  ```
</ResponseExample>

## Notes

L'endpoint de devis retourne une structure complète incluant :

* **Vendeur & Client** : Informations complètes sur l'entreprise et les contacts, y compris les valeurs des champs personnalisés (`custom_properties`)
* **Tableau de tarification** : Tous les produits/services organisés par sections et périodes
* **Résumé** : Totaux ponctuels, totaux récurrents par intervalle et indicateurs (`mrr`, `arr`, `tcv`)
* **Remises & Taxes** : Remises appliquées et calculs de taxes
* **Contenu & Contrats** : Blocs de contenu personnalisables et contrats prêts à la signature
* **Destinataires** : Destinataires de signature regroupés par signataires/observateurs

Cet endpoint est généralement utilisé pour :

* Afficher les devis dans les salles de négociation client
* Générer des documents PDF
* S'intégrer avec les systèmes CRM
* Suivre les indicateurs et les performances des devis
