Learn how to use the Netcore CE Create Template API V5 with multiple use cases.
Before You Begin
The Contacts API requires an API key to authenticate your request.
| Header | Required | Description | Example |
|---|---|---|---|
api-key | Yes | Your Netcore API key used to authenticate the request. | YOUR_API_KEY |
Content-Type | Yes | Specifies that the request body is sent in JSON format. | application/json |
Create a Basic APN Template
When to use: Create a standard APN template with a title, message, and landing page, without optional rich media or interactive elements.
What changes: Set channel_name to apn, template_type to regular, and provide the basic content fields.
Best for: Welcome messages, order updates, reminders, and simple promotional notifications.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Order Update",
"category_name": "Transactional",
"custom": {
"os": "all",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "Order Confirmed",
"description": "The order has been confirmed.",
"landing_page_type": "app_homepage",
"landing_page_url": ""
}
}
]
}
}Validation note: Confirm whether landing_page_url can be empty when landing_page_type is app_homepage.
Create Templates for Different Template Types
When to use: Create different APN experiences for different campaign requirements, such as a standard notification and a rich-media notification.
What changes: Set custom.template_type to the appropriate supported value for each template. Configure content.apn_interactions and its optional fields according to the selected type.
Best for: Building a reusable template library for promotional, informational, and interactive campaigns.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Standard Promotion",
"category_name": "Promotional",
"custom": {
"os": "all",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "Special Offer",
"description": "Explore the latest offers.",
"landing_page_type": "app_homepage",
"landing_page_url": ""
}
},
{
"channel_name": "apn",
"template_name": "Rich Media Promotion",
"category_name": "Promotional",
"custom": {
"os": "android",
"template_type": "<SUPPORTED_TEMPLATE_TYPE>",
"Personalisation": {}
},
"content": {
"title": "Explore Our Collection",
"description": "Discover products picked for you.",
"landing_page_type": "app_homepage",
"landing_page_url": "",
"apn_interactions": [
{
"os_type": "android",
"rich_media": {
"media_type": "image",
"media_url": "https://example.com/promotion.jpg",
"layout": "portrait",
"image_alignment": "left"
}
}
]
}
}
]
}
}Create an APN Timer Template
When to use: Create an APN template that displays a countdown timer for a limited-time offer or promotion.
What changes: Set channel_name to apn, template_type to timer, and configure the timer duration, appearance, and end message.
Best for: Flash sales, limited-time discounts, promotional campaigns, and offer expiry reminders.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Limited Time Offer Timer",
"category_name": "Promotional",
"custom": {
"os": "all",
"template_type": "timer"
},
"content": {
"title": "Special Offer",
"description": "Your exclusive offer is available for a limited time.",
"landing_page_type": "app_homepage",
"apn_interactions": [
{
"os_type": "android",
"timer": {
"end_message": "Offer has ended",
"background_color": "#FF6600",
"text_color": "#FFFFFF",
"settings": {
"type": "duration",
"days": 0,
"hours": 2,
"minutes": 0,
"seconds": 0
}
}
},
{
"os_type": "ios",
"timer": {
"end_message": "Offer has ended",
"background_color": "#FF6600",
"text_color": "#FFFFFF",
"settings": {
"type": "duration",
"days": 0,
"hours": 2,
"minutes": 0,
"seconds": 0
}
}
}
]
}
}
]
}
}Create Platform-Specific Templates
When to use: Create templates with different content or interaction settings for Android and iOS.
What changes: Configure custom.os and content.apn_interactions[].os_type for the intended platform. Add platform-specific settings only where supported.
Best for: Campaigns where the notification experience differs between Android and iOS.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Platform Specific Offer",
"category_name": "Promotional",
"custom": {
"os": "android",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "A Special Offer",
"description": "Open the app to explore the offer.",
"landing_page_type": "app_homepage",
"landing_page_url": "",
"apn_interactions": [
{
"os_type": "android",
"rich_media": {
"media_type": "image",
"media_url": "https://example.com/android-offer.jpg",
"layout": "portrait",
"image_alignment": "left"
}
}
]
}
}
]
}
}Good to know: If a campaign requires both Android and iOS experiences, confirm whether the API expects separate templates or multiple entries in apn_interactions within the same template.
Create a Carousel Template with Multiple Products
When to use: Display multiple products, offers, or recommendations in a single notification.
What changes: Configure rich_media.media_type as carousel and provide multiple objects in carousel_metadata. Each item can include an image, title, description, and call-to-action.
Best for: Product discovery, cross-sell campaigns, seasonal promotions, and recommendation campaigns.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Product Carousel",
"category_name": "Promotional",
"custom": {
"os": "android",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "Recommended for You",
"description": "Explore these selected products.",
"landing_page_type": "app_homepage",
"landing_page_url": "",
"apn_interactions": [
{
"os_type": "android",
"rich_media": {
"media_type": "carousel",
"media_url": "",
"layout": "portrait",
"carousel_metadata": [
{
"image_url": "https://example.com/product-1.jpg",
"title": "Product One",
"description": "Explore product one.",
"call_to_action": {
"type": "url",
"url": "https://example.com/product-1"
}
},
{
"image_url": "https://example.com/product-2.jpg",
"title": "Product Two",
"description": "Explore product two.",
"call_to_action": {
"type": "url",
"url": "https://example.com/product-2"
}
}
]
}
}
]
}
}
]
}
}Good to know: Confirm whether media_url is required for carousel templates and whether there is a maximum number of carousel items.
Create a Template with Multiple Action Buttons
When to use: Provide multiple actions directly from a notification.
What changes: Add multiple objects to apn_interactions[].action_button, configuring each button's label, colors, and call-to-action.
Best for: Order updates with actions such as Track Order and View Details, or promotions with Shop Now and View Offer.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Order Actions",
"category_name": "Transactional",
"custom": {
"os": "android",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "Your Order Is on Its Way",
"description": "Choose an action to continue.",
"landing_page_type": "app_homepage",
"landing_page_url": "",
"apn_interactions": [
{
"os_type": "android",
"action_button": [
{
"action_title": "Track Order",
"background_color": "#FFFFFF",
"text_color": "#000000",
"call_to_action": {
"type": "url",
"url": "https://example.com/track-order"
}
},
{
"action_title": "View Details",
"background_color": "#FFFFFF",
"text_color": "#000000",
"call_to_action": {
"type": "url",
"url": "https://example.com/order-details"
}
}
]
}
]
}
}
]
}
}Good to know: Confirm the maximum supported number of action buttons and the allowed call_to_action.type values.
Create a Template with Personalisation
When to use: Create a template that uses dynamic values to tailor messages to individual recipients.
What changes: Configure custom.Personalisation according to the supported personalisation schema and use the corresponding placeholders in the content.
Best for: Personalised greetings, loyalty messages, product recommendations, and customer-specific offers.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Personalised Greeting",
"category_name": "Promotional",
"custom": {
"os": "all",
"template_type": "regular",
"Personalisation": {
"<SUPPORTED_KEY>": "<SUPPORTED_VALUE>"
}
},
"content": {
"title": "A Special Message",
"description": "A personalised message for the recipient.",
"landing_page_type": "app_homepage",
"landing_page_url": ""
}
}
]
}
}Create a Template with a Countdown Timer
When to use: Display a countdown for a time-sensitive offer, sale, or event.
What changes: Add the timer object under apn_interactions and configure its text, colors, and settings.
Best for: Flash sales, limited-time offers, and event reminders.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Limited Time Offer",
"category_name": "Promotional",
"custom": {
"os": "android",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "Offer Ends Soon",
"description": "Shop before the offer expires.",
"landing_page_type": "app_homepage",
"landing_page_url": "",
"apn_interactions": [
{
"os_type": "android",
"timer": {
"text": "Offer ends in",
"end_message": "Offer ended",
"background_color": "#FFFFFF",
"text_color": "#000000",
"settings": {
"type": "date_time",
"end_date_time": "2026-12-31T23:59:59",
"days": 0,
"hours": 0,
"minutes": 0,
"seconds": 0
}
}
}
]
}
}
]
}
}Good to know: Confirm the accepted date-time format and whether duration-based settings or date-time settings are mutually exclusive.
Create a Template with Quick Reply
When to use: Allow recipients to respond directly from the notification using a quick-reply interaction.
What changes: Add quick_reply with the button text, placeholder text, and submission text.
Best for: Feedback collection, simple responses, and conversational campaigns.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Customer Feedback",
"category_name": "Engagement",
"custom": {
"os": "android",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "How Was Your Experience?",
"description": "Share feedback about your recent experience.",
"landing_page_type": "app_homepage",
"landing_page_url": "",
"apn_interactions": [
{
"os_type": "android",
"quick_reply": {
"button_text": "Reply",
"placeholder_text": "Enter feedback",
"submission_text": "Thank you for your feedback."
}
}
]
}
}
]
}
}Good to know: Confirm platform compatibility and any character limits for quick-reply fields.
Create a Template with Custom Key-Value Parameters
When to use: Attach additional key-value data to a notification for supported downstream processing or application-specific use.
What changes: Add entries to content.custom_key_values, specifying the platform scope, key, and value.
Best for: Passing campaign identifiers, product references, or supported application metadata.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Product Notification",
"category_name": "Promotional",
"custom": {
"os": "all",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "A Product Update",
"description": "Explore the latest product information.",
"landing_page_type": "app_homepage",
"landing_page_url": "",
"custom_key_values": [
{
"ostype": "android",
"key": "campaign_id",
"value": "campaign_123"
},
{
"ostype": "android",
"key": "product_id",
"value": "product_456"
}
]
}
}
]
}
}Good to know: Confirm whether duplicate keys are allowed, whether values must be strings, and how ostype interacts with custom.os.
Create Multiple Templates in a Single Request
When to use: Create several templates together instead of making separate API calls for each one.
What changes: Add multiple template objects to data.templates. Each object can have its own name, category, platform, and content.
Best for: Initial template setup, bulk onboarding, and synchronising a template library from an external system.
{
"data": {
"templates": [
{
"channel_name": "apn",
"template_name": "Welcome Notification",
"category_name": "Engagement",
"custom": {
"os": "all",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "Welcome",
"description": "Welcome to our app.",
"landing_page_type": "app_homepage",
"landing_page_url": ""
}
},
{
"channel_name": "apn",
"template_name": "Order Notification",
"category_name": "Transactional",
"custom": {
"os": "all",
"template_type": "regular",
"Personalisation": {}
},
"content": {
"title": "Order Update",
"description": "There is an update on your order.",
"landing_page_type": "app_homepage",
"landing_page_url": ""
}
}
]
}
}Good to know: Document the maximum number of templates per request and how the API reports partial success or failure if one template in the batch is invalid.
