API referenceDiscovery

Discovery

4 operations. Every schema and example on this page is generated from the platform contract.

Live availability of one local offering for a date, time or quantity.

Use this when the person wants to know whether one option can be had on a particular date, at a time of day or in a quantity: open collection or appointment times, how many are left, spaces in a class, or when ordering opens or closes. It reads the latest figures at the moment of asking, so use it again just before the person decides. Needs an offering_id from an earlier result, and checks up to 14 days at a time. Do not use to search for new options or for details such as ingredients (use search_local_offerings or get_offering).

auth public:readop getLocalOfferingAvailabilityrate limitederrors

Parameters

offering_idstringqueryrequired

The offering.id of one option from search_local_offerings or get_business, e.g. itm_<32 hex>.

earliest_datestringqueryoptional

First day to check, YYYY-MM-DD, UK date. Default today.

needed_by_datestringqueryoptional

Last day to check, YYYY-MM-DD. For one day send the same date as earliest_date. Default: the 7 days from earliest_date. At most 14 days in all.

time_afterstringqueryoptional

Not before this local UK time, HH:MM. 'After work' is usually 17:30.

time_beforestringqueryoptional

Not after this local UK time, HH:MM. 'Before work' is usually 08:00.

quantityintegerqueryoptional

How many. Send quantity_unit with it.

quantity_unitenumqueryoptional

'people' = people it must serve or who take part; 'items' = things (30 cupcakes).

peopleitems

Response, 200

contract_versionstringrequired
offeringobjectrequired
3 child fields
idstringrequired
kindenumrequired
ready_to_buymade_to_orderpreorderappointmentclassmembership_or_passeventbusiness
titlestringrequired
businessobjectrequired
8 child fields
idstringrequired

biz_<32 hex>. Send as business_id to look inside this business.

namestringrequired
kindstring, nullablerequired

Plain word for the business, e.g. bakery, cafe, gym, barber.

seller_typeenumrequired
homepremisesmobileonlineunknown
areastring, nullablerequired

Town and postcode district, never a street, e.g. "South Nutfield, RH1".

postcode_districtstring, nullablerequired
addressstring, nullablerequired

The street address, ONLY when the seller chose to publish it. Null for everyone else.

canonical_urlstringrequired
summarystringrequired

One plain sentence, e.g. "Membber shows 3 left; orders close Fri 9 Oct, 11:00".

windowobjectrequired
5 child fields
earlieststringrequired
needed_bystringrequired
displaystringrequired

"Fri 9 to Sat 10 Oct 2026".

timeobjectrequired
2 child fields
afterstring, nullablerequired
beforestring, nullablerequired
assumedbooleanrequired

True when no date was given and the default days were used.

availability_statusenumrequired
confirmedlikelyunknown
availabilityobjectrequired
9 child fields
stateenumrequired
availablelimitedopens_latertaking_orderssold_outfully_bookedclosedunknown
next_availableobjectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

slotsarray of objectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

stock_leftinteger, nullablerequired

Say "Membber shows N left", not "stock confirmed": a seller may also sell offline.

spaces_leftinteger, nullablerequired
order_bystring, nullablerequired

ISO instant orders close, when there is a cutoff.

opens_atstring, nullablerequired

ISO instant ordering or booking opens, when it has not yet.

checked_atstring, nullablerequired

ISO instant the live figures were read. Null when nothing live was read.

reasonstring, nullablerequired

Why availability is unknown, when it is.

can_meet_quantityboolean, nullablerequired

Whether the quantity asked for can be had, on live data or the seller’s word. Null: not asked, or not known.

constraints_satisfiedarray of objectrequired
3 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
detailstringrequired

What was checked, in plain words, e.g. "Collect Sat 10 Oct, 10:00 to 16:00".

basisenumrequired
livesellermembber_rulesuggested
constraints_not_satisfiedarray of objectrequired
3 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
detailstringrequired

What was checked, in plain words, e.g. "Collect Sat 10 Oct, 10:00 to 16:00".

basisenumrequired
livesellermembber_rulesuggested
constraints_unknownarray of objectrequired
4 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
whystringrequired

Why it is not known, e.g. "The seller has not said how many it serves".

how_to_checkstring, nullablerequired

What the person can do, e.g. "Ask the seller before ordering".

basisenumrequired

`suggested` when unconfirmed listing text points one way; null when nothing is recorded at all.

livesellermembber_rulesuggested
accessobjectrequired
3 child fields
statusenumrequired
open_to_alldrop_inmembers_only
detailstringrequired

Plain words, e.g. "Members only: a membership is needed first".

unlocked_byarray of objectrequired

For members only: the memberships this business sells that include it, the lowest price first.

5 child fields
offering_idstring, nullablerequired

The plan as an option of its own (pln_<32 hex>), for get_offering. Null when it is not listed on its own.

titlestringrequired
priceobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

coversenumrequired

every_session, or some_sessions when the plan is for some times or days only.

every_sessionsome_sessions
notestring, nullablerequired

For example "An introductory offer" or "Some times or days only".

next_actionsarray of objectrequired
4 child fields
actionenumrequired
viewpreorderorderbookenquirerequest_custom_orderjoin
labelstringrequired
urlstringrequired

A Membber page. Carries ?ref= so a later visit can be counted, never tied to a person.

whereenumrequired
webmembber_app
checked_atstringrequired

ISO instant this answer was put together.

degradedarray of objectrequired

What was skipped to answer quickly. Availability is never invented to fill a gap.

2 child fields
stageenumrequired
semantic_searchlive_availabilityplace_lookupcachetaxonomy
reasonenumrequired
timeoutunavailabledisableddaily_capload_sheddingerror
notesarray of stringrequired
refstringrequired

This answer’s reference, also carried on every next-action link.

