Skip to main content
Altcraft Docs LogoAltcraft Docs Logo
User guide iconUser guide
Developer guide iconDeveloper guide
Admin guide iconAdmin guide
English
  • Русский
  • English
Login
    User documentationGetting StartedFAQAltcraft glossary
      Profiles and databasesarrow
    • Subscription resourcesManaging databasesSubscriber profileProfiles import and data updateCommon Errors When Importing ProfilesScheduled customer data importManaging Data TablesAutomatic data collectionBulk customers profiles updateDouble opt-in subscriptionSuppression listsProfile relationsProfile history exportProfile exportCreating a static segment based on import resultsHow to open a CSV fileMatchingTypes of fields in the databaseGlobal control groupsSubscription Manager
      Communication channelsarrow
      • Email channelarrow
      • Email: ISP interactions best practices
          First mailingarrow
        • Quick StartEmail
        Email: sending domain configurationEmail: setting up and using postmastersHow email tracking works
        Push Channelarrow
        • Mobile Pusharrow
        • First Mobile Push MailingSetup and Connection
            Mobile Push Providersarrow
          • Firebase Cloud MessagingApple Push Notification ServiceHuawei Mobile ServicesRuStoreYandex.AppMetrica
            Integrate your app with Altcraftarrow
          • Processing and adding a subscriptionEvent registrationProviders: push message structure
          Web Pusharrow
        • First Web Push MailingResource and Website Setup
            Web Push Providersarrow
          • Firebase Cloud messagingApple SafariMozilla Services
          Transferring Data to the PlatformWeb Push SDK MethodsPWA and Push Notifications
            Migration and Subscription Transferarrow
          • Migrating push subscriptions from third-party servicesHow to transfer push subscriptions configured for Safari?Migration from OneSignal
        SMS channelarrow
      • SMS
      WhatsAppViber*™
        Telegramarrow
      • Telegram BotTelegram Group
        Maxarrow
      • MAX BotMAX Group
      NotifyCommunication Channels WorkflowРуководство: SMS-рассылка через VK NotifyРуководство: SMS-рассылка через УТШРуководство: push-рассылка через сервис от "Согласие"
      Segmentationarrow
    • Static SegmentsDynamic SegmentsUpdatable Segments
        Segmentation Conditionsarrow
      • Segmentation by Profile dataSegmentation by Interactions with EntitiesSegmentation by Activity of the channel
          Segmentation by external dataarrow
        • Segmentation by external dataSegmentation by external SQL tablesRecommendations for segmentation by external data
        Segmentation by Profile structure
      Best Send Time (BST)Logical operators "AND" and "OR"Recommendations for working with segments
      Message templatesarrow
      • Working with message templatesarrow
      • Working in the editorEmail templateSMS templatePush templateMAX templateTelegram templateWhatsApp templateViber templateNotify template
        Visual editor for email-templatearrow
      • Visual editor interfaceAdding blocksElements and their settingsCustom blocksStyle managerLayer manager
      Template fragmentsImage galleryContent personalizationCreating tables based on array elementsBlock editor for email template
        Altcraft Variables and Functionsarrow
      • Logical expressions in messagesLoops in messagesMarket variables in templatesUsing the JSONPath functionality
        Dynamic content in messagesarrow
      • Dynamic HTML contentDynamic JSON contentContent from SQL database in templatesDynamic API content
      Importing and exporting a message templateImporting a template from a third-party serviceExporting a template from Pixcraft
      Mailingsarrow
    • Broadcast mailingsTrigger mailingRegular mailingMultivariate testingPlacement mailingMailing testingMailing scheduleMailings calendarManaging the Sender Queue
      Automation scenariosarrow
    • Managing scenariosNodes of the scenarioClassic marketing scenariosStep-by-step welcome scenario guideScenario for automatic notification of the managerAbandoned cart scenarioCycle Handling in Automation Scenarios
      Marketarrow
    • Market settings
        Productsarrow
      • How to create a product manuallyHow to import a product from a fileScheduled product importProduct and SKU SegmentsPreparing the YML file
      OrdersMarket variables in message templateGuide: how to send an order confirmation email
      Loyalty programsarrow
    • Loyalty programsLoyalty integration with external systemsCreating a loyalty program from scratchBasic loyalty program use casesOrder SegmentsPromotion codes
      Reports and analyticsarrow
    • Channel reportTraffic report
        Summary reportarrow
      • Summary report metrics
      Cohorts reportLifetime reportFunnels reportGoals reportAudience growth reportClick map reportLoyalty programs reportBounces reportUndeliveries reportReport on global control groups
      Integrationsarrow
      • Action hooksarrow
      • Altcraft Action HooksAction hooks event typesAction Hook Message StructureJSON batch request (HTTP POST action hook)Message to RabbitMQ brokerMessage to RabbitMQ exchangerMessage to Kafka brokerTest event
        Integration of third-party services using Albatoarrow
      • Connecting Altcraft to Albato Launching the welcome scenario using AlbatoTransmitting event dataSetting up a trigger mailingEvent registrationGoogle Sheets and Altcraft integration AmoCRM and Altcraft integration
      Facebook Ads Manager™Google Ads AudiencesMAXYandex.Audience™VK AdsStatic segment synchronizationYandex AppMetrica™Tilda™Lpgenerator™WhatsAppViber integrationIntegration scopeData Transmitted During SynchronizationNotify
      Weblayersarrow
      • Formsarrow
        • Create a formarrow
        • General settingsForm customization with custom codeForm constructorAppearanceActions and form publicationConditional logic in forms and surveys
        Data analyticsBinding data channel and formsNPS testing
        Pixelsarrow
      • Goal customer actions and scoring
        Pop-upsarrow
      • Creating and publishing a pop-upSetting up a popup in the code editorManaging pop-ups manually via scriptPopup analyticsGuide: pop-up for push subscriptionsCase: Creating a pop-up with the "Wheel of Fortune" widgetBasic cases of placing a popup via the Tag Manager
        Tag Managerarrow
      • Configuring and installing Tag ManagerTrigger typesVariable typesLinking a pixel and the Tag manager
      Settingsarrow
    • Account settingsCustom linksVirtual sendersSending policiesAudit journalTags FAQ
        Users, groups and accessarrow
      • Two-Factor Authentication (2FA)
        Connectionsarrow
      • Connection to Facebook Ads ManagerConnection to Google AdsConnecting to Yandex.Audience™Connection to 360dialogConnection to EdnaConnection to Devino TelecomConnection to SMSTrafficConnection to VK Ads™Connection to MTS OmniChannelCustom Authentication ConnectionOAuth2 connectionBasic Authentication connectionToken Authentication connectionConnection to RapportoMAX connectionConnection to Notify
      Attribute settings
      API requests: where to startarrow
    • Import or update a profileTrigger mailing launchEngage profile in scenario
      Changelogarrow
    • v2026.2.77v2026.1.76v2025.4.75v2025.4.74v2025.3.73v2025.2.72v2025.1.71v2024.4.70v2024.3.69v2024.2.68.2v2024.1.68
    Documentation archiveEmail Marketer's Library
      Campaignsarrow
    • Working with CampaignsLocal control groups (LCG)Stratification Violation ErrorAudience expansionAudience building
  • Communication channels
  • Push Channel
  • Mobile Push
  • Integrate your app with Altcraft
  • Providers: push message structure

Providers: push message structure

Altcraft Platform supports the following services for sending mobile push messages:

  • Google Firebase Cloud Messaging — for Android and iOS apps
  • Apple Push Notification Service — for iOS apps only
  • Yandex.AppMetrica — for Android and iOS apps
  • Huawei Mobile Services — for Android and iOS apps
  • RuStore — for Android apps
note

Connecting the corresponding SDKs in the app is required.

tip

Yandex.AppMetrica uses Google Firebase SDK for delivery. You will need to install it in your app.

Integration with Yandex.AppMetrica is available in Altcraft Platform for importing user profiles, registering their actions and associated value (cost).

You need to verify that the app supports the Altcraft Platform push notification structure. If the format is not supported, Altcraft can adjust the message structure from its side.

Push message format​

Android Firebase​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"message": {
"token": "{{.SubscriptionID}}",
"android": {
"priority": "{{.Priority}}",
"ttl": {{.TTL}},
"data": {
"_ac_push": "Altcraft",
"_uid": "{{.UID}}",
"_launch_id": "{{.LaunchID}}",
"_title": "{{.Title}}",
"_provider": "{{.Provider}}",
"_body": "{{.Body}}",
"_icon": "{{.Icon}}",
"_click_action": "{{.ClickURL}}",
"_color": "{{.ImageBackgroundColor}}",
"_image": "{{.Image}}",
"_vibration": "{{.Vibration}}",
"_soundless": "{{.Soundless}}",
"_hub_link": "{\"open\": \"{{.URLOpenEvent}}\", \"ack\": \"{{.URLDelivEvent}}\"}",
"_buttons": "[{{ range $index, $button := .Actions }}{{if $index}},{{end}}{\"label\":\"{{$button.Label}}\",\"link\":\"{{$button.Link}}\"}{{ end }}]"
}
}
}
}
FieldDescription
tokenDevice push token from FCM. Unique for each device and app.
android.priorityDelivery priority: HIGH or NORMAL. Determines whether the device is woken up to receive the message.
android.ttlMessage lifetime in seconds (TTL — Time To Live). The message is not delivered after expiration. Set in account settings.
data._ac_pushSend marker. Always "Altcraft". Used by the app to identify pushes from Altcraft Platform.
data._uidUnique message ID (SendMessageID). Contains encoded data: account, campaign, resource, channel, profile, subscription, timestamp, and checksum. Example: T2k3mN8vR4pQ1xY7zL5wJ9hF6dA0bC.
data._launch_idSend ID within the mailing. Contains accountID, campaignID, and launch timestamp, encoded in base58. Example: 123_456_aBcDeFgHiJkLmNoPqRsTuVwXyZ. All messages in the same mailing share the same launch_id.
data._titlePush notification title. Displayed in the notification shade.
data._providerProvider identifier. For this provider: Android Firebase.
data._bodyPush notification body. Main message text.
data._iconNotification icon URL. Displayed next to the text in the notification shade.
data._click_actionURL opened on tap. Can be a regular link or a deeplink.
data._colorIcon background color in hex format (e.g., #FF5722).
data._imageBanner image URL. Displayed as a large image in the expanded notification.
data._vibrationForced vibration flag: true or false.
data._soundlessSilent notification flag: true or false. When true, sound is disabled.
data._hub_linkJSON object with two tracking URLs: open — URL to register the open event, ack — URL to register the delivery event. URLs are encrypted and unique per message.
data._buttonsJSON array of action buttons. Each button contains label (text) and link (URL). Generated from buttons added in message settings.
tip

_uid — unique message ID (SendMessageID). Contains encoded data about account, campaign, resource, channel, profile, subscription, and timestamp. Each push has its own unique _uid.

_launch_id — send ID within the mailing. All messages in the same mailing share the same launch_id. Contains accountID, campaignID, and launch timestamp.

iOS Firebase​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"message": {
"token": "{{.SubscriptionID}}",
"apns": {
"headers": {
"apns-expiration": "{{.TTL}}"
},
"payload": {
"aps": {
"category": "Altcraft",
"sound": {{.Sound}},
"mutable-content": 1,
"alert": {
"title": "{{.Title}}",
"subtitle": "{{.SubTitle}}",
"body": "{{.Body}}"
}
},
"_uid": "{{.UID}}",
"_provider": "{{.Provider}}",
"_launch_id": "{{.LaunchID}}",
"_ac_push": "Altcraft",
"_click-url": "{{.ClickURL}}",
"_media": "{{.Media}}",
"_soundless": "{{.Soundless}}",
"_hub_link": "{\"open\": \"{{.URLOpenEvent}}\", \"ack\": \"{{.URLDelivEvent}}\"}",
"_buttons": "[{{ range $index, $button := .Actions }}{{if $index}},{{end}}{\"label\":\"{{$button.Label}}\",\"link\":\"{{$button.Link}}\"}{{ end }}]"
}
}
}
}
FieldDescription
tokenDevice push token from APNs via FCM. Unique for each device and app.
apns.headers.apns-expirationMessage lifetime in seconds. APNs does not deliver the message after expiration.
apns.payload.aps.categoryNotification category. Always "Altcraft". Used to determine available actions on tap.
apns.payload.aps.soundNotification sound. Default: "default". Empty string in silent mode. Can contain a sound file name from the app.
apns.payload.aps.mutable-contentAlways 1. Enables Content-Extension for notification modification (e.g., image download).
apns.payload.aps.alert.titlePush notification title.
apns.payload.aps.alert.subtitleNotification subtitle. Displayed below the title.
apns.payload.aps.alert.bodyPush notification body. Main message text.
apns.payload._uidUnique message ID (SendMessageID). Same as _uid in Android.
apns.payload._providerProvider identifier. For this provider: iOS Firebase.
apns.payload._launch_idSend ID within the mailing.
apns.payload._ac_pushSend marker. Always "Altcraft".
apns.payload._click-urlURL opened on tap.
apns.payload._mediaImage URL for rich notification.
apns.payload._soundlessSilent notification flag: true or false.
apns.payload._hub_linkJSON object with tracking URLs: open (open) and ack (delivery).
apns.payload._buttonsJSON array of action buttons with label and link.
tip

