Reference

Shopware field mappings

This document maps UCP response/request fields to the Shopware data that

UCP To Shopware Field Mappings

This document maps UCP response/request fields to the Shopware data that currently backs them. It focuses on production runtime behavior and calls out test-only conformance behavior explicitly where relevant.

1. Discovery Profile

Source: UcpProfileBuilder.

UCP fieldShopware sourceNotes
ucp.versionucp_sales_channel_config.ucp_versionDefaults to current UCP version for the Sales Channel.
ucp.services[].transportucp_sales_channel_config.enabled_transportsREST, MCP, A2A and Embedded are included only if enabled.
ucp.services[].endpointCurrent Sales Channel domain URL + transport pathExample: {domain}/ucp/v1, {domain}/ucp/mcp.
ucp.capabilitiesucp_sales_channel_config.enabled_capabilities + CapabilityRegistryCapability metadata is provided by registered UcpCapability services.
ucp.payment_handlersUcpPaymentHandlerRegistry::describeForSalesChannel()Each registered payment handler contributes descriptors and instrument types.
ucp.supported_versionsSupportedVersionsRegistryVersion-pinned well-known profile URLs.
signing_keys[]ucp_signing_key.public_jwkOnly publishable active/retiring public JWKs are exposed.

2. Platform Profile And Negotiation

UCP conceptShopware sourceNotes
Platform profile URIUCP-Agent: profile="..."Parsed by UcpAgentHeader.
Platform allowlistucp_sales_channel_config.platform_allowlistEnforced while fetching profiles.
Negotiated capabilitiesBusiness enabled_capabilities intersected with platform ucp.capabilitiesStored in UcpRequestContext.
Protocol versionPlatform profile ucp.version matched against current/historical versionsUnsupported versions reject before controllers.

3. Catalog Product Mapping

Source: ProductMapper.

UCP fieldShopware sourceNotes
product.idSalesChannelProductEntity.productNumber, fallback idUCP-facing product IDs prefer the merchant SKU/product number.
product.titleTranslated product name, fallback product nameUses Shopware translation fallback.
product.description.plainTranslated product description stripped of HTMLOmitted when no description exists.
product.brandProduct manufacturer translated nameOmitted when no manufacturer exists.
product.media[].urlProduct media URLsEmitted with type: image.
variant.idProduct/variant product number, fallback UUIDSame ID policy as product.
variant.skuproduct.productNumberBusiness-assigned stock/SKU identifier.
variant.titleTranslated product/variant name
variant.description.plainTranslated description stripped of HTML
variant.price.amountCalculatedPrice.unitPrice * 100Minor units.
variant.price.currencySales Channel context currency ISO code
variant.availability.availableavailableStock > 0
variant.availability.statusin_stock or out_of_stockBased on available stock.
variant.availability.available_quantityavailableStock
variant.inputs[].idUCP product IDUsed for lookup correlation.
variant.inputs[].matchStatic exactCurrent lookup implementation returns exact matches.

4. Catalog Request Mapping

Source: CatalogController, SearchCatalogTool, LookupProductsTool, GetProductTool, ProductIdentifierResolver.

UCP inputShopware targetNotes
search.queryStore API product search search queryUses ProductSearchRoute.
search.filters.price.min/maxDAL range filter on product priceUCP minor units converted to major-unit float.
search.filters.category_idDAL categoryIds filter
search.cursorCursorCodec stateHMAC signed, TTL-bound and query-fingerprint-bound.
lookup.ids[]Product UUID or product numberNon-UUIDs are matched against productNumber.
get_product.idProduct UUID or product numberReturns single product detail response.
Cart/checkout line_items[].item.idProduct UUID resolved through ProductIdentifierResolverAccepts product number/SKU or UUID.

5. Cart Mapping

Source: CartMapper.

UCP fieldShopware sourceNotes
cart.idCart.tokenUCP cart/checkout session ID is the Shopware cart token.
cart.line_items[]Shopware cart non-promotion line itemsPromotion line items are surfaced through discounts.
line_items[].idShopware cart line item ID
line_items[].item.idLine item payload productNumber, fallback referencedId, fallback line item IDKeeps UCP-visible item IDs stable.
line_items[].item.titleLine item label
line_items[].item.priceUnit price in minor unitsDuplicated as legacy price.amount.
line_items[].quantityLine item quantity
line_items[].price.amountUnit price in minor unitsLegacy compatibility.
line_items[].line_total.amountTotal line price in minor unitsLegacy compatibility.
line_items[].totals[]Unit/line total breakdownEmits subtotal and total.
cart.currencySales Channel context currency ISO code
cart.totals[].subtotalCartPrice.positionPrice * 100Minor units.
cart.totals[].taxCalculated tax amount * 100Minor units.
cart.totals[].discountSum of promotion line item totals * 100Negative value.
cart.totals[].totalCartPrice.totalPrice * 100Minor units.
cart.context.address_countryShipping location country ISO
cart.context.address_regionShipping location country state short codeOptional.
cart.context.postal_codeShipping address ZIPOptional.
cart.context.currencySales Channel context currency ISO code
cart.context.languageSales Channel context language IDShopware UUID.
cart.messages[]Shopware cart errorsPromotion errors are mapped separately by DiscountMapper.
cart.expires_atComputed now + 24hShopware carts do not have a fixed TTL.
cart.continue_urlOptional controller-provided continue URLCheckout uses ContinueUrlBuilder.

6. Cart Request Mapping

Source: CartController.

UCP inputShopware targetNotes
line_items[].item.idLineItemFactoryRegistry product referencedIdUCP ID is resolved to Shopware UUID first.
line_items[].quantityShopware product line item quantityDefaults to 1 when omitted.
Update existing line_items[].idCartItemUpdateRoute item IDExisting line item quantity is changed.
New line item without idCartItemAddRoute
Removed line item in full updateCartItemRemoveRouteCart update treats submitted list as desired state.
discounts.codes[]Promotion placeholder line itemsSpec path; dedicated /carts/{id}/discounts remains as shortcut.

7. Checkout Mapping

Source: CheckoutMapper, CheckoutController.

UCP fieldShopware sourceNotes
checkout.idCart tokenSame ID as cart/session token.
checkout.statusCheckoutStatusResolver from cart/order stateValues include incomplete, ready, escalation, completed, canceled.
checkout.line_itemsSame as cart line item mappingDelegates to CartMapper.
checkout.currencySales Channel context currencyDelegates to CartMapper.
checkout.totalsCart totalsDelegates to CartMapper.
checkout.messagesCheckout/cart status messagesBuilt by CheckoutStatusResolver.
checkout.continue_urlContinueUrlBuilderUsually storefront checkout confirmation URL with cart token.
checkout.linksEmpty list currentlyReserved for policy/help links.
checkout.buyer.emailSales Channel customer email when customer is attachedGuest checkout may create synthetic buyer data at complete time.
checkout.buyer.first_nameSales Channel customer first name
checkout.buyer.last_nameSales Channel customer last name
checkout.buyer.consentConsentStore snapshotOnly when Buyer Consent extension is negotiated.
checkout.fulfillmentFulfillmentMapper::fromCart()Only when Fulfillment extension is negotiated.
checkout.available_instruments[]AvailableInstrumentResolverIntersects platform-accepted instruments with Shopware payment handlers.
checkout.payment.instruments[]Same as available_instruments[]Added for SDK/conformance compatibility.
checkout.order_idOrder ID after completePresent when order was placed.
checkout.order.idOrder ID after completeCompatibility shape for official conformance suite.
checkout.order.permalink_urlStorefront order/account URLCompatibility shape.
checkout.attributionAttributionExtractor from requestEchoes normalized attribution input.
checkout.signalsSignalsExtractor from requestOnly when request signature is verified.

8. Checkout Request Mapping

UCP inputShopware targetNotes
cart_idRebind SalesChannelContext and cart tokenConverts an existing cart to checkout.
line_items[] on createProduct line items added to a fresh cartIgnored when cart_id is provided.
line_items[] on updateExisting line item quantities or new line itemsUses CartItemUpdateRoute and CartItemAddRoute.
buyer on completeGuestCustomerProvisionerCreates guest customer if no customer is attached.
payment.instruments[0].handler_idUcpPaymentHandlerRegistry::get()Falls back to first handler if omitted/unmatched.
payment.instruments[0].credentialPayment handler prepareInstrument()Handler-specific.
fulfillmentFulfillmentMapper::resolveSelection()Selects a Shopware shipping method when ID is a real Shopware UUID.
discounts.codes[]Promotion placeholders or conformance helpers in test modeProduction uses Shopware promotion processing.
ap2.checkout_mandateAP2 mandate verifierRequired when AP2 was negotiated.
ap2.payment_mandate or credential tokenAP2 payment mandate verifierUsed by AP2 plugin.

