Enregistrer un consentement hors ligne

Toutes les personnes concernées n'ont pas de clé d'accès. Une personne âgée qui signe un formulaire sur papier ne passera jamais par le flux d'approbation par demande de consentement. Pour ce cas, il existe une voie distincte : l'entreprise consigne un consentement à partir d'un PDF signé à la main, sous la portée attest. Le résultat est un consentement attesté par l'entreprise qui s'applique exactement comme un consentement signé par le citoyen.

Il vous faut une clé à portée attest.

Consigner le consentement

Vous partez d'un PDF signé à la main et de la version publiée de la divulgation sous laquelle la personne a consenti. Le SDK hache le PDF localement (SHA-256); par défaut, seul le pdfSha256 quitte votre machine. Les octets bruts ne partent qu'avec une mise en dépôt explicite.

const m = await agreely.manualConsents.record({
  customerId: "cust_8812",
  documentVersionId: "doc_v3",     // the PUBLISHED disclosure version signed under
  effectiveDate: "2026-01-01",
  validUntil: "2031-01-01",
  items: [{ category: "Phone number", purpose: "Billing" }],
  evidence: {
    pdfSha256: Agreely.hashPdf(bytes), // "0x"+sha256, hashed LOCALLY, required
    // pdf: base64Pdf,                 // optional: only with an explicit upload
  },
});

m.assurance; // "company_attested" m.consentRefs; // one 0x ref per cell; m.anchored is false at record time

$m = $agreely->manualConsents()->record([
    'customerId'        => 'cust_8812',
    'documentVersionId' => 'doc_v3',
    'effectiveDate'     => '2026-01-01',
    'validUntil'        => '2031-01-01',
    'items'             => [['category' => 'Phone number', 'purpose' => 'Billing']],
    'evidence'          => [
        'pdfSha256' => Agreely::hashPdf($bytes), // "0x"+sha256, LOCAL, required
        // 'pdf'    => $base64Pdf,               // optional opt-in upload
    ],
]);

$m->assurance; // "company_attested" $m->consentRefs; // one 0x ref per cell

agreely manual-consent create \
  --customer cust_8812 --document-version doc_v3 \
  --effective-date 2026-01-01 --valid-until 2031-01-01 \
  --item "Phone number:Billing" \
  --pdf ./signed-consent.pdf --json
# the hash alone is sent; add --upload to also escrow the raw bytes
curl -sS https://api.agreely.ca/v1/manual-consents \
  -H "Authorization: Bearer $AGREELY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cust_8812",
    "documentVersionId": "doc_v3",
    "effectiveDate": "2026-01-01",
    "validUntil": "2031-01-01",
    "items": [{"category":"Phone number","purpose":"Billing"}],
    "evidence": {"pdfSha256":"0x…"}
  }'

La réponse porte consentId, merkleRoot, un consentRefs (un 0x-hex par cellule), assurance: "company_attested" et anchored: false (l'ancrage se produit ensuite, de façon asynchrone). Agreely.hashPdf est statique et n'appelle aucun réseau; elle produit exactement la forme attendue par evidence.pdfSha256.

Il s'applique à l'identique

Un consentement attesté par l'entreprise et un consentement signé par le citoyen autorisent de façon identique à /v1/check. Seul le palier d'assurance diffère : une vérification renverra assurance: "company_attested" au lieu de "citizen_signed". Le code qui protège une fonctionnalité n'a rien à changer.

Lier plus tard le consentement au citoyen

L'entreprise peut émettre un lien de réclamation à usage unique pour que la personne concernée, plus tard, rattache ce consentement hors ligne à son propre identifiant décentralisé.

const link = await agreely.manualConsents.createClaimLink({
  customerId: "cust_8812",
  reference: "order-4471", // optional
});
// { claimUrl, token, expiresAt } - single-use

À la CLI : agreely manual-consent claim-link --customer cust_8812 --reference order-4471.

La limite honnête

Un consentement attesté ne prouve pas qu'un humain a signé

Un consentement company_attested prouve que l'entreprise atteste détenir un PDF signé dont le hachage correspond à ce qui a été enregistré. Il ne prouve pas qu'un humain a bel et bien signé le document, ni qui l'a signé : il n'y a pas d'assertion par clé d'accès de la personne concernée. C'est une voie légitime pour les cas sans clé d'accès, mais son palier d'assurance est plus faible que celui d'un consentement signé par le citoyen, et c'est pourquoi le champ assurance le nomme explicitement partout.

Ensuite

  • Demandes de consentement : la voie signée par le citoyen, et le contexte côté entreprise du consentement hors ligne.
  • Portail citoyen : ce que voit la personne concernée lorsqu'elle réclame et confirme son consentement.
  • Vérifier un reçu : un reçu company_attested se vérifie entièrement hors ligne.