We are currently using two lists for SMS subscriptions. If a customer wants to subscribe to promotions, we add them to the SMS marketing list. If they want to subscribe to order updates, we add them to the SMS transactional list. When a customer wants to unsubscribe from either the SMS marketing or SMS transactional list in their account, they click a button, and then I call the following endpoint to unsubscribe them from the corresponding list: https://a.klaviyo.com/api/profile-subscription-bulk-delete-jobs.
However, I’ve noticed something interesting. When a customer clicks to unsubscribe from SMS marketing, I pass the correct listId, and on their profile, SMS marketing is marked as red ("unsubscribed"), and their name is removed from the SMS marketing list.
But when I do the same thing for SMS transactional (unsubscribe from the SMS transactional list), their profile shows SMS transactional as red ("unsubscribed"), but their name still remains in the transactional list.
If I unsubscribe from the transactional list first, their name is removed from that list. But then, if I unsubscribe from the marketing list, their name still stays there.
Can someone help me understand why this happens? Thanks.
So, I’m not exactly sure why this might be happening, but I have a few guesses for you to test or troubleshoot:
You might have a setting in your Klaviyo account where if a user unsubscribes from one List, they unsubscribe from All. You can set each List to either be “global” or specific to the List. See this explanation: List-specific vs. global unsubscribes
If you are making sequential calls, one to the first List, then another to the second List, they may already be “unsubscribed” from the first action so it fails the second time because they are already unsubscribed, which also means they are not removed from the List (albeit, they still won’t get any SMS).
Did you pass in all the proper parameters for both?
Lastly, you may want to check your rate limiting if this is happening at a fast rate (say, if you’re testing through a loop or something). I doubt your exceeding the 75 calls per second (burst rate), but I’ve done this inadvertently when I have API calls within a for or while loop and not have any timeouts to slow the loop down.
@Timmy Solomon - I think you need to tweak your ChatGPT 4o settings a bit. :)
You can explicitly see here in the API documentation for the “Bulk Unsubscribe Profiles” endpoint, that the profile-subscription-bulk-delete-jobs does remove from the List as long as it’s valid:
So, I’m not exactly sure why this might be happening, but I have a few guesses for you to test or troubleshoot:
You might have a setting in your Klaviyo account where if a user unsubscribes from one List, they unsubscribe from All. You can set each List to either be “global” or specific to the List. See this explanation: List-specific vs. global unsubscribes
If you are making sequential calls, one to the first List, then another to the second List, they may already be “unsubscribed” from the first action so it fails the second time because they are already unsubscribed, which also means they are not removed from the List (albeit, they still won’t get any SMS).
Did you pass in all the proper parameters for both?
Lastly, you may want to check your rate limiting if this is happening at a fast rate (say, if you’re testing through a loop or something). I doubt your exceeding the 75 calls per second (burst rate), but I’ve done this inadvertently when I have API calls within a for or while loop and not have any timeouts to slow the loop down.
Thank you all for your help. I’ve double-checked, and the list IDs are correct.
In our account, we have the "global unsubscribes" box checked, but according to the documentation, it states: “This setting only impacts email subscription status, not SMS or push notification consent.”
I also read that when you unsubscribe someone, they will remain on the list, but their status changes to "unsubscribed," meaning they won’t receive emails or texts. Klaviyo has another endpoint that I can use if I want to fully remove someone from the list.
However, I'm still confused—if a profile is expected to remain on the list when they unsubscribe, then why does it sometimes happen that when I unsubscribe someone through the API, they are removed from the list, and other times they are not? I’ll update you if I figure it out.