Creating Campaigns

When creating new campaigns, the best starting point is what we call the consolidated create API

POST /api/campaigns/consolidated/create

Several naviga clients are using this API endpoint today, in addition to the Propel team using it to import ads into the system from Propel. The goal of this was to consolidate, clean up and simplify getting orders into the system. This API will bring in the Campaign header and also line items (both print and/or digital), all in one API.

Once created, the system will pass back to you the following information:

{
  "NewCampaignID": "string",
  "NewLines": [
    {
      "ID": "string",
      "ThirdPartyLineID": "string",
      "MaterialIDs": [
        "string"
      ],
      "ProductID": "string",
      "AdTypeID": "string",
      "IsPrintProduct": true,
      "Amount": 0,
      "TaxAmount": 0,
      "TotalWithTax": 0
    }
  ]
}

This API does not do all the same validation that an ad created internally would do, so please do use caution when using this. If you create a line with an AdType that isn't allowed for the product, or an invalid ratecard ID, etc, it will still create a campaign and an order line, but there will be missing data if it isn't correct for the line, so a user opening that line later, may see error messages or the campaign may re-rate if something else is edited and the line resaved, so please use this cautiously and test thoroughly before going live with something new.

Field
Description
Required

CampaignID

This can be left off for Naviga to assign the next sequential campaign ID, or it can be set to "NEW" To add additional order lines to an existing campaign, use the existing campaign ID here. Campaign level details are NOT updated with this API.

No

AdvertiserID

ID for the advertiser on the Campaign

Yes

BrandID

ID for the Brand (of the above advertiser) for this campaign

Yes

ProductGroupID

ID for the assigned product for this campaign

Yes

CampaignType

Options here are Flexible or Performance

Yes

AgencyID

If this is to be billed to an agency, then the agency ID is required

No

AgencyCommissionPercent

If there is an agency present and if that agency should get a commission, enter the commission percent here. (enter 15 for 15% commission). It will not look up the commission amount from the brand, so this is required to receive a commission, but is not a requirement to successfully import a campaign.

No

StartDate

This is the start date of the campaign - it needs to be equal to or sooner than the earliest start date of a line item.

Yes

EndDate

This is the end date of the campaign. It needs to equal to or after the furthest end date of a line item

Yes

CampaignStatusID

These would be the ID of the Campaign Status. Common options include Q1, Q2, Q3, R1, R2, R3, CO

Yes

PONumber

Optional PO number on the campaign. The import does not check for PO Required settings on the payor.

No

Description

This is the campaign description

No

ExternalID

Unique identifier from an external system (for example the iPublish ID, or other 3rd party provider.)

No

CurrencyID

Leave blank for the default system currency or enter a currency ID for a foreign currency

No

OverrideSalesRepID

Enter a REP ID here and it will set this user as the Original Rep and the Order Rep on a new campaign

No

ExternalSystemID

This relates to External ID above. When using multiple 3rd party systems, you may set up External SystemID's in Setup -> System Tables Setup -> External System ID Codes

No

IsPrePaid

true / false are the valid choices. If true, there will be an InvoiceID of IMPORT auto-created on the Invoices and payments tab in Naviga Ad, which will prevent this campaign from billing from the Naviga Ad system. For a flexible campaign, a billing schedule will be created and the invoice will be set to "IMPORT". This doesn't create an invoice in Naviga, but tells the system that it was already invoiced elsewhere and thus prevents Naviga from creating a duplicate of that invoice. If you want Naviga Ad to generate an invoice for this item for revenue recognition purposes, then this should be set to false. If it was prepaid in the other system, but you want Naviga to record the payment for G/L purposes and so the client gets a zero balance invoice, use this API to attach the prepayment record to the campaign: POST /api/campaigns/{campaignId}/prepayments

No

DigitalLines [ ]

If there are digital lines on this campaign, this array will repeat for each digital line.

AutoAllocationMonthlyLines

If this is set to True, then you do not need the DigitalMonths array. (described a little later in this table) With this set to True, the setting MonthlyDistributionType should also be filled in so that the system knows how to distribute the numbers.

If this is set to false, then the system will be expecting the import to tell it what amounts are expected in each month. So in an example campaign running from Jan 1 to March 31, the digital months array will be repeated 3x, once for each month, with the monthly quantity and amount provided to it.

Yes

StartDate

Start Date of this Line

Yes

EndDate

