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

# Détails d'une facture

> Retourne les détails d'une facture.

**Champs retournés selon le niveau d'accès :**
- **BASIC** : `id`, `clientId`, `invoiceNumber`, `status`, `totalTtc`
- **STANDARD** : + `subtotal`, `totalTax`, `paidAmount`, `remainingAmount`, `createdAt`
- **FULL** : Tous les champs

**Permission requise :** `INVOICE_READ`




## OpenAPI

````yaml openapi.yaml get /invoices/{id}
openapi: 3.1.0
info:
  title: Veto Public API
  description: >
    API publique de la plateforme vétérinaire Veto, destinée aux intégrations
    partenaires.


    ## Authentification


    Toutes les requêtes doivent inclure une clé API via le header `X-API-Key`.

    Les clés sont créées et configurées par l'administrateur de la clinique.


    ```

    X-API-Key: vk_votre_cle_ici

    ```


    ## Niveaux d'accès


    Chaque clé API est configurée avec un niveau d'accès qui détermine la
    visibilité des champs dans les réponses :


    | Niveau | Description |

    |--------|-------------|

    | **BASIC** | Identifiants et informations minimales (noms, espèces,
    statuts) |

    | **STANDARD** | Informations métier courantes (contacts, dates, montants) |

    | **FULL** | Toutes les informations disponibles |


    Le niveau peut être défini globalement ou par ressource. Par exemple, une
    clé peut avoir un accès FULL sur les patients mais BASIC sur les clients.


    ## Rate Limiting


    Chaque clé est soumise à une limite de requêtes par heure (par défaut :
    1000).

    En cas de dépassement, l'API retourne `429 Too Many Requests` avec un header
    `Retry-After`.


    ## Permissions


    La clé API détermine quels endpoints sont accessibles. Les permissions
    disponibles sont :


    | Permission | Accès |

    |------------|-------|

    | `PATIENT_READ` | Lecture des patients |

    | `CLIENT_READ` | Lecture des clients |

    | `APPOINTMENT_READ` | Lecture des rendez-vous, créneaux, types |

    | `APPOINTMENT_CREATE` | Création de rendez-vous |

    | `CONSULTATION_READ` | Lecture des consultations |

    | `INVOICE_READ` | Lecture des factures |

    | `STOCK_READ` | Lecture du stock |
  version: 1.0.0
  contact:
    name: Support API Veto
servers:
  - url: https://api.treats.vet/api/v1
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Patients
    description: Animaux enregistrés dans la clinique
  - name: Clients
    description: Propriétaires des animaux
  - name: Rendez-vous
    description: Prise et consultation de rendez-vous
  - name: Consultations
    description: Comptes-rendus de consultations vétérinaires
  - name: Factures
    description: Factures et suivi financier
  - name: Stock
    description: Inventaire et niveaux de stock
paths:
  /invoices/{id}:
    get:
      tags:
        - Factures
      summary: Détails d'une facture
      description: >
        Retourne les détails d'une facture.


        **Champs retournés selon le niveau d'accès :**

        - **BASIC** : `id`, `clientId`, `invoiceNumber`, `status`, `totalTtc`

        - **STANDARD** : + `subtotal`, `totalTax`, `paidAmount`,
        `remainingAmount`, `createdAt`

        - **FULL** : Tous les champs


        **Permission requise :** `INVOICE_READ`
      operationId: getInvoice
      parameters:
        - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Détails de la facture
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    ResourceId:
      name: id
      in: path
      required: true
      description: Identifiant unique (UUID)
      schema:
        type: string
        format: uuid
  schemas:
    Invoice:
      type: object
      description: Facture liée à une consultation ou un acte
      properties:
        id:
          type: string
          format: uuid
        clientId:
          type: string
          format: uuid
        consultationId:
          type: string
          format: uuid
        invoiceNumber:
          type: string
          example: FAC-2026-001
        status:
          type: string
          description: 'Statut : DRAFT, SENT, PAID, OVERDUE, CANCELLED'
        subtotal:
          type: number
          format: decimal
          description: Montant HT
        totalTax:
          type: number
          format: decimal
          description: Montant TVA
        totalTtc:
          type: number
          format: decimal
          description: Montant TTC
        paidAmount:
          type: number
          format: decimal
          description: Montant déjà payé
        remainingAmount:
          type: number
          format: decimal
          description: Reste à payer
        createdAt:
          type: string
          format: date-time
  responses:
    Unauthorized:
      description: Clé API manquante, invalide ou expirée
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Invalid or expired API key
    NotFound:
      description: Ressource introuvable
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Resource not found
    RateLimited:
      description: Limite de requêtes dépassée
      headers:
        Retry-After:
          schema:
            type: integer
          description: Secondes avant réinitialisation de la limite
        X-RateLimit-Limit:
          schema:
            type: integer
          description: Nombre maximum de requêtes par heure
        X-RateLimit-Remaining:
          schema:
            type: integer
          description: Requêtes restantes dans la fenêtre courante
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Rate limit exceeded. Please try again later.
              retryAfter:
                type: integer
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: |
        Clé API fournie par l'administrateur de la clinique.
        Format : `vk_...`

````