Merran documentation API & integrations
The Kroger cart to look over
const url = 'http://localhost:3000/api/stores/kroger/basket?items=0199e8b0-5a10-7a01-8b00-00000000001d%2C0199e8b0-5a10-7a01-8b00-00000000001e';const options = { method: 'GET', headers: {cookie: 'merran.session_token=<merran.session_token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'http://localhost:3000/api/stores/kroger/basket?items=0199e8b0-5a10-7a01-8b00-00000000001d%2C0199e8b0-5a10-7a01-8b00-00000000001e' \ --cookie merran.session_token=<merran.session_token>Each thing left to get (the ones asked for, which Send has going to Kroger; or without them, everything left on every list) with its product: the one the household picked before, at today’s price, or Merran’s pick from the store’s search, made by the household’s model for shopping when it has AI. How many packages, worked out from the product’s size where it can be. Nothing is sent until POST /stores/kroger/send. With an API key, it needs the list: write permission.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Just these things on the list, by id, separated by commas: the ones Send has going to this store. Without it, everything left on every list.
Example
0199e8b0-5a10-7a01-8b00-00000000001d,0199e8b0-5a10-7a01-8b00-00000000001eJust these things on the list, by id, separated by commas: the ones Send has going to this store. Without it, everything left on every list.
Responses
Section titled “Responses”The cart to look over.
object
The banner: Fry’s.
object
Kroger’s name for the chain: Fry’s, Ralphs, King Soopers…
The banner’s site.
An account is linked, so it can be sent.
object
object
In the currency’s smallest unit: cents.
The sale’s last day.
Merran’s pick, not one the household chose.
How many is worked out from the product’s size, not a guess.
Sent to the cart last time.
Its sale today, if it’s on one.
object
How good a sale is, against what the product usually costs: the lowest in a while, a normal sale, or barely off (under a tenth).
What it usually costs, in cents: its most common price over 90 days, else its regular price.
Example
{ "store": "Fry's", "location": { "locationId": "70500822", "name": "Fry's Food Stores - Phoenix", "banner": "Fry's", "domain": "frysfood.com", "address": "4724 N 20th St, Phoenix, AZ" }, "modality": "PICKUP", "linked": true, "sentAt": null, "lines": [ { "itemId": "0199e8b0-5a10-7a01-8b00-00000000001d", "name": "milk", "amount": "1 gallon", "product": { "id": "0001111041700", "upc": "0001111041700", "name": "Kroger 2% Reduced Fat Milk", "brand": "Kroger", "size": "1 gal", "image": "https://www.kroger.com/product/images/medium/front/0001111041700", "price": 349, "salePrice": 299, "saleEnds": "2026-10-21", "currency": "USD", "aisle": "Dairy", "inStock": true, "url": "https://www.frysfood.com/p/milk/0001111041700" }, "suggested": true, "packages": 1, "sure": true, "sent": false, "sale": { "verdict": "sale", "usual": 349 } } ]}Not signed in.
object
object
object
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}Not allowed.
object
object
object
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}Kroger isn’t set up, or the household has no store.
object
object
object
Example
{ "error": { "code": "not_found", "message": "There's nothing here.", "fields": { "name": "Give it a name." } }}© 2026 Kyle Johnson. Documentation: CC BY 4.0. Merran: AGPL-3.0-or-later.