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

# Supprimer un document d'une demande de signature

> Supprime un document de la demande de signature. Le dernier document restant ne peut pas être supprimé (`400 MIN_DOCUMENTS_REQUIRED`). Une demande de signature envoyée, terminée, annulée ou refusée répond `409 DOCUMENT_SET_LOCKED`.

**Disponible pour toutes les entreprises.** Cette opération fait partie du contrat multi-documents (API 01.39.00). Pour une demande de signature ou un modèle que la clé API ne peut pas voir, elle répond `404` avec le code `NOT_FOUND` ("Endpoint not found"), exactement comme un endpoint inconnu. Tant que la modification multi-documents est suspendue, cette opération renvoie `409 MULTI_DOCUMENT_READ_ONLY` pour les éléments sur le chemin multi-documents en lecture seule et `404 NOT_FOUND` pour les éléments sur le chemin à un seul document.



## OpenAPI

````yaml api-reference/v01.40.04/openapi-v01.40.04.fr.json delete /signing-requests/{id}/documents/{document_id}
openapi: 3.0.3
info:
  title: API Partenaire Firma
  description: >-
    API RESTful pour la signature de documents et la gestion de modèles.


    **Authentification** : Tous les endpoints nécessitent une authentification
    par clé API via l'en-tête `Authorization`. Utilisez votre clé API
    directement sans préfixe (par exemple, `your-api-key`). Le préfixe Bearer
    est optionnel mais pas obligatoire.


    **Fonctionnalités de sécurité** :

    - Validation des entrées avec des schémas Zod incluant des messages d'erreur
    détaillés au niveau des champs

    - Jetons JWT signés RSA-256 pour l'accès aux modèles intégrés


    **Limitation de débit** : Les limites de débit sont hiérarchisées selon le
    type d'opération :

    - Opérations de lecture (GET) : 200 requêtes par minute

    - Opérations d'écriture (POST/PUT/PATCH/DELETE) : 120 requêtes par minute

    - Opérations CRUD sur les webhooks : 60 requêtes par minute

    - Test de webhook : 10 requêtes par minute

    - Régénération/expiration de clé API : 1 requête par minute

    - Rotation du secret de webhook : 1 requête par minute


    Lorsque les limites de débit sont dépassées, l'API renvoie une réponse `429
    Too Many Requests` avec les en-têtes suivants :

    - `X-RateLimit-Limit` : Nombre maximal de requêtes par minute pour cet
    endpoint

    - `X-RateLimit-Remaining` : Requêtes restantes dans la fenêtre actuelle

    - `X-RateLimit-Reset` : Horodatage Unix de la réinitialisation de la limite

    - `Retry-After` : Secondes à attendre avant de pouvoir réessayer


    **Gestion des erreurs** : Toutes les erreurs renvoient des réponses JSON
    structurées avec `error` (message lisible par un humain), `code`
    (identifiant lisible par une machine) et `details` (erreurs de validation au
    niveau des champs, le cas échéant).


    **Intégration de l'Éditeur de Modèles intégré** : L'Éditeur de Modèles Firma
    peut être intégré dans votre application à l'aide d'une bibliothèque
    JavaScript autonome.


    ```html

    <!-- Charger la bibliothèque de l'Éditeur de Modèles Firma -->

    <script
    src="https://api.firma.dev/functions/v1/embed-proxy/template-editor.js"></script>


    <script>

    // Générer d'abord un jeton JWT via l'API

    fetch('https://api.firma.dev/functions/v1/signing-request-api/generate-template-token',
    {
      method: 'POST',
      headers: {
        'Authorization': 'YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        companies_workspaces_templates_id: 'template-id'
      })
    })

    .then(res => res.json())

    .then(data => {
      // Initialiser l'éditeur avec le jeton JWT
      window.FirmaTemplateEditor.init({
        container: '#firma-editor-container',
        jwt: data.token,
        templateId: 'template-id',
        theme: 'dark',
        readOnly: false,
        onSave: (savedData) => {
          console.log('Template saved:', savedData);
        },
        onError: (error) => {
          console.error('Editor error:', error);
        },
        onLoad: (template) => {
          console.log('Template loaded:', template);
        }
      });
    });

    </script>

    ```


    **En-tête X-Firma-Deprecation** : Certaines opérations de création de cachet
    et de mise à jour d'image renvoient un en-tête de réponse
    `X-Firma-Deprecation` lorsqu'elles sont appelées via l'edge gateway,
    indiquant que l'opération doit être effectuée sur l'hôte principal de l'API.


    **Documents multiples (API 01.39.00, disponible pour toutes les
    entreprises)** : un modèle ou une demande de signature peut contenir jusqu'à
    20 documents. Les routes de la sous-ressource `/documents` et les clés
    `documents`, `documents_version` et `documents_layout_version` sont servies
    à toutes les entreprises. Tant que la modification multi-documents est
    suspendue, les éléments sur le chemin multi-documents en lecture seule
    conservent les lectures individuelles et les téléchargements de documents
    (un modèle peut toujours être supprimé), mais les autres modifications
    répondent `409 MULTI_DOCUMENT_READ_ONLY` ; les éléments sur le chemin à un
    seul document n'ont ni routes `/documents` (`404 NOT_FOUND`) ni clés de
    réponse multi-documents, et les réponses de liste et de création omettent
    ces clés.


    **Cachets de modèle à la création (API 01.39.01)** : créer une demande de
    signature à partir d'un modèle avec `POST /signing-requests` ou `POST
    /signing-requests/create-and-send` hérite désormais des participants de
    cachet du modèle, et des champs du modèle qui leur appartiennent, lorsque
    `seal_participants` est absent ou vaut `null`. Cela change le comportement
    de v1 sans changement de version ; envoyez `seal_participants: []` pour
    créer la demande sans cachets. `POST /templates/{id}/duplicate` reporte
    aussi les participants de cachet du modèle ; consultez cette opération pour
    voir comment elle gère les versions des cachets et la suspension de la
    modification multi-documents. `GET /templates/{id}` renvoie
    `seal_participants`, et `POST /templates` répond `warnings` lorsque son
    corps contient des clés qu'il ignore.
  version: 01.40.04
  contact:
    name: API Support
    url: https://firma.com/support
servers:
  - url: https://api.firma.dev/functions/v1/signing-request-api
    description: API de Production - Recommandée (Actuelle)
  - url: https://api.firma.dev/api/v1
    description: API de Production - Prévue
security:
  - ApiKeyAuth: []
tags:
  - name: Company
    description: Informations et paramètres de l'entreprise
  - name: Workspaces
    description: Opérations de gestion des Espaces de Travail
  - name: Templates
    description: Opérations de gestion des Modèles
  - name: Signing Requests
    description: Opérations de Demande de Signature de documents
  - name: Custom Fields
    description: >-
      Gestion des définitions de champs personnalisés pour les espaces de
      travail, modèles et demandes de signature
  - name: Webhooks
    description: Configuration et gestion des webhooks
  - name: JWT Management
    description: Génération et révocation de jetons JWT pour les modèles intégrés
  - name: Workspace Settings
    description: Configuration et paramètres de l'espace de travail
  - name: Email Domains
    description: >-
      Configuration et vérification de domaine e-mail pour l'envoi d'e-mails de
      demande de signature depuis des domaines personnalisés
  - name: Email Templates
    description: >-
      Gestion des modèles d'e-mail pour la personnalisation des notifications de
      demande de signature au niveau de l'espace de travail et de l'entreprise
  - name: Organization Seals
    description: >-
      Gestion des cachets d'organisation : créer, mettre à jour, révoquer et
      effacer les cachets appliqués aux demandes de signature
  - name: Signer Terms
    description: >-
      Conditions d'utilisation / déclarations de consentement personnalisées
      pour le signataire, au niveau de l'entreprise avec des surcharges par
      espace de travail et par langue
paths:
  /signing-requests/{id}/documents/{document_id}:
    delete:
      tags:
        - Signing Requests
      summary: Supprimer un document d'une demande de signature
      description: >-
        Supprime un document de la demande de signature. Le dernier document
        restant ne peut pas être supprimé (`400 MIN_DOCUMENTS_REQUIRED`). Une
        demande de signature envoyée, terminée, annulée ou refusée répond `409
        DOCUMENT_SET_LOCKED`.


        **Disponible pour toutes les entreprises.** Cette opération fait partie
        du contrat multi-documents (API 01.39.00). Pour une demande de signature
        ou un modèle que la clé API ne peut pas voir, elle répond `404` avec le
        code `NOT_FOUND` ("Endpoint not found"), exactement comme un endpoint
        inconnu. Tant que la modification multi-documents est suspendue, cette
        opération renvoie `409 MULTI_DOCUMENT_READ_ONLY` pour les éléments sur
        le chemin multi-documents en lecture seule et `404 NOT_FOUND` pour les
        éléments sur le chemin à un seul document.
      operationId: removeSigningRequestDocument
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID de la demande de signature
        - name: document_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: L'identifiant du document (`documents[].document_id`)
      responses:
        '200':
          description: >-
            Document supprimé ; l'ensemble complet des documents après le
            changement
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
            X-RateLimit-Remaining:
              schema:
                type: integer
            X-RateLimit-Reset:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentSetMutationResponse'
        '400':
          description: 'Requête incorrecte : `MIN_DOCUMENTS_REQUIRED`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiDocumentError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          description: >-
            NOT_FOUND : l'élément utilise le chemin à un seul document tant que
            la modification multi-documents est suspendue, ou la demande de
            signature est absente, supprimée ou non visible pour cette clé API
            ("Endpoint not found"). DOCUMENT_NOT_FOUND : aucun document avec cet
            identifiant dans cette demande de signature.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiDocumentError'
        '409':
          description: >-
            Conflit : `MULTI_DOCUMENT_READ_ONLY`, `DOCUMENT_SET_LOCKED`,
            `SEND_IN_PROGRESS`, `DOCUMENT_SET_VERSION_CONFLICT`,
            `DOCUMENT_SET_BUSY`, `DOCUMENT_SET_DISPATCH_STALE`,
            `DOCUMENT_CANDIDATE_EXPIRED`, `DOCUMENT_SET_INCONSISTENT`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiDocumentError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          description: Erreur interne (code `INTERNAL`)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    DocumentSetMutationResponse:
      type: object
      description: >-
        Réponse de chaque modification de /documents : l'ensemble complet des
        documents après le changement et ses deux versions.
      required:
        - documents
        - documents_version
        - documents_layout_version
      properties:
        documents:
          type: array
          items:
            $ref: '#/components/schemas/DocumentSummary'
        documents_version:
          type: integer
        documents_layout_version:
          type: integer
    MultiDocumentError:
      description: Une erreur renvoyée par une route multi-documents.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          required:
            - error
            - code
          properties:
            code:
              $ref: '#/components/schemas/MultiDocumentErrorCode'
    Error:
      type: object
      properties:
        error:
          type: string
          description: Message d'erreur lisible par un humain
        code:
          type: string
          description: >-
            Code d'erreur lisible par machine. Codes liés aux cachets :
            SEALS_DISABLED, SEAL_ALREADY_REVOKED, SEAL_CREATION_DISABLED_EDGE,
            SEAL_ERASE_NOT_ELIGIBLE, SEAL_IMAGE_INVALID,
            SEAL_MUTATION_NOT_ALLOWED, SEAL_NOT_FOUND, SEAL_NO_IMAGE_FIELD,
            SEAL_ORDER_COLLISION, SEAL_PAUSED, SEAL_SCOPE_FORBIDDEN,
            SEAL_UNAVAILABLE Codes multi-documents : voir MultiDocumentErrorCode
            (41 codes).
        errors:
          type: array
          description: >-
            Toutes les erreurs de validation lorsque plusieurs échecs sont
            signalés ensemble. L'erreur de premier niveau répète le premier
            élément pour la rétrocompatibilité.
          items:
            type: object
            required:
              - message
            properties:
              message:
                type: string
        message:
          type: string
          description: Description détaillée de l'erreur
        details:
          type: object
          description: Détails d'erreur supplémentaires
          additionalProperties: true
      required:
        - error
      description: >-


        Codes d'erreur des cachets d'organisation : SEALS_DISABLED,
        SEAL_ALREADY_REVOKED, SEAL_CREATION_DISABLED_EDGE,
        SEAL_ERASE_NOT_ELIGIBLE, SEAL_IMAGE_INVALID, SEAL_MUTATION_NOT_ALLOWED,
        SEAL_NOT_FOUND, SEAL_NO_IMAGE_FIELD, SEAL_ORDER_COLLISION, SEAL_PAUSED,
        SEAL_SCOPE_FORBIDDEN, SEAL_UNAVAILABLE
    DocumentSummary:
      type: object
      description: Un document d'un modèle ou d'une demande de signature.
      required:
        - document_id
        - position
        - label
        - original_filename
        - page_count
        - document_url_kind
      properties:
        document_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Identifiant du document. null uniquement pour le seul document d'une
            demande de signature ou d'un modèle dont l'ensemble de documents n'a
            jamais été modifié (voir l'exemple).
        position:
          type: integer
          minimum: 1
          description: Position dans l'ensemble, à partir de 1.
        label:
          type: string
          nullable: true
          maxLength: 200
          description: Nom d'affichage, ou null.
        original_filename:
          type: string
          nullable: true
          maxLength: 255
          description: Nom de fichier enregistré au téléversement, ou null.
        page_count:
          type: integer
          nullable: true
          description: Nombre de pages de ce document.
        document_url:
          type: string
          nullable: true
          description: >-
            URL signée (1 heure) du fichier désigné par `document_url_kind`.
            Absente des réponses de liste.
        document_url_kind:
          type: string
          nullable: true
          enum:
            - stored
            - signed
            - null
          description: >-
            `stored` : le document tel qu'enregistré ; `signed` : le document
            scellé individuellement. Toujours `stored` sur les modèles ; null
            dans les entrées de liste des demandes de signature.
        document_only_hash:
          type: string
          nullable: true
          description: >-
            SHA-256 des octets exacts du PDF scellé servi par `document_url`
            (lorsque `document_url_kind` vaut `signed`) et par `GET
            /signing-requests/{id}/documents/{document_id}/download?type=document`,
            sous la forme de 64 caractères hexadécimaux minuscules. Il est
            calculé après l'application du sceau numérique de Firma. Il ne
            s'agit ni du hachage du fichier téléversé, ni du hachage de
            `final_document_download_url`, qui contient également le certificat
            d'achèvement. `null` jusqu'à ce que le certificat soit lié. Demandes
            de signature uniquement.
      example:
        document_id: null
        position: 1
        label: null
        original_filename: null
        page_count: 3
        document_url: >-
          https://api.firma.dev/storage/v1/object/sign/signing-request-documents/example.pdf?token=example
        document_url_kind: stored
        document_only_hash: null
    MultiDocumentErrorCode:
      type: string
      enum:
        - ALREADY_CANCELLED
        - ALREADY_FINISHED
        - ALREADY_SENT
        - ANCHOR_DOCUMENT_REQUIRED
        - ANCHOR_MISMATCH
        - CONFLICTING_DOCUMENT_SOURCE
        - DIMENSION_MISMATCH
        - DOCUMENTS_LAYOUT_VERSION_REQUIRED
        - DOCUMENT_CANDIDATE_EXPIRED
        - DOCUMENT_NOT_FOUND
        - DOCUMENT_ORIGINAL_NOT_AVAILABLE
        - DOCUMENT_SET_BUSY
        - DOCUMENT_SET_DISPATCH_STALE
        - DOCUMENT_SET_INCONSISTENT
        - DOCUMENT_SET_LOCKED
        - DOCUMENT_SET_TOO_LARGE
        - DOCUMENT_SET_VERSION_CONFLICT
        - DOCUMENT_SIGNED_NOT_AVAILABLE
        - DOCUMENT_UPLOAD_NOT_FOUND
        - DUPLICATE_DOCUMENT_ID
        - FENCE_COLUMN_PROTECTED
        - INSUFFICIENT_CREDITS
        - INTERNAL
        - INTERNAL_ERROR
        - INVALID_DOCUMENT_ORDER
        - INVALID_SIGNING_ORDER
        - MAX_DOCUMENTS_EXCEEDED
        - MIN_DOCUMENTS_REQUIRED
        - MULTI_DOCUMENT_READ_ONLY
        - MULTI_DOCUMENT_REPLACE_UNSUPPORTED
        - NOT_FOUND
        - PAGE_COUNT_MISMATCH
        - PARTICIPANTS_CHANGED
        - RATE_LIMIT_EXCEEDED
        - SEAL_MUTATION_NOT_ALLOWED
        - SEND_EFFECTS_EXIST
        - SEND_IN_PROGRESS
        - SIGNED_DATA_IMMUTABLE
        - SIGNING_ORDER_LOCKED_APPLIED
        - SIGNING_ORDER_LOCKED_SENDING
        - SIGNING_ORDER_LOCKED_SENT
        - VALIDATION_ERROR
      description: >-
        Codes d'erreur du contrat multi-documents et des routes qu'il modifie
        (générés à partir des lignes de la matrice d'erreurs exposées par
        l'API). Une véritable erreur serveur répond 500 avec INTERNAL_ERROR sur
        les routes historiques et INTERNAL sur les chemins HttpError partagés
        (répartition multi-documents, table des statuts RPC, routes de
        l'ensemble de documents) ; aucun des deux ne contient de détail.
  responses:
    UnauthorizedError:
      description: Non Autorisé - Clé API invalide ou manquante
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Unauthorized
            message: Invalid API key
    RateLimitError:
      description: Trop de requêtes - Limite de débit dépassée
      headers:
        X-RateLimit-Limit:
          schema:
            type: integer
          description: Nombre maximum de requêtes par minute
        X-RateLimit-Remaining:
          schema:
            type: integer
          description: Requêtes restantes
        X-RateLimit-Reset:
          schema:
            type: integer
          description: Timestamp Unix de la réinitialisation
        Retry-After:
          schema:
            type: integer
          description: Secondes avant de pouvoir réessayer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate Limit Exceeded
            message: Too many requests. Please wait before retrying.
            details:
              retry_after: 45
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Clé API pour l'authentification. Utilisez votre clé API directement sans
        préfixe (par exemple, 'your-api-key'). Le préfixe Bearer est optionnel
        mais pas obligatoire.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.