Documentation API

Intégrez facilement la signature électronique dans vos applications avec notre API RESTful complète

🚀 Démarrage rapide

1. Obtenir une clé API

Connectez-vous à votre compte administrateur et créez une clé API depuis les paramètres.

2. Faire votre première requête

Testez votre clé API en récupérant la liste de vos documents :

curl -X GET https://giga-signature.com/api/v1/documents \
  -H "Authorization: Bearer YOUR_API_KEY_HERE" \
  -H "Accept: application/json"

3. Créer votre premier document

Téléversez un PDF et ajoutez des signataires :

curl -X POST https://giga-signature.com/api/v1/documents \
  -H "Authorization: Bearer YOUR_API_KEY_HERE" \
  -H "Accept: application/json" \
  -F "file=@contrat.pdf" \
  -F "name=Mon premier document" \
  -F "signers[0][name]=Jean Dupont" \
  -F "signers[0][email]=jean.dupont@example.com"

🔐 Authentification

L'API utilise l'authentification par Bearer Token. Incluez votre clé API dans chaque requête :

Authorization: Bearer YOUR_API_KEY_HERE

JavaScript/Fetch

const response = await fetch('https://giga-signature.com/api/v1/documents', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Accept': 'application/json'
  }
});

PHP/Guzzle

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://giga-signature.com/api/v1/documents', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY_HERE',
        'Accept' => 'application/json',
    ]
]);

🔑 Endpoints d'authentification Nouveau

Nouveauté : Gérez l'authentification programmatiquement avec ces nouveaux endpoints. Créez, révoquez et rafraîchissez vos clés API directement via l'API.

Se connecter et obtenir une clé API

Authentifiez-vous avec vos identifiants pour recevoir une nouvelle clé API :

POST /api/v1/auth/login
const response = await fetch('https://giga-signature.com/api/v1/auth/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify({
    email: 'admin@example.com',
    password: 'secure-password',
    key_name: 'Production API Key'  // Optionnel
  })
});

const data = await response.json();
// Réponse:
{
  "success": true,
  "data": {
    "api_key": "sk_live_1234567890abcdef",
    "expires_at": "2025-12-31T23:59:59Z",
    "user": {
      "id": 1,
      "name": "John Doe",
      "email": "admin@example.com"
    }
  }
}

Obtenir les informations de l'utilisateur actuel

GET /api/v1/auth/me
const response = await fetch('https://giga-signature.com/api/v1/auth/me', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Accept': 'application/json'
  }
});

// Réponse avec détails complets de l'utilisateur et ses permissions

Rafraîchir la clé API

Générez une nouvelle clé API et révoquez automatiquement l'ancienne :

POST /api/v1/auth/refresh

Attention : L'ancienne clé sera immédiatement révoquée. Mettez à jour vos applications.

Se déconnecter

POST /api/v1/auth/logout

Révoque la clé API utilisée pour cette requête.

👥 Gestion des utilisateurs Nouveau

Permissions requises : Seuls les administrateurs tenant peuvent gérer les utilisateurs. Les permissions users.view, users.create, users.update, et users.delete sont nécessaires.

Lister les utilisateurs

GET /api/v1/users?search=jean&role=user&page=1

Paramètres

  • search - Recherche par nom/email
  • role - tenant_admin, user, viewer
  • page - Numéro de page
  • per_page - Résultats par page (max 100)

Rôles disponibles

  • 👑 tenant_admin - Admin du tenant
  • 👤 user - Utilisateur standard
  • 👁️ viewer - Lecture seule

Créer un utilisateur

POST /api/v1/users
const userData = {
  name: "Marie Dupont",
  email: "marie.dupont@example.com",
  role: "user",
  password: "SecurePass123!",     // Requis si send_invitation = false
  send_invitation: true           // Envoie un email d'invitation au lieu de définir le mot de passe
};

const response = await fetch('https://giga-signature.com/api/v1/users', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(userData)
});

Mettre à jour un utilisateur

PUT /api/v1/users/{id}

