Growomat · Schema

AdCreate

An ad. The headline and description fields describe a responsive search ad; other formats read `creative`, the platform settings in `_native` and the attached assets. A single-headline format (a chat card) needs no `headlinePart2`; the platforms that need more headlines say so in *Validate a campaign before export*.

AdsGrowthAutomationArtificial IntelligenceMCP

Properties

Name Type Description
angleId string The angle (claim) this ad argues. Results are reported per angle.
conceptId string The concept (way of making the claim) this ad is a rendition of.
angleProvenance string Where the angle stamp came from: written by Growomat, set by you, or inferred from the copy. Defaults to `user` when you set `angleId` yourself.
competitorSimilarityAck boolean Save manual copy that the competitor similarity check flagged. Only honoured when the refusal said `overridable: true`; the decision is recorded on the ad.
_native object
adGroupId string The ad group this ad belongs to.
campaignId string The campaign of that ad group.
type string Ad format. Defaults from the campaign type per platform; ads imported from a platform record the format that actually serves.
creative object
headlinePart1 string First headline. Up to 30 characters on search platforms.
headlinePart2 string Second headline. Up to 30 characters on search platforms.
headlinePart3 string Third headline, optional. Up to 30 characters on search platforms.
description string First description line. Up to 90 characters on search platforms.
description2 string Second description line, optional. Up to 90 characters on search platforms.
finalUrl string The landing page.
path1 string First display-path segment shown after the domain in the ad.
path2 string Second display-path segment.
status string A paused ad is not shown.
sitelinks array Extra links shown under the ad.
callouts array Short phrases shown under the ad, for example "Free shipping".
structuredSnippets array Labelled lists shown under the ad.
customLabels array Free-form labels for your own grouping and reporting.
trackingUrlTemplate string Tracking template for this ad; overrides the ad group's and the campaign's.
finalUrlSuffix string Query string appended to the final URL; overrides the ad group's and the campaign's.
urlCustomParameters object Custom `{_name}` parameters available to tracking templates.
View JSON Schema on GitHub

JSON Schema

