I'm having trouble with my WordPress/WooCommerce integration with Klaviyo's API. My setup handles user consent for marketing communications, but I'm facing issues with re-subscribing users who have previously unsubscribed.
Current Implementation
I've built a user flow that:
- Registers users in Klaviyo when they create an account and opt-in to marketing
- Updates their profile in Klaviyo when they update their WooCommerce profile
- Unsubscribes users from Klaviyo when they withdraw consent
- Re-subscribes users to Klaviyo when they opt back in after previously withdrawing consent
The issue is with the last step - once a user has unsubscribed, I can't seem to re-subscribe them properly.
Code Flow
When a user opts in:
- I call profile-import to create/update their profile
- I call profile-suppression-bulk-delete-job to try removing them from the suppression list
- I call profile-subscription-bulk-create-job to add them as a subscriber
When a user opts out:
- I call profile-subscription-bulk-delete-job to unsubscribe them
The Issue
After unsubscribing a user with profile-subscription-bulk-delete-job, calling profile-subscription-bulk-create-job later doesn't appear to update their subscription status. They remain in an unsubscribed state.
Additionally, the profile-suppression-bulk-delete-jobscall doesn't seem to actually remove profiles from being marked as "suppressed" in Klaviyo.
I've tried different API request structures following the documentation, but nothing seems to actually remove the suppression status or re-subscribe users properly. I have read other topics on this forum including the following:
But for whatever reason I can't get this to work. I am using the latest API endpoints which the above posts suggest is necessary. I have tried using the exact same endpoints as mentioned in the first thread and cannot get the profile to successfully resubscribe after unsubscribing the first time around.
Has anyone successfully implemented a workflow for re-subscribing previously unsubscribed users through the API? Are there any specific requirements or steps I'm missing for this use case?
Thanks in advance!