End Date of this Line

Yes

ID

For a new line, this is not needed and should be omitted. Use an existing line ID here to REPLACE an existing campaign line. Couple of caveats to be aware of here:

If you use this field, then the Month Unique Ids must also be a passed in (this is a unique id for each month / issue).

The API will prevent changes if:

  • Any of the original months have been billed and now changed (changes to the date / quantity / amount). Error message returned is “cannot change billed month”

  • Any of the original months were billed and now removed. Error message returned is “cannot removed billed order”

The API does not do this check if the original order was imported and marked as already billed. It only does it if there is a real, Naviga-created InvoiceID present.

No

ProductID

This is the ID of the product from Naviga product setup.

Yes

AdTypeID

This is the ID from AdType Setup (Setup -> Advertising Setup -> Ad Types)

Yes

ContractID

If the customer has a contract and you wish to have the campaign count towards that contract, enter the ID.

No

RatecardID

This is the Ratecard ID from Ratecard setup (In Setup -> Product Setup). The import will error if this is missing - it isn't validating that it is CORRECT, but it is looking for it to be present, so use caution.

Yes

RateLineID

This is the Ratecard Line ID from Ratecard setup (In Setup -> Product Setup). The import will error if this is missing - it isn't validating that it is CORRECT, but it is looking for it to be present, so use caution.

Yes

SectionID

This is the section ID from Product setup. If this is set on the Ratecard and UseRatecardLineSettings is set to true, this can be skipped and the information will be pulled from the ratecard.

No

PositionID

This is the position ID from Product setup. If this is set on the Ratecard and UseRatecardLineSettings is set to true, this can be skipped and the information will be pulled from the ratecard.

No

MaterialStatusID

These are found under Setup -> Production Workflow Setup. Select a product from the dropdown and the Stage number is considered to be the ID.

No

ThirdPartyLineID

This will populate the 3rd Party Line ID field on the campaign line (Other tab)

No

PONumber

This is the PO number for the line (if different from the campaign header)

No

Description

This is the line item description. This is not required, but not pulling from the Ratecard line settings. So enter something here if you don't want it to be blank on import.

No

UseRatecardLineSettings

For some items in Ratecard setup, setting this to true will tell the API to set it from the rate card settings instead of needing to enter it explicitly here. A true here will set the following from Ratecard Setup: Section ID Position ID Google Targeting Ratecard Rate Discount Rate Expected sizes Master Sizes Size Counts Creative Type If set to false, these will not be set based on ratecard setup

yes

Materials [ ]

If material are to be linked to this order, enter the material IDs here (the materials can be created with the Material Creation API) For multiple materials, repeat this array as many times as you need to for each material

No

ID

This is the ID of the material

No

StartDate

this is the date when the material will begin to serve on this campaign line If not provided, the start/end dates will be the line start and end.

No

EndDate

this is the date when the material will stop serving on this campaign line

No

RatecardRate

Enter the ratecard price

If using the setting below is set to true, then this field can be omitted and the ratecard settings will be used.

(This field requires 26.1 and later to support omitting and using RatecardLineSettings)

Yes

DiscountRate

If there is no discount, the ratecard price will be repeated. If this is being charged a premium or discount, enter the adjusted rate here. The system will automatically add the adjustment line for the difference between the rate and the discount. So if the rate is $10 CPM, and there is no discount, enter $10 for both the Ratecard rate and the discount rate. If using the setting below is set to true, then this field can be omitted and the ratecard settings will be used.

(This field requires 2026.1 and later to support omitting and using RatecardLineSettings)

Yes

Qty

Enter the quantity here. For Flat Fee, this can just be 1.

Yes

AdserverOverrideQty

This will set an override quantity for sending to GAM.

No

OrderTotal

This should be set as the total of the Rate*Qty.

If using the setting below is set to true, then this field can be omitted and the ratecard settings will be used.

(This field requires 26.1 and later to support omitting and using RatecardLineSettings)

Yes

CostRateOverride

If using Cost Rates on Rate Card setup this can be used to override the cost rate

No

MonthlyDistributionType

Options here are "Days" or "Evenly" If nothing is sent, Days will be used.

No

DigitalMonths [ ]

This group (from ID to Invoice ID) are required only if the setting above "AutoAllocationMonthlyLines" is set to false. If AutoAllocationMonthlyLines is TRUE, you do not need this section.

see description

ID

This is the ID for the digital month. For a new digital month, this can be omitted or "NEW" can be used to tell the API it is a new month

No

StartDate

Start date of the month (for example, January would be 2026-01-01 here for the full month). If this is the first month of a multi-month line, the start date might not be the first of the month.

Yes

EndDate

End date of the month (for example, January would be 2026-01-31 here for the full month). If it is the last month of the line, this might end before the last of the month.

Yes

Qty

The expected quantity for the month

Yes

Amount

The expected amount for the month

Yes

InvoiceID

The invoice ID for the month (only if invoiced)

No

GoogleTargeting

This section will set some google targets. This was added for the Naviga Propel team to be able to import some basic Geo and AdUnit targeting for customer self-service orders. Some others may find it helpful as well.

No

PlacementIDs

These placement IDs are the GAM Id's which can be found in GAM or in Ad Server Integration Setup inside Naviga ad. If these are set on the RateCard Line, and you wish to ignore what is on the RateCard line and instead import as a blank, then import "**" and we will interpret that as a null. (Even if UseRatecardLineSettings is set to true, putting ** here will override this GAM targeting to null.)

No

IncludedAdUnitIDs

These Ad Unit IDs are the GAM Id's which can be found in GAM or in Ad Server Integration Setup inside Naviga ad. If these are set on the RateCard Line, and you wish to ignore what is on the RateCard line and instead import as a blank, then import "**" and we will interpret that as a null. (Even if UseRatecardLineSettings is set to true, putting ** here will override this GAM targeting to null.)

No

ExcludedAdUnitIDs

Same as above, but this will exclude those ID's

No

GeoTargets

No

ID

These GeoTarget IDs are the GAM Id's which can be found in GAM or in Ad Server Integration Setup inside Naviga ad. If these are set on the RateCard Line, and you wish to ignore what is on the RateCard line and instead import as a blank, then import "**" and we will interpret that as a null. (Even if UseRatecardLineSettings is set to true, putting ** here will override this GAM targeting to null.)

No

IncludeOrExclude

Use the letter I for "Include" to Include the geo and E for "Exclude" to exclude it.

No

NewProductionNote

This string field will pass in a production note on a campaign line (will be time stamped automatically and the user name will be the API User.)

No

ExistingProductionNote

You cannot update or "create" an existing Production Note. This array can be ignored on the initial create, but it will be passed back to you in a "GET" when Editing/Updating Campaign lines. For new notes, use the NewProductionNote above

No

PrintLines [ ]

If only digital lines are on the campaign, this entire section can be omitted.

No, unless it is a print order

ID

For a new line, this is not needed and should be omitted. Use an existing line ID here to REPLACE an existing campaign line. Couple of caveats to be aware of here:

The API will prevent changes if:

  • Any of the original issues have been billed and now changed (changes to the date / quantity / amount). Error message returned is “cannot change billed month”

  • Any of the original issues were billed and now removed. Error message returned is “cannot removed billed order”

The API does not do this check if the original order was imported and marked as already billed. It only does it if there is a real, Naviga-created InvoiceID present.

ProductID

This is the ID of the product from Naviga product setup.

Yes

AdTypeID

This is the ID from AdType Setup (Setup -> Advertising Setup -> Ad Types)

Yes

ContractID

If the customer has a contract and you wish to have the campaign count towards that contract, enter the ID.

No

RatecardID

This is the Ratecard ID from Ratecard setup (In Setup -> Product Setup). The import will error if this is missing - it isn't validating that it is CORRECT, but it is looking for it to be present, so use caution.

Yes

RatecardLineID

This is the Ratecard Line ID from Ratecard setup (In Setup -> Product Setup). The import will error if this is missing - it isn't validating that it is CORRECT, but it is looking for it to be present, so use caution.

Yes

SectionID

This is the section ID from Product setup. If this is set on the Ratecard and UseRatecardLineSettings is set to true, this can be skipped and the information will be pulled from the ratecard.

No

PositionID

This is the position ID from Product setup. If this is set on the Ratecard and UseRatecardLineSettings is set to true, this can be skipped and the information will be pulled from the ratecard.

No

Materials [ ]

MaterialID

Pass in Material ID here, if a material ID already exists and you wish to reference it in a pickup. If left blank and the Auto Create Material flag is yes on the product, then a new material ID will be set upon import. If left blank and the Auto Create Material flag is no on the product, then the line will be created with no material. See also Material Creation API. Material can be created first and then used here when the Auto Create Flag is set to No on the product and the desire is to create a material for new order lines upon import.