curl -G "https://www.membber.com/api/v1/discovery/availability" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "offering_id=3b791bf4-0000-4000-8000-d0c50000003b"
Response, 200
{
  "contract_version": "<contract_version>",
  "offering": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "kind": "ready_to_buy",
    "title": "Morning class"
  },
  "business": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "name": "Example name",
    "kind": "<kind>",
    "seller_type": "home",
    "area": "<area>",
    "postcode_district": "EXAMPLE10",
    "address": "<address>",
    "canonical_url": "https://example.com/image.jpg"
  },
  "summary": "<summary>",
  "window": {
    "earliest": "<earliest>",
    "needed_by": "<needed_by>",
    "display": "<display>",
    "time": {
      "after": "<after>",
      "before": "<before>"
    },
    "assumed": true
  },
  "availability_status": "confirmed",
  "availability": {
    "state": "available",
    "next_available": {
      "date": "<date>",
      "from": "<from>",
      "to": "<to>",
      "left": -9007199254740991
    },
    "slots": [
      {
        "date": "<date>",
        "from": "<from>",
        "to": "<to>",
        "left": -9007199254740991
      }
    ],
    "stock_left": -9007199254740991,
    "spaces_left": -9007199254740991,
    "order_by": "<order_by>",
    "opens_at": "<opens_at>",
    "checked_at": "<checked_at>",
    "reason": "Added at the front desk"
  },
  "can_meet_quantity": true,
  "constraints_satisfied": [
    {
      "constraint": "date",
      "detail": "<detail>",
      "basis": "live"
    }
  ],
  "constraints_not_satisfied": [
    {
      "constraint": "date",
      "detail": "<detail>",
      "basis": "live"
    }
  ],
  "constraints_unknown": [
    {
      "constraint": "date",
      "why": "<why>",
      "how_to_check": "<how_to_check>",
      "basis": "live"
    }
  ],
  "access": {
    "status": "open_to_all",
    "detail": "<detail>",
    "unlocked_by": [
      {
        "offering_id": "3b791bf4-0000-4000-8000-d0c50000003b",
        "title": "Morning class",
        "price": {
          "type": "exact",
          "amount_pence": 1500,
          "max_pence": 1500,
          "currency": "GBP",
          "display": "<display>"
        },
        "covers": "every_session",
        "note": "Added at the front desk"
      }
    ]
  },
  "next_actions": [
    {
      "action": "view",
      "label": "<label>",
      "url": "https://example.com/image.jpg",
      "where": "web"
    }
  ],
  "checked_at": "<checked_at>",
  "degraded": [
    {
      "stage": "semantic_search",
      "reason": "timeout"
    }
  ],
  "notes": [
    "Added at the front desk"
  ],
  "ref": "<ref>"
}

One local business by id, handle or name: what it offers, live preorders, opening and area.

Use this when the person names a business on Membber, or asks about one from earlier results: what it offers, its current and upcoming preorders, whether it is open now, the area it is in and how ordering or collection works. Accepts the business_id from a result, its Membber handle (as in membber.com/<handle>) or its name, with an optional town to tell similar names apart. When a name matches several businesses it lists them so the person can choose. Shows the area, not the street address, unless the business publishes it. Do not use to search across businesses for a need (use search_local_offerings).

Parameters

business_idstringqueryoptional

The business.id from an earlier result. Wins over handle and name.

handlestringqueryoptional

The business’s Membber handle, as in membber.com/<handle>, or its store code.

namestringqueryoptional

The business name as the person said it, when there is no id or handle.

nearstringqueryoptional

A UK town to tell apart businesses with similar names, e.g. 'Redhill'.

Response, 200

contract_versionstringrequired
result_statusenumrequired
foundseveral_matchesnot_found
summarystringrequired

One plain sentence on what was found.

businessobjectrequired

Null unless result_status is found.

9 child fields
idstringrequired

biz_<32 hex>. Send as business_id to look inside this business.

namestringrequired
kindstring, nullablerequired

Plain word for the business, e.g. bakery, cafe, gym, barber.

seller_typeenumrequired
homepremisesmobileonlineunknown
areastring, nullablerequired

Town and postcode district, never a street, e.g. "South Nutfield, RH1".

postcode_districtstring, nullablerequired
addressstring, nullablerequired

The street address, ONLY when the seller chose to publish it. Null for everyone else.

canonical_urlstringrequired
imageobjectrequired
2 child fields
urlstringrequired
altstringrequired
aboutstring, nullablerequired

The business’s own description, with addresses, postcodes, links and contact details removed.

open_nowboolean, nullablerequired

From its opening hours, in its own timezone. Null: no usable hours.

opening_timesstring, nullablerequired

Today’s hours as a person says them, e.g. "Open today 09:00 to 17:00".

fulfilment_methodsarray of enumrequired
collectiondeliveryat_the_businesscomes_to_you
offeringsarray of objectrequired

What it offers (at most 8). Use get_offering with an offering_id for one in full.

6 child fields
offering_idstringrequired
kindenumrequired
ready_to_buymade_to_orderpreorderappointmentclassmembership_or_passeventbusiness
titlestringrequired
priceobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

members_onlybooleanrequired

True for a class only members can book.

unlocked_byarray of objectrequired

For a members-only class: the memberships that include it, the lowest price first.

5 child fields
offering_idstring, nullablerequired

The plan as an option of its own (pln_<32 hex>), for get_offering. Null when it is not listed on its own.

titlestringrequired
priceobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

coversenumrequired

every_session, or some_sessions when the plan is for some times or days only.

every_sessionsome_sessions
notestring, nullablerequired

For example "An introductory offer" or "Some times or days only".

more_offeringsintegerrequired

How many more it lists beyond these.

current_preordersarray of objectrequired

Preorders open now or opening soon, read live.

6 child fields
offering_idstringrequired
titlestringrequired
stateenumrequired

Read live: taking_orders, opens_later, sold_out, closed or unknown.

availablelimitedopens_latertaking_orderssold_outfully_bookedclosedunknown
opens_atstring, nullablerequired
order_bystring, nullablerequired
collectionstring, nullablerequired

When it is collected, e.g. "Sat 10 Oct".

candidatesarray of objectrequired

When a name matches several businesses: ask which one, then call again with its business_id.

