Drops

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

A store's batch drops.

Every drop for the authenticated store, newest first, each with its items, windows and live counters. Also returns whether the store can run a drop at all, and if not, why.

Parameters

store_idstring · uuidqueryrequired
include_pastbooleanqueryoptional

Include drops whose collection date has passed.

limitintegerqueryoptional

Response, 200

dropsarray of objectrequired
25 child fields
idstringrequired
store_idstringrequired
codestringrequired

The short code in the shareable link: /d/{code}

share_urlstringrequired

The full link the merchant pastes into her bio.

namestringrequired
descriptionstring, nullablerequired
statusenumrequired
draftscheduledcancelled
stateenumrequired

Computed at read time. Never sent by a client.

draftscheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
menu_visible_before_openbooleanrequired
show_stock_countbooleanrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired

Copied from the menu item at read time, never stored twice.

price_pencenumber, nullablerequired
image_urlstring, nullablerequired
quantitynumberrequired

How many were put up.

remainingnumberrequired

How many are still available. Never negative.

max_per_ordernumber, nullablerequired

null = no limit.

sold_out_atstring, nullablerequired
sort_ordernumberrequired
allergensarray of stringrequired
allergens_missingbooleanrequired
windowsarray of objectrequired
5 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
max_ordersnumber, nullablerequired

null = no cap on orders in this window.

orders_remainingnumber, nullablerequired
orders_countnumberrequired
units_soldnumberrequired
units_totalnumberrequired
gross_pencenumberrequired
blockersarray of stringrequired
created_atstringrequired
updated_atstringrequired
live_drop_idstring, nullablerequired
drops_livebooleanrequired
blocked_reasonenumrequired

Why a drop cannot open. Say this to the merchant, do not refuse blankly.

no_addoncollect_offno_paymentsunavailable
reachable_customersinteger, nullablerequired
curl -G "https://www.membber.com/api/v1/drops" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "drops": [
    {
      "id": "00000d1b-0000-4000-8000-d0c500000000",
      "store_id": "6659c139-0000-4000-8000-d0c500000066",
      "code": "EXAMPLE10",
      "share_url": "https://example.com/image.jpg",
      "name": "Example name",
      "description": "Added at the front desk",
      "status": "draft",
      "state": "draft",
      "opens_at": "<opens_at>",
      "closes_at": "<closes_at>",
      "collection_date": "<collection_date>",
      "timezone": "Europe/London",
      "checkout_ttl_seconds": 1,
      "menu_visible_before_open": true,
      "show_stock_count": true,
      "max_per_customer": 1,
      "items": [
        {
          "id": "00000d1b-0000-4000-8000-d0c500000000",
          "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
          "name": "Example name",
          "price_pence": 1500,
          "image_url": "https://example.com/image.jpg",
          "quantity": 1,
          "remaining": 1,
          "max_per_order": 1,
          "sold_out_at": "<sold_out_at>",
          "sort_order": 1,
          "allergens": [
            "<allergen>"
          ],
          "allergens_missing": true
        }
      ],
      "windows": [
        {
          "id": "00000d1b-0000-4000-8000-d0c500000000",
          "starts_at": "<starts_at>",
          "ends_at": "<ends_at>",
          "max_orders": 1,
          "orders_remaining": 1
        }
      ],
      "orders_count": 1,
      "units_sold": 1,
      "units_total": 1,
      "gross_pence": 1500,
      "blockers": [
        "<blocker>"
      ],
      "created_at": "<created_at>",
      "updated_at": "<updated_at>"
    }
  ],
  "live_drop_id": "68f0d418-0000-4000-8000-d0c500000068",
  "drops_live": true,
  "blocked_reason": "no_addon",
  "reachable_customers": -9007199254740991
}

Create a drop.

Creates a DRAFT drop for the authenticated store. A draft is invisible to customers and has no link until it is scheduled. Send a `client_token` to make the create idempotent.

Request body

store_idstring · uuidrequired
client_tokenstringoptional

Send the same token on a retry to get the SAME drop back instead of a duplicate.

