Decline the consent request (public)
Closes the pending request as declined. The guardian is told that it happened and when (event consent.declined, notification consent.declined) — never which choice was made. A new link cannot be sent for CONSENT_RESEND_COOLDOWN_HOURS (default 24). Idempotent: declining again answers the first decline. Limits: RATE_CONSENT_WRITE_PER_LINK (default 10 per hour) and RATE_CONSENT_WRITE_PER_IP (default 30 per hour).
token*stringthe opaque token from the link
16 <= length <= 4096application/json- body
choice*stringwhich answer the dependent picked — kept server-side, never shown to the guardian
"not_now""talk_first"Declined
application/json- response
success*truetruedata*curl -X POST 'http://localhost:3000/consent-requests/stringstringstri/decline' \ -H 'Content-Type: application/json' \ -d '{ "choice": "not_now"}'{ "success": true, "data": { "status": "declined", "at": "2019-08-24T14:15:22Z" }}Submit consent evidence (public) POST
multipart/form-data: `selfie` (image/jpeg|png|webp, ≤8 MB), `audio` (audio/webm|mp4|ogg|mpeg|wav — video/webm is accepted for webm containers, ≤20 MB), `accepted` = "true", optional `audioDurationMs`. The selfie must show exactly one face and the audio must match the frozen statement (verified synchronously); only then are both stored and the request turned `given`. Limits: RATE_EVIDENCE_PER_LINK (default 10 per hour) and RATE_EVIDENCE_PER_IP (default 30 per hour).
Minha proteção (public) GET
Who receives the alerts (name and tie, never an e-mail), what they receive, what nobody sees, since when, and what happens to the selfie and the voice. `token` is either the consent link token or the stop link token (`protectionLink`, returned when consent is given). Either works while its consent is the seat's current one. Limits: reading RATE_CONSENT_READ_PER_LINK / _PER_IP (default 120 and 600 per 10 min), stopping RATE_CONSENT_WRITE_PER_LINK / _PER_IP (default 10 and 30 per hour) — shared with decline.