5 child fields
business_idstringrequired
namestringrequired
kindstring, nullablerequired
areastring, nullablerequired
distanceobjectrequired
4 child fields
bandenumrequired
under_one_mileone_to_two_milestwo_to_five_milesfive_to_ten_milesten_to_twenty_milesover_twenty_milessame_postcode_districtunknown
displaystringrequired

"about 2 to 5 miles". Always approximate unless the seller published their address.

approximatebooleanrequired
kmnumber, nullablerequired

Exact distance, only when the seller chose to publish their full address.

next_actionsarray of objectrequired
4 child fields
actionenumrequired
viewpreorderorderbookenquirerequest_custom_orderjoin
labelstringrequired
urlstringrequired

A Membber page. Carries ?ref= so a later visit can be counted, never tied to a person.

whereenumrequired
webmembber_app
checked_atstringrequired

ISO instant this answer was put together.

degradedarray of objectrequired

What was skipped to answer quickly. Availability is never invented to fill a gap.

2 child fields
stageenumrequired
semantic_searchlive_availabilityplace_lookupcachetaxonomy
reasonenumrequired
timeoutunavailabledisableddaily_capload_sheddingerror
notesarray of stringrequired
refstringrequired

This answer’s reference, also carried on every next-action link.

curl -G "https://www.membber.com/api/v1/discovery/business" \
  -H "Authorization: Bearer $MEMBBER_TOKEN"
Response, 200
{
  "contract_version": "<contract_version>",
  "result_status": "found",
  "summary": "<summary>",
  "business": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "name": "Example name",
    "kind": "<kind>",
    "seller_type": "home",
    "area": "<area>",
    "postcode_district": "EXAMPLE10",
    "address": "<address>",
    "canonical_url": "https://example.com/image.jpg",
    "image": {
      "url": "https://example.com/image.jpg",
      "alt": "<alt>"
    }
  },
  "about": "<about>",
  "open_now": true,
  "opening_times": "<opening_times>",
  "fulfilment_methods": [
    "collection"
  ],
  "offerings": [
    {
      "offering_id": "3b791bf4-0000-4000-8000-d0c50000003b",
      "kind": "ready_to_buy",
      "title": "Morning class",
      "price": {
        "type": "exact",
        "amount_pence": 1500,
        "max_pence": 1500,
        "currency": "GBP",
        "display": "<display>"
      },
      "members_only": true,
      "unlocked_by": [
        {
          "offering_id": "3b791bf4-0000-4000-8000-d0c50000003b",
          "title": "Morning class",
          "price": {
            "type": "exact",
            "amount_pence": 1500,
            "max_pence": 1500,
            "currency": "GBP",
            "display": "<display>"
          },
          "covers": "every_session",
          "note": "Added at the front desk"
        }
      ]
    }
  ],
  "more_offerings": -9007199254740991,
  "current_preorders": [
    {
      "offering_id": "3b791bf4-0000-4000-8000-d0c50000003b",
      "title": "Morning class",
      "state": "available",
      "opens_at": "<opens_at>",
      "order_by": "<order_by>",
      "collection": "<collection>"
    }
  ],
  "candidates": [
    {
      "business_id": "490799fa-0000-4000-8000-d0c500000049",
      "name": "Example name",
      "kind": "<kind>",
      "area": "<area>",
      "distance": {
        "band": "under_one_mile",
        "display": "<display>",
        "approximate": true,
        "km": 1
      }
    }
  ],
  "next_actions": [
    {
      "action": "view",
      "label": "<label>",
      "url": "https://example.com/image.jpg",
      "where": "web"
    }
  ],
  "checked_at": "<checked_at>",
  "degraded": [
    {
      "stage": "semantic_search",
      "reason": "timeout"
    }
  ],
  "notes": [
    "Added at the front desk"
  ],
  "ref": "<ref>"
}

One local offering in full, with who said each fact and the next step.

Use this when the person asks about one option already found: what it is, what it costs, how it is collected, delivered or attended, whether it is made to order and how much notice it needs, how many it serves, and its diets and allergens. Needs an offering_id from search_local_offerings or get_business. Diet and allergen facts count only when the seller has confirmed them; otherwise the answer says they are not confirmed, so tell the person to ask the seller. For a members-only class it names the membership that includes it. Do not use to check a date, time or quantity (use get_live_availability) or to look for other options (use search_local_offerings).

Parameters

offering_idstringqueryrequired

The offering.id of one option from search_local_offerings or get_business, e.g. itm_<32 hex>.

Response, 200

contract_versionstringrequired
offeringobjectrequired
7 child fields
idstringrequired

Stable id for follow-up calls, e.g. itm_<32 hex>.

kindenumrequired
ready_to_buymade_to_orderpreorderappointmentclassmembership_or_passeventbusiness
titlestringrequired
summarystring, nullablerequired

The seller’s own words, with links, contact details and addresses removed.

categorystring, nullablerequired

The seller’s own section or category for it, e.g. "Celebration cakes".

imageobjectrequired

The seller’s own photo. Stock photos are never sent.

2 child fields
urlstringrequired
altstringrequired
canonical_urlstringrequired

This offering’s permanent page on Membber. Today it is the business’s shop page.

businessobjectrequired
8 child fields
idstringrequired

biz_<32 hex>. Send as business_id to look inside this business.

namestringrequired
kindstring, nullablerequired

Plain word for the business, e.g. bakery, cafe, gym, barber.

seller_typeenumrequired
homepremisesmobileonlineunknown
areastring, nullablerequired

Town and postcode district, never a street, e.g. "South Nutfield, RH1".

postcode_districtstring, nullablerequired
addressstring, nullablerequired

The street address, ONLY when the seller chose to publish it. Null for everyone else.

canonical_urlstringrequired
priceobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

made_to_orderobjectrequired

For things the seller makes or sells. Null for classes, plans, appointments and events.

5 child fields
takes_custom_ordersboolean, nullablerequired

The seller’s own word only. Null: the seller has not said.

notice_daysinteger, nullablerequired

