{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Salesforce Commerce Cloud Integration","description":"Integrate with REVER return process engine","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"salesforce-commerce-cloud-integration","__idx":0},"children":["Salesforce Commerce Cloud Integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/salesforce-cover.b91932fd6b0d4273e47611ca0de79b393f7f4c64cd5a12f231b8e8fc661adb8f.9c1bb791.svg","alt":"REVER x Salesforce Commerce Cloud"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["REVER integrates with Salesforce Commerce Cloud (SFCC, B2C Commerce) through OCAPI, SCAPI and SLAS. This guide lists everything you need to set up in your SFCC instance before REVER can start processing returns, exchanges and gift card refunds."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once you finish these steps, send the resulting IDs and credentials to your REVER account manager through a secure channel."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1-sfcc-ids","__idx":1},"children":["1. SFCC IDs"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["REVER needs the following identifiers from your instance."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"realm-id","__idx":2},"children":["Realm ID"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Go to the Salesforce Commerce Cloud ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Control Center"]}," and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Realms"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Copy the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Realm ID"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"organization-id-and-short-code","__idx":3},"children":["Organization ID and Short Code"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Business Manager"]}," and go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Administration"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Site Development"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Salesforce Commerce API Settings"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Copy the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Short Code"]}," and the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Organization ID"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"domain-and-site-id","__idx":4},"children":["Domain and Site ID"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In Business Manager, note down the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Domain"]},": the first part of your Business Manager URL, up to the first ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".com"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Note down the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Site ID"]},", shown in the left-most section of the Business Manager toolbar."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2-business-manager-user","__idx":5},"children":["2. Business Manager user"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["REVER needs a Business Manager user to access your instances."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-create-the-user-in-account-manager","__idx":6},"children":["Step 1: Create the user in Account Manager"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Log in to ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://account.demandware.com/"},"children":["Account Manager"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the left sidebar, click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Users"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add User"]}," and fill in the mandatory details:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Email Address"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["developer@itsrever.com"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["First Name"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Developer"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Last Name"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ItsRever"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Under ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Organization"]},", make sure your organization is selected."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Save"]},". An invitation email is sent automatically to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["developer@itsrever.com"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-assign-roles","__idx":7},"children":["Step 2: Assign roles"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Scroll down to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Roles"]}," section on the user's page and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select the following roles:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Business Manager User"]}," (required to log in)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Business Manager Administrator"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]}," to confirm."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-configure-the-scope-instances","__idx":8},"children":["Step 3: Configure the scope (instances)"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the list of assigned roles, click the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["filter icon"]}," next to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Business Manager User"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select your organization. You will see all your instances (Production, Staging, Development, Sandboxes)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Check the instances REVER should have access to and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Repeat for the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Business Manager Administrator"]}," role, selecting the same instances."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3-ocapi-settings","__idx":9},"children":["3. OCAPI settings"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"create-the-ocapi-api-client","__idx":10},"children":["Create the OCAPI API client"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Log in to ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://account.demandware.com/dw/account/APIAdmin"},"children":["Account Manager"]}," and open the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API Client"]}," section."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add API Client"]}," and fill in:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A display name for the client."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A password, confirmed. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Store this password securely: it is your client secret."]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Organizations"]}," section, click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]}," and select the appropriate organization(s)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Roles"]}," section, do ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," add the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Salesforce Commerce API"]}," role. This client is used for OCAPI calls only."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Save"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Copy the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client ID"]}," and store it securely."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://sfcclearning.com/infocenter/content/b2c_commerce/topics/account_manager/b2c_account_manager_add_api_client_id.php"},"children":["official documentation"]}," for more details."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"configure-ocapi-permissions","__idx":11},"children":["Configure OCAPI permissions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In Business Manager, go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Administration"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Site Development"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Open Commerce API Settings"]},". You need to configure two API types: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Shop"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In both cases, replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HERE_GOES_THE_CLIENT_ID"]}," with the Client ID you created above."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"shop-api","__idx":12},"children":["Shop API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select type ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Shop"]}," and context ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Global"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the configuration is empty, paste the following JSON. If there is already content, add only the object inside ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clients"]}," as a new item at the end of the existing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clients"]}," array."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"_v\": \"24_1\",\n  \"clients\": [\n    {\n      \"client_id\": \"HERE_GOES_THE_CLIENT_ID\",\n      \"resources\": [\n        {\n          \"resource_id\": \"/order_search\",\n          \"methods\": [\"post\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/customers/*\",\n          \"methods\": [\"post\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/baskets\",\n          \"methods\": [\"post\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/baskets/*\",\n          \"methods\": [\"delete\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/baskets/*/price_adjustments\",\n          \"methods\": [\"post\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/orders/*\",\n          \"methods\": [\"get\", \"patch\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/orders\",\n          \"methods\": [\"post\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/orders/*/notes\",\n          \"methods\": [\"post\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/products/*\",\n          \"methods\": [\"get\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/products/*/*\",\n          \"methods\": [\"get\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/stores/*\",\n          \"methods\": [\"get\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/site\",\n          \"methods\": [\"get\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        },\n        {\n          \"resource_id\": \"/products/*/variations\",\n          \"methods\": [\"get\"],\n          \"cache_time\": 0,\n          \"config\": {\n            \"_comment\": \"Add a comma-separated list of the price book ids currently active in the organization\",\n            \"product.prices.price_book_ids\": \"*\"\n          }\n        }\n      ]\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"data-api","__idx":13},"children":["Data API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select type ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data"]}," and context ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Global"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the configuration is empty, paste the following JSON. If there is already content, add only the object inside ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clients"]}," as a new item at the end of the existing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clients"]}," array."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"_v\": \"24_1\",\n  \"clients\": [\n    {\n      \"client_id\": \"HERE_GOES_THE_CLIENT_ID\",\n      \"resources\": [\n        {\n          \"resource_id\": \"/locale_info/locales\",\n          \"methods\": [\"get\"],\n          \"read_attributes\": \"(**)\",\n          \"write_attributes\": \"(**)\"\n        }\n      ]\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Save"]}," to apply the changes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://sfcclearning.com/infocenter/OCAPI/current/usage/OCAPISettings.php"},"children":["official documentation"]}," for more details."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keep the client ID and password secure: they give access to your Salesforce Commerce Cloud data through the API."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["This OCAPI client cannot be used for SCAPI (Salesforce Commerce API) calls. Create a separate client for SCAPI, as described below."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"4-scapi-settings","__idx":14},"children":["4. SCAPI settings"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Log in to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Account Manager"]}," and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["API Client"]}," in the left navigation menu."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add API Client"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enter a descriptive ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Display Name"]}," (for example, \"REVER SCAPI Client\")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set a secure ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Password"]}," and confirm it. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Store this password securely: it is your client secret."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Organizations"]},", click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]},", select your organization(s) and confirm."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Roles"]},", click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]}," and select the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Salesforce Commerce API"]}," role."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["filter icon"]}," next to the role, select your organization and the instances this client can access, then click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Default Scopes"]}," field, paste the following scopes:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"text","header":{"controls":{"copy":{}}},"source":"mail\nroles\ntenantFilter\nprofile\nsfcc.products\nsfcc.pricing\nsfcc.gift-certificates\nsfcc.gift-certificates.rw\nsfcc.cdn-zones\nsfcc.cdn-zones.rw\nsfcc.inventory.impex-graphs\nsfcc.inventory.impex-inventory.rw\nsfcc.inventory.impex-inventory\nsfcc.inventory.availability\nsfcc.inventory.availability.rw\nsfcc.inventory.reservations\nsfcc.inventory.reservations.rw\nsfcc.promotions\nsfcc.promotions.rw\nopenId\nsfcc.shopper-baskets-orders.rw\nsfcc.shopper-categories\nsfcc.shopper-customers.login\nsfcc.shopper-customers.register\nsfcc.shopper-gift-certificates\nsfcc.shopper-myaccount.rw\nsfcc.shopper-product-search\nsfcc.shopper-productlists\nsfcc.shopper-products\nsfcc.shopper-promotions\nsfcc.shopper-custom-objects\nsfcc.shopper-stores\nsfcc.catalogs\nsfcc.orders\nsfcc.orders.rw\nsfcc.ts_ext_on_behalf_of\nc_rever_giftcertificates\n","lang":"text"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":9},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Review the client name, organizations and roles, then click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Save"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Copy the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client ID"]}," shown in the confirmation message."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"5-slas-client-id-and-secret","__idx":15},"children":["5. SLAS client ID and secret"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This client is used to manage order exchanges through SCAPI."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Open the SLAS Admin UI. Replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{{short-code}}"]}," with the short code of your B2C Commerce instances:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"text","header":{"controls":{"copy":{}}},"source":"https://{{short-code}}.api.commercecloud.salesforce.com/shopper/auth-admin/v1/ui/\n","lang":"text"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Open the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Clients"]}," tab and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add Client"]},"."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Choose the corresponding ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["tenant"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["site"]}," from the dropdowns."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["App Type"]}," to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Private"]},"."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set the following ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["shopper scopes"]},":"]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"text","header":{"controls":{"copy":{}}},"source":"sfcc.shopper-myaccount.baskets sfcc.shopper-discovery-search sfcc.shopper-myaccount.paymentinstruments sfcc.shopper-customers.login sfcc.shopper-myaccount.orders sfcc.shopper-productlists sfcc.shopper-custom-objects sfcc.shopper-promotions sfcc.session_bridge sfcc.shopper-myaccount.paymentinstruments.rw sfcc.shopper-myaccount.productlists sfcc.shopper-categories sfcc.shopper-myaccount sfcc.shopper-myaccount.addresses sfcc.shopper-products sfcc.shopper-myaccount.rw sfcc.pwdless_login sfcc.shopper-context.rw sfcc.shopper-baskets-orders sfcc.shopper-customers.register sfcc.shopper-myaccount.addresses.rw sfcc.shopper-myaccount.productlists.rw sfcc.shopper-baskets-orders.rw sfcc.shopper-custom-objects.countries sfcc.shopper-gift-certificates sfcc.shopper-product-search sfcc.ts_ext_on_behalf_of\n","lang":"text"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":6},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Save"]},", then copy the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client ID"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client Secret"]}," (the secret is shown at the top of the page) and store them securely."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"6-rever-payment-method","__idx":16},"children":["6. REVER payment method"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This setup is required to process exchanges. When REVER creates a new order for an exchange, it marks the order as paid with the REVER payment method so it can be identified as an exchange."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"payment-processor","__idx":17},"children":["Payment processor"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Merchant Tools"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Ordering"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Payment Processor"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ID"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REVER"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add a description, for example \"Processor for REVER exchanges\"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"payment-method","__idx":18},"children":["Payment method"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Merchant Tools"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Ordering"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Payment Methods"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set both the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ID"]}," and the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Name"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REVER"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Details"]}," section, select ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REVER"]}," as the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Payment Processor"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"7-assign-price-books-to-the-site","__idx":19},"children":["7. Assign price books to the site"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For REVER to read prices correctly, your price books must be assigned to the site."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select your site, then go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Merchant Tools"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Products and Catalogs"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Price Books"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click the price book you want to assign."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Site Assignments"]}," tab."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select the site(s) to assign it to. A price book can be assigned to several sites, and a site can have several price books as long as they share the same currency."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Apply"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"8-rever-gift-cards-cartridge","__idx":20},"children":["8. REVER gift cards cartridge"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a return is resolved as store credit, your Commerce Cloud instance issues a gift certificate (gift card) as the refund method. The REVER cartridge lets REVER retrieve that gift certificate so the return can be completed."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The cartridge exposes a REST endpoint that looks up a gift certificate by its merchant ID and returns its redeemable code:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["REVER calls the endpoint with a gift certificate identifier."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The cartridge validates the input and queries Commerce Cloud's native gift certificate manager."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["It returns the gift certificate code so REVER can associate it with the completed return."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Installation"]}]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["REVER provides you with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".zip"]}," file containing the cartridge."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Install the cartridge following your usual deployment process."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"9-rever-custom-attributes","__idx":21},"children":["9. REVER custom attributes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["So that REVER can track orders, fulfillment statuses and return statuses without a direct integration with your OMS, implement the following custom attributes on the SFCC ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["order"]}," object."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"rever_fulfillments","__idx":22},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rever_fulfillments"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Captures the fulfillment and delivery status of each line item (or group of items), identified by the product ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["variant_id"]},"."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you don't support multiple fulfillments per order, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fulfillment_id"]}," can default to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order_id"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Either ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sent_at"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delivered_at"]}," is required. Both are recommended when available."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"[\n  {\n    \"fulfillment_id\": \"123\",\n    \"sent_at\": \"2021-01-01\",\n    \"delivered_at\": \"2021-01-01\",\n    \"line_items\": [\n      {\n        \"variant_id\": \"123\",\n        \"quantity\": 10\n      }\n    ]\n  }\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"rever_returns","__idx":23},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rever_returns"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Tracks the return status of line items returned with REVER, with the variant and the REVER process ID as reference."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"[\n  {\n    \"reverProcessID\": \"retpEXAMPLE\",\n    \"platformProcessID\": \"ORD-YYYY-MM-DD-001\",\n    \"orderID\": \"WEB123456\",\n    \"shopperEmail\": \"shopper@example.com\",\n    \"startedAt\": \"2025-01-01T10:00:00Z\",\n    \"status\": \"Pending\",\n    \"returnLineItems\": [\n      {\n        \"lineItemId\": \"111122223333\",\n        \"productId\": \"PRODUCT_EXAMPLE_01\",\n        \"returnReason\": \"DEFECTIVE_ITEM\",\n        \"quantity\": 1,\n        \"compensationMethod\": \"ORIGINAL\"\n      }\n    ],\n    \"reviews\": [\n      {\n        \"lineItemID\": \"rli_item_01\",\n        \"rejectReason\": null,\n        \"status\": \"APPROVED\",\n        \"reviewDate\": \"2025-01-02T09:00:00Z\",\n        \"user\": \"returns_agent_01\"\n      },\n      {\n        \"lineItemId\": \"rli_item_01\",\n        \"rejectReason\": \"ITEM_WORN\",\n        \"status\": \"REJECTED\",\n        \"reviewDate\": \"2025-01-02T09:00:00Z\",\n        \"user\": \"returns_agent_01\"\n      }\n    ],\n    \"compensation\": {\n      \"refunds\": [\n        {\n          \"amount\": \"1000\",\n          \"currency\": \"EUR\",\n          \"refunded_at\": null,\n          \"type\": \"Original\"\n        }\n      ],\n      \"exchangeOrder\": {\n        \"orderID\": \"WEB123457\",\n        \"orderedItems\": [\n          {\n            \"quantity\": 1,\n            \"productId\": \"PRODUCT_EXAMPLE_01\",\n            \"currency\": \"EUR\"\n          }\n        ]\n      }\n    },\n    \"logistics\": [\n      {\n        \"trackingNumber\": \"TRACK123456\",\n        \"trackingUrl\": \"https://tracking.example.com/track?number=TRACK123456\",\n        \"carrier\": \"ExampleCarrier\",\n        \"method\": \"drop_off\"\n      }\n    ],\n    \"returnCosts\": [\n      {\n        \"type\": \"ORIGINAL_SHIPPING_COST\",\n        \"total\": 500,\n        \"currency\": \"EUR\"\n      },\n      {\n        \"type\": \"RETURN_COST\",\n        \"total\": 400,\n        \"currency\": \"EUR\"\n      }\n    ]\n  }\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"rever_dont_send","__idx":24},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rever_dont_send"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Boolean. REVER sets it to indicate that a new exchange order is not ready to be sent yet, pending review of the original return."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"troubleshooting","__idx":25},"children":["Troubleshooting"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Issue"},"children":["Issue"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Solution"},"children":["Solution"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["After extending REVER to a new site, the returns portal does not load"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Make sure the new site is included in the SCAPI and SLAS client scopes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Prices don't show correctly in the full catalog"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Make sure your price books are assigned to the relevant site ID"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Canceling products in SFCC makes the portal fail to load"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Set products offline instead of canceling them"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"support","__idx":26},"children":["Support"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For integration support, contact ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"mailto:developer@itsrever.com"},"children":["developer@itsrever.com"]},"."]}]},"headings":[{"value":"Salesforce Commerce Cloud Integration","id":"salesforce-commerce-cloud-integration","depth":1},{"value":"1. SFCC IDs","id":"1-sfcc-ids","depth":2},{"value":"Realm ID","id":"realm-id","depth":3},{"value":"Organization ID and Short Code","id":"organization-id-and-short-code","depth":3},{"value":"Domain and Site ID","id":"domain-and-site-id","depth":3},{"value":"2. Business Manager user","id":"2-business-manager-user","depth":2},{"value":"Step 1: Create the user in Account Manager","id":"step-1-create-the-user-in-account-manager","depth":3},{"value":"Step 2: Assign roles","id":"step-2-assign-roles","depth":3},{"value":"Step 3: Configure the scope (instances)","id":"step-3-configure-the-scope-instances","depth":3},{"value":"3. OCAPI settings","id":"3-ocapi-settings","depth":2},{"value":"Create the OCAPI API client","id":"create-the-ocapi-api-client","depth":3},{"value":"Configure OCAPI permissions","id":"configure-ocapi-permissions","depth":3},{"value":"Shop API","id":"shop-api","depth":4},{"value":"Data API","id":"data-api","depth":4},{"value":"4. SCAPI settings","id":"4-scapi-settings","depth":2},{"value":"5. SLAS client ID and secret","id":"5-slas-client-id-and-secret","depth":2},{"value":"6. REVER payment method","id":"6-rever-payment-method","depth":2},{"value":"Payment processor","id":"payment-processor","depth":3},{"value":"Payment method","id":"payment-method","depth":3},{"value":"7. Assign price books to the site","id":"7-assign-price-books-to-the-site","depth":2},{"value":"8. REVER gift cards cartridge","id":"8-rever-gift-cards-cartridge","depth":2},{"value":"9. REVER custom attributes","id":"9-rever-custom-attributes","depth":2},{"value":"rever_fulfillments","id":"rever_fulfillments","depth":3},{"value":"rever_returns","id":"rever_returns","depth":3},{"value":"rever_dont_send","id":"rever_dont_send","depth":3},{"value":"Troubleshooting","id":"troubleshooting","depth":2},{"value":"Support","id":"support","depth":2}],"frontmatter":{"title":"Salesforce Commerce Cloud Integration","seo":{"title":"Salesforce Commerce Cloud Integration"}},"lastModified":"2026-09-29T19:28:12.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/salesforce","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}