Post Purchase Landing Page

Mulberry gives retailers the ability to offer a personalized remarketing experience to customers that do not attach a warranty to their sale during the on-site checkout process. We are able to tailor the customer’s landing page to the unique transaction, by providing information on what the customer bought (driving higher attachment rates for you).

For example, by sending a POST request to our /api/carts endpoint with the following information, we can return a URL to you that can then be integrated into your Mulberry remarketing materials.

Sending the order is also what generates its warranty offers. Everything else in this section buys those offers: the customer buys them from the landing page, or you sell them yourself and record the sale through Post Purchase Checkout.

Post Purchase Link Endpoint

HTTP method: POST

Authentication: Private Bearer Token

Staging Endpoint: https://partner-staging.getmulberry.com/api/carts

Production Endpoint: https://partner.getmulberry.com/api/carts

{
  "order_id": "7689dde5c0f64fffa7ad217432f6f73",
  "line_items": [
    {
      "product_title": "Apple Macbook Pro 2019",
      "product_id": "123456",
      "product_price": "1500.00",
      "product_delivery_date": "2025-12-15",
      "meta": {
        "breadcrumbs": [
          {
            "category": "Electronics"
          },
          {
            "category": "Consumer Electronics"
          }
        ]
      },
      "detail": {
        "images": [
          {
            "src": "https://www.apple.com/v/macbook-pro/af/images/overview/hero_13__d1tfa5zby7e6_large_2x.jpg"
          }
        ]
      }
    }
  ],
  "billing_address": {
    "first_name": "Josephine",
    "last_name": "Clark",
    "address1": "123 Mint St. Apt 3F",
    "phone": "",
    "email": "[email protected]",
    "city": "Brooklyn",
    "zip": "11231",
    "state": "NY",
    "country": "United States",
    "address2": "",
    "country_code": "US",
    "province_code": "NY"
  }
}

Providing additional information such as imagery and product metadata helps Mulberry identify and classify the product more accurately.

ParameterDescriptionRequiredType
order_idUnique order ID from your ecommerce platform (Must be a non-sequential / UUID)yesstring
line_itemsList of products to offer protection plans foryesarray
billing_addressCustomer addressyesobject
merchant_external_idThe merchant this order belongs to, if you sell on behalf of severalnostring

Line item fields:

ParameterDescriptionRequiredType
product_idProduct SKUyesstring
product_priceProduct priceyesstring
product_titleProduct titleyesstring
quantityUnits bought, each offered its own warranty. Defaults to 1; more than 20 is stored as 20nointeger
product_delivery_dateProduct delivery datenostring
metaProduct metadata. breadcrumbs are read when the warranty is pricednoobject
detailHolds images, used on the landing page and to classify the productnoobject
productsTwo or more products this line item sells as a bundle. See belownoarray

Billing address fields:

ParameterDescriptionRequiredType
stateState code, e.g. NY. Always required, whatever the countryyesstring
countryCountryyesstring
emailWhere the landing page link reaches the customerone of*string
phonePhone numberone of*string
first_nameFirst nameyesstring
last_nameLast namenostring
address1Address Line 1nostring
address2Address Line 2nostring
cityCitynostring

* Send an email address, or a phone number for us to reach the customer by. A request carrying neither is refused.

Bundles

Two or more products in a line item's products array are sold as a bundle: one warranty is generated over the group and priced on their combined total, and every member is covered when it is bought. Each entry takes the same product fields as a line item, and each must carry a readable price — a bundle we cannot total is refused rather than stored at the wrong price.

{
  "order_id": "7689dde5c0f64fffa7ad217432f6f73",
  "line_items": [
    {
      "product_title": "Sactionals Seat Insert Set",
      "product_id": "GT7582",
      "product_price": "1025.00",
      "products": [
        { "product_id": "GT7582", "product_title": "Sactionals Seat Insert Set", "product_price": "760.00" },
        { "product_id": "GE6099", "product_title": "Sactionals Side Insert", "product_price": "265.00" }
      ]
    }
  ],
  "billing_address": { "first_name": "Josephine", "email": "[email protected]", "state": "NY", "country": "United States" }
}

What a bundle covers is settled here, when the offer is generated. Buying it later covers every member — see Post Purchase Checkout.

Responses

A new order

{
  "success": true,
  "url": "https://staging.getmulberry.com/carts/3af6dd3b/checkout/7689dde5c0f64fffa7ad217432f6f73",
  "warrantable_products": true
}

If any of the purchased products are eligible for a warranty, then warrantable_products will be returned as true. Then, the response URL can then be used on Thank You pages, marketing email campaigns etc.

An order you have already sent

{
  "success": true,
  "url": "https://staging.getmulberry.com/carts/3af6dd3b/checkout/7689dde5c0f64fffa7ad217432f6f73"
}

Resending an order id you have already sent returns the same link without warrantable_products. The order is not stored twice and its offers are not regenerated, so resending is safe — but it is not how you change an order you already sent.

StatusDescription
200The order was stored, or had been already, and its landing page link is in the response
400The order was not stored. The body names what was wrong
401Authentication failed: the token was not recognized
404No billing_address was sent. The body does not say so — it is a bare 404, not a message

A 400 carries the reasons in message.validation_errors, and comes back when no state is given, when neither an email nor a phone number identifies the customer, when merchant_external_id matches no merchant of yours, and when a bundled line item carries a product we cannot read a price from.

A 404 is the exception: it carries no explanation of any kind, so a request missing its billing_address looks like a request to an endpoint that isn't there. If you get a 404 from a URL you know is right, check that the order carries a billing address.

{
  "message": {
    "validation_errors": ["State is a required field."]
  }
}
🚧

Building the URL

You don't need to store the URL that the carts API responds with. You can build it by using the values below.

Landing Page URL Structure

The structure of the Post Purchase landing page is as follows:

Staging

https://staging.getmulberry.com/carts/[retailer_uuid]/checkout/[order_id]

Production

https://app.getmulberry.com/carts/[retailer_uuid]/checkout/[order_id]

ParameterDefinition
retailer_uuidThis is the unique ID that Mulberry has assigned to you and will not change. You can find it within the Settings tab within the Partner Dashboard
order_idThis is the order ID from your ecommerce platform for this particular customer's order.

What happens next

EndpointPurpose
GET /api/purchase-warrantiesWhat is still buyable on an order, and what it already carries
POST /api/post-purchase-checkoutRecord a warranty you sold and collected payment for yourself