Days of notice the seller asks for. Null: not said.

what_can_changestring, nullablerequired

The seller’s own note on what can be changed, e.g. "Colours and a message".

servesobjectrequired

How many it serves, in the seller’s own word. Null: not said.

2 child fields
mininteger, nullablerequired
maxinteger, nullablerequired
not_confirmedarray of stringrequired

What the listing only suggests, said as not confirmed by the seller, e.g. "The listing mentions serves 12; the seller has not confirmed it".

occasionsarray of stringrequired

Occasions the seller says it is for, e.g. "birthday". Suggestions are never listed.

diet_and_allergensobjectrequired

For food. Null when it is not food.

5 child fields
dietsarray of enumrequired

Diets the seller has confirmed it suits. Halal and kosher are never recorded.

vegetarianvegangluten_freedairy_freehalalkosher
diets_statusenumrequired
seller_confirmednot_confirmed_by_sellernot_stated
allergens_statusenumrequired
seller_confirmednone_declared_by_sellernot_confirmed_by_sellernot_stated
containsarray of enumrequired

UK allergen groups it contains, ONLY when the seller confirmed the list. Empty otherwise: then ask the seller.

celeryglutencrustaceanseggsfishlupinmilkmolluscsmustardpeanutssesamesoyasulphitestree_nuts
notestringrequired

What to tell the person, e.g. "The seller lists milk and eggs. Membber cannot rule out traces."

fulfilment_optionsarray of objectrequired
5 child fields
methodenumrequired
collectiondeliveryat_the_businesscomes_to_you
wherestring, nullablerequired

Area only, e.g. "Redhill, RH1 (exact place given when you order)".

whenstring, nullablerequired
fee_penceinteger, nullablerequired
notestring, nullablerequired
availability_statusenumrequired
confirmedlikelyunknown
availabilityobjectrequired
9 child fields
stateenumrequired
availablelimitedopens_latertaking_orderssold_outfully_bookedclosedunknown
next_availableobjectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

slotsarray of objectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

stock_leftinteger, nullablerequired

Say "Membber shows N left", not "stock confirmed": a seller may also sell offline.

spaces_leftinteger, nullablerequired
order_bystring, nullablerequired

ISO instant orders close, when there is a cutoff.

opens_atstring, nullablerequired

ISO instant ordering or booking opens, when it has not yet.

checked_atstring, nullablerequired

ISO instant the live figures were read. Null when nothing live was read.

reasonstring, nullablerequired

Why availability is unknown, when it is.

accessobjectrequired

For classes and events: who can come, and what opens a members-only one.

3 child fields
statusenumrequired
open_to_alldrop_inmembers_only
detailstringrequired

Plain words, e.g. "Members only: a membership is needed first".

unlocked_byarray of objectrequired

For members only: the memberships this business sells that include it, the lowest price first.

5 child fields
offering_idstring, nullablerequired

The plan as an option of its own (pln_<32 hex>), for get_offering. Null when it is not listed on its own.

titlestringrequired
priceobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

coversenumrequired

every_session, or some_sessions when the plan is for some times or days only.

every_sessionsome_sessions
notestring, nullablerequired

For example "An introductory offer" or "Some times or days only".

membershipobjectrequired

For a membership or pass: what it includes.

8 child fields
billingstring, nullablerequired

How it is paid, e.g. "£39 a month" or "One payment".

classes_per_periodinteger, nullablerequired

Classes included each period, for a class pack. Null: no set number.

minimum_monthsinteger, nullablerequired
joining_feeobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

intro_offerbooleanrequired
covers_every_classbooleanrequired

True when it includes every class the business runs.

classesarray of stringrequired

Names of the classes it includes (at most 8).

restrictionsstring, nullablerequired

For example "Some times or days only". Null: none.

last_verified_atstring, nullablerequired

When the seller last confirmed this listing, else when it last changed.

last_verified_basisenumrequired
merchant_confirmedlisting_updated
next_actionsarray of objectrequired
4 child fields
actionenumrequired
viewpreorderorderbookenquirerequest_custom_orderjoin
labelstringrequired
urlstringrequired

A Membber page. Carries ?ref= so a later visit can be counted, never tied to a person.

whereenumrequired
webmembber_app
checked_atstringrequired

ISO instant this answer was put together.

degradedarray of objectrequired

What was skipped to answer quickly. Availability is never invented to fill a gap.

2 child fields
stageenumrequired
semantic_searchlive_availabilityplace_lookupcachetaxonomy
reasonenumrequired
timeoutunavailabledisableddaily_capload_sheddingerror
notesarray of stringrequired
refstringrequired

This answer’s reference, also carried on every next-action link.

