Virto Commerce · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for VirtoCommerce. Marketing API

36 actions 36 updates phrasing extends openapi/virto-commerce-marketing-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Virto Commerce's API. It is a proposal applied on top of the contract, not a document Virto Commerce publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 36 · first 16 shown; the file carries all of them

$.info
$.paths['/api/marketing/contentplaces/listentries/search'].post
$.paths['/api/marketing/contentplaces/search'].post
$.paths['/api/marketing/contentitems/listentries/search'].post
$.paths['/api/marketing/contentitems/search'].post
$.paths['/api/marketing/contentpublications/search'].post
$.paths['/api/marketing/contentitems/evaluate'].post
$.paths['/api/marketing/contentitems/{id}'].get
$.paths['/api/marketing/contentitems'].put
$.paths['/api/marketing/contentitems'].post
$.paths['/api/marketing/contentitems'].delete
$.paths['/api/marketing/contentplaces/{id}'].get
$.paths['/api/marketing/contentplaces'].put
$.paths['/api/marketing/contentplaces'].post
$.paths['/api/marketing/contentplaces'].delete
$.paths['/api/marketing/contentpublications/new'].get

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for VirtoCommerce. Marketing API
  version: 1.0.0
extends: openapi/virto-commerce-marketing-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-09-26'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 35
- target: $.paths['/api/marketing/contentplaces/listentries/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Browse content place folders and entries
      effect: read
      questions:
      - Can I browse content placeholders together with the folders they sit in?
      - What is inside a given folder of dynamic content places?
      instructions:
      - text: List the folders and content places inside folder {folderId}.
        slots:
          folderId: requestBody.folderId
      - text: Browse the content place tree for entries matching {keyword}.
        slots:
          keyword: requestBody.keyword
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentplaces/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Search dynamic content places
      effect: read
      questions:
      - How do I find the placeholders on my storefront where dynamic content can show?
      - Can I search content places by keyword without the folders mixed in?
      instructions:
      - text: Search content places for {keyword}.
        slots:
          keyword: requestBody.keyword
      - text: Find only the content places, not folders, in folder {folderId}.
        slots:
          folderId: requestBody.folderId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentitems/listentries/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Browse content item folders and entries
      effect: read
      questions:
      - Can I browse dynamic content items along with the folders that organize them?
      - What content items and subfolders live in a given content folder?
      instructions:
      - text: List the folders and content items inside folder {folderId}.
        slots:
          folderId: requestBody.folderId
      - text: Browse the content item tree for entries matching {keyword}.
        slots:
          keyword: requestBody.keyword
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentitems/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Search dynamic content items
      effect: read
      questions:
      - How do I find banners or other dynamic content items by keyword?
      - Can I search only content items, leaving folders out of the results?
      instructions:
      - text: Search dynamic content items for {keyword}.
        slots:
          keyword: requestBody.keyword
      - text: Find only the content items, not folders, in folder {folderId}.
        slots:
          folderId: requestBody.folderId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentpublications/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Search content publications
      effect: read
      questions:
      - Which content publications are currently active for my store?
      - Can I find the publications targeting a specific placeholder name?
      instructions:
      - text: List active content publications for store {store}.
        slots:
          store: requestBody.store
      - text: Find publications that target the content place named {placeName}.
        slots:
          placeName: requestBody.placeName
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentitems/evaluate'].post
  update:
    x-apievangelist-phrasing:
      intent: Resolve which content to show in a placeholder
      effect: read
      questions:
      - What content should display in a storefront placeholder for this shopper right now?
      - Can dynamic content be targeted by the visitor's country or city?
      - Can I evaluate placeholder content for a specific product page?
      instructions:
      - text: Get the dynamic content to show in place {placeName} for store {storeId}.
        slots:
          placeName: requestBody.placeName
          storeId: requestBody.storeId
      - text: Evaluate content for place {placeName} on product {productId}.
        slots:
          placeName: requestBody.placeName
          productId: requestBody.productId
      - text: Resolve placeholder {placeName} content for a visitor in {geoCountry}.
        slots:
          placeName: requestBody.placeName
          geoCountry: requestBody.geoCountry
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentitems/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a dynamic content item
      effect: read
      questions:
      - What does a single dynamic content item, like a banner, contain?
      - Where do I read one content item by its ID?
      instructions:
      - text: Get dynamic content item {id}.
        slots:
          id: path.id
      - text: Show the banner content item {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentitems'].put
  update:
    x-apievangelist-phrasing:
      intent: Update a dynamic content item
      effect: write
      questions:
      - How do I change the image or name of an existing content item?
      - Can I move an existing content item into another folder?
      instructions:
      - text: Update content item {name} with image {imageUrl}.
        slots:
          name: requestBody.name
          imageUrl: requestBody.imageUrl
      - text: Move existing content item {name} to folder {folderId}.
        slots:
          name: requestBody.name
          folderId: requestBody.folderId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentitems'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a dynamic content item
      effect: write
      questions:
      - How do I add a new banner or content block for the storefront?
      - Which content type do I pick when creating a new content item?
      instructions:
      - text: Create a content item {name} of type {contentType}.
        slots:
          name: requestBody.name
          contentType: requestBody.contentType
      - text: Add a new content item {name} in folder {folderId}.
        slots:
          name: requestBody.name
          folderId: requestBody.folderId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentitems'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete dynamic content items
      effect: destructive
      questions:
      - How do I remove banners or content items I no longer use?
      - Can I delete several content items at once?
      instructions:
      - text: Delete content items {ids}.
        slots:
          ids: query.ids
      - text: Remove the dynamic content items with IDs {ids}.
        slots:
          ids: query.ids
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentplaces/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a dynamic content place
      effect: read
      questions:
      - What is defined for one storefront placeholder?
      - Where do I read a single content place by ID?
      instructions:
      - text: Get content place {id}.
        slots:
          id: path.id
      - text: Show the placeholder definition {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentplaces'].put
  update:
    x-apievangelist-phrasing:
      intent: Update a dynamic content place
      effect: write
      questions:
      - How do I rename an existing storefront placeholder?
      - Can I change the description of a content place I already set up?
      instructions:
      - text: Rename content place {id} to {name}.
        slots:
          id: requestBody.id
          name: requestBody.name
      - text: Update the description of content place {id} to {description}.
        slots:
          id: requestBody.id
          description: requestBody.description
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentplaces'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a dynamic content place
      effect: write
      questions:
      - How do I define a new placeholder slot where content can appear?
      - Can I put a new content place inside a folder?
      instructions:
      - text: Create a content place named {name}.
        slots:
          name: requestBody.name
      - text: Add a new content place {name} in folder {folderId}.
        slots:
          name: requestBody.name
          folderId: requestBody.folderId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentplaces'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete dynamic content places
      effect: destructive
      questions:
      - How do I remove placeholders that are no longer on the storefront?
      - Can I delete several content places together?
      instructions:
      - text: Delete content places {ids}.
        slots:
          ids: query.ids
      - text: Remove the placeholder definitions {ids}.
        slots:
          ids: query.ids
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentpublications/new'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a blank content publication template
      effect: read
      questions:
      - Is there a pre-populated template to start a new content publication from?
      - What does an empty content publication with its default condition tree look like?
      instructions:
      - text: Get a new blank content publication template.
      - text: Give me the default skeleton for a content publication.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentpublications/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a content publication
      effect: read
      questions:
      - What items, places and dates are set on a given content publication?
      - Where do I read one publication by ID?
      instructions:
      - text: Get content publication {id}.
        slots:
          id: path.id
      - text: Show the schedule and targeting of publication {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentpublications'].put
  update:
    x-apievangelist-phrasing:
      intent: Update a content publication
      effect: write
      questions:
      - How do I change when an existing publication starts or ends?
      - Can I deactivate a content publication without deleting it?
      instructions:
      - text: Change publication {name} to run from {startDate} to {endDate}.
        slots:
          name: requestBody.name
          startDate: requestBody.startDate
          endDate: requestBody.endDate
      - text: Set existing publication {name} active flag to {isActive}.
        slots:
          name: requestBody.name
          isActive: requestBody.isActive
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentpublications'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a content publication
      effect: write
      questions:
      - How do I schedule content items to appear in placeholders for a store?
      - Can a new publication be limited to a date range?
      instructions:
      - text: Create a publication {name} for store {storeId}.
        slots:
          name: requestBody.name
          storeId: requestBody.storeId
      - text: Publish content items {contentItems} to places {contentPlaces} starting {startDate}.
        slots:
          contentItems: requestBody.contentItems
          contentPlaces: requestBody.contentPlaces
          startDate: requestBody.startDate
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentpublications'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete content publications
      effect: destructive
      questions:
      - How do I remove content publications I no longer need?
      - Can I delete several publications in one go?
      instructions:
      - text: Delete content publications {ids}.
        slots:
          ids: query.ids
      - text: Remove the publications with IDs {ids}.
        slots:
          ids: query.ids
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentfolders/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a dynamic content folder
      effect: read
      questions:
      - What does a content folder record hold?
      - Where do I read a single content folder by ID?
      instructions:
      - text: Get content folder {id}.
        slots:
          id: path.id
      - text: Show the dynamic content folder {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentfolders'].put
  update:
    x-apievangelist-phrasing:
      intent: Update a dynamic content folder
      effect: write
      questions:
      - How do I rename an existing content folder?
      - Can I move a content folder under a different parent?
      instructions:
      - text: Rename content folder {id} to {name}.
        slots:
          id: requestBody.id
          name: requestBody.name
      - text: Move existing content folder {id} under folder {parentFolderId}.
        slots:
          id: requestBody.id
          parentFolderId: requestBody.parentFolderId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentfolders'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a dynamic content folder
      effect: write
      questions:
      - How do I create a folder to organize content items and places?
      - Can I nest a new content folder inside another?
      instructions:
      - text: Create a content folder named {name}.
        slots:
          name: requestBody.name
      - text: Add a new content folder {name} inside {parentFolderId}.
        slots:
          name: requestBody.name
          parentFolderId: requestBody.parentFolderId
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/contentfolders'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete dynamic content folders
      effect: destructive
      questions:
      - How do I remove content folders I no longer use?
      - Can I delete several content folders at once?
      instructions:
      - text: Delete content folders {ids}.
        slots:
          ids: query.ids
      - text: Remove the dynamic content folders {ids}.
        slots:
          ids: query.ids
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Search promotions
      effect: read
      questions:
      - Which promotions are active in my store right now?
      - Can I list only the public promotions or those in a given status?
      instructions:
      - text: Search promotions for {keyword}.
        slots:
          keyword: requestBody.keyword
      - text: List active promotions in store {store}.
        slots:
          store: requestBody.store
      - text: Find promotions with status {status}.
        slots:
          status: requestBody.status
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/evaluate'].post
  update:
    x-apievangelist-phrasing:
      intent: Calculate which promotions apply to a cart
      effect: read
      questions:
      - Which discounts would a shopper get for this cart total?
      - Can I check whether first-time-buyer promotions apply to a customer?
      - What rewards does the promotion engine return for a given store and currency?
      instructions:
      - text: Evaluate promotions for customer {customerId} in store {storeId}.
        slots:
          customerId: requestBody.customerId
          storeId: requestBody.storeId
      - text: Work out the promotion rewards for a cart total of {cartTotal} {currency}.
        slots:
          cartTotal: requestBody.cartTotal
          currency: requestBody.currency
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a promotion
      effect: read
      questions:
      - What conditions and rewards are set on one promotion?
      - Where do I read a single promotion by ID?
      instructions:
      - text: Get promotion {id}.
        slots:
          id: path.id
      - text: Show the rules of promotion {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/new'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a blank promotion template
      effect: read
      questions:
      - Is there a starter promotion with the expression tree already filled in?
      - What does an empty dynamic promotion look like before I configure it?
      instructions:
      - text: Get a new blank promotion template.
      - text: Give me the default skeleton for a dynamic promotion.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions'].put
  update:
    x-apievangelist-phrasing:
      intent: Update a promotion
      effect: write
      questions:
      - How do I change the usage limit on an existing promotion?
      - Can I switch an existing promotion off without deleting it?
      instructions:
      - text: Change existing promotion {name} to allow at most {maxUsageCount} uses.
        slots:
          name: requestBody.name
          maxUsageCount: requestBody.maxUsageCount
      - text: Set existing promotion {name} active flag to {isActive}.
        slots:
          name: requestBody.name
          isActive: requestBody.isActive
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a promotion
      effect: write
      questions:
      - How do I set up a new discount campaign for my stores?
      - Can a new promotion be exclusive so it doesn't stack with others?
      - Can I limit how many times each customer uses a new promotion?
      instructions:
      - text: Create a promotion {name} for stores {storeIds}.
        slots:
          name: requestBody.name
          storeIds: requestBody.storeIds
      - text: Create an exclusive promotion {name} starting {startDate}.
        slots:
          name: requestBody.name
          startDate: requestBody.startDate
      - text: Add promotion {name} limited to {maxPersonalUsageCount} uses per customer.
        slots:
          name: requestBody.name
          maxPersonalUsageCount: requestBody.maxPersonalUsageCount
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete promotions
      effect: destructive
      questions:
      - How do I permanently remove old promotions?
      - Can I delete several promotions at once?
      instructions:
      - text: Delete promotions {ids}.
        slots:
          ids: query.ids
      - text: Remove the promotions with IDs {ids}.
        slots:
          ids: query.ids
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/coupons/search'].post
  update:
    x-apievangelist-phrasing:
      intent: Search coupon codes
      effect: read
      questions:
      - Which coupon codes belong to a given promotion?
      - Can I look up whether a specific coupon code exists?
      instructions:
      - text: List coupons for promotion {promotionId}.
        slots:
          promotionId: requestBody.promotionId
      - text: Find the coupon with code {code}.
        slots:
          code: requestBody.code
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/coupons/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a coupon by ID
      effect: read
      questions:
      - What details are stored for one coupon record?
      - Where do I read a single coupon by its ID?
      instructions:
      - text: Get coupon {id}.
        slots:
          id: path.id
      - text: Show the coupon record {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/coupons/add'].post
  update:
    x-apievangelist-phrasing:
      intent: Add coupons to promotions
      effect: write
      questions:
      - How do I attach a set of new coupon codes to a promotion?
      - Can I add many coupons in one request?
      instructions:
      - text: Add these coupon codes.
      - text: Save this list of new coupons for my promotion.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/coupons/delete'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete coupons
      effect: destructive
      questions:
      - How do I remove coupon codes I issued by mistake?
      - Can several coupons be deleted together?
      instructions:
      - text: Delete coupons {ids}.
        slots:
          ids: query.ids
      - text: Remove the coupon records {ids}.
        slots:
          ids: query.ids
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/marketing/promotions/coupons/import'].post
  update:
    x-apievangelist-phrasing:
      intent: Import coupons from a file
      effect: write
      questions:
      - Can I bulk load coupon codes from a CSV file?
      - Is it possible to set an expiration date on coupons during an import?
      instructions:
      - text: Import coupons from {fileUrl} into promotion {promotionId}.
        slots:
          fileUrl: requestBody.fileUrl
          promotionId: requestBody.promotionId
      - text: Import coupons from {fileUrl} using delimiter {delimiter}, expiring on {expirationDate}.
        slots:
          fileUrl: requestBody.fileUrl
          delimiter: requestBody.delimiter
          expirationDate: requestBody.expirationDate
      method: generated
      generated: '2026-09-26'