9. Discount Mapping

Source: DiscountMapper.

UCP fieldShopware sourceNotes
discounts.applied[].titlePromotion line item label
discounts.applied[].codePromotion payload codeOmitted for automatic promotions.
discounts.applied[].amountAbsolute promotion line item total * 100Positive discount amount.
discounts.applied[].automaticNo code present
discounts.applied[].methodStatic across
discounts.applied[].priorityStatic 1
discounts.applied[].allocations[].pathPromotion composition target IDsBest-effort JSONPath.
messages[] for rejected codesShopware promotion cart errorsMapped to UCP discount error codes.

Conformance-only discount codes such as 10OFF, WELCOME20 and FIXED500 are active only with UCP_CONFORMANCE_MODE=1.

10. Fulfillment Mapping

Source: FulfillmentMapper.

UCP fieldShopware sourceNotes
fulfillment.methods[].idCurrent Shopware shipping method ID
fulfillment.methods[].method_typeStatic shipping
fulfillment.methods[].nameShipping method translated name
fulfillment.methods[].line_item_ids[]Delivery position identifiers
fulfillment.methods[].destinations[].idShipping method ID + _destinationProduction Shopware single-address stream.
fulfillment.methods[].destinations[].addressDelivery location shipping addressIncludes country, region, postal code, city and street when available.
fulfillment.methods[].groups[].idShipping method ID + _default
fulfillment.methods[].groups[].options[]Active shipping methods for Sales ChannelAlternative method prices are estimated unless selected.
options[].idShipping method ID
options[].titleShipping method translated name
options[].price.amountSelected delivery cost * 100, alternatives 0 estimated
options[].fulfillable_onDelivery earliest date
options[].arrives_byDelivery latest date

Source: BuyerConsentMapper, ConsentStore.

UCP input/outputShopware sourceNotes
buyer.consent.terms_of_serviceucp_buyer_consent.consent_jsonSupported field.
buyer.consent.gdpr_data_processingucp_buyer_consent.consent_jsonSupported field.
buyer.consent.data_sharing_agentucp_buyer_consent.consent_jsonSupported field.
buyer.consent.marketing_emailucp_buyer_consent.consent_jsonSupported field.
buyer.consent.marketing_smsucp_buyer_consent.consent_jsonSupported field.
buyer.consent.data_retention_extendeducp_buyer_consent.consent_jsonSupported field.
buyer.consent.profilingucp_buyer_consent.consent_jsonSupported field.
granted_atIncoming value or current timestampSet only when granted.
denied_atIncoming value or current timestampSet on denials.
scope, jurisdiction, basis, policy_versionIncoming passthroughWhitelisted optional metadata.

Unknown consent fields are ignored.

12. Loyalty Mapping

Source: LoyaltyAggregator.

UCP fieldShopware sourceNotes
loyalty[]Tagged ucp.loyalty_provider servicesEmpty unless a plugin/provider contributes loyalty data.

13. Order Mapping

Source: OrderMapper, OrderController.

UCP fieldShopware sourceNotes
order.idOrderEntity.idShopware UUID.
order.checkout_idOrder custom field ucp_checkout_id, fallback order IDSet when UCP completes checkout.
order.order_numberOrderEntity.orderNumber
order.statusOrder state machine technical nameMapped for common states.
order.created_atOrder date timeRFC 3339/ATOM.
order.permalink_urlStorefront base + deep link when availableFallback account order URL.
order.currencyOrder currency ISO code
order.line_items[].idOrder line item ID
order.line_items[].item.idOrder line item payload productNumber, fallback referenced/product IDMirrors cart item ID behavior.
order.line_items[].item.titleOrder line item label
order.line_items[].item.priceUnit price * 100Minor units.
order.line_items[].quantity.originalOrdered quantity
order.line_items[].quantity.totalCurrent quantity
order.line_items[].quantity.fulfilledCurrently 0 unless fulfillment event state is known
order.line_items[].totals[]Order line item price/tax totalsMinor units.
order.totals[].subtotalOrderEntity.positionPrice * 100
order.totals[].taxCalculated tax amount * 100
order.totals[].totalOrderEntity.amountTotal * 100
order.buyer.emailOrderCustomer.email
order.buyer.first_nameOrderCustomer.firstName
order.buyer.last_nameOrderCustomer.lastName
order.fulfillment.expectations[]Order deliveriesIncludes line item references, shipping dates and destination when known.
order.fulfillment.events[]Delivery state shipped or conformance order update extrasProduction events currently come from Shopware delivery state.
order.adjustments[]Conformance order update extrasPersistent adjustment ledger is currently test-mode only.

