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

# Library

> The material, responses, and reusable slides your storefront agent uses to sell your inventory.

## Overview

The **Library** is everything your storefront agent sells with and learns from,
including the proposals you sent. It gives your storefront one place for media
kits, decks, one-sheets, case studies, audience cards, spec sheets, seasonal
calendars, and responses.
[Product marketing](/v2/storefront/product-marketing/overview) becomes the
Library: the Material and selling points you already keep there remain
available here.

This seller Library is not the advertiser creative library that buyers use for
campaign creatives. Your Library contains seller Material, responses, and
Library requests; it does not contain an advertiser's campaign creative.

Before a proposal can use Library material, the selected wholesale product must
also be complete: it needs a channel, a canonical URL-free format, and a
priced option with currency and delivery type. Product pricing belongs in the
product or rate-card flow, never in reusable Library material. If a proposal
ends in `needs_clarification`, read the product's
request-independent `composerCompleteness.missing` facts and repair them before
retrying. The selected pricing option must also match the RFP currency.

The Library is not where every seller record belongs. An RFP is a record of
demand and stays in the [demand inbox](/v2/storefront/demand-inbox). Pricing
lives in your rate cards. Policy lives in [AI Business
Rules](/v2/setup/seller-pages#business-rules--what-you-accept).

Since 2026-09-07, the Library is available to every seller.

## Previewing a document

Select a document to open its previewer beside the list on wide layouts and in
a sheet on narrow ones. Your search, filters, grouping, and scroll position
stay in place, so you can close it with **Escape** or **Back to documents** and
continue where you left off. The previewer shows the document or selected page,
its category, and summary facts. Use the category control there when you need
to change how your storefront agent classifies the document. Select **Edit**
for the document's tags, reuse and inspection facts, linked usage, and other
detailed controls.

## Document categories

Set a document category so your storefront agent can decide when to use it:
**Sales deck**, **One-sheet**, **Case study**, **Response**, or
**Specification sheet**. Topics, audiences, and verticals are set separately;
changing a category does not change those tags or the source file.

Existing Material and new uploads start as **Uncategorized** until you choose a
category. The Library does not guess a category from the file name, source, or
extracted content. Choose **Uncategorized** again to clear a category.

The Library opens in a list grouped by document category when at least one
loaded document has a category. Uncategorized documents appear last. If none
of the loaded documents has a category, the Library opens as one ungrouped
list and does not offer category grouping. You can switch to the grid at any
time. If a grouping you selected is no longer available, the Library returns
to category grouping when categories are available.

The category and file-type filters show counts for the currently loaded result
rows. They work together with search and grouping, and each filter can return
to its own **All** option without clearing the other one. If more documents are
available, the Library keeps **Load more documents** visible even when the
loaded rows have no match. After all rows are loaded, a combination with no
matches shows an empty state with a clear-filters action.

Rate-card and policy documents can remain Material sources for extraction and
provenance, but assigning a category does not move their governed facts into
the reusable Library. Canonical pricing remains in
[Rate Cards](/v2/setup/seller-pages#rate-cards--how-you-price), and policy
remains in
[AI Business Rules](/v2/setup/seller-pages#business-rules--what-you-accept).
Existing pricing-safety rules still block reuse of a unit that contains a
commercial figure.

## Responses and pairs

The Responses section lists materials paired to the brief they answered, along
with imported historical proposals. Each entry keeps its saved name and version
date and names the brief it answered when one is linked. It remains available
when other Library documents change.

A **pair** holds that brief, the response, your commentary, and the commercial
outcome recorded for the exchange. Choose the uploaded Library document that
holds what you sent; attaching it saves it as this brief's response. Briefs
that already have a response are unavailable rather than silently replaced.

For integrations, Material reads report `materialKind` as `document` or
`response`. Search with `filter.materialKind: "response"` to return only
Materials paired to a brief or imported as historical proposals; use `document`
to return Materials that have not been saved as a response.

You can also start from an eligible row in the [demand
inbox](/v2/storefront/demand-inbox). Choose an uploaded Library document after
you add the file to the Library. To save an uploaded Library document as a
response, open it in the Library and choose **Save as a response**. Direct file
upload in the Demand Inbox is out of scope. Use **Import historical brief**
from an uploaded document's detail view in the Library when the brief is not
recorded yet; imported briefs remain historical reference records. A historical
proposal with no brief stays in Responses as a standalone shape example.

Your grade and feedback are commentary on the pair. When you **endorse** a
pair, you mark its response as a good answer to that brief. An endorsed pair
is an evaluation case: rerun the brief and compare the result with the
endorsed response. The outcome on the pair remains the record of what happened
commercially.

## Reusable slides

Uploaded decks, one-sheets, and spreadsheets yield reusable slides, pages, or
sheets. Each starts as not reusable and can stay in the Library as a historical
record without being available to add to a response.
Only individual slides, pages, or sheets can be made reusable; a whole document or structural container cannot.

A clean inspection makes one page, slide, or sheet eligible for reuse. It does
not mean that unit is appropriate for every buyer. Review each unit and leave
buyer-specific, expired, or otherwise unsuitable content off. The control
updates automatically when a pending inspection finishes; you do not need to
reload the Library.

Every reusable unit is checked for pricing. A unit with pricing is marked and
cannot be made reusable until the price is removed. Keep current prices in
your [Rate Card](/v2/setup/seller-pages#rate-cards--how-you-price), then upload
the price-free page, slide, or sheet. Figures in reusable units can reserve the
layout for a price, but the value that renders comes from Rate Card. This keeps
a stale or buyer-specific number out of a response.

### How a page is inspected

Each slide or page of an uploaded PDF or deck carries the state of its own
inspection, and the document carries a summary of all of them. You see these
states on the unit and in the `document_inspection` summary of a Material
rendition:

* **Preview**: whether a faithful picture of the page exists. Library combines
  the stored `preview_state` with the source and processing state so that it is
  explicit when previewing is unsupported or unavailable.
  `ready` when the page was rendered, `partial` when only some of the document
  could be rendered, `failed` when rendering was attempted and did not
  complete, `unsupported` when this source cannot produce a faithful page or
  slide preview, `unavailable` when a supported file was not inspected, and
  `pending` while inspection is queued or running.
* **Reading** (`semantic_state`): whether the page's text and layout were read.
  `ready`, `partial`, `failed`, or `unsupported` for a file type that cannot be
  read; `not_started` until reading begins.
* **Scan** (`scan_status`): whether the whole page was scanned for commercial
  figures, including numbers that appear only inside images. `scanned` when the
  whole-page scan ran, `not_scanned` when it did not, `not_applicable` for a
  unit that has no page image, such as a spreadsheet sheet.
* **Pricing safety** (`pricing_safety`): the outcome of the scan. `safe` means
  the whole page was read and no commercial figure was found;
  `contains_pricing` means one was found; `unknown` means there is no
  page-by-page conclusion. Read it with the preview state: on the document
  summary, `unknown` with `preview: unavailable` means whole-page inspection
  has not been attempted for this storefront yet, while `unknown` with
  `preview: failed` or `partial` means it was attempted and did not conclude
  (the render was cut short, rendering or reading failed, or the whole-page
  scan did not run). A unit with no value here was never inspected
  page-by-page and falls back to the text scan of the file itself.

A unit whose safety is `unknown` or `contains_pricing`, or whose preview or
reading is incomplete, cannot be made reusable until the page is inspected
cleanly. Spreadsheet sheets and historical units without page-level inspection
fields can still be eligible when the canonical source text scan is clean.

After a private upload finishes, new PDF and PowerPoint files move from
`pending` to their final inspection state in the open Library without a manual
reload. If the private upload itself does not finish, the document says
**Upload incomplete** instead of presenting that state as an inspection. Choose
**Retry upload** and select the original file again. The retry creates a new
immutable source revision for the same Material; it does not create a duplicate
Library document.

PDFs and PowerPoint files saved before whole-page inspection was introduced
were not changed or backfilled, so they can remain `unavailable`. Open one of
those files and select **Retry inspection** to queue its current source
revision. The retry is limited to that Material in your seller account and is
safe to repeat if the first request's result is unclear. It does not change or
delete the original file.

When a reusable slide appears in a response, it is a Library block with its
source named. You can turn Library blocks on or off and reorder them before
sending.

## Add material

Select **Add material** at the top of the Materials section in the Library to
upload a PDF, PowerPoint (`.pptx`), Excel (`.xlsx`), CSV, PNG, JPEG, GIF, or
WebP file. The Library checks the file type before it starts the private
upload, then processes the new Material and shows its pages or slides here. A
file type the Library cannot read is refused before it is uploaded.

Uploaded decks and one-sheets show their reusable units after processing. A
unit with pricing is marked and stays unavailable for reuse; clean units can
be toggled reusable from the Library.

## How your agent uses the Library

When a Material search requests `evidence_matches`, it can return up to 24
current readable matches from 48 candidates. Each match names its Material
source revision, rendition, unit, exact source locator, and the result receipt.
The search result does not include source text for model use.

### Matching rendered previews

When your agent reads a Material with `get` and `include: ['repeats']`,
`included.exactRenderedPreviewGroups` can identify separate readable units with
the same rendered preview. This helps you review repeated rendered pages or
slides without treating them as the same Material.

The comparison includes only complete previews for whole units. It is
`same_rendered_preview` only when the stored preview content digest and
rendering configuration digest match in one rendering/configuration domain.
Each occurrence remains separate, with its own Material, source revision,
rendition, unit, and document order.

The read checks your current permission for every occurrence before it groups
or counts anything. Seeing an occurrence does not make it available for model
use or reuse. Results are bounded: use each group's `returned` and `truncated`
values, and the overall `truncated` value, rather than assuming the response
lists every occurrence you can read.

A matching rendered preview is not a claim that two units have the same
meaning, source, or approved-template status.

**Shaped by** is seller-facing provenance. On your Proposal Pass and the HTML,
PDF, and PPTX previews you review, it names the endorsed example your agent
followed from your own demand-inbox records, with its brief subject, pair id,
endorsement date, and one sentence on why it fit. It is never included in what
a buyer receives. If no endorsed pair fits, it says so and composes from
Library material instead.

Pairs are evidence from one buyer relationship. For a different buyer, the
agent receives only the structure-only shape projection: its allowlisted block
kinds, roles, and order. It does not receive the other buyer's name, contacts,
brief, budget, negotiated rates, commentary, or response text.

A pair follows its brief's retention. If the brief is deleted or a buyer asks
for deletion, the pair and its shape projection stop shaping later responses.
An earlier response keeps only a tombstone with the pair id and date, not its
content.

## Library requests

A **library request** records a gap the storefront agent found while answering
a brief, such as a case study for a channel or vertical the Library does not
cover. The agent files one request for each gap, and the response
states the honest absence instead of inventing a block.

**Add material** is the direct path when you have material to add. You can also
close a specific Library request by uploading the missing file from that
request or telling your storefront agent what to use. An uploaded file can
provide reusable-slide candidates. Material you provide in chat is marked as
your word rather than a document and feeds composed blocks; it does not become
a slide. The request records which path closed it.

## The Library Page

Your storefront agent opens the Library Page when you ask to see or manage your
Library. The page opens as a list grouped by document category when at least
one document has a category, and you can switch to a grid or choose a different
grouping. It shows your documents and decks as files, and their exact pages and
slides as units. You can search across both, filter files by document category
and file type, group rows by topic, audience, vertical, or source, and load
more rows as you go. Opening a document lets you change its category and shows
its pages or slides with their preview, reuse, and inspection state, and any
repeated previews found elsewhere in your Library. The Usage view lists the
sent responses that used a page or slide; from there you can open the Proposal
Pass for that response. Responses and open Library requests stay secondary
views, and the Upload control on a request adds the missing file directly.

Cards and rows now start with a file-type thumbnail. A visual render replaces
it when one is available. While a render is processing, the thumbnail has a
**Preview pending** marker. Grid and list views also show **Partial preview**,
**Preview unavailable**, or **Preview access unavailable** when there is no
usable visual render. If an available image cannot load in your browser, the
file-type thumbnail remains and the card says **A current preview could not be
loaded**.

## Related

<CardGroup cols={2}>
  <Card title="Demand inbox" href="/v2/storefront/demand-inbox" icon="inbox">
    Review demand, attach what you sent, and endorse a pair.
  </Card>

  <Card title="Seller workflows" href="/v2/setup/v3/seller-workflows#add-and-inspect-seller-material" icon="list-check">
    Add Material and inspect its units.
  </Card>
</CardGroup>