namestringrequired
descriptionstring, nullableoptional
opens_atstringrequired

ISO instant. The drop opens itself at this minute.

closes_atstring, nullableoptional

ISO instant, or null to close when it sells out.

collection_datestringrequired

YYYY-MM-DD in the store timezone.

timezonestringoptional
checkout_ttl_secondsanyoptional

Basket hold, in seconds. Defaults to 300 (5 minutes).

menu_visible_before_openbooleanoptional
show_stock_countbooleanoptional
max_per_customerinteger, nullableoptional

null = no limit.

Response, 200

dropobjectrequired
25 child fields
idstringrequired
store_idstringrequired
codestringrequired

The short code in the shareable link: /d/{code}

share_urlstringrequired

The full link the merchant pastes into her bio.

namestringrequired
descriptionstring, nullablerequired
statusenumrequired
draftscheduledcancelled
stateenumrequired

Computed at read time. Never sent by a client.

draftscheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
menu_visible_before_openbooleanrequired
show_stock_countbooleanrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired

Copied from the menu item at read time, never stored twice.

price_pencenumber, nullablerequired
image_urlstring, nullablerequired
quantitynumberrequired

How many were put up.

remainingnumberrequired

How many are still available. Never negative.

max_per_ordernumber, nullablerequired

null = no limit.

sold_out_atstring, nullablerequired
sort_ordernumberrequired
allergensarray of stringrequired
allergens_missingbooleanrequired
windowsarray of objectrequired
5 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
max_ordersnumber, nullablerequired

null = no cap on orders in this window.

orders_remainingnumber, nullablerequired
orders_countnumberrequired
units_soldnumberrequired
units_totalnumberrequired
gross_pencenumberrequired
blockersarray of stringrequired
created_atstringrequired
updated_atstringrequired
curl -X POST "https://www.membber.com/api/v1/drops" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "name": "Example name",
    "opens_at": "<opens_at>",
    "collection_date": "<collection_date>"
  }'
Response, 200
{
  "drop": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "code": "EXAMPLE10",
    "share_url": "https://example.com/image.jpg",
    "name": "Example name",
    "description": "Added at the front desk",
    "status": "draft",
    "state": "draft",
    "opens_at": "<opens_at>",
    "closes_at": "<closes_at>",
    "collection_date": "<collection_date>",
    "timezone": "Europe/London",
    "checkout_ttl_seconds": 1,
    "menu_visible_before_open": true,
    "show_stock_count": true,
    "max_per_customer": 1,
    "items": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "name": "Example name",
        "price_pence": 1500,
        "image_url": "https://example.com/image.jpg",
        "quantity": 1,
        "remaining": 1,
        "max_per_order": 1,
        "sold_out_at": "<sold_out_at>",
        "sort_order": 1,
        "allergens": [
          "<allergen>"
        ],
        "allergens_missing": true
      }
    ],
    "windows": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>",
        "max_orders": 1,
        "orders_remaining": 1
      }
    ],
    "orders_count": 1,
    "units_sold": 1,
    "units_total": 1,
    "gross_pence": 1500,
    "blockers": [
      "<blocker>"
    ],
    "created_at": "<created_at>",
    "updated_at": "<updated_at>"
  }
}

One drop, in full.

The drop with its items, windows, live counters and anything blocking it going live.

Parameters

dropIdstringpathrequired
store_idstring · uuidqueryrequired
drop_idstring · uuidqueryoptional

Response, 200

dropobjectrequired
25 child fields
idstringrequired
store_idstringrequired
codestringrequired

The short code in the shareable link: /d/{code}

share_urlstringrequired

The full link the merchant pastes into her bio.

namestringrequired
descriptionstring, nullablerequired
statusenumrequired
draftscheduledcancelled
stateenumrequired

Computed at read time. Never sent by a client.

draftscheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
menu_visible_before_openbooleanrequired
show_stock_countbooleanrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired

Copied from the menu item at read time, never stored twice.

price_pencenumber, nullablerequired
image_urlstring, nullablerequired
quantitynumberrequired

How many were put up.

remainingnumberrequired

How many are still available. Never negative.

max_per_ordernumber, nullablerequired

null = no limit.

sold_out_atstring, nullablerequired
sort_ordernumberrequired
allergensarray of stringrequired
allergens_missingbooleanrequired
windowsarray of objectrequired
5 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
max_ordersnumber, nullablerequired

null = no cap on orders in this window.

orders_remainingnumber, nullablerequired
orders_countnumberrequired
units_soldnumberrequired
units_totalnumberrequired
gross_pencenumberrequired
blockersarray of stringrequired
created_atstringrequired
updated_atstringrequired
curl -G "https://www.membber.com/api/v1/drops/b11f386a-0000-4000-8000-d0c5000000b1" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "drop": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "code": "EXAMPLE10",
    "share_url": "https://example.com/image.jpg",
    "name": "Example name",
    "description": "Added at the front desk",
    "status": "draft",
    "state": "draft",
    "opens_at": "<opens_at>",
    "closes_at": "<closes_at>",
    "collection_date": "<collection_date>",
    "timezone": "Europe/London",
    "checkout_ttl_seconds": 1,
    "menu_visible_before_open": true,
    "show_stock_count": true,
    "max_per_customer": 1,
    "items": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "name": "Example name",
        "price_pence": 1500,
        "image_url": "https://example.com/image.jpg",
        "quantity": 1,
        "remaining": 1,
        "max_per_order": 1,
        "sold_out_at": "<sold_out_at>",
        "sort_order": 1,
        "allergens": [
          "<allergen>"
        ],
        "allergens_missing": true
      }
    ],
    "windows": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>",
        "max_orders": 1,
        "orders_remaining": 1
      }
    ],
    "orders_count": 1,
    "units_sold": 1,
    "units_total": 1,
    "gross_pence": 1500,
    "blockers": [
      "<blocker>"
    ],
    "created_at": "<created_at>",
    "updated_at": "<updated_at>"
  }
}

Change a drop.

Edits a drop, including one that is currently selling: adding stock, reordering items, adding a window or closing early are all expected mid-drop. Moving `status` from draft to scheduled is what makes it go live at its opening minute; that is refused while any item is missing its allergens, and the refusal names the item.

Parameters

dropIdstringpathrequired

Request body

store_idstring · uuidrequired
drop_idstring · uuidoptional
statusenumoptional
draftscheduled
namestringoptional
descriptionstring, nullableoptional
opens_atstringoptional

ISO instant. The drop opens itself at this minute.

closes_atstring, nullableoptional

ISO instant, or null to close when it sells out.

collection_datestringoptional

YYYY-MM-DD in the store timezone.

timezonestringoptional
checkout_ttl_secondsanyoptional

Basket hold, in seconds. Defaults to 300 (5 minutes).

menu_visible_before_openbooleanoptional
show_stock_countbooleanoptional
max_per_customerinteger, nullableoptional

null = no limit.

Response, 200

dropobjectrequired
25 child fields
idstringrequired
store_idstringrequired
codestringrequired

The short code in the shareable link: /d/{code}

share_urlstringrequired

The full link the merchant pastes into her bio.

namestringrequired
descriptionstring, nullablerequired
statusenumrequired
draftscheduledcancelled
stateenumrequired

Computed at read time. Never sent by a client.

draftscheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
menu_visible_before_openbooleanrequired
show_stock_countbooleanrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired

Copied from the menu item at read time, never stored twice.

price_pencenumber, nullablerequired
image_urlstring, nullablerequired
quantitynumberrequired

How many were put up.

remainingnumberrequired

How many are still available. Never negative.

max_per_ordernumber, nullablerequired

null = no limit.

sold_out_atstring, nullablerequired
sort_ordernumberrequired
allergensarray of stringrequired
allergens_missingbooleanrequired
windowsarray of objectrequired
5 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
max_ordersnumber, nullablerequired

null = no cap on orders in this window.