_uid — unique message ID (SendMessageID). _launch_id — send ID within the mailing.

iOS APNS​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"aps": {
"category": "Altcraft",
"mutable-content": 1,
"sound": {{.Sound}},
"alert": {
"title": "{{.Title}}",
"subtitle": "{{.SubTitle}}",
"body": "{{.Body}}"
}
},
"_ac_push": "Altcraft",
"_click-url": "{{.ClickURL}}",
"_soundless": "{{.Soundless}}",
"_media": "{{.Media}}",
"_uid": "{{.UID}}",
"_provider": "{{.Provider}}",
"_hub_link": {
"open": "{{.URLOpenEvent}}",
"ack": "{{.URLDelivEvent}}"
},
"_buttons": "[{{ range $index, $button := .Actions }}{{if $index}},{{end}}{\"label\":\"{{$button.Label}}\",\"link\":\"{{$button.Link}}\"}{{ end }}]"
}
FieldDescription
aps.categoryNotification category. Always "Altcraft".
aps.mutable-contentAlways 1. Enables Content-Extension.
aps.soundNotification sound. Default: "default".
aps.alert.titleNotification title.
aps.alert.subtitleNotification subtitle.
aps.alert.bodyNotification body.
_ac_pushSend marker. Always "Altcraft".
_click-urlURL to open on tap.
_soundlessSilent notification flag.
_mediaImage URL for rich notification.
_uidUnique message ID (SendMessageID).
_providerProvider identifier: iOS APNS.
_hub_link.openURL to register the open event.
_hub_link.ackURL to register the delivery event.
_buttonsJSON array of action buttons.

