Skip to main content
Semicola takes several kinds of data, each for a different job. Events are measurement evidence; a creative is content that can run; an inventory source connects supply; seller materials teach the storefront agent. Pick the path that matches what you have. Connecting an MCP client doesn’t install a pixel, connect a CRM or start a feed. Each path below is its own step.

Send events from your application

  1. Pick the owning advertiser and use an API key for the buyer REST API.
  2. Register the source: POST /api/v2/buyer/event-sources for one, or POST /api/v2/buyer/advertisers/{advertiserId}/event-sources/sync for several.
  3. Send events from your backend to POST /api/v2/buyer/event-sources/{key}/events, up to 10,000 per call.
  4. Read the source’s health (not_seen, receiving, needs_attention) until it’s receiving.
Over MCP, save_measurement_source (sourceType: "event") creates or updates one source and log_event sends events with the same fields as the REST call; get with kind: "measurement_source" reads health. Semicola keeps daily and hourly counts (and a daily total value) per event type, not individual events. Send an eventId so a resent event is dropped as a duplicate instead of counting twice. To have sellers optimize for the conversions, name the source in a campaign’s optimization goal. When the campaign sends a buy to a seller, Semicola registers the source on that seller, and later events that carry an eventId are forwarded to it (see How a source reaches each seller). Payloads, event types and health are in Event sources. The Set up an event source skill walks an agent through it. Don’t send raw personal data; send only the fields the endpoint documents.

Import a finished creative

Your application can make content with its own tools and bring the approved version in.
  1. Pick the advertiser, and the campaign if the creative is for one.
  2. Read the formats the campaign’s sellers accept before you choose a rendition (see How AdCP thinks about video for size and duration rules).
  3. Upload the file: POST /api/v2/buyer/assets/upload returns a signed uploadUrl and uploadHeaders; PUT the bytes there. In chat, upload_creative_asset opens the upload task instead.
  4. Save the creative with save_creative: sourceAssets for uploaded files, urlAsset for a VAST tag or tracker, copy for text, and campaignIds to attach it.
  5. Read the creative back and check each seller’s review before launch (Creatives).
Saving a creative imports content; it doesn’t generate or change it. To compose one from library assets, use Generate campaign creatives.

Import a tag sheet

An ad-server export with one tag per placement becomes one draft creative per row. Preview it first with Inspect a tag sheet, then import it from the creative library’s Bulk upload creatives. Resending the same sheet reuses the creatives it already made.

Connect seller inventory

From the Seller account, call get_status, then search with kind: "inventory_source" to see what’s already set up. Save a source with save_inventory_source (an external sales agent’s URL and auth, or the ad server). Enter credentials in the setup page, not in chat. Read the source with get; a saved connection isn’t proof of a successful call, so run a test (see Inventory sources and Test a sales agent). Saving a source doesn’t publish it. With runDiscoveryTest: true, or later with run_inventory_source_discovery_test, Semicola sends a probe brief through the agent’s get_products so you can see real products come back. To check the whole transaction path without spending, save_test_run answers a practice brief, books a sandbox media buy and reads delivery back. If your inventory is an avails spreadsheet or export rather than a sales agent, create a modular source with Add a modular source, then preview and commit its rows with Import inventory feed. Committed rows become products; see Modular sources.

Add seller materials

save_material teaches the storefront agent from a media kit, rate card, deck, past RFP, note or URL. Send the content as inline text, a url, or an uploaded file’s assetRef. Read it with get (kind: "material") and review each extracted selling point (confirm it, withdraw it or add your own with the save_material actions) in the Library before relying on it. Nothing changes your listing, products or playbook until someone confirms it, and a rate card is evidence, not a price change. Documents in a cloud drive can be requested through Cloud drive connections.

Not available yet

  • Aggregated outcome uploads (CRM, MMP or warehouse totals by day or campaign).
  • Identity fields (see Event sources).
  • A browser pixel: events come from your backend.
  • Reading inventory from an ad server (Google Ad Manager, FreeWheel, SpringServe) or trafficking to one: an ad-server connection can be saved, but it stores settings only.
  • Booking, trafficking or reporting through a modular source: its avails feed works, the rest is still manual (see Modular sources).