orders_remainingnumber, nullablerequired
orders_countnumberrequired
units_soldnumberrequired
units_totalnumberrequired
gross_pencenumberrequired
blockersarray of stringrequired
created_atstringrequired
updated_atstringrequired
curl -X PATCH "https://www.membber.com/api/v1/drops/b11f386a-0000-4000-8000-d0c5000000b1" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066"
  }'
Response, 200
{
  "drop": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "code": "EXAMPLE10",
    "share_url": "https://example.com/image.jpg",
    "name": "Example name",
    "description": "Added at the front desk",
    "status": "draft",
    "state": "draft",
    "opens_at": "<opens_at>",
    "closes_at": "<closes_at>",
    "collection_date": "<collection_date>",
    "timezone": "Europe/London",
    "checkout_ttl_seconds": 1,
    "menu_visible_before_open": true,
    "show_stock_count": true,
    "max_per_customer": 1,
    "items": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "name": "Example name",
        "price_pence": 1500,
        "image_url": "https://example.com/image.jpg",
        "quantity": 1,
        "remaining": 1,
        "max_per_order": 1,
        "sold_out_at": "<sold_out_at>",
        "sort_order": 1,
        "allergens": [
          "<allergen>"
        ],
        "allergens_missing": true
      }
    ],
    "windows": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>",
        "max_orders": 1,
        "orders_remaining": 1
      }
    ],
    "orders_count": 1,
    "units_sold": 1,
    "units_total": 1,
    "gross_pence": 1500,
    "blockers": [
      "<blocker>"
    ],
    "created_at": "<created_at>",
    "updated_at": "<updated_at>"
  }
}

Call a drop off and refund everyone.

Cancels the drop. Any paid order is refunded and every affected person is told once, however many orders they hold. A drop with paid orders requires `confirm_refunds: true`, so nobody cancels fifty people without being shown the number first. Requires the refund permission.

Parameters

dropIdstringpathrequired

Request body

store_idstring · uuidrequired
drop_idstring · uuidoptional
reasonstring, nullableoptional
confirm_refundsbooleanoptional

Response, 200

dropobjectrequired
25 child fields
idstringrequired
store_idstringrequired
codestringrequired

The short code in the shareable link: /d/{code}

share_urlstringrequired

The full link the merchant pastes into her bio.

namestringrequired
descriptionstring, nullablerequired
statusenumrequired
draftscheduledcancelled
stateenumrequired

Computed at read time. Never sent by a client.

draftscheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
menu_visible_before_openbooleanrequired
show_stock_countbooleanrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired

Copied from the menu item at read time, never stored twice.

price_pencenumber, nullablerequired
image_urlstring, nullablerequired
quantitynumberrequired

How many were put up.

remainingnumberrequired

How many are still available. Never negative.

max_per_ordernumber, nullablerequired

null = no limit.

sold_out_atstring, nullablerequired
sort_ordernumberrequired
allergensarray of stringrequired
allergens_missingbooleanrequired
windowsarray of objectrequired
5 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
max_ordersnumber, nullablerequired

null = no cap on orders in this window.

orders_remainingnumber, nullablerequired
orders_countnumberrequired
units_soldnumberrequired
units_totalnumberrequired
gross_pencenumberrequired
blockersarray of stringrequired
created_atstringrequired
updated_atstringrequired
orders_to_refundnumberrequired

How many orders will be refunded.

people_to_tellnumberrequired

How many PEOPLE, which is fewer if anyone ordered twice.

refund_pencenumberrequired
curl -X POST "https://www.membber.com/api/v1/drops/b11f386a-0000-4000-8000-d0c5000000b1/cancel" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066"
  }'
