Comparer deux moments : avant et après
tryVidimus peut relier deux preuves d'une même transaction, un « avant » et un « après », pour que vous compariez ce que chaque partie a capturé. Nous ne comparons pas les photos et ne jugeons pas l'état de l'objet : les preuves montrent ce qui a été capturé, et c'est à vous de les apprécier.
1. Ouvrir l'« après » depuis l'« avant »
Faites la capture « avant » comme d'habitude et attendez que sa preuve soit scellée. Créez ensuite la seconde session de capture avec compare_to égal à l'id de cette preuve. L'« avant » doit être scellé, avec la même external_reference et la même party, et ne doit pas être lui-même un « après ». La réponse reprend compare_to. Si une règle n'est pas respectée, aucune session n'est créée : 422 compare_to_not_found, compare_to_not_sealed, compare_to_mismatch ou compare_to_is_after.
$ curl -X POST https://api.tryvidimus.com/v1/capture-sessions \ -H "Authorization: Bearer $TRYVIDIMUS_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{"external_reference":"booking_4471","party":"provider","stage":"return","compare_to":"prf_01m4akapdbe8e8qq3er9r5qwyj"}'
2. Les mêmes prises de vue, au moins autant de photos
L'« après » utilise une copie du modèle de l'« avant » : ne donnez pas template_id (en nommer un autre échoue avec 422 compare_template_mismatch). Chaque prise de vue photographiée dans l'« avant » devient obligatoire, avec au moins autant de photos. La page de capture montre la photo de l'« avant » à côté de la caméra, pour que la personne refasse la même. Les photos supplémentaires hors modèle n'ont pas de minimum.
3. Lire le lien sur chaque preuve
Un « après » donne compare_to (l'id de son « avant »), un « avant » donne compared_by (l'id de son « après »). Une preuve est soit un « avant », soit un « après », jamais les deux, et a au plus un partenaire. Pour lister les preuves qui attendent encore leur « après », filtrez avec linked=false ; linked=true liste les paires.
// GET /v1/proofs/prf_01m4akapdbe8ev5xgt0hkpcn14 (the "after")
{ "id": "prf_01m4akapdbe8ev5xgt0hkpcn14", "compare_to": "prf_01m4akapdbe8e8qq3er9r5qwyj", "compared_by": null, … }
// GET /v1/proofs/prf_01m4akapdbe8e8qq3er9r5qwyj (the "before")
{ "id": "prf_01m4akapdbe8e8qq3er9r5qwyj", "compare_to": null, "compared_by": "prf_01m4akapdbe8ev5xgt0hkpcn14", … }
// GET /v1/proofs?linked=false → the proofs still waiting for their "after"
4. Quand deux liens visent le même « avant »
Plusieurs liens peuvent viser le même « avant » tant qu'aucun « après » n'est terminé. La première capture terminée l'emporte. L'autre n'est pas sauvegardée : la terminer échoue avec 409 compare_to_already_used, aucune preuve n'est créée, aucun crédit n'est utilisé, et la personne voit que ses photos n'ont pas été gardées. Le refus apparaît dans vos journaux. Si l'« après » gagnant échoue définitivement, l'« avant » est de nouveau libre.
5. Être prévenu d'une capture rejetée
Abonnez votre endpoint à capture_session.rejected : il est envoyé quand une capture est rejetée pour cette raison, une fois par session, même si la personne réessaie. Les endpoints créés avant cet événement ne le reçoivent pas tant que vous ne l'ajoutez pas à leurs événements.
{
"event": "capture_session.rejected",
"session_id": "cps_01m4akapdbe8e8qq3er9r5qwyj",
"code": "compare_to_already_used",
"compare_to": "prf_01m4akapdbe8e8qq3er9r5qwyj",
"external_reference": "booking_4471",
"party": "provider",
"stage": "return",
"rejected_at": "2026-10-13T10:00:00.123Z"
}
6. Les prises de vue sans photo
Une prise de vue d'un modèle peut autoriser la personne à la déclarer au lieu de la photographier : allowed_skips liste nothing_to_report et/ou not_applicable (vide par défaut : la prise de vue ne peut pas être passée). Une prise de vue déclarée compte comme faite même si elle est obligatoire. Les déclarations sont gardées avec la preuve, dans skipped. Ce sont des déclarations de la personne qui a capturé, pas des mesures de notre part, et elles ne font pas partie du manifeste signé.
// In the template (POST /v1/capture-templates)
{ "id": "garden", "label": "Garden", "required": true, "allowed_skips": ["nothing_to_report", "not_applicable"] }
// On the proof, once the capture is finished
"skipped": [{ "step_id": "garden", "reason": "nothing_to_report" }]
Avec la ligne de commande
sessions create accepte --compare-to, et proofs list accepte --linked true ou false. proofs get montre le partenaire et les prises de vue déclarées.
$ tryvidimus sessions create --reference booking_4471 --party provider --stage return \ --compare-to prf_01m4akapdbe8e8qq3er9r5qwyj $ tryvidimus proofs list --linked false
Une capture rejetée n'est pas une erreur de votre côté : lisez le webhook ou le journal, puis créez une nouvelle session si besoin.