curl -G "https://www.membber.com/api/v1/discovery/offering" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "offering_id=3b791bf4-0000-4000-8000-d0c50000003b"
Response, 200
{
  "contract_version": "<contract_version>",
  "offering": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "kind": "ready_to_buy",
    "title": "Morning class",
    "summary": "<summary>",
    "category": "<category>",
    "image": {
      "url": "https://example.com/image.jpg",
      "alt": "<alt>"
    },
    "canonical_url": "https://example.com/image.jpg"
  },
  "business": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "name": "Example name",
    "kind": "<kind>",
    "seller_type": "home",
    "area": "<area>",
    "postcode_district": "EXAMPLE10",
    "address": "<address>",
    "canonical_url": "https://example.com/image.jpg"
  },
  "price": {
    "type": "exact",
    "amount_pence": 1500,
    "max_pence": 1500,
    "currency": "GBP",
    "display": "<display>"
  },
  "made_to_order": {
    "takes_custom_orders": true,
    "notice_days": -9007199254740991,
    "what_can_change": "<what_can_change>",
    "serves": {
      "min": -9007199254740991,
      "max": -9007199254740991
    },
    "not_confirmed": [
      "<not_confirmed>"
    ]
  },
  "occasions": [
    "<occasion>"
  ],
  "diet_and_allergens": {
    "diets": [
      "vegetarian"
    ],
    "diets_status": "seller_confirmed",
    "allergens_status": "seller_confirmed",
    "contains": [
      "celery"
    ],
    "note": "Added at the front desk"
  },
  "fulfilment_options": [
    {
      "method": "collection",
      "where": "<where>",
      "when": "<when>",
      "fee_pence": 1500,
      "note": "Added at the front desk"
    }
  ],
  "availability_status": "confirmed",
  "availability": {
    "state": "available",
    "next_available": {
      "date": "<date>",
      "from": "<from>",
      "to": "<to>",
      "left": -9007199254740991
    },
    "slots": [
      {
        "date": "<date>",
        "from": "<from>",
        "to": "<to>",
        "left": -9007199254740991
      }
    ],
    "stock_left": -9007199254740991,
    "spaces_left": -9007199254740991,
    "order_by": "<order_by>",
    "opens_at": "<opens_at>",
    "checked_at": "<checked_at>",
    "reason": "Added at the front desk"
  },
  "access": {
    "status": "open_to_all",
    "detail": "<detail>",
    "unlocked_by": [
      {
        "offering_id": "3b791bf4-0000-4000-8000-d0c50000003b",
        "title": "Morning class",
        "price": {
          "type": "exact",
          "amount_pence": 1500,
          "max_pence": 1500,
          "currency": "GBP",
          "display": "<display>"
        },
        "covers": "every_session",
        "note": "Added at the front desk"
      }
    ]
  },
  "membership": {
    "billing": "<billing>",
    "classes_per_period": -9007199254740991,
    "minimum_months": -9007199254740991,
    "joining_fee": {
      "type": "exact",
      "amount_pence": 1500,
      "max_pence": 1500,
      "currency": "GBP",
      "display": "<display>"
    },
    "intro_offer": true,
    "covers_every_class": true,
    "classes": [
      "<classe>"
    ],
    "restrictions": "<restrictions>"
  },
  "last_verified_at": "<last_verified_at>",
  "last_verified_basis": "merchant_confirmed",
  "next_actions": [
    {
      "action": "view",
      "label": "<label>",
      "url": "https://example.com/image.jpg",
      "where": "web"
    }
  ],
  "checked_at": "<checked_at>",
  "degraded": [
    {
      "stage": "semantic_search",
      "reason": "timeout"
    }
  ],
  "notes": [
    "Added at the front desk"
  ],
  "ref": "<ref>"
}

Search local offerings for one need, with live availability.

Use this when someone wants to find something locally that they can buy, have made, preorder, collect, have delivered, book or join. Search current offerings and availability from businesses and independent providers on Membber. Coverage varies by category and location, so current Membber supply should determine the result. Put the thing wanted in need, in a few words (for example 'birthday cake', 'personal trainer' or 'kids football class'), and the place, dates, time, quantity, budget, diets and how they want to get it in their own fields. Each result says why it fits, which requirements are met, not met or not known, how fresh the availability is, how to get it and the next step. An empty answer is a valid answer: it means nothing suitable is on Membber right now. Not for emergencies, or for general advice, information or recipes.

auth public:readop searchLocalOfferingsrate limitederrors

Parameters

needstringqueryrequired

What the person wants, in a few words: 'birthday cake', 'sourdough loaf', 'haircut', 'kids football class', 'food for a party'. Put the place, dates, time, quantity, budget and diets in their own fields, not here. Leave out names, ages and other personal details.

placestringqueryoptional

A UK town, village or area the person named, e.g. 'Redhill'. Give place, postcode, or lat and lng.

postcodestringqueryoptional

A UK postcode or postcode district, e.g. 'RH1'. Only the district is used.

latnumberqueryoptional

Latitude from the calling app, never asked of the person. Rounded to about 1 km. Send with lng. UK only.

lngnumberqueryoptional

Longitude, sent with lat. UK only.

radius_kmintegerqueryoptional

How far the person will travel, in whole km. Default 10.

earliest_datestringqueryoptional

First acceptable day, YYYY-MM-DD, UK date. Default today.

needed_by_datestringqueryoptional

Last acceptable day to collect, receive or attend, YYYY-MM-DD. For one fixed day send the same date as earliest_date. Turn words like 'next Saturday' into a date and tell the person which date you chose. Default 14 days after earliest_date; at most 31.

time_afterstringqueryoptional

Not before this local UK time, HH:MM. 'After work' is usually 17:30.

time_beforestringqueryoptional

Not after this local UK time, HH:MM. 'Before work' is usually 08:00.

quantityintegerqueryoptional

How many. Send quantity_unit with it.

quantity_unitenumqueryoptional

'people' = people it must serve or who take part (a cake for 15); 'items' = things (30 cupcakes).

peopleitems
budget_max_penceintegerqueryoptional

Most the person wants to spend in total, in pence (£80 = 8000).

dietsstringqueryoptional

Comma-separated diets the food must suit: vegetarian, vegan, gluten_free, dairy_free, halal, kosher. Only the seller's own statements count; halal and kosher come back as not known.

avoid_allergensstringqueryoptional

Comma-separated allergens the food must not contain (the UK fourteen): celery, gluten, crustaceans, eggs, fish, lupin, milk, molluscs, mustard, peanuts, sesame, soya, sulphites, tree_nuts. Only allergen information the seller confirmed counts. Membber cannot rule out traces.

customisationstringqueryoptional

A design or change the person wants made, e.g. 'pink, Paw Patrol theme'. Leave out names.

who_forenumqueryoptional

Who it is for, when that matters (classes, activities). An age band, never an exact age.

toddlerschildrenteensadultsfamilies
fulfilmentstringqueryoptional

Comma-separated ways the person wants to get it: collection, delivery, at_the_business, comes_to_you. Leave out if they did not say.

offering_kindsstringqueryoptional

Comma-separated, only when the person asked for a kind ('a class', 'something I can preorder'): ready_to_buy, made_to_order, preorder, appointment, class, membership_or_pass, event. Leave out so every kind is searched.

category_hintsstringqueryoptional

