Skip to content

pinterest

Applies to: **/pinterest/**, **/tracking/pinterest*

SettingValueNotes
API Versionv5Stable — use https://api.pinterest.com/v5/
AuthBearer tokenAuthorization: Bearer {TOKEN}
Token expiry60 daysMust implement automatic refresh
CurrencyMicro-currency1 USD = 1,000,000
  • Access token expires every 60 days — build refresh into your workflow
  • Use PINTEREST_ACCESS_TOKEN environment variable
  • Refresh via POST /v5/oauth/token with grant_type=refresh_token
  • Monitor for 401 errors as expiry signal
  • Never hardcode tokens in source code
  • Endpoint: POST /v5/ad_accounts/{ad_account_id}/events
  • Event names use underscore format: page_visit, lead, checkout
  • NOT PascalCase (that’s Meta format): PageVisit will fail
  • action_source is required: web, app, phone_call, crm, etc.
  • event_time in Unix seconds (not milliseconds)

The _epik cookie is Pinterest’s click identifier:

  1. User clicks Pinterest ad → lands with epik URL parameter
  2. Extract from URL and set as _epik cookie on landing page
  3. Read cookie on conversion, include as user_data.click_id in CAPI
  4. Without _epik, Pinterest cannot attribute conversions to ad clicks

Always capture _epik on every landing page that receives Pinterest ad traffic.

Same as Meta — SHA-256 hash all user data before sending:

  • Email: lowercase, trim, then hash
  • Phone: E.164 digits only, then hash
  • Names: lowercase, trim, then hash

Use event_id to deduplicate between browser conversion tag and server CAPI events. Same logic as Meta deduplication — match event_name + event_id.

IssueCauseFix
401 errorToken expiredRefresh token (60-day cycle)
Event rejectedWrong event name formatUse page_visit not PageVisit
No attributionMissing _epikCapture from URL on landing
Budget wrongDollar amount, not microMultiply by 1,000,000