growomat-com-ad-create-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/growomat-com/json-schema/growomat-com-ad-create-schema.json",
  "title": "AdCreate",
  "description": "An ad. The headline and description fields describe a responsive search ad; other formats read `creative`, the platform settings in `_native` and the attached assets. A single-headline format (a chat card) needs no `headlinePart2`; the platforms that need more headlines say so in *Validate a campaign before export*.",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/growomat-com-api-openapi.json#/components/schemas/AdCreate",
  "type": "object",
  "required": [
    "adGroupId",
    "campaignId",
    "headlinePart1",
    "description",
    "finalUrl"
  ],
  "properties": {
    "angleId": {
      "type": "string",
      "minLength": 1,
      "description": "The angle (claim) this ad argues. Results are reported per angle."
    },
    "conceptId": {
      "type": "string",
      "minLength": 1,
      "description": "The concept (way of making the claim) this ad is a rendition of."
    },
    "angleProvenance": {
      "type": "string",
      "enum": [
        "generated",
        "user",
        "inferred"
      ],
      "description": "Where the angle stamp came from: written by Growomat, set by you, or inferred from the copy. Defaults to `user` when you set `angleId` yourself."
    },
    "competitorSimilarityAck": {
      "type": "boolean",
      "description": "Save manual copy that the competitor similarity check flagged. Only honoured when the refusal said `overridable: true`; the decision is recorded on the ad."
    },
    "_native": {
      "$ref": "#/$defs/NativeExtensions"
    },
    "adGroupId": {
      "type": "string",
      "minLength": 1,
      "description": "The ad group this ad belongs to."
    },
    "campaignId": {
      "type": "string",
      "minLength": 1,
      "description": "The campaign of that ad group."
    },
    "type": {
      "type": "string",
      "enum": [
        "RESPONSIVE_SEARCH_AD",
        "RESPONSIVE_DISPLAY_AD",
        "PERFORMANCE_MAX_ASSET_GROUP",
        "VIDEO_AD",
        "REDDIT_TEXT_POST",
        "REDDIT_IMAGE_POST",
        "REDDIT_VIDEO_POST",
        "REDDIT_CAROUSEL_POST",
        "META_LINK_AD",
        "META_IMAGE_AD",
        "META_VIDEO_AD",
        "META_CAROUSEL_AD",
        "OPENAI_CHAT_CARD",
        "OPENAI_PRODUCT_AD_TEMPLATE",
        "LINKEDIN_SINGLE_IMAGE",
        "LINKEDIN_TEXT_AD",
        "LINKEDIN_VIDEO",
        "LINKEDIN_CAROUSEL",
        "LINKEDIN_DOCUMENT"
      ],
      "default": "RESPONSIVE_SEARCH_AD",
      "description": "Ad format. Defaults from the campaign type per platform; ads imported from a platform record the format that actually serves."
    },
    "creative": {
      "$ref": "#/$defs/AdCreative"
    },
    "headlinePart1": {
      "type": "string",
      "description": "First headline. Up to 30 characters on search platforms."
    },
    "headlinePart2": {
      "type": "string",
      "description": "Second headline. Up to 30 characters on search platforms."
    },
    "headlinePart3": {
      "type": "string",
      "description": "Third headline, optional. Up to 30 characters on search platforms."
    },
    "description": {
      "type": "string",
      "description": "First description line. Up to 90 characters on search platforms."
    },
    "description2": {
      "type": "string",
      "description": "Second description line, optional. Up to 90 characters on search platforms."
    },
    "finalUrl": {
      "type": "string",
      "format": "uri",
      "description": "The landing page."
    },
    "path1": {
      "type": "string",
      "maxLength": 15,
      "description": "First display-path segment shown after the domain in the ad."
    },
    "path2": {
      "type": "string",
      "maxLength": 15,
      "description": "Second display-path segment."
    },
    "status": {
      "type": "string",
      "enum": [
        "ENABLED",
        "PAUSED",
        "REMOVED"
      ],
      "default": "ENABLED",
      "description": "A paused ad is not shown."
    },
    "sitelinks": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Sitelink"
      },
      "description": "Extra links shown under the ad."
    },
    "callouts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Short phrases shown under the ad, for example \"Free shipping\"."
    },
    "structuredSnippets": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/StructuredSnippet"
      },
      "description": "Labelled lists shown under the ad."
    },
    "customLabels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Free-form labels for your own grouping and reporting."
    },
    "trackingUrlTemplate": {
      "type": "string",
      "description": "Tracking template for this ad; overrides the ad group's and the campaign's."
    },
    "finalUrlSuffix": {
      "type": "string",
      "description": "Query string appended to the final URL; overrides the ad group's and the campaign's."
    },
    "urlCustomParameters": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Custom `{_name}` parameters available to tracking templates."
    }
  },
  "$defs": {
    "AdCreative": {
      "type": "object",
      "description": "Instructions for platforms whose ad is a separate creative object, such as a promoted post. Platforms that build the ad from the headline and description fields ignore it.",
      "properties": {
        "format": {
          "type": "string",
          "description": "Ad format hint. Normally derived from the campaign type."
        },
        "mediaAssetIds": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Assets to build the creative from."
        },
        "body": {
          "type": "string",
          "description": "Post body. Defaults to the ad's remaining copy."
        },
        "imageUrl": {
          "type": "string",
          "format": "uri",
          "description": "Image to use, by URL."
        },
        "videoUrl": {
          "type": "string",
          "format": "uri",
          "description": "Video to use, by URL."
        },
        "thumbnailUrl": {
          "type": "string",
          "format": "uri",
          "description": "Still shown before a video plays. Required by platforms that mandate one."
        }
      }
    },
    "NativeExtensions": {
      "type": "object",
      "description": "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.\n\nKeys 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`.\n\nDelivery keys read on the campaign: `objective`, `goalType`, `startTime`, `endTime`, `optimizationGoal`, `conversionPixelId`.",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": true
      },
      "properties": {
        "openai-ads": {
          "type": "object",
          "description": "ChatGPT Ads settings. Read on the campaign: `budgetKind`, `biddingType`, `startTime`, `endTime`, `platforms`, `customAudienceIds`, `excludedCustomAudienceIds`, `conversionEventSettingId`, `queryStringTemplate`, `description`, `imageUrl`, `postTitle`, `postBody`; on the ad group: `strategy`, `maxBid`, `cpmBid`, `description`; on the ad: `imageUrl`, `postTitle`, `postBody`, `imageCrop`, `price`. Unknown keys are kept.",
          "properties": {
            "budgetKind": {
              "type": "string",
              "enum": [
                "DAILY",
                "LIFETIME"
              ],
              "default": "DAILY",
              "description": "On the campaign: `LIFETIME` makes `budget` the total for the campaign's whole run instead of a day's. The lifetime minimum is 1 unit of the account currency; the daily minimum is per currency (EUR 15). One-way: once pushed, a lifetime budget can never become daily. Maximize-results strategies need `DAILY`."
            },
            "biddingType": {
              "type": "string",
              "enum": [
                "CLICKS",
                "IMPRESSIONS",
                "CONVERSIONS"
              ],
              "description": "On the campaign: What the campaign buys. Set once, at the first push. Defaults from `biddingStrategy` (clicks for a CPC strategy, conversions for a CPA strategy); `IMPRESSIONS` is reachable only here."
            },
            "startTime": {
              "type": "string",
              "format": "date-time",
              "description": "On the campaign: When delivery starts. Falls back to `startDate`; absent means as soon as it is enabled."
            },
            "endTime": {
              "type": "string",
              "format": "date-time",
              "description": "On the campaign: When delivery ends. Falls back to `endDate` (end of that day, UTC)."
            },
            "platforms": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "ios_app",
                  "android_app",
                  "web",
                  "desktop_web",
                  "ios_web",
                  "android_web"
                ]
              },
              "description": "On the campaign: The ChatGPT surfaces to deliver on. Absent means all. `web` covers every web surface, so it is never combined with the granular web values."
            },
            "customAudienceIds": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "On the campaign: Custom audiences to reach."
            },
            "excludedCustomAudienceIds": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "On the campaign: Custom audiences to exclude."
            },
            "conversionEventSettingId": {
              "type": "string",
              "description": "On the campaign: The conversion event setting a conversions campaign optimises for (required when `biddingType` is `CONVERSIONS`; fixed after the first push). Defaults to the connection's."
            },
            "queryStringTemplate": {
              "type": "string",
              "description": "On the campaign: Query parameters appended to every destination URL, for example `utm_source=chatgpt&utm_medium=cpc`. The platform's own click id is added by the platform and is dropped here."
            },
            "description": {
              "type": "string",
              "description": "On the campaign: An internal note on the campaign. On the ad group: An internal note on the ad group."
            },
            "imageUrl": {
              "type": "string",
              "format": "uri",
              "description": "On the campaign: One image for every chat card in the campaign that has none of its own. On the ad: The chat card's image (at least 640 × 640). Wins over an image bound through *Ad assets*; `creative.imageUrl` wins over this."
            },
            "postTitle": {
              "type": "string",
              "maxLength": 50,
              "description": "On the campaign: One title for every chat card that sets none of its own. On the ad: The card's title as it will read (3–50 characters). Defaults to the first headline."
            },
            "postBody": {
              "type": "string",
              "maxLength": 100,
              "description": "On the campaign: One body for every chat card that sets none of its own. On the ad: The card's body as it will read (up to 100 characters). Defaults to the first description."
            },
            "strategy": {
              "type": "string",
              "enum": [
                "fixed_bid",
                "maximize_clicks",
                "maximize_conversions"
              ],
              "description": "On the ad group: How the ad group bids. `fixed_bid` bids `cpcBid` (or `maxBid` / `cpmBid`); a `maximize_*` strategy needs a daily budget. Must suit the campaign's `biddingType`."
            },
            "maxBid": {
              "type": "number",
              "minimum": 0,
              "description": "On the ad group: The fixed bid in the account currency, when `cpcBid` does not apply (a CPA bid on a conversions campaign)."
            },
            "cpmBid": {
              "type": "number",
              "minimum": 0,
              "description": "On the ad group: For an `IMPRESSIONS` campaign: the bid per thousand impressions, in the account currency."
            },
            "imageCrop": {
              "type": "object",
              "required": [
                "x",
                "y",
                "width",
                "height"
              ],
              "properties": {
                "x": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "y": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "width": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "height": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                }
              },
              "description": "On the ad: A square crop of the image, each value a fraction (0–1) of the source."
            },
            "price": {
              "type": "string",
              "maxLength": 100,
              "description": "On the ad: A price shown on the card, as written (for example `From €49`)."
            }
          },
          "additionalProperties": true
        }
      }
    },
    "Sitelink": {
      "type": "object",
      "description": "An extra link shown under the ad.",
      "properties": {
        "text": {
          "type": "string",
          "description": "Link text."
        },
        "url": {
          "type": "string",
          "description": "Where the link goes."
        },
        "description1": {
          "type": "string",
          "description": "First description line."
        },
        "description2": {
          "type": "string",
          "description": "Second description line."
        },
        "trackingUrlTemplate": {
          "type": "string",
          "description": "Tracking template for this link."
        },
        "urlCustomParameters": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Custom `{_name}` parameters for the tracking template."
        }
      }
    },
    "StructuredSnippet": {
      "type": "object",
      "required": [
        "header",
        "values"
      ],
      "description": "A labelled list shown under the ad, for example \"Services: Repairs, Installation\".",
      "properties": {
        "header": {
          "type": "string",
          "description": "The list label, from the platform's fixed set (for example `Services`, `Brands`)."
        },
        "values": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The list entries."
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/growomat-com-ad-create"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.