> ## Documentation Index
> Fetch the complete documentation index at: https://docs.semicola.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bring data in

> Connect conversion events, finished creatives, seller inventory and seller materials to the right Semicola workflow.

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.

| You have                                               | Start here                                              | Surface                                                                                        |
| ------------------------------------------------------ | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Conversion or business events                          | Register an event source, then send events              | REST event-source endpoints, or `save_measurement_source` and `log_event`                      |
| A finished image, video, audio, HTML5 or VAST creative | Upload the asset, then save a creative                  | REST asset upload, `save_creative`                                                             |
| A CSV, XLS or XLSX ad tag sheet                        | Preview it, then import it from the creative library    | REST preview, **Bulk upload creatives**                                                        |
| Seller inventory or an ad server                       | Save an inventory source and read its readiness         | `save_inventory_source`, `get`                                                                 |
| An avails spreadsheet or export (sellers)              | Create a modular source, then preview and commit avails | **Add a modular source**, **Import inventory feed** ([Modular sources](/sell/modular-sources)) |
| A media kit, rate card, deck, past RFP or site         | Add it as material and review what the agent learned    | `save_material`                                                                                |

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](/buy/campaign#optimization-goals). 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](/buy/event-sources#how-a-source-reaches-each-seller)).

Payloads, event types and health are in [Event sources](/buy/event-sources). The
[Set up an event source](/skills/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](/concepts/video-creatives) 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](/buy/creatives)).

Saving a creative imports content; it doesn't generate or change it. To compose one from library
assets, use [Generate campaign creatives](/skills/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](/skills/inspect-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](/sell/inventory-sources) and [Test a sales agent](/skills/test-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](/sell/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](/sell/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](/guides/cloud-drive-connections).

## Not available yet

* Aggregated outcome uploads (CRM, MMP or warehouse totals by day or campaign).
* Identity fields (see [Event sources](/buy/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](/sell/modular-sources#not-available-yet)).