AppMetrica iOS​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"push_batch_request": {
"group_id": 97737,
"tag": "tag",
"batch": [
{
"messages": {
"iOS": {
"silent": true/false,
"content": {
"title": "Title",
"text": "Body",
"badge": 0-999,
"expiration": 0,
"data": "{\"hub_link\":{\"ack\":\"URLDelivEvent\",\"open\":\"URLOpenEvent\"},\"icon\":\"Icon\",\"media\":\"Media\"}"
},
"open_action": {
"url": "URL",
"deeplink": "Deeplink"
}
}
},
"devices": [
{
"id_values": ["SubscriptionID"],
"id_type": "ios_push_token"
}
]
}
]
}
}
FieldDescription
push_batch_request.group_idGroup ID in AppMetrica. Set when configuring the channel.
push_batch_request.tagMailing tag. Used to group sends in AppMetrica.
push_batch_request.batchArray of messages to send.
messages.iOS.silentSilent push flag: true — background delivery without notification, false — standard notification.
messages.iOS.content.titleNotification title.
messages.iOS.content.textNotification body.
messages.iOS.content.badgeApp badge counter. Range: 0–999.
messages.iOS.content.expirationMessage lifetime in seconds. 0 — message is not stored if the device is unavailable.
messages.iOS.content.dataJSON string with additional data: hub_link (tracking), icon (icon), media (image).
messages.iOS.open_action.urlURL to open on tap (regular link).
messages.iOS.open_action.deeplinkDeeplink to open on tap.
devices.id_valuesArray of device push tokens.
devices.id_typeIdentifier type: ios_push_token for iOS.
note