Response, 200
{
  "drop": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "code": "EXAMPLE10",
    "share_url": "https://example.com/image.jpg",
    "name": "Example name",
    "description": "Added at the front desk",
    "status": "draft",
    "state": "draft",
    "opens_at": "<opens_at>",
    "closes_at": "<closes_at>",
    "collection_date": "<collection_date>",
    "timezone": "Europe/London",
    "checkout_ttl_seconds": 1,
    "menu_visible_before_open": true,
    "show_stock_count": true,
    "max_per_customer": 1,
    "items": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "name": "Example name",
        "price_pence": 1500,
        "image_url": "https://example.com/image.jpg",
        "quantity": 1,
        "remaining": 1,
        "max_per_order": 1,
        "sold_out_at": "<sold_out_at>",
        "sort_order": 1,
        "allergens": [
          "<allergen>"
        ],
        "allergens_missing": true
      }
    ],
    "windows": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>",
        "max_orders": 1,
        "orders_remaining": 1
      }
    ],
    "orders_count": 1,
    "units_sold": 1,
    "units_total": 1,
    "gross_pence": 1500,
    "blockers": [
      "<blocker>"
    ],
    "created_at": "<created_at>",
    "updated_at": "<updated_at>"
  },
  "orders_to_refund": 1,
  "people_to_tell": 1,
  "refund_pence": 1500
}

Set what is in the drop.

Replaces the drop menu with the given items, chosen from the store menu that already exists. Raising a quantity mid-drop puts stock back on sale immediately. Lowering it can never go below what is already sold, and the refusal says how many that is. An item omitted here is removed from the drop, which is refused if any of it has sold.

Parameters

dropIdstringpathrequired

Request body

store_idstring · uuidrequired
drop_idstring · uuidoptional
itemsarray of objectrequired
4 child fields
menu_item_idstring · uuidrequired
quantityintegerrequired
max_per_orderinteger, nullableoptional
sort_orderintegeroptional

Response, 200

dropobjectrequired
25 child fields
idstringrequired
store_idstringrequired
codestringrequired

The short code in the shareable link: /d/{code}

share_urlstringrequired

The full link the merchant pastes into her bio.

namestringrequired
descriptionstring, nullablerequired
statusenumrequired
draftscheduledcancelled
stateenumrequired

Computed at read time. Never sent by a client.

draftscheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
menu_visible_before_openbooleanrequired
show_stock_countbooleanrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired

Copied from the menu item at read time, never stored twice.

price_pencenumber, nullablerequired
image_urlstring, nullablerequired
quantitynumberrequired

How many were put up.

remainingnumberrequired

How many are still available. Never negative.

max_per_ordernumber, nullablerequired

null = no limit.

sold_out_atstring, nullablerequired
sort_ordernumberrequired
allergensarray of stringrequired
allergens_missingbooleanrequired
windowsarray of objectrequired
5 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
max_ordersnumber, nullablerequired

null = no cap on orders in this window.

orders_remainingnumber, nullablerequired
orders_countnumberrequired
units_soldnumberrequired
units_totalnumberrequired
gross_pencenumberrequired
blockersarray of stringrequired
created_atstringrequired
updated_atstringrequired
curl -X PUT "https://www.membber.com/api/v1/drops/b11f386a-0000-4000-8000-d0c5000000b1/items" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "items": [
      {
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "quantity": 1
      }
    ]
  }'
Response, 200
{
  "drop": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "code": "EXAMPLE10",
    "share_url": "https://example.com/image.jpg",
    "name": "Example name",
    "description": "Added at the front desk",
    "status": "draft",
    "state": "draft",
    "opens_at": "<opens_at>",
    "closes_at": "<closes_at>",
    "collection_date": "<collection_date>",
    "timezone": "Europe/London",
    "checkout_ttl_seconds": 1,
    "menu_visible_before_open": true,
    "show_stock_count": true,
    "max_per_customer": 1,
    "items": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "name": "Example name",
        "price_pence": 1500,
        "image_url": "https://example.com/image.jpg",
        "quantity": 1,
        "remaining": 1,
        "max_per_order": 1,
        "sold_out_at": "<sold_out_at>",
        "sort_order": 1,
        "allergens": [
          "<allergen>"
        ],
        "allergens_missing": true
      }
    ],
    "windows": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>",
        "max_orders": 1,
        "orders_remaining": 1
      }
    ],
    "orders_count": 1,
    "units_sold": 1,
    "units_total": 1,
    "gross_pence": 1500,
    "blockers": [
      "<blocker>"
    ],
    "created_at": "<created_at>",
    "updated_at": "<updated_at>"
  }
}

