Zernio
APIFor you
Zernio
APIFor you
IntroductionQuickstartBuild a PlatformSDKsCLIMCPWebhooksWorkflowsSupport AssistantGuidesSecurityGlossaryPricingBillingChangelogRefer & earn
Dashboard
OverviewPlatformsAPI ReferenceResources
ChangelogWeekly updates

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:

Terminal
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:

JSON
{
  "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:

Terminal
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:

Terminal
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:

Terminal
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: 429 on YouTube thumbnails and analytics, 503 on WhatsApp business verification, and 502 on private replies Meta may still deliver. See Error handling.

Want every detail? See every change, day by day.

Was this page helpful?

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.

On this page

Your customer ids on profilesEvery webhook names its customerYour brand on the connect screenDelete a conversation for goodFind out why Meta rejected an adAnalytics for one campaignAlso this week