Destinations
Everywhere Fabric can send a catalog, what each kind decides, and the download cap.
A destination is somewhere Fabric sends enriched catalog content: a storefront, a product feed, or a file. Every destination has a kind, and the kind decides who has to approve a publish and whether it changes the state of your products.
Note
Fabric does not publish to ChatGPT, Perplexity or Gemini. Those AI channels read what is already published on the web, so a destination is how your content gets somewhere they can reach it.
The catalog
GET /v1/publishing/destinations returns this list, and it is the same for every organization.
| Destination | Kind | Output | Default delivery | Supports delta mode |
|---|---|---|---|---|
fabric_canonical | file | CSV | Download | No |
source_roundtrip | file | CSV | Download | No |
schema_org | file | JSON | Download | No |
google_feed | feed | CSV | Hosted file | Yes |
ucp_google | feed | CSV | Hosted file | Yes |
acp_stripe | feed | CSV | Stripe API | Yes |
shopify_api | storefront | JSONL | Shopify Admin API | Yes |
sfcc_xml | storefront | XML | SFTP | Yes |
fabric_canonical is your catalog in Fabric's own shape; source_roundtrip hands back the shape of
the file you imported. schema_org is the structured data as JSON-LD documents.
google_feed and ucp_google add Fabric's content to products already in your Google Merchant
Center account — Fabric never creates products there, so an offer with no match is skipped.
ucp_google is the same feed plus the attributes a shopping agent reads under the Universal
Commerce Protocol.
What a kind decides
| Kind | Needs an approver | Moves products to Published |
|---|---|---|
file | No | No |
feed | Yes | No |
storefront | Yes | Yes |
A file destination needs no approver because it hands bytes back to whoever asked and changes
nothing anywhere — there is nothing yet to approve. The gate belongs where content reaches somewhere
a shopper can see it.
A feed does not move products to Published even though it needs approval: the destination may not
have fetched the document yet, so only a storefront's own confirmation is proof the content landed.
Who may approve
| Role | Can | Cannot |
|---|---|---|
member | Create and test connections, preview a mapping, start a dry run, download a file export | Approve a publish to a feed or storefront, activate a mapping version, cancel a running publish |
owner | Everything | — |
Cancelling is an owner's decision for the same reason approving is. Stopping an approved storefront write half-way leaves the store partly updated.
A dry run is exempt from approval. Seeing what would change is what happens before you approve, so requiring approval to look would make the preview useless.
An owner's approval covers every product in the run's scope, including products still in review. The approval is the decision; Ready to publish is how you choose a scope, not a gate the run enforces.
Connections
A connection is one destination for one brand, holding the credential Fabric delivers through.
- The credential is encrypted before storage and is never returned. Only its last four characters are readable afterwards, which is enough to tell two keys apart.
- A connection is disabled until a test succeeds, so a destination Fabric has never reached cannot be selected for a publish.
- A brand may hold two connections to one destination — two stores, or a staging bucket and a live one. Two of them enabled leaves a run no way to say which, so Fabric refuses rather than publishing to whichever was created last. Disable all but one, or archive the ones the run should not use.
- Archiving a connection keeps it resolvable, so past runs still name what they published to.
Only an organization owner may create, test or archive a Google Merchant Center connection: a connection there reserves the account against every other brand, and a publish rewrites that account's data source rules.
Downloading rather than publishing
POST /v1/publishing/export builds a file destination and returns the bytes in the same request.
It is capped at 5,000 products by default, and the cap set for your organization or brand may
differ. Above it the
request answers too_large with both numbers, and you start a run instead
— a run streams, resumes and leaves a record, which a direct download does none of.
A feed or storefront destination is refused here at any size. Those need an approver and an
audit trail, and a synchronous download can record neither.
Related
- Publishing over the API — create a connection and run a publish.
- Connect Shopify — the storefront destination, end to end.