Route every event to your tenant
External ids on profiles, tenant routing in webhooks, a branded connect screen, deleting inbox conversations and Meta ad review status.
This week was for teams running Zernio behind their own product, with one Zernio profile per customer.
In short:
- Store your own customer id on a profile and look it up by that id.
- Every webhook says which of your customers it belongs to.
- The connect flow can open with your brand instead of ours.
Your customer ids on profiles
If each of your customers gets a Zernio profile, you probably keep a table mapping their id to ours. You can drop it. Store your id on the profile once:
curl -X POST "https://zernio.com/api/v1/profiles" \
-H "Authorization: Bearer $ZERNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Acme Dental", "externalId": "tenant_4821" }'Then find it with GET /v1/profiles?externalId=tenant_4821. Ids are unique: reusing one answers 409 profile_external_id_conflict and points to the existing profile in details.existingProfileId, so a retry never creates a duplicate.
Learn more: Profiles guide · Building a multi-tenant product · Create a profile
Every webhook names its customer
The other half of the mapping problem: a message arrives, and you have to work out whose it is. Webhooks for posts, accounts, messages, conversations, comments, leads and reviews now carry a profiles array with your id:
{
"event": "message.received",
"profiles": [{ "id": "6a1f0c2e9b3d4e5f6a7b8c9d", "externalId": "tenant_4821" }],
"message": { "...": "..." }
}Route the event straight to tenant_4821, no lookup. externalId is null on profiles without one.
Learn more: Webhooks · Multi-tenant inbox
Your brand on the connect screen
Sending users from your app straight to an Instagram login feels like leaving your product, and some drop off there. Add welcome=true to a connect link and they first see your name, logo and color, with a short explanation:
curl "https://zernio.com/api/v1/connect/instagram?profileId=PROFILE_ID&welcome=true&brandName=Acme&logoUrl=https://acme.com/logo.png&primaryColor=%23E5482D" \
-H "Authorization: Bearer $ZERNIO_API_KEY"Since October 21 you can save these once for the workspace with PUT /v1/connect/welcome-screen and leave the parameters out.
Learn more: Connecting accounts · Welcome screen settings
Delete a conversation for good
When one of your users asks you to erase their data, you can now remove Zernio's copy of a conversation and every message in it:
curl -X DELETE "https://zernio.com/api/v1/inbox/conversations/CONVERSATION_ID?accountId=ACCOUNT_ID" \
-H "Authorization: Bearer $ZERNIO_API_KEY"
# → { "data": { "id": "...", "platform": "whatsapp", "deletedMessages": 42 } }The thread itself stays on WhatsApp, Messenger or Instagram, and the contact record is kept.
Learn more: Delete a conversation
Find out why Meta rejected an ad
Until now, seeing why an ad was refused meant opening Ads Manager. GET /v1/ads/{adId}/review now works on Meta ads: the live review status, Meta's feedback, and which placements were refused. Show it next to the ad, and your users fix it without leaving your app.
Learn more: Get an ad's review
Analytics for one campaign
Reporting on a launch used to mean collecting post ids yourself. Tag the posts when you create them, then ask for analytics on just those:
curl "https://zernio.com/api/v1/analytics?tags=launch-q4&fromDate=2026-10-01&toDate=2026-10-31" \
-H "Authorization: Bearer $ZERNIO_API_KEY"A post must carry every listed tag (exact match, up to 20). Narrow the dates if more than 200 posts match.
Learn more: Get analytics
Also this week
- Workflows on TikTok: the same automations you run on other messaging platforms. Workflows
- Meta ads: pick the catalog ad format, keep carousel cards in your order (
optimizeCardOrder: false), name uploaded videos, and spot ads that never appeared on the Page. - Other ads: delete X Ads campaigns, recognise TikTok's automated campaigns, clearer breakdowns, and the profile on every ad.
- Instagram: follower counts in the account picker, and richer data when looking up other business accounts.
- Support API: see each run of a thread, with the question asked.
- Worth handling:
429on YouTube thumbnails and analytics,503on WhatsApp business verification, and502on private replies Meta may still deliver. See Error handling.
Want every detail? See every change, day by day.
HubSpot, store orders and Wix blogs
Sync your inbox to HubSpot, read Shopify and WooCommerce orders in one format, publish to Wix, and four new Instagram endpoints.
Subtitles, message requests and Google Ads
Captions on videos, Facebook and Instagram message requests, safer connects, sample webhooks and a big Google Ads release. Seven changes need a look.