In AppMetrica iOS, _uid and _launch_id fields are not passed directly in the message structure. Tracking is handled through hub_link inside the data field.

AppMetrica Android​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"push_batch_request": {
"group_id": 97737,
"tag": "tag",
"batch": [
{
"messages": {
"android": {
"silent": true/false,
"content": {
"title": "Title",
"text": "Body",
"time_to_live": 0,
"image": "Icon",
"icon_background": "IconBackground",
"banner": "Banner",
"led_color": "LEDColor",
"data": "{\"hub_link\":{\"ack\":\"URLDelivEvent\",\"open\":\"URLOpenEvent\"}}"
},
"open_action": {
"url": "URL",
"deeplink": "Deeplink"
}
}
},
"devices": [
{
"id_values": ["SubscriptionID"],
"id_type": "google_aid"
}
]
}
]
}
}
FieldDescription
push_batch_request.group_idGroup ID in AppMetrica.
push_batch_request.tagMailing tag.
push_batch_request.batchArray of messages to send.
messages.android.silentSilent push flag.
messages.android.content.titleNotification title.
messages.android.content.textNotification body.
messages.android.content.time_to_liveMessage lifetime in seconds.
messages.android.content.imageNotification icon URL.
messages.android.content.icon_backgroundIcon background color in hex format.
messages.android.content.bannerBanner image URL.
messages.android.content.led_colorLED indicator color in hex format.
messages.android.content.dataJSON string with tracking data: hub_link contains URLs for ack (delivery) and open (open) events.
messages.android.open_action.urlURL to open on tap.
messages.android.open_action.deeplinkDeeplink to open on tap.
devices.id_valuesArray of device identifiers (Google AID).
devices.id_typeIdentifier type: google_aid for Android.
note

In AppMetrica Android, _uid and _launch_id fields are not passed directly in the message structure. Tracking is handled through hub_link inside the data field.

HMS Android​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"message": {
"token": ["{{.SubscriptionID}}"],
"data": {
"_ac_push": "Altcraft",
"_title": "{{.Title}}",
"_uid": "{{.UID}}",
"_provider": "{{.Provider}}",
"_body": "{{.Body}}",
"_launch_id": "{{.LaunchID}}",
"_vibration": "{{.Vibration}}",
"_soundless": "{{.Soundless}}",
"_hub_link": "{\"open\": \"{{.URLOpenEvent}}\", \"ack\": \"{{.URLDelivEvent}}\"}",
"_icon": "{{.Icon}}",
"_click_action": "{{.ClickURL}}",
"_color": "{{.ImageBackgroundColor}}",
"_image": "{{.Image}}",
"_buttons": "[{{ range $index, $button := .Actions }}{{if $index}},{{end}}{\"label\":\"{{$button.Label}}\",\"link\":\"{{$button.Link}}\"}{{ end }}]"
},
"android": {
"urgency": "HIGH",
"ttl": {{.TTL}}
}
}
}
FieldDescription
message.tokenArray of HMS device push tokens. Unlike Firebase, the token is passed as an array.
data._ac_pushSend marker. Always "Altcraft".
data._titleNotification title.
data._uidUnique message ID (SendMessageID).
data._providerProvider identifier: Android HMS.
data._bodyNotification body.
data._launch_idSend ID within the mailing.
data._vibrationForced vibration flag.
data._soundlessSilent notification flag.
data._hub_linkJSON object with tracking URLs: open and ack.
data._iconNotification icon URL.
data._click_actionURL to open on tap.
data._colorIcon background color in hex format.
data._imageBanner image URL.
data._buttonsJSON array of action buttons.
android.urgencyDelivery urgency. Always HIGH.
android.ttlMessage lifetime in seconds.

