v3.0

API Signature Upload Multiple

Signez plusieurs documents PDF avec des signataires externes en toute simplicité

POST /v3/sign-upload-multiple

Vue d'ensemble

URL de Base

https://dkbsignv3.com/

Endpoint

/v3/sign-upload-multiple

Méthode

POST

Content-Type

multipart/form-data

Auth

X-API-Key
Limites de sécurité

Maximum de 100 documents par requête pour éviter les problèmes de performance, timeout HTTP et surcharge mémoire.

Authentification

L'API utilise un système d'authentification en deux étapes : connexion JWT puis génération de clé API.

Étape 1 : Connexion et obtention du token JWT

POST /auth/login

Authentifiez-vous pour obtenir un token JWT d'accès.

Requête cURL
curl -X POST "https://dkbsignv3.com/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "freddy.egnin@dkbsign.com",
    "password": "testpassord@dksign2025"
  }'
Body JSON
{
  "email": "freddy.egnin@dkbsign.com",
  "password": "testpassord@dksign2025"
}
Réponse JSON
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "message": "Connexion réussie en tant qu'employé.",
  "user": {
    "email": "freddy.egnin@dkbsign.com",
    "name": "Admin",
    "sub_name": "Sign",
    "user_type": "employee",
    "company": {
      "name": "DKBS",
      "signature_volume": 100,
      "signature_volume_used": 98
    }
  }
}

Étape 2 : Génération de la clé API

POST /auth/generate-app-key

Utilisez le token JWT obtenu pour générer une clé API permanente.

Requête cURL
curl -X POST "https://dkbsignv3.com/auth/generate-app-key" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

Étape 3 : Utilisation de la clé API

Une fois la clé API générée, incluez-la dans les headers de vos requêtes :

Headers
X-API-Key: votre_cle_api
# OU
Authorization: Bearer votre_cle_api
Sécurité

Conservez votre clé API en sécurité. Ne la partagez jamais et ne la commitez pas dans votre code source.

Paramètres d'entrée

documents[]

OBLIGATOIRE

Documents PDF à signer (maximum 100 fichiers)

Type: File (PDF)
Format: Tableau de fichiers

signature_image_X

OPTIONNEL

Images de signature personnalisées pour chaque signataire externe

Type: File (Image)
Format: signature_image_0, signature_image_1, ...
Formats acceptés: PNG, JPG, JPEG, GIF

Si absent, l'image de signature par défaut de l'utilisateur authentifié sera utilisée.

signers_data

OBLIGATOIRE

Informations des signataires externes au format JSON

JSON
[
  {
    "name": "Dupont",                    // OBLIGATOIRE
    "firstname": "Jean",                 // OBLIGATOIRE
    "function": "Directeur Général",     // OBLIGATOIRE
    "email": "jean.dupont@example.com",  // OPTIONNEL
    "phone": "+225123456789"              // OPTIONNEL
  }
]

signature_params

OBLIGATOIRE

Paramètres de positionnement des signatures au format JSON

JSON
[
  {
    "document_index": 0,              // Index du document
    "signer_index": 0,                // Index du signataire
    
    "pages": [                        // Positionnement manuel
      {
        "page": 0,
        "signatures": [
          {"x": 100, "y": 200}
        ]
      }
    ],
    
    "sign_on_last_page": true,        // Signature auto sur dernière page
    "show_signer_info": true,         // Afficher infos signataire
    
    "signature_size": {               // Taille personnalisée
      "width": 150,
      "height": 50
    },
    
    "qrcodes": [                      // QR codes optionnels
      {
        "page": 0,
        "x": 50, "y": 50,
        "size": 30,
        "data": "https://verify.dkbsign.com/doc/12345"
      }
    ]
  }
]

Nouvelles fonctionnalités

Affichage des informations du signataire

show_signer_info

Affiche automatiquement le nom, la fonction et l'email du signataire sous l'image de signature.

Identification claire
Traçabilité améliorée
Conformité juridique
Rendu professionnel
Exemple
{
  "document_index": 0,
  "signer_index": 0,
  "pages": [{"page": 0, "signatures": [{"x": 100, "y": 200}]}],
  "show_signer_info": true
}
[Image signature]
Jean Dupont
Directeur Général
jean.dupont@example.com

Signature automatique sur dernière page

sign_on_last_page

Place automatiquement toutes les signatures sur la dernière page du document, quel que soit le nombre de pages.

Fonctionne avec n'importe quel nombre de pages
Pas besoin de connaître le nombre de pages
Positions calculées automatiquement
Option par signataire
Exemple simple
{
  "document_index": 0,
  "signer_index": 0,
  "sign_on_last_page": true
}
Avec positions personnalisées
{
  "document_index": 0,
  "signer_index": 0,
  "sign_on_last_page": true,
  "pages": [{"page": 0, "signatures": [{"x": 150, "y": 220}]}]
  // Les positions X/Y sont respectées, seule la page change
}

Taille personnalisée des signatures

signature_size

Spécifiez une taille personnalisée pour les images de signature.

Exemple
"signature_size": {
  "width": 150,   // Largeur en pixels
  "height": 50    // Hauteur en pixels
}

L'algorithme de redimensionnement LANCZOS est utilisé pour une qualité optimale.

Exemples d'utilisation