Set the collection windows.

Replaces the drop collection windows. A drop owns its own windows for one date rather than inheriting the store's standing weekly hours. Windows can be added while the drop is selling. Removing a window that people have already booked into is refused, and the refusal says how many.

Parameters

dropIdstringpathrequired

Request body

store_idstring · uuidrequired
drop_idstring · uuidoptional
windowsarray of objectrequired
3 child fields
starts_atstringrequired
ends_atstringrequired
max_ordersinteger, nullableoptional

Response, 200

dropobjectrequired
25 child fields
idstringrequired
store_idstringrequired
codestringrequired

The short code in the shareable link: /d/{code}

share_urlstringrequired

The full link the merchant pastes into her bio.

namestringrequired
descriptionstring, nullablerequired
statusenumrequired
draftscheduledcancelled
stateenumrequired

Computed at read time. Never sent by a client.

draftscheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
menu_visible_before_openbooleanrequired
show_stock_countbooleanrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired

Copied from the menu item at read time, never stored twice.

price_pencenumber, nullablerequired
image_urlstring, nullablerequired
quantitynumberrequired

How many were put up.

remainingnumberrequired

How many are still available. Never negative.

max_per_ordernumber, nullablerequired

null = no limit.

sold_out_atstring, nullablerequired
sort_ordernumberrequired
allergensarray of stringrequired
allergens_missingbooleanrequired
windowsarray of objectrequired
5 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
max_ordersnumber, nullablerequired

null = no cap on orders in this window.

orders_remainingnumber, nullablerequired
orders_countnumberrequired
units_soldnumberrequired
units_totalnumberrequired
gross_pencenumberrequired
blockersarray of stringrequired
created_atstringrequired
updated_atstringrequired
curl -X PUT "https://www.membber.com/api/v1/drops/b11f386a-0000-4000-8000-d0c5000000b1/windows" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "windows": [
      {
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>"
      }
    ]
  }'
Response, 200
{
  "drop": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "code": "EXAMPLE10",
    "share_url": "https://example.com/image.jpg",
    "name": "Example name",
    "description": "Added at the front desk",
    "status": "draft",
    "state": "draft",
    "opens_at": "<opens_at>",
    "closes_at": "<closes_at>",
    "collection_date": "<collection_date>",
    "timezone": "Europe/London",
    "checkout_ttl_seconds": 1,
    "menu_visible_before_open": true,
    "show_stock_count": true,
    "max_per_customer": 1,
    "items": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "name": "Example name",
        "price_pence": 1500,
        "image_url": "https://example.com/image.jpg",
        "quantity": 1,
        "remaining": 1,
        "max_per_order": 1,
        "sold_out_at": "<sold_out_at>",
        "sort_order": 1,
        "allergens": [
          "<allergen>"
        ],
        "allergens_missing": true
      }
    ],
    "windows": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>",
        "max_orders": 1,
        "orders_remaining": 1
      }
    ],
    "orders_count": 1,
    "units_sold": 1,
    "units_total": 1,
    "gross_pence": 1500,
    "blockers": [
      "<blocker>"
    ],
    "created_at": "<created_at>",
    "updated_at": "<updated_at>"
  }
}

A drop, as a buyer sees it.

Public. Everything a buyer needs to decide: what is in it, how many are left, when it opens, when to collect, and the allergens the seller declared. Returns the drop even before it opens so the page can count down; the menu itself is withheld while the seller has chosen to hide it.

Parameters

dropCodestringpathrequired
drop_codestringqueryoptional

Response, 200

