No marketing copy here — just the facts about what Permitly stores and how the system protects your users.
| Field | What it is | Why we store it |
|---|---|---|
| end_user_ref | Opaque string you provide — we recommend using a non-PII internal ID | Match consents back to your users without us knowing who they are |
| end_user_email | Optional. Only stored if you send it in the API request | Allow email notifications if you opt in |
| Consent metadata | Scope keys, status (pending/approved/declined/revoked), timestamps | Core product function — the consent record itself |
| API key hash | bcrypt hash of your key — never the key itself | Authenticate your API requests |
| Audit events | Event type, agent, actor, IP address, user-agent, timestamp | Compliance record and dashboard activity feed |
exp claim is set at issuance. Expired tokens are rejected.POST /v1/consent/verify before granting agent access.exp.Every approval email contains a /manage/{token} link. The user can revoke any consent without needing a Permitly account.
DELETE /v1/consent/{id} revokes immediately. Both paths fire the consent.revoked webhook instantly.
| Plan | Audit log retention |
|---|---|
| Free | 30 days |
| Starter | 1 year |
| Pro | 3 years |
Active consents and the core consent record are retained until revoked or the account is deleted, regardless of plan.
Security questions or vulnerability reports: security@permitly.dev
Privacy policy: permitly.dev/trust