Modifiez les informations d'un utilisateur, son rôle ou réinitialisez son mot de passe.

Réinitialiser le mot de passe

POST /api/v1/users/{id}/reset-password

Envoie un email de réinitialisation du mot de passe à l'utilisateur.

🔄 Processus de Signature Nouveau

Nouveauté v1.1 : Les processus permettent de gérer des workflows complexes avec plusieurs documents et signataires, signatures séquentielles ou parallèles, et vérification OTP optionnelle.

Créer un processus de signature

Créez un workflow complet avec plusieurs documents et signataires :

POST /api/v1/signature-processes
const processData = {
  name: "Contrat de partenariat 2025",
  expires_at: "2025-12-31T23:59:59Z",
  sequential_signing: false,  // Signature parallèle par défaut
  require_otp: true,
  otp_method: "choice",      // Le signataire choisit SMS ou Email
  documents: [
    { document_id: "doc_abc123", order: 1 },
    { document_id: "doc_def456", order: 2 }
  ],
  signers: [
    {
      name: "Jean Dupont",
      email: "jean.dupont@example.com",
      phone: "+33612345678",
      language: "fr",
      otp_method: "sms"  // Override pour ce signataire
    },
    {
      name: "Marie Martin",
      email: "marie.martin@example.com",
      language: "fr"
    }
  ]
};

const response = await fetch('https://giga-signature.com/api/v1/signature-processes', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(processData)
});

Configurer les champs de signature

Définissez précisément où chaque signataire doit intervenir :

POST /api/v1/signature-processes/{id}/fields

Types de champs

  • ✍️ signature - Zone de signature
  • 🔤 initials - Initiales
  • 📅 date - Date
  • 📝 text - Texte libre
  • checkbox - Case à cocher
  • 📝 dropdown - Liste déroulante

Positionnement

  • page - Numéro de page
  • position_x - Position X (0-100%)
  • position_y - Position Y (0-100%)
  • width - Largeur (1-100%)
  • height - Hauteur (1-100%)
const fields = {
  fields: [
    {
      document_id: "doc_abc123",
      signature_id: "sig_123",  // Assigné à ce signataire
      type: "signature",
      label: "Signature Client",
      page: 3,
      position_x: 15,
      position_y: 70,
      width: 25,
      height: 10,
      required: true
    },
    {
      document_id: "doc_abc123",
      signature_id: null,      // Tous les signataires
      type: "date",
      label: "Date de signature",
      page: 3,
      position_x: 70,
      position_y: 85,
      width: 15,
      height: 5
    }
  ]
};

Envoyer aux signataires

POST /api/v1/signature-processes/{id}/send

Une fois les champs configurés, envoyez le processus aux signataires. Chacun recevra un email avec un lien unique pour signer.

📄 Documents (pour utilisation dans les processus)

Créer un document

Téléversez un PDF et définissez les signataires :

POST /api/v1/documents
const formData = new FormData();
formData.append('file', pdfFile);
formData.append('name', 'Contrat de service 2025');
formData.append('signers[0][name]', 'Jean Dupont');
formData.append('signers[0][email]', 'jean.dupont@example.com');
formData.append('signers[1][name]', 'Marie Martin');
formData.append('signers[1][email]', 'marie.martin@example.com');

const response = await fetch('https://giga-signature.com/api/v1/documents', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Accept': 'application/json'
  },
  body: formData
});

const document = await response.json();
console.log('Document créé:', document.data.id);

Lister les documents

Récupérez vos documents avec pagination et filtres :

GET /api/v1/documents?status=pending&page=1

Paramètres disponibles

  • status - pending, completed, refused
  • page - Numéro de page
  • per_page - Résultats par page
  • search - Recherche textuelle
  • from_date - Date de début
  • to_date - Date de fin

Réponse

{
  "data": [...],
  "meta": {
    "current_page": 1,
    "total": 47,
    "per_page": 20
  }
}

✍️ Signatures

Processus de signature