dropobjectrequired
14 child fields
idstringrequired
codestringrequired
namestringrequired
descriptionstring, nullablerequired
stateenumrequired
scheduledliveclosedcollectedcancelled
opens_atstringrequired
closes_atstring, nullablerequired
collection_datestringrequired
timezonestringrequired
checkout_ttl_secondsnumberrequired
max_per_customernumber, nullablerequired
itemsarray of objectrequired
12 child fields
idstringrequired
menu_item_idstringrequired
namestringrequired
descriptionstring, nullablerequired
price_pencenumber, nullablerequired
image_urlstring, nullablerequired
sold_outbooleanrequired
remainingnumber, nullablerequired
in_other_basketsnumber, nullablerequired
max_per_ordernumber, nullablerequired
allergensarray of stringrequired
ingredientsstring, nullablerequired
windowsarray of objectrequired
4 child fields
idstringrequired
starts_atstringrequired
ends_atstringrequired
fullbooleanrequired
storeobjectrequired
4 child fields
codestringrequired
namestringrequired
logo_urlstring, nullablerequired
primary_colorstring, nullablerequired
curl -G "https://www.membber.com/api/v1/drops/public/EXAMPLE10" \
  -H "Authorization: Bearer $MEMBBER_TOKEN"
Response, 200
{
  "drop": {
    "id": "00000d1b-0000-4000-8000-d0c500000000",
    "code": "EXAMPLE10",
    "name": "Example name",
    "description": "Added at the front desk",
    "state": "scheduled",
    "opens_at": "<opens_at>",
    "closes_at": "<closes_at>",
    "collection_date": "<collection_date>",
    "timezone": "Europe/London",
    "checkout_ttl_seconds": 1,
    "max_per_customer": 1,
    "items": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "menu_item_id": "ca65a6e7-0000-4000-8000-d0c5000000ca",
        "name": "Example name",
        "description": "Added at the front desk",
        "price_pence": 1500,
        "image_url": "https://example.com/image.jpg",
        "sold_out": true,
        "remaining": 1,
        "in_other_baskets": 1,
        "max_per_order": 1,
        "allergens": [
          "<allergen>"
        ],
        "ingredients": "<ingredients>"
      }
    ],
    "windows": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "starts_at": "<starts_at>",
        "ends_at": "<ends_at>",
        "full": true
      }
    ],
    "store": {
      "code": "EXAMPLE10",
      "name": "Example name",
      "logo_url": "https://example.com/image.jpg",
      "primary_color": "<primary_color>"
    }
  }
}

Hold something in your basket.

Public. Holds stock the moment it goes in the basket, not at payment, and starts the countdown. Sets the basket to the given quantity rather than adding to it, so a retry or a double tap converges instead of stacking. Send 0 to remove. Returns which limit bound if you got less than you asked for.

Parameters

dropCodestringpathrequired

Request body

drop_codestringoptional
cart_tokenstringrequired
item_idstring · uuidrequired
quantityintegerrequired
buyer_emailstring · email, nullableoptional
collection_slot_idstring · uuid, nullableoptional

Response, 200

grantednumberrequired
bound_byenumrequired
nonestockmax_per_ordermax_per_customerwindow_fullreleased
remainingnumber, nullablerequired
expires_atstring, nullablerequired
curl -X POST "https://www.membber.com/api/v1/drops/public/EXAMPLE10/hold" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "cart_token": "<cart_token>",
    "item_id": "7e22b9c7-0000-4000-8000-d0c50000007e",
    "quantity": 1
  }'
Response, 200
{
  "granted": 1,
  "bound_by": "none",
  "remaining": 1,
  "expires_at": "<expires_at>"
}

Give the basket back.

Public. Releases everything this basket holds, so it goes back on sale immediately rather than waiting for the countdown. Called when someone empties their basket or leaves.

Parameters

dropCodestringpathrequired

Request body

drop_codestringrequired
cart_tokenstringrequired

Response, 200

releasednumberrequired
curl -X POST "https://www.membber.com/api/v1/drops/public/EXAMPLE10/release" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "drop_code": "EXAMPLE10",
    "cart_token": "<cart_token>"
  }'
Response, 200
{
  "released": 1
}
WhatsApp
Book a Call
Start Free