Créer le jeton JWT
Générez un JWT signé en HS256, à usage unique, contenant votre tenantId et un identifiant de transaction unique.
L'API doclinc permet de créer des transactions de transfert de documents sécurisés, de téléverser les fichiers sur des URL signées et de déclencher une notification par courriel avec authentification 2FA côté destinataire.
Périmètre fonctionnel de l'API dans un flux d'envoi de documents sensibles.
linkExpirationDays.Chaque envoi de document sensible suit ce processus, du jeton d'autorisation jusqu'à la confirmation.
Générez un JWT signé en HS256, à usage unique, contenant votre tenantId et un identifiant de transaction unique.
Envoyez les informations du destinataire et le nom du document. L'API retourne une URL d'upload sécurisée et une bannière HTML.
Chargez le fichier sur le canal sécurisé via l'URL temporaire fournie (valide urlTimeToLive secondes).
Confirmez la transaction, puis intégrez la bannière HTML dans votre courriel et envoyez-le via votre propre serveur de messagerie.
Identifiants à obtenir auprès de doclinc et informations nécessaires pour chaque destinataire.
tenantIdapiKeyCA pour le Canada)sms ou voiceDeux options sont disponibles selon votre contexte :
/transactions/cells/transactions/secrets (ex. numéro d'employé)Séquence nominale des appels API pour envoyer un document sensible à un destinataire avec authentification SMS.
Construisez un JWT HS256 à partir de votre tenantId et d'un identifiant unique (jti),
encodez-le en Base64 et signez-le avec votre clé API doclinc. Ce jeton est valide au plus 2 heures
et doit être recréé pour chaque transaction.
// En-tête JWT
{
"alg": "HS256",
"typ": "JWT"
}
// Corps JWT (payload)
{
"tenantId": "BA686425FBF403B23F3FC4ABE5A98A",
"jti": "pay-1773793968", // préfixe + timestamp Unix
"iat": 1773793968, // heure d'émission (GMT)
"exp": 1773801168 // expiration ≤ iat + 7200 s
}
// Clé API (exemple fictif)
F1F5BCBE71F46FC5E704E53469F5A77A55646F293E6568EA5F978FA6A4629450
// Jeton signé résultant (Base64)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRJ
ZCCI6IkJBNjg2NDI1RkJGNDAzQjIzRjNGQzRBQkU1QTk4QSIs
Imp0aSI6InBheS0xNzczNzkzOTY4IiwiaWF0IjoxNzczNzkzOT
Y4LCJleHAiOjE3NzM4MDExNjh9.63NKWGi7Zt1Xn9kfkeh9ku
02CxZ0w1fUFq3BgPhz5jM
jti doit être unique à chaque appel. Utilisez un préfixe fixe suivi du timestamp Unix (ex. "pay-" + Date.now()).exp) ne peut pas dépasser 2 heures après iat.Envoyez les informations du destinataire (courriel, numéro de cellulaire) et le nom du document. L'API retourne une URL d'upload sécurisée unique par document, une bannière HTML à insérer dans votre courriel, ainsi que les commandes de confirmation et d'annulation.
// En-tête — utiliser le jeton généré à l'étape 1
Authorization: Bearer eyJhbGciOiJIUzI1Ni...
// Corps de la requête
{
"transactionType": "send",
"transactionLanguageRef": "FR", // langue côté expéditeur
"subjectLanguageRef": "FR", // langue côté destinataire
"linkExpirationDays": 14, // durée de validité du lien
"isLinkReusable": true,
"contacts": [
{
"recipientEmail": "employe@exemple.com",
"countryCode": "CA",
"recipientCell": "8191234567",
"authenticationMethod": "sms"
}
],
"documents": [ // plusieurs documents possibles
{
"name": "document-sensible.pdf"
}
]
}
// Réponse de l'API
{
"sendTransaction": {
"documents": [
{ // URL unique par document
"url": "https://uploadDomain/...",
"urlTimeToLive": 3600
}
]
},
// Bannière HTML à ajouter au courriel
"banner": "<HTML>...</HTML>",
"commands": [
{
"href": "/transactions/cell/6c89a4fd23ae1224d0b754a551bf755a6c35",
"method": "POST",
"rel": "Confirm" // confirmer avec cet endpoint
},
{
"href": "/transactions/cell/6c89a4fd23ae1224d0b754a551bf755a6c35",
"method": "Delete",
"rel": "Cancel"
}
]
}
| Code | Statut | Description |
|---|---|---|
| 201 | CREATED | Succès — transaction créée |
| 400 | BAD REQUEST | JSON invalide ou code pays incorrect |
| 401 | UNAUTHORIZED | Jeton d'autorisation invalide |
| 461 | INVALID SUB | Abonnement non valide |
| 463 | DUPLICATE | Numéro de cellulaire en double dans la liste |
| 470 | FEATURE NOT AVAILABLE | Fonctionnalité non incluse dans votre plan |
| 500 | SERVER ERROR | Erreur inattendue côté serveur |
Téléversez les documents en utilisant les URLs reçues à l'étape 2, via la bibliothèque HTTP native de votre langage. Utilisez une URL par document, dans le même ordre que celui spécifié dans la requête de transaction.
// Exemple cURL
curl -X PUT \
"https://beta-prod-documenttransfer.s3.ca-central-1.amazonaws.com/..." \
--upload-file "./document-sensible.pdf"
Le lien d'upload est valide pour la période définie par urlTimeToLive (3 600 secondes dans cet exemple). Utiliser le lien après cette période générera une erreur. Effectuez l'upload sans délai après la création de la transaction.
Votre abonnement impose une limite sur la taille totale des documents par transaction. Cette limite s'applique à la somme de tous les fichiers téléversés et est vérifiée au moment de la confirmation (étape 4).
Une fois le document téléversé, confirmez la transaction en utilisant le href dynamique
de la commande Confirm reçu à l'étape 2. La confirmation retourne un 200 OK.
Ensuite, intégrez la bannière HTML dans le corps de votre courriel et envoyez-le
via votre propre infrastructure de messagerie.
// Exemple cURL — utiliser le href dynamique reçu à l'étape 2
curl -X POST \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
"https://api.doclinc.io/transactions/cell/6c89a4fd23ae1224d0b754a551bf755a6c35"
| Code | Statut | Description |
|---|---|---|
| 200 | SUCCESS | Transaction confirmée |
| 401 | UNAUTHORIZED | Jeton invalide |
| 404 | NOT FOUND | Transaction ou document introuvable |
| 465 | DOCUMENT SIZE EXCEEDED | La taille totale des documents dépasse la capacité de votre abonnement |
| 500 | SERVER ERROR | Erreur inattendue |
L'API enregistre automatiquement les coordonnées du destinataire à chaque transaction. Il est possible de consulter ces informations avant de créer une nouvelle transaction.
GET /transactions/contacts/{email}
Cet endpoint retourne la langue préférée, la méthode d'authentification par cellulaire
et les informations de secret enregistrées pour un destinataire donné.
Ces valeurs peuvent être utilisées directement dans la création de la transaction
suivante, notamment le champ secretAnswerRef pour réutiliser un secret existant.
Si le contact n'est pas trouvé, le endpoint retourne 404.
// Exemple
GET /transactions/contacts/email@example.com
// Réponse type
{
"languageRef": "FR",
"cellContact": {
"countryCode": "CA",
"cell": "8191234567",
"authenticationMethod": "sms"
},
"secretContact": { // peut être vide
"secretQuestion": "Numéro d'employé ?",
"secretAnswerRef": "5a7574b08771edfc1ba8c87493dfd01a45424c57"
// Réponse réutilisée encryptée si elle existe
}
}
| Code | Statut | Description |
|---|---|---|
| 200 | SUCCESS | OK |
| 401 | UNAUTHORIZED | Autorisation invalide |
| 404 | NOT FOUND | Contact introuvable |
| 461 | INVALID SUB | Abonnement invalide |
| 500 | SERVER ERROR | Erreur inattendue |
Alternative à l'authentification par cellulaire : le destinataire répond à une question secrète pour accéder au document.
secretAnswer — nouveau secretUtilisé pour définir un nouveau mot de passe lors de la transaction. La valeur est transmise en clair dans la requête et stockée de façon encryptée par l'API.
secretAnswerRef — secret pré-enregistréUtilisé pour réutiliser un secret existant. La valeur est obtenue via GET /transactions/contacts/{email} — c'est la valeur encryptée déjà stockée.
{
"transactionType": "send",
"transactionLanguageRef": "FR",
"subjectLanguageRef": "FR",
"linkExpirationDays": 14,
"isLinkReusable": true,
"secretQuestion": "Quel est votre numéro d'employé ?",
"contacts": [
{
"recipientEmail": "employe@exemple.com",
"secretAnswer": "EMP-00142", // nouveau secret — OU null si secretAnswerRef fourni
"secretAnswerRef": null // ref. encryptée obtenue via GET /contacts
}
],
"documents": [
{ "name": "document-sensible.pdf" }
]
}
secretAnswer soit secretAnswerRef est fourni — jamais les deux simultanément.
Le reste du flux (upload + confirmation) est identique au happy path.
Cette méthode est temporairement limitée à un seul destinataire par transaction.
Tous les points d'accès disponibles avec leurs codes de réponse.
Retourne les informations d'authentification préenregistrées pour un contact. L'API enregistre automatiquement les coordonnées du destinataire à chaque transaction créée — cet endpoint permet de les consulter avant de créer une nouvelle transaction.
// Exemple
GET /transactions/contacts/email@example.com
// Réponse type
{
"languageRef": "FR",
"cellContact": {
"countryCode": "CA",
"cell": "8191234567",
"authenticationMethod": "sms"
},
"secretContact": { // peut être vide
"secretQuestion": "Numéro d'employé ?",
"secretAnswerRef": "5a7574b08771edfc1ba8c87493dfd01a45424c57"
// Réponse réutilisée encryptée si elle existe
}
}
| Code | Statut | Description |
|---|---|---|
| 200 | SUCCESS | OK |
| 401 | UNAUTHORIZED | Autorisation invalide |
| 404 | NOT FOUND | Contact introuvable |
| 461 | INVALID SUB | Abonnement invalide |
| 500 | SERVER ERROR | Erreur inattendue |
Initialise une transaction sécurisée avec authentification par SMS ou appel vocal. Retourne les URLs d'upload pour chaque document ainsi que l'identifiant de la transaction.
// Corps de la requête
{
"transactionType": "send",
"transactionLanguageRef": "FR", // langue interface expéditeur
"subjectLanguageRef": "FR", // langue interface destinataire
"linkExpirationDays": 14, // durée de validité du lien (jours)
"isLinkReusable": true,
"contacts": [
{
"recipientEmail": "employe@exemple.com",
"countryCode": "CA", // code pays ISO
"recipientCell": "8191234567", // cellulaire pour 2FA
"authenticationMethod": "sms" // "sms" ou "voice"
}
],
"documents": [
{ "name": "document-sensible.pdf" }
]
}
// Réponse
{
"sendTransaction": {
"documents": [
{
"url": "https://uploadDomain/...",
"urlTimeToLive": 3600 // secondes
}
]
},
"banner": "Html code to insert in email",
"commands": [
{ "href": "/transactions/cell/{id}", "method": "POST", "rel": "Confirm" },
{ "href": "/transactions/cell/{id}", "method": "Delete", "rel": "Cancel" }
]
}
| Code | Statut | Description |
|---|---|---|
| 201 | CREATED | OK |
| 400 | BAD REQUEST | JSON invalide ou code pays/cellulaire incorrect |
| 401 | UNAUTHORIZED | Autorisation invalide |
| 461 | INVALID SUB | Abonnement non valide |
| 463 | DUPLICATE | Numéro de cellulaire en double dans la liste |
| 470 | FEATURE NOT AVAILABLE | Fonctionnalité non incluse dans votre plan |
| 500 | SERVER ERROR | Erreur inattendue |
Initialise une transaction sécurisée avec authentification par question secrète. Fournir soit secretAnswer (nouveau secret) soit secretAnswerRef (secret pré-enregistré) — jamais les deux. Limité à un seul destinataire par transaction.
// Corps de la requête
{
"transactionType": "send",
"transactionLanguageRef": "FR", // langue interface expéditeur
"subjectLanguageRef": "FR", // langue interface destinataire
"linkExpirationDays": 14,
"isLinkReusable": true,
"secretQuestion": "Quel est votre numéro d'employé ?",
"contacts": [
{
"recipientEmail": "employe@exemple.com",
"secretAnswer": "EMP-00142", // nouveau secret
"secretAnswerRef": null // OU ref. encryptée via GET /contacts
}
],
"documents": [
{ "name": "document-sensible.pdf" }
]
}
// Réponse — même structure que /transactions/cells
{
"sendTransaction": {
"documents": [
{
"url": "https://uploadDomain/...",
"urlTimeToLive": 3600
}
]
},
"banner": "Html code to insert in email",
"commands": [
{ "href": "/transactions/cell/{id}", "method": "POST", "rel": "Confirm" },
{ "href": "/transactions/cell/{id}", "method": "Delete", "rel": "Cancel" }
]
}
| Code | Statut | Description |
|---|---|---|
| 201 | CREATED | OK |
| 400 | BAD REQUEST | Corps de requête invalide |
| 401 | UNAUTHORIZED | Autorisation invalide |
| 461 | INVALID SUB | Abonnement non valide |
| 470 | FEATURE NOT AVAILABLE | Fonctionnalité non incluse dans votre plan |
| 500 | SERVER ERROR | Erreur inattendue |
| Code | Statut | Description |
|---|---|---|
| 200 | SUCCESS | Transaction confirmée |
| 401 | UNAUTHORIZED | Autorisation invalide |
| 404 | NOT FOUND | Transaction ou document introuvable |
| 465 | DOCUMENT SIZE EXCEEDED | Taille totale des documents dépassée |
| 500 | SERVER ERROR | Erreur inattendue |
Annule la transaction. Notez qu'il est permis d'annuler une transaction même après confirmation.
| Code | Statut | Description |
|---|---|---|
| 204 | DELETED | Transaction annulée avec succès |
| 401 | UNAUTHORIZED | Autorisation invalide |
| 404 | NOT FOUND | Identifiant de transaction introuvable |
| 500 | SERVER ERROR | Erreur inattendue |
This website uses cookies to enhance your browsing experience and provide personalized content. Privacy Policy
By clicking 'Accept', you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts.