campaigns

Update a campaign

Changed on

Partial update. Send only the fields you want to change; omitted fields keep their values, and a field you do send replaces the stored value in full (arrays included).

adSchedule accepts a preset name (ALL_HOURS_ALL_DAYS, BUSINESS_HOURS) or a structured schedule; adScheduleStructured is recomputed on every write. For human-friendly input (09:00 to 17:00, weekdays, a time zone) use Set the ad schedule instead.

Leave _platformBudgets out to keep where the campaign runs. Sending it replaces the whole split, and it must still switch at least one platform on. Removing a platform the campaign is live on pauses it there at the next sync.

Changes reach the ad platforms on the next sync.

Errors

  • 404 NOT_FOUND: no campaign with this id in the active Space.
  • 409 CAMPAIGN_IS_DRAFT: the campaign is an unconfirmed draft; it can only be confirmed in the app.
  • 400 PLATFORMS_REQUIRED: the new _platformBudgets switches every platform off.
  • 400 UNKNOWN_PLATFORM: a platform id in _platformBudgets is not one Growomat delivers to.
  • 400 VALIDATION_ERROR: the body failed validation; details.issues[] names each field.
  • 400 AD_SCHEDULE_TOO_MANY_WINDOWS: more than 84 schedule windows.
put/api/v1/campaigns/{id}

Request

  • Base URL: https://api.growomat.com
  • URL: https://api.growomat.com/api/v1/campaigns/{id}
  • Auth: HTTP bearer

Path parameters

idstring required

The campaign id.

Headers

X-Space-Idstring

The Space to work in, for example spc_8f3aK2. Omit it to use your personal Space. List your Spaces returns the ids. A Space that does not exist returns 404 SPACE_NOT_FOUND; one you are not a member of returns 403 NOT_A_MEMBER.

Request body

_nativeNativeExtensions

Settings that exist on one platform only, keyed by platform id (for example google-ads). Each value is a free-form object that is stored and returned exactly as sent; keys Growomat does not know are kept. Absent by default.

Keys read by platforms whose ad is a post (on the ad, with the campaign as fallback): postType (TEXT or IMAGE), postTitle, postBody, callToAction, imageUrl, videoUrl, videoThumbnailUrl, carouselCards ([{ imageUrl, destinationUrl }]), communities, interests.

Delivery keys read on the campaign: objective, goalType, startTime, endTime, optimizationGoal, conversionPixelId.

_platformBudgetsPlatformBudgets

Where this campaign runs, and how much of the budget each platform gets, keyed by platform id (reddit-ads, microsoft-ads, and so on).

A platform not listed here is not part of the campaign. It is never exported to and never spends, whatever is connected. At least one entry must be switched on.

An entry without amount gets an even share of the budget the listed amounts leave, so { "reddit-ads": {} } is the whole budget on Reddit Ads. percentage is computed from amount on every write; sending it is ignored. The split is checked against the campaign budget and rejected when it exceeds it.

namestring

Campaign name, shown in the app and on the platforms.

budgetnumber

Daily budget, in currency.

currencystring

ISO 4217 currency code of budget, for example EUR or USD.

status'DRAFT' | 'ENABLED' | 'PAUSED' | 'REMOVED'

PAUSED (the default) is safe: the campaign exists on the platforms after a sync but does not serve. ENABLED serves after the next sync. DRAFT is an unconfirmed build from the app's campaign builder and is never synced until it is confirmed.

type'SEARCH' | 'DISPLAY' | 'VIDEO' | 'SHOPPING' | 'PERFORMANCE_MAX'

The campaign type. It decides which ad formats and which asset roles apply.

networksstring

Platform network setting, as the platform names it.

languagesstring

Language of the audience, as a language code.

businessIdstring

The business this campaign advertises. Generated copy and the brand voice come from it.

goalstring

What the campaign should achieve, in your own words. Used when Growomat drafts ads and keywords for it.

locationIntent'PRESENCE' | 'PRESENCE_OR_INTEREST'

Who counts as being in the targeted places. PRESENCE (default): people who are in, or regularly in, those places. PRESENCE_OR_INTEREST: also people elsewhere who search about them. The second is wider and much less qualified; it is the platforms' own default, which this API deliberately does not inherit.

customLabelsstring[]

Up to ten free-form labels for your own grouping and reporting.

adScheduleUseSearcherTimeZoneboolean

Interpret the ad schedule in the searcher's local time zone instead of the account time zone, on platforms that support it (Microsoft Advertising). Ignored elsewhere.

trackingUrlTemplatestring

Tracking template applied to every ad in the campaign, for example {lpurl}?src=ads.

finalUrlSuffixstring

Query string appended to every final URL in the campaign.

urlCustomParametersobject

Custom {_name} parameters available to tracking templates.

Response

OK. The result is in data. List responses also carry meta with nextCursor and total.

dataunknown required

Changes