Important : Les signataires reçoivent automatiquement un email avec un lien sécurisé. L'API permet aussi de créer des signatures programmatiquement.

  1. Le signataire reçoit un code OTP par email
  2. Il dessine sa signature sur le document
  3. Il valide avec le code OTP
  4. La signature est apposée et certifiée

Apposer une signature via API

POST /api/v1/documents/{document_id}/signatures
const signatureData = {
  signer_email: "jean.dupont@example.com",
  signature_data: "data:image/png;base64,iVBORw0KGgoAAAANS...", // Image base64
  otp_code: "123456", // Code reçu par email
  position: {
    page: 1,        // Numéro de page
    x: 100,         // Position X
    y: 650,         // Position Y
    width: 200,     // Largeur
    height: 50      // Hauteur
  }
};

const response = await fetch(`https://giga-signature.com/api/v1/documents/${documentId}/signatures`, {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(signatureData)
});

🪝 Webhooks

Recevez des notifications en temps réel lorsque des événements se produisent.

Événements disponibles

  • 📄 document.uploaded
  • document.completed
  • ✍️ signature.completed
  • signature.refused

Headers envoyés

  • X-Signature - HMAC-SHA256
  • X-Event - Type d'événement
  • X-Timestamp - Timestamp Unix
  • Content-Type - application/json

Vérifier la signature webhook

// PHP
$payload = file_get_contents('php://input');
$signature = 'sha256=' . hash_hmac('sha256', $payload, $webhook_secret);
$is_valid = hash_equals($signature, $_SERVER['HTTP_X_SIGNATURE']);

if (!$is_valid) {
    http_response_code(401);
    exit('Signature invalide');
}

// Traiter l'événement
$event = json_decode($payload, true);
switch ($event['event']) {
    case 'signature.completed':
        // Traiter la signature
        break;
}

⚙️ Configuration des Webhooks Nouveau

Nouveauté : Gérez vos webhooks programmatiquement. Créez, testez et surveillez vos endpoints directement via l'API au lieu de l'interface d'administration.

Créer un webhook

Configurez un nouvel endpoint pour recevoir des événements :

POST /api/v1/webhooks
const webhookConfig = {
  url: "https://api.votreapp.com/webhooks/giga-signature",
  events: [
    "document.uploaded",
    "signature.completed",
    "signature.refused",
    "process.completed"
  ],
  description: "Webhook production pour les signatures",
  is_active: true
};

const response = await fetch('https://giga-signature.com/api/v1/webhooks', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(webhookConfig)
});

const webhook = await response.json();
console.log('Secret webhook:', webhook.data.secret); // Conservez ce secret!

Important : Conservez le secret retourné pour valider les signatures HMAC des événements.

Lister vos webhooks

GET /api/v1/webhooks

Récupérez la liste de tous vos webhooks configurés avec leur statut et dernière activité.

Tester un webhook

Envoyez un événement de test pour vérifier que votre endpoint fonctionne :

POST /api/v1/webhooks/{id}/test
// Teste le webhook avec un payload exemple
const response = await fetch(`https://giga-signature.com/api/v1/webhooks/${webhookId}/test`, {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE'
  }
});

// Réponse avec le code HTTP et le temps de réponse
{
  "success": true,
  "message": "Test webhook sent successfully",
  "data": {
    "status": "success",
    "response_code": 200,
    "response_time": 0.245  // en secondes
  }
}

Consulter les logs de livraison

Surveillez les tentatives de livraison et diagnostiquez les problèmes :

GET /api/v1/webhooks/{id}/logs?status=failed

Filtres disponibles

  • status - success, failed
  • page - Pagination

Informations des logs

  • • Événement déclenché
  • • Code de réponse HTTP
  • • Nombre de tentatives
  • • Message d'erreur éventuel

Gérer vos webhooks

PUT /api/v1/webhooks/{id}

Modifiez l'URL, les événements ou activez/désactivez le webhook.

DELETE /api/v1/webhooks/{id}

Supprimez définitivement un webhook.