Optional comma-separated kinds of business that could meet the need, e.g. 'cake maker,bakery'. Widens the search; never filters it.

business_idstringqueryoptional

Only to look inside one business already found (the business.id from an earlier result).

limitintegerqueryoptional

How many results. Default 5, at most 10.

Response, 200

contract_versionstringrequired
summarystringrequired

One plain sentence on what was found.

result_statusenumrequired
resultspartial_onlyno_matchneeds_locationoutside_coverage
no_match_reasonenumrequired
no_sellers_nearbynothing_matches_needconstraints_not_met
interpreted_requestobjectrequired
15 child fields
needstringrequired

What we understood, in our own words (taxonomy labels), never the person’s words.

matched_termsarray of stringrequired
datesobjectrequired
4 child fields
earlieststringrequired
needed_bystringrequired
displaystringrequired

"Fri 9 to Sat 10 Oct 2026".

assumedbooleanrequired

True when no date was given and the default window was used.

timeobjectrequired
2 child fields
afterstring, nullablerequired
beforestring, nullablerequired
nearobjectrequired
3 child fields
areastring, nullablerequired
postcode_districtstring, nullablerequired
sourceenumrequired
requestappnone
radius_kmnumberrequired
quantityobjectrequired
2 child fields
countintegerrequired
unitenumrequired
peopleitems
budget_max_penceinteger, nullablerequired
dietsarray of enumrequired
vegetarianvegangluten_freedairy_freehalalkosher
avoid_allergensarray of enumrequired
celeryglutencrustaceanseggsfishlupinmilkmolluscsmustardpeanutssesamesoyasulphitestree_nuts
fulfilmentarray of enumrequired
collectiondeliveryat_the_businesscomes_to_you
offering_kindsarray of enumrequired
ready_to_buymade_to_orderpreorderappointmentclassmembership_or_passevent
who_forenumrequired
toddlerschildrenteensadultsfamilies
customisation_requestedbooleanrequired

Whether a design or change was asked for. The wording itself is never echoed.

assumptionsarray of stringrequired
resultsarray of objectrequired
16 child fields
rankintegerrequired

1 is the closest fit. The order is the ranking; there is no score.

offeringobjectrequired
5 child fields
idstringrequired

Stable id for follow-up calls, e.g. itm_<32 hex>.

kindenumrequired
ready_to_buymade_to_orderpreorderappointmentclassmembership_or_passeventbusiness
titlestringrequired
summarystring, nullablerequired

The seller’s own words, shortened, with links, contact details and addresses removed.

imageobjectrequired

The seller’s own photo. Stock photos are never sent.

2 child fields
urlstringrequired
altstringrequired
businessobjectrequired
8 child fields
idstringrequired

biz_<32 hex>. Send as business_id to look inside this business.

namestringrequired
kindstring, nullablerequired

Plain word for the business, e.g. bakery, cafe, gym, barber.

seller_typeenumrequired
homepremisesmobileonlineunknown
areastring, nullablerequired

Town and postcode district, never a street, e.g. "South Nutfield, RH1".

postcode_districtstring, nullablerequired
addressstring, nullablerequired

The street address, ONLY when the seller chose to publish it. Null for everyone else.

canonical_urlstringrequired
match_reasonsarray of stringrequired

Why this fits, built from the fields that matched, never written by an AI.

constraints_satisfiedarray of objectrequired
3 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
detailstringrequired

What was checked, in plain words, e.g. "Collect Sat 10 Oct, 10:00 to 16:00".

basisenumrequired
livesellermembber_rulesuggested
constraints_not_satisfiedarray of objectrequired

Always empty in results; filled in partial_matches.

3 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
detailstringrequired

What was checked, in plain words, e.g. "Collect Sat 10 Oct, 10:00 to 16:00".

basisenumrequired
livesellermembber_rulesuggested
constraints_unknownarray of objectrequired
4 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
whystringrequired

Why it is not known, e.g. "The seller has not said how many it serves".

how_to_checkstring, nullablerequired

What the person can do, e.g. "Ask the seller before ordering".

basisenumrequired

`suggested` when unconfirmed listing text points one way; null when nothing is recorded at all.

livesellermembber_rulesuggested
availability_statusenumrequired
confirmedlikelyunknown
availabilityobjectrequired
9 child fields
stateenumrequired
availablelimitedopens_latertaking_orderssold_outfully_bookedclosedunknown
next_availableobjectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

slotsarray of objectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

stock_leftinteger, nullablerequired

Say "Membber shows N left", not "stock confirmed": a seller may also sell offline.

spaces_leftinteger, nullablerequired
order_bystring, nullablerequired

ISO instant orders close, when there is a cutoff.

opens_atstring, nullablerequired

ISO instant ordering or booking opens, when it has not yet.

checked_atstring, nullablerequired

ISO instant the live figures were read. Null when nothing live was read.

reasonstring, nullablerequired

Why availability is unknown, when it is.

fulfilment_optionsarray of objectrequired
5 child fields
methodenumrequired
collectiondeliveryat_the_businesscomes_to_you
wherestring, nullablerequired

Area only, e.g. "Redhill, RH1 (exact place given when you order)".

whenstring, nullablerequired
fee_penceinteger, nullablerequired
notestring, nullablerequired
priceobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

distanceobjectrequired
4 child fields
bandenumrequired
under_one_mileone_to_two_milestwo_to_five_milesfive_to_ten_milesten_to_twenty_milesover_twenty_milessame_postcode_districtunknown
displaystringrequired

"about 2 to 5 miles". Always approximate unless the seller published their address.

approximatebooleanrequired
kmnumber, nullablerequired

Exact distance, only when the seller chose to publish their full address.

last_verified_atstring, nullablerequired

When the seller last confirmed this listing, else when the listing last changed (ISO instant).

last_verified_basisenumrequired
merchant_confirmedlisting_updated
next_actionsarray of objectrequired
4 child fields
actionenumrequired
viewpreorderorderbookenquirerequest_custom_order
labelstringrequired
urlstringrequired

A Membber page. Carries ?ref= so a later visit can be counted, never tied to a person.