HMS iOS​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"message": {
"token": ["{{.SubscriptionID}}"],
"apns": {
"headers": {
"apns-expiration": "{{.TTL}}"
},
"payload": {
"aps": {
"category": "Altcraft",
"mutable-content": 1,
"sound": {{.Sound}},
"alert": {
"title": "{{.Title}}",
"subtitle": "{{.SubTitle}}",
"body": "{{.Body}}"
}
},
"_ac_push": "Altcraft",
"_provider": "{{.Provider}}",
"_click-url": "{{.ClickURL}}",
"_soundless": "{{.Soundless}}",
"_uid": "{{.UID}}",
"_media": "{{.Media}}",
"_hub_link": {
"open": "{{.URLOpenEvent}}",
"ack": "{{.URLDelivEvent}}"
},
"_buttons": "[{{ range $index, $button := .Actions }}{{if $index}},{{end}}{\"label\":\"{{$button.Label}}\",\"link\":\"{{$button.Link}}\"}{{ end }}]"
},
"hms_options": {
"target_user_type": 1
}
}
}
}
FieldDescription
message.tokenArray of HMS device push tokens.
apns.headers.apns-expirationMessage lifetime in seconds.
apns.payload.aps.categoryNotification category. Always "Altcraft".
apns.payload.aps.mutable-contentAlways 1. Enables Content-Extension.
apns.payload.aps.soundNotification sound.
apns.payload.aps.alert.titleNotification title.
apns.payload.aps.alert.subtitleNotification subtitle.
apns.payload.aps.alert.bodyNotification body.
apns.payload._ac_pushSend marker.
apns.payload._providerProvider identifier: iOS HMS.
apns.payload._click-urlURL to open on tap.
apns.payload._soundlessSilent notification flag.
apns.payload._uidUnique message ID (SendMessageID).
apns.payload._mediaImage URL for rich notification.
apns.payload._hub_link.openURL to register the open event.
apns.payload._hub_link.ackURL to register the delivery event.
apns.payload._buttonsJSON array of action buttons.
apns.hms_options.target_user_typeTarget user type in HMS. Always 1.

RuStore Android​

note

It's possible to edit the JSON object (on request).

Adding additional data to the data object is supported. This can be done for each sending individually in the Altcraft Platform message settings.

{
"message": {
"token": "{{.SubscriptionID}}",
"data": {
"_ac_push": "Altcraft",
"_title": "{{.Title}}",
"_uid": "{{.UID}}",
"_provider": "{{.Provider}}",
"_body": "{{.Body}}",
"_icon": "{{.Icon}}",
"_image": "{{.Image}}",
"_launch_id": "{{.LaunchID}}",
"_vibration": "{{.Vibration}}",
"_soundless": "{{.Soundless}}",
"_color": "{{.ImageBackgroundColor}}",
"_click_action": "{{.ClickURL}}",
"_hub_link": "{\"open\": \"{{.URLOpenEvent}}\", \"ack\": \"{{.URLDelivEvent}}\"}",
"_buttons": "[{{ range $index, $button := .Actions }}{{if $index}},{{end}}{\"label\":\"{{$button.Label}}\",\"link\":\"{{$button.Link}}\"}{{ end }}]"
},
"android": {
"priority": "HIGH",
"ttl": {{.TTL}}
}
}
}
FieldDescription
message.tokenRuStore device push token.
data._ac_pushSend marker. Always "Altcraft".
data._titleNotification title.
data._uidUnique message ID (SendMessageID).
data._providerProvider identifier: Android RuStore.
data._bodyNotification body.
data._iconNotification icon URL.
data._imageBanner image URL.
data._launch_idSend ID within the mailing.
data._vibrationForced vibration flag.
data._soundlessSilent notification flag.
data._colorIcon background color in hex format.
data._click_actionURL to open on tap.
data._hub_linkJSON object with tracking URLs: open and ack.
data._buttonsJSON array of action buttons.
android.priorityDelivery priority. Always HIGH.
android.ttlMessage lifetime in seconds.
tip

_uid — unique message ID (SendMessageID). _launch_id — send ID within the mailing.

Common fields across all providers​

The fields below are present in Altcraft Platform push message structures regardless of the provider.

Identifiers​

FieldDescription
_uidSendMessageID — unique identifier for each sent message. Contains encoded data: account, campaign, resource, channel, profile, subscription IDs, send timestamp, and checksum. Starts with a version prefix: T (Full), U (Unique), E (Email). Example: T2k3mN8vR4pQ1xY7zL5wJ9hF6dA0bC.
_launch_idSend ID within the mailing. All messages in the same mailing share the same launch_id. Contains accountID, campaignID, and launch timestamp, encoded in base58 (Flickr alphabet). Format: accountID_campaignID_timestamp. Example: 123_456_aBcDeFgHiJkLmNoPqRsTuVwXyZ.
_ac_pushSend marker from Altcraft Platform. Always "Altcraft". Used by the app to identify push notifications from the platform.
_providerProvider identifier through which the message was sent. Examples: Android Firebase, iOS Firebase, iOS APNS, Android HMS, Android RuStore.