Bash
curl -X POST "https://dkbsignv3.com/apiDkbSignV3/v3/sign-upload-multiple" \
  -H "X-API-Key: your_app_key" \
  -F "documents[]=@document1.pdf" \
  -F "signature_image_0=@signature_jean.png" \
  -F 'signers_data=[
    {
      "name": "Dupont",
      "firstname": "Jean",
      "function": "Directeur Général",
      "email": "jean.dupont@example.com"
    }
  ]' \
  -F 'signature_params=[
    {
      "document_index": 0,
      "signer_index": 0,
      "sign_on_last_page": true,
      "show_signer_info": true,
      "signature_size": {"width": 180, "height": 60}
    }
  ]'
Python
import requests
import json

url = "https://dkbsignv3.com/apiDkbSignV3/v3/sign-upload-multiple"
headers = {"X-API-Key": "your_app_key"}

signers_data = [
    {
        "name": "Dupont",
        "firstname": "Jean",
        "function": "Directeur Général",
        "email": "jean.dupont@example.com"
    }
]

signature_params = [
    {
        "document_index": 0,
        "signer_index": 0,
        "sign_on_last_page": True,
        "show_signer_info": True,
        "signature_size": {"width": 180, "height": 60}
    }
]

files = {
    'documents': ('document.pdf', open('document.pdf', 'rb')),
    'signature_image_0': ('signature.png', open('signature.png', 'rb'))
}

data = {
    'signers_data': json.dumps(signers_data),
    'signature_params': json.dumps(signature_params)
}

response = requests.post(url, headers=headers, files=files, data=data)
result = response.json()

if response.status_code == 200:
    print(f"Succès: {result['message']}")
else:
    print(f"Erreur: {result.get('error')}")
JavaScript
const formData = new FormData();

// Ajouter les documents
formData.append('documents', documentFile);
formData.append('signature_image_0', signatureFile);

// Données des signataires
const signersData = [
    {
        name: "Dupont",
        firstname: "Jean",
        function: "Directeur Général",
        email: "jean.dupont@example.com"
    }
];

// Paramètres de signature
const signatureParams = [
    {
        document_index: 0,
        signer_index: 0,
        sign_on_last_page: true,
        show_signer_info: true,
        signature_size: { width: 180, height: 60 }
    }
];

formData.append('signers_data', JSON.stringify(signersData));
formData.append('signature_params', JSON.stringify(signatureParams));

// Envoyer la requête
fetch('https://dkbsignv3.com/apiDkbSignV3/v3/sign-upload-multiple', {
    method: 'POST',
    headers: {
        'X-API-Key': 'your_app_key'
    },
    body: formData
})
.then(response => response.json())
.then(data => {
    console.log('Succès:', data);
})
.catch(error => {
    console.error('Erreur:', error);
});

Réponses de l'API

Succès (200)

JSON
{
  "message": "2 document(s) signé(s) avec succès",
  "signed_documents": [
    {
      "document_name": "document1.pdf",
      "signed_pdf_url": "https://dkbsignv3.com/.../signed.pdf",
      "signers": [
        {
          "name": "Dupont",
          "firstname": "Jean",
          "function": "Directeur Général"
        }
      ]
    }
  ],
  "total_signatures": 2
}

Erreurs

400
Paramètres invalides {"error": "Champ 'name' manquant pour le signataire 0"}
400
Limite dépassée {"error": "Nombre maximum de documents dépassé. Limite: 100"}
401
Authentification {"error": "Clé API manquante ou invalide"}
403
Volume insuffisant {"error": "Volume de signatures insuffisant"}

Cas d'usage

Contrat simple

1 signataire sur la dernière page

{
  "sign_on_last_page": true,
  "show_signer_info": true
}

Document multi-signataires

3 signataires côte à côte

[
  {
    "signer_index": 0,
    "sign_on_last_page": true,
    "pages": [{"page": 0, 
      "signatures": [{"x": 50, "y": 200}]}]
  },
  {
    "signer_index": 1,
    "sign_on_last_page": true,
    "pages": [{"page": 0,
      "signatures": [{"x": 250, "y": 200}]}]
  }
]

Paraphe + Signature

Paraphe sur chaque page + signature finale

[
  {
    "signer_index": 0,
    "pages": [
      {"page": 0, "signatures": [{"x": 500, "y": 20}]},
      {"page": 1, "signatures": [{"x": 500, "y": 20}]}
    ],
    "signature_size": {"width": 50, "height": 30}
  },
  {
    "signer_index": 0,
    "sign_on_last_page": true,
    "show_signer_info": true
  }
]

Avec QR Code

Signature avec QR code de vérification

{
  "sign_on_last_page": true,
  "show_signer_info": true,
  "qrcodes": [
    {
      "page": 0,
      "x": 50, "y": 50,
      "size": 30,
      "data": "https://verify.dkbsign.com/..."
    }
  ]
}

Changelog

2.2

Version 2.2 - 2025-10-09

  • Ajout de show_signer_info : Affichage des informations du signataire
  • Ajout de sign_on_last_page : Signature automatique sur dernière page
  • Ajout de custom_x : Position X personnalisée
  • Amélioration : Respect des positions X/Y avec sign_on_last_page
2.1

Version 2.1 - 2025-10-08

  • Ajout de signature_size : Taille personnalisée des signatures
  • Amélioration des métadonnées de signature pour Adobe Reader
  • Ajout de l'email et du téléphone dans les métadonnées
2.0

Version 2.0 - 2025-10-07

  • Support des signataires externes
  • Upload d'images de signature personnalisées
  • Limite de sécurité : 100 documents maximum