whereenumrequired
webmembber_app
canonical_urlstringrequired

This offering’s permanent page on Membber. Today it is the business’s shop page.

partial_matchesarray of objectrequired

Near misses, each naming what it does not meet. Never padded into results.

16 child fields
rankintegerrequired

1 is the closest fit. The order is the ranking; there is no score.

offeringobjectrequired
5 child fields
idstringrequired

Stable id for follow-up calls, e.g. itm_<32 hex>.

kindenumrequired
ready_to_buymade_to_orderpreorderappointmentclassmembership_or_passeventbusiness
titlestringrequired
summarystring, nullablerequired

The seller’s own words, shortened, with links, contact details and addresses removed.

imageobjectrequired

The seller’s own photo. Stock photos are never sent.

2 child fields
urlstringrequired
altstringrequired
businessobjectrequired
8 child fields
idstringrequired

biz_<32 hex>. Send as business_id to look inside this business.

namestringrequired
kindstring, nullablerequired

Plain word for the business, e.g. bakery, cafe, gym, barber.

seller_typeenumrequired
homepremisesmobileonlineunknown
areastring, nullablerequired

Town and postcode district, never a street, e.g. "South Nutfield, RH1".

postcode_districtstring, nullablerequired
addressstring, nullablerequired

The street address, ONLY when the seller chose to publish it. Null for everyone else.

canonical_urlstringrequired
match_reasonsarray of stringrequired

Why this fits, built from the fields that matched, never written by an AI.

constraints_satisfiedarray of objectrequired
3 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
detailstringrequired

What was checked, in plain words, e.g. "Collect Sat 10 Oct, 10:00 to 16:00".

basisenumrequired
livesellermembber_rulesuggested
constraints_not_satisfiedarray of objectrequired

Always empty in results; filled in partial_matches.

3 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
detailstringrequired

What was checked, in plain words, e.g. "Collect Sat 10 Oct, 10:00 to 16:00".

basisenumrequired
livesellermembber_rulesuggested
constraints_unknownarray of objectrequired
4 child fields
constraintenumrequired
datetimenoticeplacequantitybudgetdietallergensfulfilmentkindwho_forcustomisationaccess
whystringrequired

Why it is not known, e.g. "The seller has not said how many it serves".

how_to_checkstring, nullablerequired

What the person can do, e.g. "Ask the seller before ordering".

basisenumrequired

`suggested` when unconfirmed listing text points one way; null when nothing is recorded at all.

livesellermembber_rulesuggested
availability_statusenumrequired
confirmedlikelyunknown
availabilityobjectrequired
9 child fields
stateenumrequired
availablelimitedopens_latertaking_orderssold_outfully_bookedclosedunknown
next_availableobjectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

slotsarray of objectrequired
4 child fields
datestringrequired

YYYY-MM-DD, the business’s local date.

fromstring, nullablerequired

HH:MM local time.

tostring, nullablerequired

HH:MM local time.

leftinteger, nullablerequired

Places or items left in this slot, when the seller shows counts.

stock_leftinteger, nullablerequired

Say "Membber shows N left", not "stock confirmed": a seller may also sell offline.

spaces_leftinteger, nullablerequired
order_bystring, nullablerequired

ISO instant orders close, when there is a cutoff.

opens_atstring, nullablerequired

ISO instant ordering or booking opens, when it has not yet.

checked_atstring, nullablerequired

ISO instant the live figures were read. Null when nothing live was read.

reasonstring, nullablerequired

Why availability is unknown, when it is.

fulfilment_optionsarray of objectrequired
5 child fields
methodenumrequired
collectiondeliveryat_the_businesscomes_to_you
wherestring, nullablerequired

Area only, e.g. "Redhill, RH1 (exact place given when you order)".

whenstring, nullablerequired
fee_penceinteger, nullablerequired
notestring, nullablerequired
priceobjectrequired
5 child fields
typeenumrequired
exactfromrangeper_personper_sessionfreeunknown
amount_penceinteger, nullablerequired

The exact price, or the lowest for from/range.

max_penceinteger, nullablerequired

The highest price for a range.

currencyenumrequired
GBP
displaystring, nullablerequired

As a person would say it: "£4.50", "From £55", "£40 a session", "Free".

distanceobjectrequired
4 child fields
bandenumrequired
under_one_mileone_to_two_milestwo_to_five_milesfive_to_ten_milesten_to_twenty_milesover_twenty_milessame_postcode_districtunknown
displaystringrequired

"about 2 to 5 miles". Always approximate unless the seller published their address.

approximatebooleanrequired
kmnumber, nullablerequired

Exact distance, only when the seller chose to publish their full address.

last_verified_atstring, nullablerequired

When the seller last confirmed this listing, else when the listing last changed (ISO instant).

last_verified_basisenumrequired
merchant_confirmedlisting_updated
next_actionsarray of objectrequired
4 child fields
actionenumrequired
viewpreorderorderbookenquirerequest_custom_order
labelstringrequired
urlstringrequired

A Membber page. Carries ?ref= so a later visit can be counted, never tied to a person.

whereenumrequired
webmembber_app
canonical_urlstringrequired

This offering’s permanent page on Membber. Today it is the business’s shop page.

checked_atstringrequired

ISO instant this answer was put together.

degradedarray of objectrequired

What was skipped to answer quickly. Availability is never invented to fill a gap.

2 child fields
stageenumrequired
semantic_searchlive_availabilityplace_lookupcachetaxonomy
reasonenumrequired
timeoutunavailabledisableddaily_capload_sheddingerror
notesarray of stringrequired
refstringrequired

This answer’s reference, also carried on every next-action link.

