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.
| Parameter | Description | Required | Type |
|---|---|---|---|
| order_id | Unique order ID from your ecommerce platform (Must be a non-sequential / UUID) | yes | string |
| line_items | List of products to offer protection plans for | yes | array |
| billing_address | Customer address | yes | object |
| merchant_external_id | The merchant this order belongs to, if you sell on behalf of several | no | string |
Line item fields:
| Parameter | Description | Required | Type |
|---|---|---|---|
| product_id | Product SKU | yes | string |
| product_price | Product price | yes | string |
| product_title | Product title | yes | string |
| quantity | Units bought, each offered its own warranty. Defaults to 1; more than 20 is stored as 20 | no | integer |
| product_delivery_date | Product delivery date | no | string |
| meta | Product metadata. breadcrumbs are read when the warranty is priced | no | object |
| detail | Holds images, used on the landing page and to classify the product | no | object |
| products | Two or more products this line item sells as a bundle. See below | no | array |
Billing address fields:
| Parameter | Description | Required | Type |
|---|---|---|---|
| state | State code, e.g. NY. Always required, whatever the country | yes | string |
| country | Country | yes | string |
| Where the landing page link reaches the customer | one of* | string | |
| phone | Phone number | one of* | string |
| first_name | First name | yes | string |
| last_name | Last name | no | string |
| address1 | Address Line 1 | no | string |
| address2 | Address Line 2 | no | string |
| city | City | no | string |
* 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.
| Status | Description |
|---|---|
| 200 | The order was stored, or had been already, and its landing page link is in the response |
| 400 | The order was not stored. The body names what was wrong |
| 401 | Authentication failed: the token was not recognized |
| 404 | No 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 URLYou don't need to store the URL that the
cartsAPI 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]
| Parameter | Definition |
|---|---|
| retailer_uuid | This 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_id | This is the order ID from your ecommerce platform for this particular customer's order. |
What happens next
| Endpoint | Purpose |
|---|---|
GET /api/purchase-warranties | What is still buyable on an order, and what it already carries |
POST /api/post-purchase-checkout | Record a warranty you sold and collected payment for yourself |
