Subscription/POS Orders

Hey there,

Just wanting some clarity on whether the following use-case is possible using Square’s APIs and POS systems.

Part one:
Customer signs up for a monthly membership, which includes 10 widgets each month. Widgets are ordered online through an app, but the customer is not charged for it unless they have used up their 10 widgets for that month. Once ordered, their widget allotment for the month is decreased by one.

Part two:
Customer can scan a QR code on their app in-store to order the widget, which will also do the above functionality (confirm membership status, reduce widget allotment for month, etc).

Hi @likwid welcome to the forums.

Yes, although most of the above functionality that you laid out would need to be handled by your own application. Square can handle the subscriptions part through the Subscriptions API, but the rest would be up to you as far as I can tell. For example, you can use the Subscriptions API to create the subscription for a customer, but the widget allotment would need to be tracked/counted by your own integration. Furthermore, the QR code piece would also need to be handled by your own integration. Square’s API will be able to tell you if the subscription exists and has been paid for, but beyond that you would need to handle the rest.

Please let me know if I misunderstood or if you have additional questions!

Hey @sjosey , thanks for the quick response! How do you create an Order that is free? In our use-case, if the customer has a subscription, then the item will need to be free. I tried to put through an Order with a 100% discount and have also tried creating a variant of an item that is $0, but it won’t let me create the order as it says an order must be at least $1.00.

Hm, can you provide your Square application id so I can take a look at our logs? You definitely should be able to create a $0.00 order. I just tested by adding:

  "discounts": [
      {
        "name": "100 off",
        "percentage": "100",
        "scope": "ORDER"
      }
  ]

to my order, and it was created successfully. Once you get past this part, to actually “pay” for the order, you need to use the PayOrder endpoint and simply pass an empty array of payment_ids for this order.

@sjosey
This is happening when I try to simulate the process using the Virtual Terminal. If a customer is part of the “Member” group, they should be given a 100% discount on their item. See screenshot below.

Also some other follow up questions:

  1. When creating an Order using Sandbox API, the order does not show up in Orders page of Dashboard. I can retrieve it with the API endpoint, but Orders page is still empty on Sandbox website.

  2. How to add/edit Custom Fields for a Customer using API

  3. Documentation states that the Order.Created webhook does not fire for POS sales. Our backend system needs to know when a customer orders a specific item both online and in-store. How can we do this?

Ah, the dashboard doesn’t support $0.00 payments (that is a payment and not an order, which are technically different). You would need to create the order via the Orders API at this time.

  1. To get an order to show up on the dashboard it needs to have two things. First, it needs to be paid for. Second, it needs to have a fulfillments array attached to it (which can only be done via the API).
  2. Currently there’s no way to retrieve/add/edit custom fields within a Customer object.
  3. The payment.created webhook would fire for all payment types, so you could rely on that instead.