POST /v1/accounts/{accountId}/conversion-destinations now supports creating conversion destinations for Google Ads in addition to LinkedIn.You can create a Google Ads conversion action (created as
UPLOAD_CLICKS for offline uploads). Standard event names are mapped automatically, and actions default to secondary unless you opt in.Key Google Ads fields:
•
countingType: MANY_PER_CLICK | ONE_PER_CLICK•
primaryForGoal: true | false (default false)Notes:
•
accountId can now be linkedinads or googleads• Creation is not idempotent — retries can create duplicates
• 201 response
platform now includes linkedinads | googleadsView documentation
❤1
Google Ads conversion destination creation via
If a conversion action with the same
Key fields:
•
•
New response:
•
View documentation
POST /v1/accounts/{accountId}/conversion-destinations is now effectively idempotent by name.If a conversion action with the same
name already exists, the API will reuse it and return the same response as a fresh create. If the same name is used with a different type (category), the API now returns 409 with error code IDEMPOTENCY_CONFLICT.Key fields:
•
name•
typeNew response:
•
409 (Google Ads only) — IDEMPOTENCY_CONFLICTView documentation
❤1
POST /v1/ads/conversions now supports TikTok conversions (platform tiktokads).You can now relay OFFLINE conversion events to TikTok via the Offline Events API. Use
destinationId as the TikTok Offline Event Set ID, and note each event must include an email or phone.Key details:
•
accountId now accepts: metaads, googleads, linkedinads, tiktokads• Response
platform enum now includes tiktokadsGET /v1/accounts/{accountId}/conversion-destinations also now supports tiktokads (platform enum includes tiktokads).GET /v1/ads/tree adds campaignId (platform campaign id) to restrict the tree to a single campaign, independent of pagination.View documentation
❤3
LinkedIn posts now support quote-reshare via
Set
Notes:
•
• Works on personal profiles and organization pages
Error responses are now more structured for programmatic handling:
View documentation
reshareUrl in LinkedInPlatformData.Set
reshareUrl to a LinkedIn post link ("Copy link to post") or a urn:li:share / urn:li:ugcPost / urn:li:groupPost URN. The published post becomes a repost with your content as commentary and the original post embedded underneath.Notes:
•
reshareUrl is mutually exclusive with media• Works on personal profiles and organization pages
Error responses are now more structured for programmatic handling:
ErrorResponse adds type, code, param, platform, and platformError (raw upstream payload when type is platform_error).type can be: invalid_request_error, authentication_error, permission_error, not_found, rate_limit_error, platform_error, api_error.View documentation
❤3
POST
This enables safer launches (no immediate spend) and easier multi-ad-set testing while keeping creatives consistent.
New request fields:
•
•
•
View documentation
/v1/ads/create now supports additional Meta-only creation options: you can create ads/ad sets paused, add a new ad set under an existing campaign, and/or reuse an existing creative.This enables safer launches (no immediate spend) and easier multi-ad-set testing while keeping creatives consistent.
New request fields:
•
status: ACTIVE | PAUSED•
existingCampaignId (Meta only; mutually exclusive with adSetId and creatives[])•
existingCreativeId (Meta only; mutually exclusive with creatives[], dynamicCreative, placementAssets)View documentation
❤1
POST
You can stage Meta campaigns/ads more safely (e.g., create everything paused, or pause just the campaign while keeping the ad set ready), and you can now attach new ads using an existing creative without resending copy/media.
New/updated fields:
•
•
•
View documentation
/v1/ads/create now supports more control over Meta publish state and creative reuse.You can stage Meta campaigns/ads more safely (e.g., create everything paused, or pause just the campaign while keeping the ad set ready), and you can now attach new ads using an existing creative without resending copy/media.
New/updated fields:
•
status (ACTIVE | PAUSED) now explicitly controls desired publish state; in attach mode (adSetId) it affects only the new ad•
campaignStatus (ACTIVE | PAUSED) lets you set campaign state independently on the legacy create shape (ignored when existingCampaignId is set)•
existingCreativeId can now be used with adSetId to attach an ad that reuses an existing Meta creative (copy/media fields can be omitted)View documentation
❤1
Meta ads created via
This lets you clone an ad set’s full Meta-native targeting spec via
When both are set,
Key fields:
•
•
•
View documentation
POST /v1/ads/create now allow combining manual placements with rawTargeting.This lets you clone an ad set’s full Meta-native targeting spec via
rawTargeting while still overriding placements using the structured placements object.When both are set,
placements is converted to Meta snake_case and merged into rawTargeting before sending to Meta.Key fields:
•
rawTargeting (Meta TargetingSpec, snake_case)•
placements.publisherPlatforms: facebook, instagram, threads, messenger, audience_network•
placements.facebookPositions, placements.instagramPositions, placements.messengerPositions, placements.audienceNetworkPositions, placements.threadsPositions, placements.whatsappPositions, placements.devicePlatforms: mobile/desktopView documentation
❤1
Analytics post items now include
This lets you distinguish ad creatives from organic posts in analytics results (currently only available for LinkedIn posts; false when unavailable).
New field:
•
View documentation
isAd in AnalyticsListResponse.posts[].This lets you distinguish ad creatives from organic posts in analytics results (currently only available for LinkedIn posts; false when unavailable).
New field:
•
isAd (boolean) — true for ad creatives, otherwise falseView documentation
🔥2❤1
Inbox conversations now include ad-click attribution via a new
This lets you identify when a conversation started from a click-to-message ad (vs organic) and store the associated ad identifiers/details.
New field:
•
Common keys you may see in
• WhatsApp CTWA:
• Meta CTM/CTD:
View documentation
metadata object in responses from GET /v1/inbox/conversations and GET /v1/inbox/conversations/{conversationId}.This lets you identify when a conversation started from a click-to-message ad (vs organic) and store the associated ad identifiers/details.
New field:
•
metadata (object, nullable) — only present for ad-originated conversations; absent for organicCommon keys you may see in
metadata:• WhatsApp CTWA:
ctwa_clid, ctwa_source_id, ctwa_source_url, ctwa_headline, ctwa_source_type, ctwa_captured_at• Meta CTM/CTD:
meta_ad_id, meta_ad_title, meta_ad_source, meta_ad_type, meta_ad_ref, meta_ad_captured_at, meta_ad_photo_url, meta_ad_video_url, meta_ad_post_id, meta_ad_product_id, meta_ad_flow_idView documentation
❤1🔥1
GET
Key fields include
Geo targeting search via
View documentation
/v1/ads/lead-forms/{formId} now returns a fully detailed form object (enough to duplicate the form via POST /v1/ads/lead-forms).Key fields include
form.status (ACTIVE/ARCHIVED), questions, thank_you_page, and context_card.Geo targeting search via
GET /v1/ads/targeting/search now supports additional geoType values when dimension=geo: subcity, neighborhood, place, metro_area, geo_market (in addition to country, region, city, zip).View documentation
❤2
Moving an account to another profile via
This enforces the rule that a profile can hold only one account per platform.
Handle the new response:
•
View documentation
PATCH /v1/accounts/{accountId} can now return 409 when the target profile already has an account on the same platform.This enforces the rule that a profile can hold only one account per platform.
Handle the new response:
•
409 - target profile already has an account of the same platform (profile_platform_conflict)View documentation
POST
You can target more precise location types and explicitly exclude locations when creating Meta ads.
New fields:
•
•
•
POST
New fields:
•
•
•
•
•
GET
Use
View documentation
/v1/ads/create now supports additional Meta geo targeting controls.You can target more precise location types and explicitly exclude locations when creating Meta ads.
New fields:
•
places (Meta geoType place)•
neighborhoods (Meta geoType neighborhood)•
excludedLocations with countries, regions, cities, zipsPOST
/v1/ads/lead-forms adds richer Meta Instant Form configuration.New fields:
•
formType: MORE_VOLUME | HIGHER_INTENT | RICH_CREATIVE•
blockDisplayForNonTargetedViewer•
allowOrganicLeadGen•
questionPageCustomHeadline•
contextCard (title, content, style: LIST_STYLE | PARAGRAPH_STYLE, buttonText, coverPhoto)GET
/v1/ads/targeting/search geo search now supports geoType=all and returns coordinates.Use
dimension=geo with geoType=all to search across all geo types in one call, and read latitude / longitude from results (when available).View documentation
❤2
Meta boosts via
Use
Key rule:
View documentation
POST /v1/ads/boost now support raw Meta-native targeting with rawTargeting.Use
rawTargeting to pass a Meta targeting spec verbatim (snake_case like geo_locations, custom_audiences, excluded_custom_audiences, flexible_spec, targeting_automation) to target specific custom/lookalike audiences or clone targeting exactly.Key rule:
rawTargeting is mutually exclusive with targeting (sending both returns 422).View documentation
❤1
Comment webhooks (
This lets you detect and render comments that have no text content; note Meta URLs may be ephemeral, so fetch promptly.
Key fields:
•
•
•
View documentation
comment.received) now include an optional comment.attachment object for Facebook graphic-only comments (sticker, GIF, photo).This lets you detect and render comments that have no text content; note Meta URLs may be ephemeral, so fetch promptly.
Key fields:
•
comment.attachment.type (required)•
comment.attachment.imageUrl•
comment.attachment.urlView documentation
❤2
WhatsApp phone number provisioning now supports creating a hosted KYC link via
This generates a single-use, 7-day link your end customer can complete without a Zernio login; once submitted, the number provisions under your account (only for regulated/KYC countries).
Request fields:
•
•
•
•
Response fields:
•
•
•
To react when the form is completed, subscribe webhooks to the new event:
View documentation
POST /v1/whatsapp/phone-numbers/kyc/share.This generates a single-use, 7-day link your end customer can complete without a Zernio login; once submitted, the number provisions under your account (only for regulated/KYC countries).
Request fields:
•
profileId (required)•
country (required, ISO-2; non-KYC countries return 400)•
branding (optional: companyName, logoUrl, brandColor)•
redirect_url (optional; on success appends kyc=submitted and country=<ISO-2>)Response fields:
•
url•
token•
expiresAtTo react when the form is completed, subscribe webhooks to the new event:
whatsapp.number.kyc_submitted (available in POST/PUT /v1/webhooks/settings).View documentation
❤1
POST /v1/whatsapp/phone-numbers/kyc now supports provisioning multiple same-country numbers in a single KYC submission via quantity.Set
quantity (default 1, min 1, max 5) to request several numbers; the same verification covers all of them and each number is billed only when it activates (best-effort if some orders fail).Response now includes
numbers (array) with all provisioned numbers. phoneNumber remains and represents the first/primary number for backward compatibility.status remains: kyc_submitted | kyc_reused | kyc_already_submittedView documentation
❤1
Instagram posts now support AI-generated media self-disclosure via
When
Set:
•
Applies to feed posts, Reels, Stories, and carousels.
View documentation
isAiGenerated in platformSpecificData.When
isAiGenerated is true, Instagram labels the post as containing AI-generated media (this is for media, not AI-written captions).Set:
•
isAiGenerated (boolean, default false)Applies to feed posts, Reels, Stories, and carousels.
View documentation
❤4
Instagram Trial Reels are now identifiable per platform target in post responses.
When an Instagram reel is created as a Trial (via
•
•
Use these fields to segment trial reels in analytics; note this reflects creation-time intent (Instagram doesn’t expose a readable trial flag).
View documentation
When an Instagram reel is created as a Trial (via
platformSpecificData.trialParams), the corresponding PlatformTarget may include:•
isTrialReel (boolean) — present and true only for trial reels•
trialGraduationStrategy — MANUAL | SS_PERFORMANCE (present only when isTrialReel is true)Use these fields to segment trial reels in analytics; note this reflects creation-time intent (Instagram doesn’t expose a readable trial flag).
View documentation
👍4❤2
New endpoint
Use query params
View documentation
GET /v1/ads/campaigns/{campaignId}/analytics returns campaign-level analytics in one call (summary metrics, daily[] timeline, and optional Meta demographic breakdowns).Use query params
fromDate, toDate (defaults to last 90 days; max 730 days) and optional platform to disambiguate IDs. For Meta-only breakdowns, pass breakdowns as a comma-separated list: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset.GET /v1/ads/tree now supports daily trends in the same response: set timeIncrement=1 to add daily[] metrics series, and control where it appears with dailyLevel = campaign (default) | adset | ad.View documentation
New endpoint
Currently supports LinkedIn organization mentions and requires the Inbox addon.
Key query params:
•
•
•
•
•
Response includes
View documentation
GET /v1/inbox/mentions is available to list mentions of your connected organization accounts delivered via platform webhooks.Currently supports LinkedIn organization mentions and requires the Inbox addon.
Key query params:
•
accountId (filter by social account ID)•
profileId (filter by profile ID)•
sortOrder (asc | desc, default desc)•
limit (1–100, default 25)•
cursor (pagination)Response includes
data items with id, platform (linkedin), content, permalink, authorUrn, organizationalEntity, publishedAt, plus pagination (hasMore, cursor).View documentation
❤1
WhatsApp Business Profile now supports managing business usernames via new endpoints.
You can fetch the current username + approval state, claim/transfer a username, release it, and retrieve available suggestions.
New endpoints:
•
•
•
•
On username claim failures, expect error codes like
View documentation
You can fetch the current username + approval state, claim/transfer a username, release it, and retrieve available suggestions.
New endpoints:
•
GET /v1/whatsapp/business-profile/username (accountId query) → returns username (nullable) and status (approved/reserved/none)•
POST /v1/whatsapp/business-profile/username body: accountId, username, optional transferAction (none/force_transfer)•
DELETE /v1/whatsapp/business-profile/username body: accountId•
GET /v1/whatsapp/business-profile/username/suggestions (accountId query) → returns suggestions[]On username claim failures, expect error codes like
whatsapp_username_unavailable, whatsapp_username_ineligible, or whatsapp_username_transfer_required.View documentation
❤1👍1🔥1