@kadam-net/n8n-nodes-kadam
Version:
Kadam node for n8n to manage campaigns, creatives, and more.
1,049 lines • 77.3 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Kadam = void 0;
const axios_1 = __importDefault(require("axios"));
const n8n_workflow_1 = require("n8n-workflow");
const handlers_1 = require("./handlers");
class Kadam {
constructor() {
this.description = {
displayName: 'Kadam',
name: 'kadam',
icon: 'file:kadam.png',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["resource"] + ": " + $parameter["operation"]}}',
description: 'Interact with Kadam API (v1.4.x) for managing campaigns, clients, creatives, and more.',
defaults: { name: 'Kadam' },
inputs: [{ type: "main" }],
outputs: [{ type: "main" }],
credentials: [{ name: 'kadam', required: true }],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Campaign',
value: 'campaign',
},
{
name: 'Creative',
value: 'creative',
},
{
name: 'Stats',
value: 'stats',
},
{
name: 'Targeting',
value: 'targeting',
},
],
default: 'stats',
description: 'Resource to use',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: [
'stats',
],
},
},
options: [
{
name: 'Get Campaign Stats',
value: 'getCampaignStats',
description: 'Retrieve campaign performance statistics',
action: 'Get campaign stats',
},
{
name: 'Get Creative Stats By Campaign IDs',
value: 'getCreativeStatsByCampaignIds',
description: 'Retrieve creative stats filtered by Campaign IDs',
action: 'Get creative stats by campaign IDs',
},
{
name: 'Get Creative Stats By Creative IDs',
value: 'getCreativeStatsByCreativeIds',
description: 'Retrieve creative stats filtered by Creative IDs',
action: 'Get creative stats by creative IDs',
},
{
name: 'Get Placement Stats',
value: 'getPlacementStats',
description: 'Retrieve placement performance statistics',
action: 'Get placement stats',
},
],
default: 'getCampaignStats',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: [
'campaign',
],
},
},
options: [
{
name: 'Create',
value: 'createCampaign',
description: 'Create a new advertising campaign',
action: 'Create a campaign',
},
{
name: 'Delete',
value: 'deleteCampaign',
description: 'Delete an existing campaign',
action: 'Delete a campaign',
},
{
name: 'Get',
value: 'getCampaigns',
description: 'Retrieve a list of campaigns',
action: 'Get campaigns',
},
{
name: 'Get Ad Formats',
value: 'getAdFormats',
description: 'Retrieve available ad formats',
action: 'Get ad formats',
},
{
name: 'Update Placement Multiplier',
value: 'updatePlacementMultiplier',
description: 'Modify bid multiplier for specific placement',
action: 'Update placement multiplier',
},
{
name: 'Get Categories',
value: 'getCampaignCategories',
description: 'Retrieve campaign categories',
action: 'Get campaign categories',
},
{
name: 'Update',
value: 'updateCampaign',
description: 'Update an existing campaign',
action: 'Update a campaign',
},
],
default: 'getCampaigns',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: [
'targeting',
],
},
},
options: [
{
name: 'Get Browsers',
value: 'getBrowsers',
description: 'Retrieve available browsers for targeting',
action: 'Get browsers',
},
{
name: 'Get Countries',
value: 'getCountries',
description: 'Retrieve available countries for targeting',
action: 'Get countries',
},
{
name: 'Get Devices',
value: 'getDevices',
description: 'Retrieve available device types for targeting',
action: 'Get devices',
},
{
name: 'Get Geo Countries',
value: 'getGeoCountries',
description: 'Retrieve geo-targeted countries',
action: 'Get geo countries',
},
{
name: 'Get Languages',
value: 'getLanguages',
description: 'Retrieve available languages for targeting',
action: 'Get languages',
},
{
name: 'Get Platforms',
value: 'getPlatforms',
description: 'Retrieve available platforms for targeting',
action: 'Get platforms',
},
{
name: 'Get Server Time',
value: 'getServerTime',
description: 'Retrieve current server time',
action: 'Get server time',
},
],
default: 'getCountries',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: [
'creative',
],
},
},
options: [
{
name: 'Create',
value: 'createCreative',
description: 'Create a new ad creative',
action: 'Create a creative',
},
{
name: 'Delete',
value: 'deleteCreative',
description: 'Delete an existing creative',
action: 'Delete a creative',
},
{
name: 'Get',
value: 'getCreatives',
description: 'Retrieve a list of creatives',
action: 'Get creatives',
},
{
name: 'Get Banner Sizes',
value: 'getBannerSizes',
description: 'Retrieve available banner dimensions',
action: 'Get banner sizes',
},
{
name: 'Update',
value: 'updateCreative',
description: 'Update an existing creative',
action: 'Update a creative',
},
{
name: 'Upload Media',
value: 'uploadMedia',
description: 'Upload media file for use in creatives',
action: 'Upload media',
},
],
default: 'getCreatives',
},
{
displayName: 'Campaigns',
name: 'campaigns',
type: 'multiOptions',
default: [],
typeOptions: {
loadOptionsMethod: 'getCampaignsOptions',
loadOptionsDependsOn: ['clientId'],
},
required: true,
description: 'List of campaign IDs to retrieve stats for. Use "Get Campaigns" to retrieve IDs.',
displayOptions: { show: { operation: ['getCampaignStats', 'getPlacementStats', 'getCreativeStatsByCampaignIds'] } },
},
{
displayName: 'Creatives',
name: 'creatives',
type: 'string',
default: '',
required: true,
description: 'Comma-separated list of creative IDs (e.g., "789,101"). Use "Get Creatives" to retrieve IDs.',
displayOptions: { show: { operation: ['getCreativeStatsByCreativeIds'] } },
},
{
displayName: 'Group By',
name: 'group',
type: 'options',
options: [
{ name: 'Date', value: 'date', description: 'Group statistics by date' },
{ name: 'Campaign', value: 'campaign', description: 'Group statistics by campaign (only for campaign stats)' },
{ name: 'Creative', value: 'creative', description: 'Group statistics by creative (only for creative stats)' },
],
default: 'date',
required: true,
description: 'How to group the statistics data.',
displayOptions: { show: { operation: ['getCampaignStats', 'getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds'] } },
},
{
displayName: 'Date From',
name: 'dateFrom',
type: 'dateTime',
default: '={{ $today.minus({ days: 7 }).format("yyyy-MM-dd") }}',
required: true,
description: 'Start date for statistics (set to 7 days ago by default)',
displayOptions: { show: { operation: ['getCampaignStats', 'getPlacementStats', 'getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds'] } },
},
{
displayName: 'Date To',
name: 'dateTo',
type: 'dateTime',
default: '={{ $today.format("yyyy-MM-dd") }}',
required: true,
description: 'End date for statistics (set to today by default)',
displayOptions: { show: { operation: ['getCampaignStats', 'getPlacementStats', 'getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds'] } },
},
{
displayName: 'Sort',
name: 'sort',
type: 'string',
default: '',
description: 'Sort parameters (e.g., "views,-clicks"). Prefix with "-" for descending order.',
hint: 'Example: "views,-clicks" (ascending views, descending clicks)',
displayOptions: { show: { operation: ['getCampaignStats', 'getPlacementStats', 'getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds'] } },
},
{
displayName: 'Campaign ID',
name: 'campaignId',
type: 'options',
default: '',
required: true,
typeOptions: { loadOptionsMethod: 'getCampaignsOptions' },
description: 'ID of the campaign to update or get codes for. Use "Get Campaigns" to retrieve IDs.',
displayOptions: { show: { operation: ['updatePlacementMultiplier', 'createCreative', 'updateCampaign'] } },
},
{
displayName: 'Multiplier',
name: 'multiplier',
type: 'number',
typeOptions: {
minValue: 0,
},
default: 1,
required: true,
description: 'New multiplier value (e.g., 0.8 or 1.2). The \'x\' prefix will be added automatically.',
displayOptions: { show: { operation: ['updatePlacementMultiplier'] } },
},
{
displayName: 'Placement ID',
name: 'placement',
type: 'string',
default: '',
required: true,
description: 'ID of the placement to update the multiplier for.',
displayOptions: { show: { operation: ['updatePlacementMultiplier'] } },
},
{
displayName: 'Campaign Name',
name: 'campaignName',
type: 'string',
required: true,
default: '',
description: 'The name of the new campaign',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['createCampaign'],
},
},
},
{
displayName: 'Ad Format',
name: 'adFormatId',
type: 'options',
required: true,
typeOptions: {
loadOptionsMethod: 'getAdFormats',
},
default: '',
description: 'Select the ad format for the campaign',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['createCampaign'],
},
hide: {
operation: ['updateCampaign'],
}
},
},
{
displayName: 'Price Model',
name: 'priceModel',
type: 'options',
required: true,
default: 'cpc',
options: [
{ name: 'CPC (Cost Per Click)', value: 'cpc' },
{ name: 'CPM (Cost Per Mille)', value: 'cpm' },
],
description: 'The pricing model for the campaign.',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['createCampaign'],
},
hide: {
operation: ['updateCampaign'],
}
},
},
{
displayName: 'Target URL',
name: 'targetUrl',
type: 'string',
required: true,
default: '',
placeholder: 'https://example.com/landing?param=value',
description: 'The destination URL for the ads',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['createCampaign'],
},
},
},
{
displayName: 'Status',
name: 'status',
type: 'options',
options: [
{ name: '(No Change / Default)', value: '' },
{ name: 'Active', value: 1 },
{ name: 'Paused', value: 0 },
],
default: '',
required: false,
description: 'Set the status of the campaign (Active/Paused). Optional.',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['createCampaign'],
},
},
},
{
displayName: 'Country Targeting',
name: 'countryTargetCollection',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
default: {},
placeholder: 'Add Country Target',
required: true,
displayOptions: {
show: {
operation: ['createCampaign'],
resource: ['campaign'],
},
},
options: [
{
name: 'countryTargetValues',
displayName: 'Country Target',
values: [
{
displayName: 'Country',
name: 'countryId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getCountries',
},
default: '',
description: 'The country to target',
required: true,
},
{
displayName: 'Bid',
name: 'bid',
type: 'number',
typeOptions: {
minValue: 0.0001,
numberPrecision: 4,
},
default: 0.0001,
description: 'The bid amount for this country',
required: true,
},
],
},
],
description: 'Target specific countries with bids',
},
{
displayName: 'Categories',
name: 'categories',
type: 'multiOptions',
required: true,
typeOptions: {
loadOptionsMethod: 'getCampaignCategoriesOptions',
},
default: [],
description: 'Select relevant categories for the campaign (required)',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['createCampaign'],
},
},
},
{
displayName: 'Additional Options',
name: 'additionalOptions',
type: 'collection',
placeholder: 'Add Campaign Option',
default: {},
description: 'Specify additional campaign settings like limits, targeting, etc.',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['createCampaign'],
},
},
options: [
{
displayName: 'Daily Budget Limit',
name: 'dayLimit',
type: 'number',
typeOptions: { numberSubtype: 'float', minValue: 0 },
default: 0,
description: 'Maximum daily spend (0 for unlimited)',
},
{
displayName: 'Total Budget Limit',
name: 'allLimit',
type: 'number',
typeOptions: { numberSubtype: 'float', minValue: 0 },
default: 0,
description: 'Maximum total spend for the campaign (0 for unlimited)',
},
{
displayName: 'Total Clicks Limit',
name: 'clickLimit',
type: 'number',
typeOptions: { minValue: 0 },
default: 0,
description: 'Total clicks limit for the campaign (0 for unlimited)',
},
{
displayName: 'Languages',
name: 'langTarget',
type: 'multiOptions',
typeOptions: {
loadOptionsMethod: 'getLanguages',
},
default: [],
description: 'Target specific browser languages',
},
{
displayName: 'Devices',
name: 'deviceTarget',
type: 'multiOptions',
typeOptions: {
loadOptionsMethod: 'getDevices',
},
default: [],
description: 'Target specific device types',
},
],
},
{
displayName: 'Additional Options',
name: 'additionalOptions',
type: 'collection',
placeholder: 'Add Option',
default: {},
description: 'Specify additional optional parameters to update',
displayOptions: {
show: {
resource: ['campaign'],
operation: ['updateCampaign'],
},
},
options: [
{
displayName: 'Status',
name: 'status',
type: 'options',
options: [
{ name: '(No Change / Default)', value: '' },
{ name: 'Active', value: 1 },
{ name: 'Paused', value: 0 },
],
default: '',
required: false,
description: 'Set the status of the campaign (Active/Paused). Optional.',
},
{
displayName: 'Categories',
name: 'categories',
type: 'multiOptions',
description: 'Select campaign categories',
typeOptions: {
loadOptionsMethod: 'getCampaignCategoriesOptions',
},
default: [],
},
{
displayName: 'Real URL',
name: 'realUrl',
type: 'string',
default: '',
description: 'Link to the real domain of the advertised object in format: http://yoursite.com',
},
{
displayName: 'Budget Limit Day',
name: 'dayLimit',
type: 'number',
typeOptions: { minValue: 0, numberPrecision: 2 },
default: '',
description: 'Maximum daily budget in rubles (0 for unlimited)',
},
{
displayName: 'Budget Limit Total',
name: 'allLimit',
type: 'number',
typeOptions: { minValue: 0, numberPrecision: 2 },
default: '',
description: 'Total budget for the campaign in rubles (0 for unlimited)',
},
{
displayName: 'Click Limit',
name: 'clickLimit',
type: 'number',
typeOptions: { minValue: 0 },
default: '',
description: 'Maximum number of clicks for the campaign',
},
{
displayName: 'Conversion Limit',
name: 'conversionLimit',
type: 'number',
typeOptions: { minValue: 0 },
default: '',
description: 'Maximum number of conversions for the campaign',
},
{
displayName: 'Campaign Name',
name: 'name',
type: 'string',
default: '',
description: 'New name for the campaign (optional)',
},
{
displayName: 'Price Model',
name: 'priceModel',
type: 'options',
description: 'Select the price model (CPC or CPM) (optional, change may not be possible)',
options: [
{ name: 'CPC (Cost Per Click)', value: 'cpc' },
{ name: 'CPM (Cost Per Mille)', value: 'cpm' },
],
default: '',
},
{
displayName: 'Target URL',
name: 'targetUrl',
type: 'string',
default: '',
description: 'New target URL for the campaign (optional)',
},
{
displayName: 'Country Targeting',
name: 'countryTargetCollection',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
default: {},
placeholder: 'Add Country Target',
description: 'Target specific countries with bids',
options: [
{
name: 'countryTargetValues',
displayName: 'Country Target',
values: [
{
displayName: 'Country',
name: 'countryId',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getCountries',
},
default: '',
description: 'The country to target',
required: true,
},
{
displayName: 'Bid',
name: 'bid',
type: 'number',
typeOptions: {
minValue: 0.0001,
numberPrecision: 4,
},
default: 0.0001,
description: 'The bid amount for this country',
required: true,
},
],
},
],
},
{
displayName: 'Device Target',
name: 'deviceTarget',
type: 'string',
default: '',
placeholder: '1,2,3',
description: 'Comma-separated list of device IDs to target',
},
{
displayName: 'Language Target',
name: 'langTarget',
type: 'string',
default: '',
placeholder: '1,2,3',
description: 'Comma-separated list of language IDs to target',
},
{
displayName: 'Platforms',
name: 'platforms',
type: 'string',
default: '',
placeholder: '1,2,4,16',
description: 'Comma-separated list of platform IDs to target',
},
{
displayName: 'Browsers',
name: 'browsers',
type: 'string',
default: '',
placeholder: '1,2,4,16,32,128',
description: 'Comma-separated list of browser IDs to target',
},
{
displayName: 'Black List Sites',
name: 'blackList',
type: 'string',
default: '',
placeholder: '1001,1002,1003',
description: 'Comma-separated list of site IDs to exclude from ad display',
},
{
displayName: 'White List Sites',
name: 'whiteList',
type: 'string',
default: '',
placeholder: '2001,2002,2003',
description: 'Comma-separated list of site IDs to include for ad display',
},
{
displayName: 'Black List IPs',
name: 'blackListIp',
type: 'string',
default: '',
placeholder: '192.168.1.1,192.168.1.2',
description: 'Comma-separated list of IP addresses to block',
},
{
displayName: 'Languages',
name: 'languages',
type: 'multiOptions',
description: 'Target specific languages',
typeOptions: {
loadOptionsMethod: 'getLanguagesOptions',
},
default: [],
},
{
displayName: 'Devices',
name: 'devices',
type: 'multiOptions',
description: 'Target specific device types',
typeOptions: {
loadOptionsMethod: 'getDevicesOptions',
},
default: [],
},
],
},
{
displayName: 'IDs',
name: 'ids',
type: 'multiOptions',
default: [],
typeOptions: { loadOptionsMethod: 'getCampaignsOptions' },
description: 'List of campaign IDs to delete. Use "Get Campaigns" to retrieve IDs.',
displayOptions: { show: { operation: ['deleteCampaign'] } },
},
{
displayName: 'IDs',
name: 'ids',
type: 'multiOptions',
default: [],
typeOptions: { loadOptionsMethod: 'getClients' },
description: 'List of client IDs to delete. Use "Get Clients" to retrieve IDs.',
displayOptions: { show: { operation: ['deleteClient'] } },
},
{
displayName: 'Creative IDs',
name: 'ids',
type: 'multiOptions',
default: [],
typeOptions: { loadOptionsMethod: 'getCreativesOptions' },
description: 'Select the creatives to delete. Multiple IDs can be selected.',
displayOptions: { show: { operation: ['deleteCreative'] } },
},
{
displayName: 'Include Additional Data',
name: 'includeDataOptions',
type: 'multiOptions',
options: [
{ name: 'Include Archived Campaigns', value: 'includeArchive' },
{ name: 'With Black/White Lists', value: 'withBwlist' },
{ name: 'With Creatives (Ads)', value: 'withCreatives' },
],
default: [],
description: 'Select additional data types to include in the campaign results.',
displayOptions: { show: { resource: ['campaign'], operation: ['getCampaigns'] } },
},
{
displayName: 'Campaign IDs',
name: 'campaignIds',
type: 'multiOptions',
default: [],
typeOptions: { loadOptionsMethod: 'getCampaignsOptions' },
description: 'List of campaign IDs to filter by. Use "Get Campaigns" to retrieve IDs.',
displayOptions: { show: { operation: ['getCampaigns', 'getCreatives'] } },
},
{
displayName: 'Ad Format',
name: 'adFormat',
type: 'options',
default: '',
required: true,
typeOptions: { loadOptionsMethod: 'getAdFormats' },
description: 'Ad format ID (e.g., 10 for Teaser). Use "Get Ad Formats" to retrieve options.',
displayOptions: { show: { operation: ['getCampaignCategories', 'getCreatives', 'uploadMedia'] } },
},
{
displayName: 'Category ID',
name: 'categoryId',
type: 'string',
default: '',
description: 'Optional category ID to filter categories.',
displayOptions: { show: { operation: ['getCampaignCategories'] } },
},
{
displayName: 'Client IDs',
name: 'clientIds',
type: 'multiOptions',
default: [],
typeOptions: { loadOptionsMethod: 'getClients' },
description: 'List of client IDs to filter by. Use "Get Clients" to retrieve IDs.',
displayOptions: { show: { operation: ['getClients'] } },
},
{
displayName: 'Email',
name: 'email',
type: 'string',
default: '',
required: true,
description: 'Email address of the client to bind.',
displayOptions: { show: { operation: ['bindClient'] } },
},
{
displayName: 'Password',
name: 'password',
type: 'string',
default: '',
required: true,
description: 'Password of the client to bind.',
displayOptions: { show: { operation: ['bindClient'] } },
},
{
displayName: 'Sum',
name: 'sum',
type: 'number',
default: 0,
required: true,
description: 'Amount in USD to deposit or transfer.',
displayOptions: { show: { operation: ['depositClientBalance', 'transferFunds'] } },
},
{
displayName: 'Payment System ID',
name: 'systemId',
type: 'options',
default: '',
required: true,
typeOptions: { loadOptionsMethod: 'getPaymentSystems' },
description: 'ID of the payment system to use for deposit. Use "Get Payment Systems" to retrieve options.',
displayOptions: { show: { operation: ['depositClientBalance'] } },
},
{
displayName: 'Back URL',
name: 'backUrl',
type: 'string',
default: '',
description: 'URL to redirect the client to after payment.',
displayOptions: { show: { operation: ['depositClientBalance'] } },
},
{
displayName: 'Comment',
name: 'comment',
type: 'string',
default: '',
description: 'Optional comment for the funds transfer.',
displayOptions: { show: { operation: ['transferFunds'] } },
},
{
displayName: 'Creative IDs',
name: 'creativeIds',
type: 'multiOptions',
default: [],
typeOptions: {
loadOptionsMethod: 'getCreativesOptions',
loadOptionsDependsOn: ['adFormat']
},
description: 'Select specific creatives to retrieve. Leave empty to get all creatives.',
displayOptions: { show: { operation: ['getCreatives'] } },
},
{
displayName: 'Binary Property',
name: 'file',
type: 'string',
default: 'data',
required: true,
description: 'Name of the binary property containing the file to upload. Connect an upstream node that produces file data.',
displayOptions: { show: { operation: ['uploadMedia'] } },
},
{
displayName: 'Country ID',
name: 'countryId',
type: 'options',
default: '',
required: true,
typeOptions: { loadOptionsMethod: 'getCountries' },
description: 'ID of the country to filter regions by. Use "Get Countries" to retrieve options.',
displayOptions: { show: { operation: ['getRegions', 'getGeoRegions'] } },
},
{
displayName: 'Retry on Failure',
name: 'retryOnFailure',
type: 'boolean',
default: false,
description: 'Retry the request up to 3 times on temporary failures (e.g., rate limits or network issues).',
},
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
description: 'Return all results by automatically paginating through the data (ignores limit/offset).',
displayOptions: { show: { operation: ['getCampaignStats', 'getPlacementStats', 'getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds', 'getCampaigns', 'getClients', 'getCreatives'] } },
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 100,
description: 'Maximum number of items to return per request (used if "Return All" is false).',
displayOptions: { show: { operation: ['getCampaignStats', 'getPlacementStats', 'getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds', 'getCampaigns', 'getClients', 'getCreatives'], returnAll: [false] } },
},
{
displayName: 'Offset',
name: 'offset',
type: 'number',
default: 0,
description: 'Number of items to skip before starting to return results (used if "Return All" is false).',
displayOptions: { show: { operation: ['getCampaignStats', 'getPlacementStats', 'getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds', 'getCampaigns', 'getClients', 'getCreatives'], returnAll: [false] } },
},
{
displayName: 'Output Fields',
name: 'outputFields',
type: 'string',
default: '',
placeholder: 'id,name,status,link_url',
description: 'Optional. Comma-separated list of fields to include in the output. If empty, all fields are returned.',
displayOptions: { show: { resource: ['campaign'], operation: ['getCampaigns'] } },
},
{
displayName: 'Output Fields',
name: 'outputFields',
type: 'string',
default: '',
placeholder: 'id,name,cost,impressions,ctr',
description: 'Optional. Comma-separated list of fields to include in the output. Use dot notation for nested fields (e.g., stats.impressions). If empty, all fields are returned.',
displayOptions: { show: { resource: ['stats'], operation: ['getCampaignStats'] } },
},
{
displayName: 'Output Fields',
name: 'outputFields',
type: 'string',
default: '',
placeholder: 'placement,impressions,clicks,ctr',
description: 'Optional. Comma-separated list of fields to include in the output. Use dot notation for nested fields (e.g., stats.impressions). If empty, all fields are returned.',
displayOptions: { show: { resource: ['stats'], operation: ['getPlacementStats'] } },
},
{
displayName: 'Output Fields',
name: 'outputFields',
type: 'string',
default: '',
placeholder: 'creative_id,impressions,clicks,ctr',
description: 'Optional. Comma-separated list of fields to include in the output. Use dot notation for nested fields (e.g., stats.impressions). If empty, all fields are returned.',
displayOptions: { show: { resource: ['stats'], operation: ['getCreativeStatsByCampaignIds', 'getCreativeStatsByCreativeIds'] } },
},
{
displayName: 'Title',
name: 'title',
type: 'string',
default: '',
required: true,
description: 'Title of the creative (headline)',
displayOptions: { show: { operation: ['createCreative'] } },
},
{
displayName: 'Ad Format',
name: 'adFormat',
type: 'options',
default: '',
required: true,
typeOptions: { loadOptionsMethod: 'getAdFormats' },
description: 'Format of the ad creative',
displayOptions: { show: { operation: ['createCreative'] } },
},
{
displayName: 'Text',
name: 'text',
type: 'string',
default: '',
description: 'Description text for the creative (required for push notifications, not used for teasers)',
displayOptions: { show: { operation: ['createCreative'] } },
},
{
displayName: 'Target URL',
name: 'linkUrl',
type: 'string',
default: '',
required: true,
description: 'URL of the advertised object, e.g., http: