meta { name: 01 Respond paid type: http seq: 1 } get { url: {{baseUrl}}/api/v1/checkin/{{checkinToken}}/paid body: none auth: none } settings { encodeUrl: false } tests { test("302 redirect", function () { expect(res.getStatus()).to.be.oneOf([302, 303, 307]); }); test("redirect contient ?checkin=", function () { const loc = res.getHeader("location"); expect(loc).to.match(/checkin=/); }); } docs { GET /api/v1/checkin/:token/paid L'utilisateur clique "j'ai été payé" depuis son email check-in. Effets côté API : - CheckinTask : status='answered', answer='paid', answered_at=now - Invoice : status='paid', paid_at=now, rubis_earned+1 - Organization.rubis_count+1 - ActivityEvent kind=invoice_paid (label "via check-in") - Toutes les RelanceTask scheduled de cette facture → cancelled Idempotent : 2e click → redirect avec `?checkin=already_answered`. Redirect SPA : `${WEB_URL}/?checkin=paid&invoice=` Comment récupérer un `checkinToken` : 1. Crée une facture (Invoices → 04 Create) avec dueDate dans le passé 2. Attends ~1min, ouvre Mailpit http://localhost:8025 3. Copie le segment du token depuis l'URL "C'est payé" du mail 4. Pose-le dans la var d'env `checkinToken` }