Notification content​

FieldDescription
_title / titlePush notification title. Displayed in the device notification shade.
_body / text / bodyPush notification body. Main message text.
_subtitle / subtitleNotification subtitle. iOS only. Displayed below the title.
_icon / imageNotification icon URL. Displayed next to the text in the notification shade.
_image / banner / _mediaBanner image URL. Displayed as a large image in the expanded notification.
_click_action / _click-url / urlURL opened on tap. Can be a regular link or a deeplink.
_color / icon_backgroundIcon background color in hex format (e.g., #FF5722).

Delivery control​

FieldDescription
ttl / apns-expiration / time_to_live / expirationMessage lifetime in seconds (TTL — Time To Live). The message is not delivered after expiration. Set in account settings.
priority / urgencyDelivery priority: HIGH or NORMAL. Determines whether the device is woken up to receive the message.
_soundless / silentSilent notification flag: true — sound disabled, false — default sound.
_vibrationForced vibration flag (Android): true or false.
soundNotification sound (iOS). Default: "default". Can contain a sound file name from the app.

Event tracking​

FieldDescription
_hub_linkJSON object with two encrypted URLs for delivery event tracking. Each URL is unique for a specific message and subscription.
_hub_link.openURL to register the open event. Fires when the user taps the notification.
_hub_link.ackURL to register the delivery event. Fires when the push service confirms delivery to the device.

Action buttons​

FieldDescription
_buttonsJSON array of action buttons. Each button contains label (button text) and link (URL opened on tap). Generated from buttons added in Altcraft Platform message settings.

Additional data​

FieldDescription
ak_uidAdditional field added to the data object alongside _uid. Contains the same SendMessageID. Used for compatibility with some SDKs.
categoryNotification category (iOS). Always "Altcraft". Used to determine available actions on tap.
mutable-contentiOS flag. Always 1. Enables Content-Extension for notification modification (e.g., image download).

Differences between Legacy and v1 formats​

Altcraft Platform supports two formats for sending via Firebase:

Legacy API (https://fcm.googleapis.com/fcm/send):

  • Uses the deprecated FCM endpoint.
  • Parameters are passed at the root level of the JSON object.
  • Custom data is added to the data field at the top level.

API v1 (https://fcm.googleapis.com/v1/projects/{project_id}/messages:send):

  • Modern FCM endpoint.
  • Message structure is wrapped in a message object.
  • Custom data is added to message.data.
  • Uses JWT authentication instead of server key.
  • Supports batch sending and multicast.

The current version of Altcraft Platform uses API v1 for all Firebase sends.

How to add custom data to the data object​

Altcraft Platform supports adding user-defined fields to the data object of a push message. Custom data is set in message settings and merged with system fields.

Processing order:

  1. Base custom data from push.CustomJSON (global for the message).
  2. Platform-specific custom data from push.Android.CustomJSON or push.IOS.CustomJSON (overrides base data).
  3. Altcraft system fields are added independently.

Example of custom data:

{
"custom_field_1": "value1",
"custom_field_2": 42,
"custom_object": "{\"nested_key\": \"nested_value\"}"
}
note

Custom data is added to the data object alongside system fields. Field names should not conflict with system prefixes (_uid, _launch_id, _ac_push, etc.).

To add custom data, contact Altcraft Platform support.

Last updated on Aug 6, 2026
Previous
Event registration
Next
Web Push
  • Push message format
    • Android Firebase
    • iOS Firebase
    • iOS APNS
    • AppMetrica iOS
    • AppMetrica Android
    • HMS Android
    • HMS iOS
    • RuStore Android
  • Common fields across all providers
    • Identifiers
    • Notification content
    • Delivery control
    • Event tracking
    • Action buttons
    • Additional data
  • Differences between Legacy and v1 formats
  • How to add custom data to the data object
© 2015 - 2026 Altcraft, LLC. All rights reserved.