Attraction PromoStandards
Our PromoStandards services are reserved for users who have obtained credentials from Attraction. Connect your promotional product tools to our product data, inventory, media and pricing through read-only SOAP services.
Services
PromoStandards serves the promotional market. Each service has its own HTTPS endpoint and version. Import its public WSDL into a SOAP 1.1 client; the WSDL references the XSD files that define request and response fields, namespaces and element order.
Product Data 2.0.0
Product descriptions, variants, public price breaks and sellable product identifiers.
- Endpoint: ProductData/2.0.0/
- Contract: Product Data WSDL
Inventory 2.0.0
Inventory by product variant, with filters for part, colour and size.
- Endpoint: Inventory/2.0.0/
- Contract: Inventory WSDL
Media Content 1.1.0
Product media URLs, with filters for media type, part and classification.
- Endpoint: MediaContent/1.1.0/
- Contract: Media Content WSDL
Product Pricing and Configuration 1.0.0
Public price breaks and standard A3 net prices by variant, with available shipping-point currencies. The service path is PPC.
- Endpoint: PPC/1.0.0/
- Contract: Pricing and Configuration WSDL
Access
Request PromoStandards credentials at promo@attraction.com. Include your company and the integration you want to connect.
Every operation requires wsVersion, id and password in the XML request body. Set wsVersion to the version of the service being called. Although the standard marks password as optional in some schemas, Attraction requires it.
These credentials are separate from REST API keys. A Bearer key created under API access does not authenticate a PromoStandards request. WSDL and XSD downloads are public and require no credentials.
Operations and parameters
Use the operation names and request types from the WSDL. productId identifies a product; partId identifies one of its variants. Read these identifiers from Product Data instead of constructing them from a product name, colour or size.
Product Data
getProductSellable: sendisSellable=trueto list sellable products and parts. Optional filters areproductId,partIdandlineName. SetlocalizationCountryandlocalizationLanguagefor the desired market.getProduct: requiresproductId,localizationCountryandlocalizationLanguage. Optional filters arepartId,colorNameandApparelSizeArray.getProductDateModified: requireschangeTimeStamp; returns product identifiers changed strictly after that date. Use an ISO 8601 timestamp with a time zone, then retrieve current product details.getProductCloseOut: currently returns an empty closeout list.
Inventory
getFilterValues: requiresproductId; returns available part identifiers, size labels and colours for inventory filtering.getInventoryLevels: requiresproductId. The optionalFilteracceptspartIdArray,LabelSizeArrayandPartColorArray. Read the returned availability fields according to the inventory rules.
Media Content
getMediaContent: requiresproductIdandmediaType(Image,Video,AudioorDocument). Optional filters arepartIdandclassType; setcultureNamefor the market. A part filter selects its colour media plus media shared by the product.getMediaDateModified: requireschangeTimeStamp; returns product and part identifiers whose media changed strictly after that date. Use an ISO 8601 timestamp with a time zone.
A valid media type can return an empty list when there is no matching content. Media Content 1.1.0 uses the 1.0.0 namespace URIs from its official WSDL. Keep wsVersion=1.1.0; do not replace the namespace version.
Pricing and Configuration
getFobPoints: sendproductIdto retrieve the shipping-point identifier and the currencies published for that product. UsefobIdfrom this response in pricing requests.getConfigurationAndPricing: requiresproductId,currency,fobId,priceType,localizationCountry,localizationLanguageandconfigurationType.partIdis optional. UsepriceType=Listfor public prices orpriceType=Netfor standard A3 net prices, withconfigurationType=Blank.getAvailableLocations,getAvailableChargesandgetDecorationColors: return empty responses for valid products. Decoration configurations and pricing are not published through this service.
XML examples
Replace YOUR_ID and YOUR_PASSWORD with your PromoStandards credentials. For requests that need a product, replace PRODUCT_ID with an identifier returned by Product Data. The examples use the Canadian English market; the data scope section describes US parameters.
Send the XML envelope with HTTP POST, Content-Type: text/xml; charset=utf-8 and the operation's SOAPAction. For example, save the first envelope as request.xml, then send:
curl --request POST \
--header 'Content-Type: text/xml; charset=utf-8' \
--header 'SOAPAction: "getProductSellable"' \
--data-binary @request.xml \
'https://promostandards.api.attraction.com/ProductData/2.0.0/'Find sellable product identifiers
Product Data endpoint; SOAPAction: "getProductSellable".
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:svc="http://www.promostandards.org/WSDL/ProductDataService/2.0.0/"
xmlns:shar="http://www.promostandards.org/WSDL/ProductDataService/2.0.0/SharedObjects/">
<soap:Body>
<svc:GetProductSellableRequest>
<shar:wsVersion>2.0.0</shar:wsVersion>
<shar:id>YOUR_ID</shar:id>
<shar:password>YOUR_PASSWORD</shar:password>
<shar:localizationCountry>CA</shar:localizationCountry>
<shar:localizationLanguage>en</shar:localizationLanguage>
<shar:isSellable>true</shar:isSellable>
</svc:GetProductSellableRequest>
</soap:Body>
</soap:Envelope>Read product inventory
Inventory endpoint; SOAPAction: "getInventoryLevels".
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:svc="http://www.promostandards.org/WSDL/Inventory/2.0.0/"
xmlns:shar="http://www.promostandards.org/WSDL/Inventory/2.0.0/SharedObjects/">
<soap:Body>
<svc:GetInventoryLevelsRequest>
<shar:wsVersion>2.0.0</shar:wsVersion>
<shar:id>YOUR_ID</shar:id>
<shar:password>YOUR_PASSWORD</shar:password>
<shar:productId>PRODUCT_ID</shar:productId>
</svc:GetInventoryLevelsRequest>
</soap:Body>
</soap:Envelope>Read product images
Media Content endpoint; SOAPAction: "getMediaContent".
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:svc="http://www.promostandards.org/WSDL/MediaService/1.0.0/"
xmlns:shar="http://www.promostandards.org/WSDL/MediaService/1.0.0/SharedObjects/">
<soap:Body>
<svc:GetMediaContentRequest>
<shar:wsVersion>1.1.0</shar:wsVersion>
<shar:id>YOUR_ID</shar:id>
<shar:password>YOUR_PASSWORD</shar:password>
<shar:cultureName>en-CA</shar:cultureName>
<shar:mediaType>Image</shar:mediaType>
<shar:productId>PRODUCT_ID</shar:productId>
</svc:GetMediaContentRequest>
</soap:Body>
</soap:Envelope>Read public price breaks
PPC endpoint; SOAPAction: "getConfigurationAndPricing". Replace FOB_ID with the identifier returned by getFobPoints and choose a currency it lists for the product. The example requests public prices; use priceType=Net to request standard A3 net prices when published for that product and currency.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:svc="http://www.promostandards.org/WSDL/PricingAndConfiguration/1.0.0/"
xmlns:shar="http://www.promostandards.org/WSDL/PricingAndConfiguration/1.0.0/SharedObjects/">
<soap:Body>
<svc:GetConfigurationAndPricingRequest>
<shar:wsVersion>1.0.0</shar:wsVersion>
<shar:id>YOUR_ID</shar:id>
<shar:password>YOUR_PASSWORD</shar:password>
<shar:productId>PRODUCT_ID</shar:productId>
<shar:currency>CAD</shar:currency>
<shar:fobId>FOB_ID</shar:fobId>
<shar:priceType>List</shar:priceType>
<shar:localizationCountry>CA</shar:localizationCountry>
<shar:localizationLanguage>en</shar:localizationLanguage>
<shar:configurationType>Blank</shar:configurationType>
</svc:GetConfigurationAndPricingRequest>
</soap:Body>
</soap:Envelope>Data scope
Languages and markets
Product Data and PPC support localizationLanguage=en with localizationCountry=CA or US. French product data is not currently available through PromoStandards. Product Data returns the catalogue published for the selected country.
For Media Content, use cultureName=en-CA or en-US; omitting it selects US English. French cultures are not supported. Inventory does not take a language or country parameter.
Pricing
Product Data publishes public MSRP prices. In PPC, priceType=List returns MSRP and priceType=Net returns the standard A3 net price grid when available for the product and currency. If the net grid is absent, the service reports that the requested price type is unavailable.
PromoStandards credentials do not select your account's price tier. The A3 grid is shared across integrations; it does not represent your account's personalized net prices. priceType=Customer is not supported. PPC supports the Blank configuration only; Decorated is not supported.
Discount letters accompany List prices only. Net prices are already net amounts and do not include a discount letter.
Request CAD or USD only when that product has a published grid in the currency. getFobPoints lists the available currencies; localizationCountry does not convert prices or create a missing grid. Use the price breaks and size-specific prices returned by the service, and respect the published expiry dates.
Inventory and products without stock quantities
For made-to-order Ethica colour-block products and hyper custom Jameo products, Inventory returns manufacturedItem=true and buyToOrder=true, with quantityAvailable omitted. Product Data marks each part with isOnDemand=true.
An omitted quantity is not zero stock or a numeric promise of unlimited inventory. Keep the flags when importing these products. Other variants can also omit quantityAvailable when no inventory quantity is available; do not substitute zero. Inventory does not currently publish replenishmentLeadTime.
Errors and integration policies
Read the PromoStandards error reference to interpret service messages and decide whether to retry. It distinguishes application errors inside successful HTTP responses from SOAP Faults and also covers HTTP 429 and 503 responses.
The Developers page maintains rate limits, versions and deprecation, the changelog and support guidance. Each policy identifies the interface it applies to.