Morrisons Promotion Detail API
Get an offer from its ID or URL, with the products in it.
- 1 credit per call
- Failed calls are free
- Updated
- morrisons.promotion.detail.get
{ "promotion": { "description": "BBQ Burger Bundle for £10", "long_description": "Buy all items for £10. Order by 07/09/2026, offer subject to availability. Maximum 20 promotional items per customer.", "presentation_mode": "DEFAULT", "promotion_id": "6820a0fa-47cb-4d0d-867f-b7e029adc935", "promotion_page_type": "BUNDLE", "retailer_promotion_id": "1010595828", "url": "https://groceries.morrisons.com/offers/bbq-burger-bundle-for-10/1010595828", "active_period": { "activeFrom": "2026-07-19T23:00:00Z", "activeTo": "2026-09-07T23:00:00Z" }, "breadcrumbs": [], "groups": [ { "quantity": 1, "reward": { "offer": "£10.00", "type": "OFFER" }, "products": [ "dc1cb091-8e98-4145-b603-9a064008039c" ] }, { "quantity": 1, "reward": { "offer": "£10.00", "type": "OFFER" }, "products": [ "702fe59d-abda-454a-81a8-3147e881c41c" ] } ] }, "items": [ { "name": "Morrisons Squeezy Burger Relish (310g)", "available": true, "brand": "Morrisons", "product_id": "dc1cb091-8e98-4145-b603-9a064008039c", "retailer_product_id": "105213678", "url": "https://groceries.morrisons.com/products/morrisons-squeezy-burger-relish-310g/105213678", "price": { "current": { "amount": "1.75", "currency": "GBP" }, "unit": { "label": "fop.price.per.kg", "current": { "amount": "5.65", "currency": "GBP" } } }, "rating": { "count": 9, "overall": "3.4" } }, { "name": "Morrisons Sliced White Rolls 6 Pack", "available": true, "brand": "Morrisons", "product_id": "702fe59d-abda-454a-81a8-3147e881c41c", "retailer_product_id": "105694619", "url": "https://groceries.morrisons.com/products/morrisons-sliced-white-rolls-6-pack/105694619", "price": { "current": { "amount": "0.95", "currency": "GBP" }, "unit": { "label": "fop.price.per.each", "current": { "amount": "15.8", "currency": "GBX" } } }, "rating": { "count": 69, "overall": "2.4" } } ]}
| # | Name | Brand | Price | Rating | Available | Product id | Retailer product id | Url |
|---|---|---|---|---|---|---|---|---|
| 1 | Morrisons Squeezy Burger Relish (310g) | Morrisons | 1.75 | 3.4 | true | dc1cb091-8e98-4145-b603-9a064008039c | 105213678 | https://groceries.morrisons.com/products/morrisons-squeezy-burg… |
| 2 | Morrisons Sliced White Rolls 6 Pack | Morrisons | 0.95 | 2.4 | true | 702fe59d-abda-454a-81a8-3147e881c41c | 105694619 | https://groceries.morrisons.com/products/morrisons-sliced-white… |
| 3 | Morrisons British Iceberg Lettuce | Morrisons | 0.89 | 2.3 | true | fa34258d-fcd7-473d-9af0-eaaae6f80be1 | 108370943 | https://groceries.morrisons.com/products/morrisons-british-iceb… |
| 4 | Morrisons Salad Tomatoes 6 Pack | Morrisons | 0.99 | 2.7 | true | 86cc2465-a7ba-49c9-933f-00c3408aa2ac | 108389100 | https://groceries.morrisons.com/products/morrisons-salad-tomato… |
| 5 | Morrisons British 6 Quarter Pounder Burgers | Morrisons | 3.75 | 2.7 | true | 7f1a9127-c8c9-43f0-b91e-1c3373f41489 | 112527341 | https://groceries.morrisons.com/products/morrisons-british-6-qu… |
| 6 | Morrisons British Cheesy Slices 170g | Morrisons | 1.25 | 4.3 | true | efe212dd-90a3-429f-87be-67d00a5315d9 | 113072879 | https://groceries.morrisons.com/products/morrisons-british-chee… |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| promotion_id | string | one of | The offer's number, from its Morrisons offer page. | 1010595828 |
| url | string | one of | The offer's Morrisons page, as an alternative to the number. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| items[].name | string | The offer or product name. | Morrisons Squeezy Burger Relish (310g) |
| items[].brand | string | The product's brand. | Morrisons |
| items[].rating.overall | string | The average star rating. | 3.4 |
| items[].available | boolean | Whether the product can be ordered now. | true |
| items[].price | object | The product's price. | 2 fields |
| items[].rating | object | The product's rating. | 2 fields |
| items[].price.current | object | The price now, with its currency. | 2 fields |
| items[].price.unit | object | The price per unit, such as per kilogram. | 2 fields |
| items[].product_id | string | Morrisons' ID for the product; the product endpoint takes it. | dc1cb091-8e98-4145-b603-9a064008039c |
| items[].rating.count | integer | How many ratings the product has. | 9 |
| items[].retailer_product_id | string | Morrisons' shop number for the product. | 105213678 |
| items[].url | string | The page on Morrisons' site. | https://groceries.morrisons.com/products/morrisons-squeezy-burg… |
| items | array | The products. | 6 records |
| promotion | object | The offer. | 10 fields |
| promotion.active_period | object | When the offer runs. | 2 fields |
| promotion.active_period.activeFrom | string | When the offer starts. | 2026-07-19T23:00:00Z |
| promotion.active_period.activeTo | string | When the offer ends. | 2026-09-07T23:00:00Z |
| promotion.breadcrumbs | array | The category path above the page. | empty in this sample |
| promotion.description | string | The product description. | BBQ Burger Bundle for £10 |
| promotion.groups | array | The product groups the offer covers. | 6 records |
| promotion.groups[].products | array | dc1cb091-8e98-4145-b603-9a064008039c | |
| promotion.groups[].quantity | integer | 1 | |
| promotion.groups[].reward | object | 2 fields | |
| promotion.long_description | string | The offer terms as Morrisons words them. | Buy all items for £10. Order by 07/09/2026, offer subject to av… |
| promotion.presentation_mode | string | DEFAULT | |
| promotion.promotion_id | string | Morrisons' ID for the offer; the offer endpoint takes it. | 6820a0fa-47cb-4d0d-867f-b7e029adc935 |
| promotion.promotion_page_type | string | The kind of offer, such as a bundle. | BUNDLE |
| promotion.retailer_promotion_id | string | Morrisons' shop number for the offer. | 1010595828 |
| promotion.url | string | The page on Morrisons' site. | https://groceries.morrisons.com/offers/bbq-burger-bundle-for-10… |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "morrisons.promotion.detail.get", "input": { "promotion_id": "1010595828" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "morrisons.promotion.detail.get", "input": { "promotion_id": "1010595828" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "morrisons.promotion.detail.get", "input": { "promotion_id": "1010595828" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
Use Upscrape to open Morrisons offer 1010595828 and list what is in it, what it costs and when it ends.
More from the Morrisons API
Morrisons Promotion Detail API FAQ
The short answers. The docs have the long ones.
How much does the Morrisons Promotion Detail API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send promotion_id or url. The input fields below list every option with its type and limits.
Do I need a Morrisons login?
No. It reads public Morrisons data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds morrisons.promotion.detail.get, checks its price and runs it with the same credits as the REST API.
Your first Morrisons call is free.
Up to 100 free credits to start, no card needed.