14. Payment And Tokenization Mapping

UCP fieldShopware sourceNotes
ucp.payment_handlersUcpPaymentHandlerRegistry descriptorsOne or more handlers per registered handler name.
available_instruments[].idPayment handler descriptor ID
available_instruments[].handler_idSame handler descriptor IDUsed in complete-checkout requests.
available_instruments[].typeHandler instrument type, e.g. invoice
complete.payment.instruments[].handler_idLookup in UcpPaymentHandlerRegistryFalls back to first handler if absent.
complete.payment.instruments[].credentialPassed to UcpPaymentHandlerInterface::prepareInstrument()Handler-specific credential preparation.
/ucp/v1/tokenize.credentialPassed to handler tokenize()Only handlers with tokenization support respond.
/ucp/v1/tokenize.binding.checkout_idValidated request bindingAccepted for spec compatibility.

15. OAuth Identity Mapping

UCP/OAuth conceptShopware sourceNotes
OAuth issuerSales Channel domain URLOAuthDiscoveryController.
Authorization endpoint/ucp/v1/oauth/authorizeRenders login/consent flow.
Token endpoint/ucp/v1/oauth/tokenIssues access and refresh tokens.
OAuth clientucp_oauth_clientAuto-registration/lookup repository.
Authorization codeucp_oauth_auth_codeLeague OAuth2 Server repository.
Access tokenucp_oauth_access_tokenJWT signed with Sales Channel UCP key.
Refresh tokenucp_oauth_refresh_tokenRotated by League server.
private_key_jwt replayucp_oauth_client_assertionRequires unique jti.
OAuth user subjectShopware customer IDStored through UcpUserEntity.
ScopesUcpScopeRegistryAdvertised in metadata and enforced by UcpScopeGuard.

16. AP2 Mapping

Source: SwagUcpAp2Mandates.

AP2/UCP fieldShopware sourceNotes
Business AP2 capabilityProfile mutation via UcpEvents::PROFILE_BUILTPlugin must be active and capability enabled.
ap2.merchant_authorizationActive Sales Channel UCP signing keyDetached JWS over JCS checkout response without ap2.
ap2.checkout_mandatePlatform request payloadCompact JWS or SD-JWT VC + KB-JWT.
ap2.payment_mandateap2.payment_mandate or payment credential tokenCompact JWS or SD-JWT VC + KB-JWT.
Mandate issuerNegotiated platform profile URIExact issuer pinning.
Mandate public keyPlatform profile signing_keys or SD-JWT cnf.jwkDepends on format.
Mandate replay logswag_ucp_ap2_mandate_logStores mandate IDs, user subject and payment mandate ID, not full PII payload.
Intent itemsCurrent Shopware cart line itemsMatches both Shopware UUIDs and product numbers.
Intent total/currencyCurrent Shopware cart total and currencyMinor-unit comparison with small rounding tolerance.
Intent merchantSales Channel domain hostExact host match.

17. Conformance Test Mode Mapping

Only active when all conditions are true:

bash
APP_ENV != prod
UCP_CONFORMANCE_MODE=1

Additional optional secret:

bash
UCP_SIMULATION_SECRET=<secret>

In this mode only, Shopware accepts upstream conformance assumptions such as request-signature: test, profile="...", flower-shop product IDs, fixed test discount codes, deterministic fulfillment destinations and simulation shipping webhooks.

These mappings are isolated test bridge behavior and must not be used to infer production Shopware business logic.