Skip to main content

Documentation Index

Fetch the complete documentation index at: https://help.privy.com/llms.txt

Use this file to discover all available pages before exploring further.

This page tracks user-facing changes to the Privy API. Dates reflect the day a change went live in production. For migration help, email support@privy.com.

2026-05-12

Breaking changes:
  • Response field renames. Contact responses now return email_consent and sms_consent instead of email_permission and phone_permission.
  • Filter parameter renames. The GET /v1/contacts query parameters email_permission and phone_permission have been renamed to email_consent and sms_consent.
  • New consent values. The old non_subscribed value has been replaced by never_subscribed. New values have been added — see below.
New features:
  • Consent management via PATCH. PATCH /v1/contacts/{id} now accepts email_consent and sms_consent fields. You can combine consent changes with other field updates in a single request.
  • Consent on create. POST /v1/contacts now accepts the full set of writable consent values for email_consent and sms_consent.
  • Expanded email consent values:
    • subscribed — contact opted into email.
    • unsubscribed — contact opted out of email.
    • never_subscribed — no opt-in, no opt-out (replaces non_subscribed).
    • suppressed — merchant-suppressed (writable). Writing any consent value to a merchant-suppressed contact unsuppresses it first.
    • compliance_suppressed — system-suppressed (read-only, filterable). Any write to a compliance-suppressed contact returns 422.
  • Expanded SMS consent values:
    • subscribed — contact has confirmed SMS opt-in.
    • unsubscribed — contact opted out of SMS.
    • never_subscribed — no opt-in, no opt-out (replaces non_subscribed).
    • single_opt_in — merchant collected a single opt-in (not yet confirmed). Writable; requires a phone number.
    • pending — awaiting confirmation reply (read-only, filterable).
Deprecations:
  • POST /v1/contacts/{id}/unsubscribe is deprecated. Use PATCH /v1/contacts/{id} with email_consent: "unsubscribed" instead. The endpoint continues to work but now returns Deprecation: true and Link headers.