curl -G "https://www.membber.com/api/v1/discovery/offerings" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "need=<need>"
Response, 200
{
  "contract_version": "<contract_version>",
  "summary": "<summary>",
  "result_status": "results",
  "no_match_reason": "no_sellers_nearby",
  "interpreted_request": {
    "need": "<need>",
    "matched_terms": [
      "<matched_term>"
    ],
    "dates": {
      "earliest": "<earliest>",
      "needed_by": "<needed_by>",
      "display": "<display>",
      "assumed": true
    },
    "time": {
      "after": "<after>",
      "before": "<before>"
    },
    "near": {
      "area": "<area>",
      "postcode_district": "EXAMPLE10",
      "source": "request"
    },
    "radius_km": 1,
    "quantity": {
      "count": 1,
      "unit": "people"
    },
    "budget_max_pence": 1500,
    "diets": [
      "vegetarian"
    ],
    "avoid_allergens": [
      "celery"
    ],
    "fulfilment": [
      "collection"
    ],
    "offering_kinds": [
      "ready_to_buy"
    ],
    "who_for": "toddlers",
    "customisation_requested": true,
    "assumptions": [
      "<assumption>"
    ]
  },
  "results": [
    {
      "rank": -9007199254740991,
      "offering": {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "kind": "ready_to_buy",
        "title": "Morning class",
        "summary": "<summary>",
        "image": {
          "url": "https://example.com/image.jpg",
          "alt": "<alt>"
        }
      },
      "business": {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "name": "Example name",
        "kind": "<kind>",
        "seller_type": "home",
        "area": "<area>",
        "postcode_district": "EXAMPLE10",
        "address": "<address>",
        "canonical_url": "https://example.com/image.jpg"
      },
      "match_reasons": [
        "Added at the front desk"
      ],
      "constraints_satisfied": [
        {
          "constraint": "date",
          "detail": "<detail>",
          "basis": "live"
        }
      ],
      "constraints_not_satisfied": [
        {
          "constraint": "date",
          "detail": "<detail>",
          "basis": "live"
        }
      ],
      "constraints_unknown": [
        {
          "constraint": "date",
          "why": "<why>",
          "how_to_check": "<how_to_check>",
          "basis": "live"
        }
      ],
      "availability_status": "confirmed",
      "availability": {
        "state": "available",
        "next_available": {
          "date": "<date>",
          "from": "<from>",
          "to": "<to>",
          "left": -9007199254740991
        },
        "slots": [
          {
            "date": "<date>",
            "from": "<from>",
            "to": "<to>",
            "left": -9007199254740991
          }
        ],
        "stock_left": -9007199254740991,
        "spaces_left": -9007199254740991,
        "order_by": "<order_by>",
        "opens_at": "<opens_at>",
        "checked_at": "<checked_at>",
        "reason": "Added at the front desk"
      },
      "fulfilment_options": [
        {
          "method": "collection",
          "where": "<where>",
          "when": "<when>",
          "fee_pence": 1500,
          "note": "Added at the front desk"
        }
      ],
      "price": {
        "type": "exact",
        "amount_pence": 1500,
        "max_pence": 1500,
        "currency": "GBP",
        "display": "<display>"
      },
      "distance": {
        "band": "under_one_mile",
        "display": "<display>",
        "approximate": true,
        "km": 1
      },
      "last_verified_at": "<last_verified_at>",
      "last_verified_basis": "merchant_confirmed",
      "next_actions": [
        {
          "action": "view",
          "label": "<label>",
          "url": "https://example.com/image.jpg",
          "where": "web"
        }
      ],
      "canonical_url": "https://example.com/image.jpg"
    }
  ],
  "partial_matches": [
    {
      "rank": -9007199254740991,
      "offering": {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "kind": "ready_to_buy",
        "title": "Morning class",
        "summary": "<summary>",
        "image": {
          "url": "https://example.com/image.jpg",
          "alt": "<alt>"
        }
      },
      "business": {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "name": "Example name",
        "kind": "<kind>",
        "seller_type": "home",
        "area": "<area>",
        "postcode_district": "EXAMPLE10",
        "address": "<address>",
        "canonical_url": "https://example.com/image.jpg"
      },
      "match_reasons": [
        "Added at the front desk"
      ],
      "constraints_satisfied": [
        {
          "constraint": "date",
          "detail": "<detail>",
          "basis": "live"
        }
      ],
      "constraints_not_satisfied": [
        {
          "constraint": "date",
          "detail": "<detail>",
          "basis": "live"
        }
      ],
      "constraints_unknown": [
        {
          "constraint": "date",
          "why": "<why>",
          "how_to_check": "<how_to_check>",
          "basis": "live"
        }
      ],
      "availability_status": "confirmed",
      "availability": {
        "state": "available",
        "next_available": {
          "date": "<date>",
          "from": "<from>",
          "to": "<to>",
          "left": -9007199254740991
        },
        "slots": [
          {
            "date": "<date>",
            "from": "<from>",
            "to": "<to>",
            "left": -9007199254740991
          }
        ],
        "stock_left": -9007199254740991,
        "spaces_left": -9007199254740991,
        "order_by": "<order_by>",
        "opens_at": "<opens_at>",
        "checked_at": "<checked_at>",
        "reason": "Added at the front desk"
      },
      "fulfilment_options": [
        {
          "method": "collection",
          "where": "<where>",
          "when": "<when>",
          "fee_pence": 1500,
          "note": "Added at the front desk"
        }
      ],
      "price": {
        "type": "exact",
        "amount_pence": 1500,
        "max_pence": 1500,
        "currency": "GBP",
        "display": "<display>"
      },
      "distance": {
        "band": "under_one_mile",
        "display": "<display>",
        "approximate": true,
        "km": 1
      },
      "last_verified_at": "<last_verified_at>",
      "last_verified_basis": "merchant_confirmed",
      "next_actions": [
        {
          "action": "view",
          "label": "<label>",
          "url": "https://example.com/image.jpg",
          "where": "web"
        }
      ],
      "canonical_url": "https://example.com/image.jpg"
    }
  ],
  "checked_at": "<checked_at>",
  "degraded": [
    {
      "stage": "semantic_search",
      "reason": "timeout"
    }
  ],
  "notes": [
    "Added at the front desk"
  ],
  "ref": "<ref>"
}
WhatsApp
Book a Call
Start Free