No

PONumber

This is the line item PO number, which may be different from the campaign PO number

No

LineDescription

This is the line item description. While not required, it is often displayed on a confirmation/Invoice/Statement so may be important.

No

EditionID

If using Zones/Editions, this may be important.

No

Columns

If using a non-modular size, this will be important for determining the size of the ad.

No

Depth

If using a non-modular size, this will be important for determining the size of the ad.

No

LineCount

If using modular size this will be important for determining the page equivalency. Not technically required for the import to work, but likely required for some reporting if you are tracking Page eq

No

UseRatecardLineSettings

For some items in Ratecard setup, setting this to true will tell the API to set it from the rate card settings instead of needing to enter it explicitly here. A true here will set the following from Ratecard Setup: Ratecard Rate Discount Rate Section Position Dimensions Color Code A false he will require these fields to be set in the import data

Yes

RatecardRate

If UseRateCardSettings (above) is set to true, and this line is to use the ratecard rate, then this may be omitted. If using a custom rate, then this should be entered here and UseRateCardSettings should say false.

(This field requires 26.1 and later to support omitting and using RatecardLineSettings)

Yes/No (depending on UseRateCardSettings)

DiscountRate

If there is to be a discount, this will be the rate after discounts (the system will calculate the adjustment as the difference between this amount and the ratecard rate above).

If using the setting below is set to true, and there is no discount needed, then this field can be omitted and the ratecard settings will be used.

(This field requires 26.1 and later to support omitting and using RatecardLineSettings)

Yes/No (depending on UseRateCardSettings)

Qty

not typically needed for a standard print ad, but could be needed if it is an issue based ad using a cost per unit price.

No

OrderTotal

Only necessary if UseRateCardSettings is false

(This field requires 26.1 and later to support omitting and using RatecardLineSettings)

No

IssueDates [ ]

ID

Not necessary on a post. the ID under the issue date would only be relevant if you were updating the data. Then it would be formatted as the line ID (dot) issue number (so 12345.1 for the first issue of order 12345).

No

Date

Date of the issue. Formatted as yyyy-mm-dd

No

Qty

not needed unless this was a CPU type buy. Most print ads wouldn't need a quantity.

No

Amount

This should reflect the amount that should be on the issue date. (So if this is a discounted amount, this should be net of any adjustments.)

Yes

MaterialID

Materials could change per issue, so if there is more than one material in the Material ID array above, then this will tell the system which material is to be used for which insertion date. If this is blank, and the product is set to auto-create materials, then a material ID will be created here. If this is blank and the product is set to NOT auto-create materials, then the issue date will not have a material applied and it can be updated later to include the material.

No

MaterialProductionStatusID

These are found under Setup -> Production Workflow Setup. Select a product from the dropdown and the Stage number is considered to be the ID.

No

InvoiceID

The invoice ID for the month (only if invoiced)

No

CategoryTreeID

If this is a classified type ad, then enter the ID for the category tree here. This can be found in Setup -> Classified Category Tree Setup

No

CategoryID

If this is a classified type ad, then enter the ID for the category here This can be found in Setup -> Classified Category Tree Setup. Select the tree and then Click on a subcategory to see the ID

No

BasePrice

If this is an ad type with "is listing" flag set, then it is available for Ratecards which are rated with Base prices and overage prices. This is for the Base Price of that type of ad.

No

BaseQty

If this is an ad type with "is listing" flag set, then it is available for Ratecards which are rated with Base prices and overage prices. This is for the Base Quantity of that type of ad.

No

OverageRate

If this is an ad type with "is listing" flag set, then it is available for Ratecards which are rated with Base prices and overage prices. This is for the Overage Price of that type of ad.

No

OverageQty

If this is an ad type with "is listing" flag set, then it is available for Ratecards which are rated with Base prices and overage prices. This is for the Overage Quantity of that type of ad.

No

NewProductionNote

This string field will pass in a production note on a campaign line (will be time stamped automatically and the user name will be the API User.)

No

ExistingProductionNote

You cannot update or "create" an existing Production Note. This array can be ignored on the initial create, but it will be passed back in a "GET" when Editing/Updating Campaign lines. For new notes, use the NewProductionNote above

No

Was this helpful?