Passer au contenu principal
Chaque demande de signature dans Firma dispose d’une piste d’audit complète. Chaque affichage de document, interaction avec un champ, signature, refus et action administrative est enregistré avec horodatage, identité de l’acteur et adresses IP. Cas d’usage courants :
  • Conformité et preuve juridique — prouver qui a signé quoi, quand et depuis où
  • Débogage des problèmes de signataires — voir exactement ce qu’un destinataire a fait pendant sa session de signature
  • Reporting interne — suivre les actions administratives comme la création, les modifications et les annulations
La piste d’audit capture deux catégories d’événements :
  • Événements signataire — affichages de document, interactions avec les champs, signature, refus, téléchargements de certificat
  • Événements administrateur — création, modifications, envoi, annulation, renvoi (via le tableau de bord ou l’API)
Chaque événement inclut un horodatage, une description lisible par un humain, l’identité de l’acteur et (pour les événements signataire) l’adresse IP du signataire.

Consulter la piste d’audit dans le tableau de bord

Ouvrez n’importe quelle demande de signature dans le tableau de bord Firma et cliquez sur l’onglet Piste d’Audit. Vous verrez une chronologie de tous les événements, avec les actions des signataires et des administrateurs visuellement distinguées. Les événements répétitifs consécutifs (comme le défilement ou les interactions répétées avec un champ) sont automatiquement condensés avec un indicateur de nombre.

Récupérer la piste d’audit via l’API

Utilisez le endpoint audit pour récupérer l’historique complet des événements d’une demande de signature :
GET /signing-requests/{id}/audit

curl

curl -X GET "https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{signing_request_id}/audit" \
  -H "Authorization: YOUR_API_KEY"

Node.js

const response = await fetch(
  `https://api.firma.dev/functions/v1/signing-request-api/signing-requests/${signingRequestId}/audit`,
  {
    headers: {
      'Authorization': process.env.FIRMA_API_KEY,
    },
  }
);

const { results } = await response.json();
console.log(results);

Python

import os
import requests

response = requests.get(
    f"https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{signing_request_id}/audit",
    headers={
        "Authorization": os.environ["FIRMA_API_KEY"],
    },
)

results = response.json()["results"]

Exemple de réponse

{
  "results": [
    {
      "id": "a1b2c3d4-0000-0000-0000-000000000001",
      "timestamp": "2025-01-15T10:00:00.000Z",
      "source": "admin",
      "event": "activity",
      "description": "Created signing request via API",
      "actor": { "type": "api_key" },
      "ip_address": null,
      "details": null
    },
    {
      "id": "a1b2c3d4-0000-0000-0000-000000000002",
      "timestamp": "2025-01-15T10:05:12.000Z",
      "source": "signer",
      "event": "document_viewed",
      "description": "Viewed the document",
      "actor": { "name": "Alice Johnson", "email": "alice@example.com" },
      "ip_address": "203.0.113.42",
      "details": null
    },
    {
      "id": "a1b2c3d4-0000-0000-0000-000000000003",
      "timestamp": "2025-01-15T10:06:30.000Z",
      "source": "signer",
      "event": "field_interaction",
      "description": "Completed signature field",
      "actor": { "name": "Alice Johnson", "email": "alice@example.com" },
      "ip_address": "203.0.113.42",
      "details": {
        "field_type": "signature",
        "action": "field_completed",
        "interaction_count": 1
      }
    },
    {
      "id": "a1b2c3d4-0000-0000-0000-000000000004",
      "timestamp": "2025-01-15T10:06:45.000Z",
      "source": "signer",
      "event": "page_viewed",
      "description": "Viewed page 2 (×3)",
      "actor": { "name": "Alice Johnson", "email": "alice@example.com" },
      "ip_address": "203.0.113.42",
      "details": { "page_number": 2 },
      "condensed_count": 3
    },
    {
      "id": "a1b2c3d4-0000-0000-0000-000000000005",
      "timestamp": "2025-01-15T10:07:00.000Z",
      "source": "signer",
      "event": "document_finished",
      "description": "Completed signing",
      "actor": { "name": "Alice Johnson", "email": "alice@example.com" },
      "ip_address": "203.0.113.42",
      "details": null
    }
  ]
}

Champs de la réponse

ChampTypeDescription
iduuidID de l’événement
timestampdatetimeQuand l’événement s’est produit
sourcestring"signer" ou "admin"
eventstringIdentifiant du type d’événement (voir la référence des événements ci-dessous)
descriptionstringDescription lisible de l’événement
actorobject | nullQui a effectué l’action (voir ci-dessous)
ip_addressstring | nullAdresse IP du signataire (événements signataire uniquement)
detailsobject | nullMétadonnées spécifiques à l’événement
condensed_countintegerPrésent lorsque des événements identiques consécutifs du même acteur sont regroupés

Comprendre les sources d’événements

Le champ source indique si un événement provient d’un signataire ou d’un administrateur, et le champ actor a une forme différente selon le cas.

Événements signataire

Les événements avec source: "signer" sont des actions effectuées par les destinataires pendant le flux de signature. L’objet actor contient le name et l’email du signataire. Le champ ip_address est renseigné.
{
  "source": "signer",
  "actor": { "name": "Alice Johnson", "email": "alice@example.com" },
  "ip_address": "203.0.113.42"
}

Événements administrateur

Les événements avec source: "admin" sont des actions effectuées via le tableau de bord ou l’API. L’objet actor contient un champ type ("api_key" ou "user") et éventuellement un user_id. Le champ ip_address est null.
{
  "source": "admin",
  "actor": { "type": "api_key" },
  "ip_address": null
}
{
  "source": "admin",
  "actor": { "type": "user", "user_id": "usr_abc123" },
  "ip_address": null
}

Suivi en temps réel via les webhooks

Si vous avez besoin d’une notification en temps réel des événements signataire plutôt que d’interroger le endpoint audit, Firma prend en charge les webhooks. Consultez le guide Webhooks pour les instructions de configuration.

Référence des événements

Cycle de vie du document

ÉvénementDescriptionA des details
document_openedDocument ouvertNon
document_viewedDocument consultéNon
document_savedValeurs des champs enregistréesNon
document_finishedSignature terminéeNon
document_signedDocument signéNon
document_hiddenPage quittéeNon
document_visibleRetour sur la pageNon
document_closedDocument ferméNon

Signature et vérification

ÉvénementDescriptionA des details
signature_finalizedSignature finaliséeNon
signing_declinedSignature refuséeNon
terms_acceptedConditions générales acceptéesNon
otp_verifiedIdentité vérifiée via OTPNon
certificate_downloadCertificat téléchargéNon

Interactions avec les champs

Les interactions avec les champs sont suivies comme des événements field_interaction. L’objet details contient l’action spécifique et les métadonnées du champ.
ActionDescription
field_focusedChamp sélectionné
field_completedChamp complété pour la première fois
field_modifiedValeur d’un champ existant modifiée
field_clearedValeur d’un champ effacée
field_blurÉdition du champ terminée
L’objet details pour les interactions avec les champs inclut :
ChampTypeDescription
field_typestringType de champ (signature, texte, date, etc.)
actionstringL’action spécifique du tableau ci-dessus
interaction_countintegerNombre de fois où ce champ a été utilisé
value_lengthintegerLongueur de la valeur du champ (le cas échéant)
time_spent_msintegerTemps passé sur le champ en millisecondes (le cas échéant)
ÉvénementDescriptionA des details
page_viewedPage spécifique consultéeOui — page_number
document_scrolledDéfilement jusqu’à une pageOui — page_number
navigation_actionNavigation dans le documentOui — action (next_page, prev_page, go_to_page)
zoom_changedNiveau de zoom modifiéNon
modal_interactionOuverture ou fermeture d’une boîte de dialogueOui — modal_type, action

Activité administrateur

Les événements administrateur utilisent event: "activity" avec un champ description lisible par un humain qui décrit l’action effectuée (par exemple, “Created signing request via API”, “Sent signing request”, “Cancelled signing request”).