💡 Exemples concrets

Workflow complet de signature

Créer un document, envoyer aux signataires et suivre le statut :

// 1. Créer le document
const formData = new FormData();
formData.append('file', contractFile);
formData.append('name', 'Contrat Commercial Q4 2025');
formData.append('signers[0][name]', 'Directeur Commercial');
formData.append('signers[0][email]', 'direction@company.com');
formData.append('signers[1][name]', 'Client ACME');
formData.append('signers[1][email]', 'legal@acme.com');

const createResponse = await fetch('https://giga-signature.com/api/v1/documents', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY_HERE',
    'Accept': 'application/json'
  },
  body: formData
});

const document = await createResponse.json();
console.log('Document créé:', document.data.id);

// 2. Les signataires reçoivent automatiquement un email
// avec un lien vers la page de signature

// 3. Vérifier le statut périodiquement
const checkStatus = async () => {
  const statusResponse = await fetch(`https://giga-signature.com/api/v1/documents/${document.data.id}`, {
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY_HERE',
      'Accept': 'application/json'
    }
  });
  
  const status = await statusResponse.json();
  console.log('Statut:', status.data.status);
  console.log('Signatures:', status.data.signers);
  
  if (status.data.status === 'completed') {
    // 4. Télécharger le document signé
    const downloadResponse = await fetch(
      `https://giga-signature.com/api/v1/documents/${document.data.id}/download/signed`,
      {
        headers: {
          'Authorization': 'Bearer YOUR_API_KEY_HERE'
        }
      }
    );
    
    const blob = await downloadResponse.blob();
    // Sauvegarder le fichier...
  }
};

// Vérifier toutes les 30 secondes
const interval = setInterval(checkStatus, 30000);

Intégration avec webhooks

Recevoir des notifications en temps réel sans polling :

// Endpoint webhook dans votre application (Node.js/Express)
app.post('/webhooks/giga-signature', (req, res) => {
  // Vérifier la signature
  const payload = JSON.stringify(req.body);
  const signature = 'sha256=' + crypto
    .createHmac('sha256', process.env.WEBHOOK_SECRET)
    .update(payload)
    .digest('hex');
  
  if (signature !== req.headers['x-signature']) {
    return res.status(401).send('Signature invalide');
  }
  
  // Traiter l'événement
  const event = req.body;
  
  switch (event.event) {
    case 'document.uploaded':
      console.log('Nouveau document:', event.data.document.id);
      break;
      
    case 'signature.completed':
      console.log('Signature reçue:', event.data.signature);
      // Mettre à jour votre base de données
      updateSignatureStatus(
        event.data.document.id,
        event.data.signature.email,
        'signed'
      );
      break;
      
    case 'document.completed':
      console.log('Document complété:', event.data.document);
      // Envoyer une notification
      sendNotification('Document signé par toutes les parties');
      // Déclencher votre workflow métier
      processCompletedContract(event.data.document.id);
      break;
      
    case 'signature.refused':
      console.log('Signature refusée:', event.data.signature);
      // Alerter l'équipe commerciale
      alertSalesTeam(event.data.document, event.data.signature.refusal_reason);
      break;
  }
  
  res.status(200).send('OK');
});

🚨 Gestion d'erreurs

L'API retourne des erreurs standardisées avec des codes HTTP appropriés.

200 Succès
401 Authentification échouée
422 Erreur de validation
429 Trop de requêtes

Format des erreurs

{
  "error": {
    "code": "validation_error",
    "message": "Les données fournies sont invalides",
    "errors": {
      "signers.0.email": [
        "L'adresse email est invalide"
      ],
      "file": [
        "Le fichier doit être un PDF"
      ]
    }
  }
}

📦 SDKs officiels

PHP

composer require giga-signature/php-sdk
Documentation →

JavaScript

npm install @giga-signature/sdk
Documentation →

Python

pip install giga-signature
Documentation →

Besoin d'aide ?

Notre équipe est là pour vous accompagner dans l'intégration de notre API.