GET/v1/marketplace-listings
List the locations on the marketplace
The locations that have joined the marketplace and can take an order, nearest the point given first (docs/decisions/0115). Public: a guest browses before signing in, and a location that joined asked to be found. A location is listed only with an address, a place on the map, business hours and a way to order.
Parameters
-
latitudequery · number · doubleRequired
Where the guest is, or the place they chose.
-
longitudequery · number · doubleRequired
-
cursorquery · stringOpaque cursor from a previous page's
next_cursor. Omit to start from the beginning.Pass it back exactly as received. It is base64 and its structure is not part of this contract — decoding it, or constructing one by hand, will break without notice.
-
limitquery · integer · int32Maximum items to return. The server may return fewer, so always drive the loop from
has_morerather than from the size of the page you got back.
Responses
-
200
A page of the marketplace.
MarketplaceListingPage · application/json
has_morebooleanRequired
Whether another page follows.
-
itemsarray of MarketplaceListingRequired
namestringRequired
The location's name.
accepting_ordersbooleanRequired
Whether the ordering page takes an order now. False while it is paused or off.
-
addressAddressRequired
A postal address.
The
address_line_*fields carry the most specific part of the address — street number, street name, building name. Less specific detail belongs inlocality,administrative_district_level_*andcountry.The
administrative_district_level_*fields are deliberately generic because their meaning is country-dependent: in the US level 1 is the state and level 2 the county; in the UK level 1 is the county.address_line_1stringRequired
First line of the address — street number, street name, building name.
≤ 255 chars
address_line_2stringSecond line of the address, if any.
≤ 255 chars
address_line_3stringThird line of the address, if any.
≤ 255 chars
administrative_district_level_1stringA civil entity within the country. The state in the US; the county in the UK.
≤ 128 chars
administrative_district_level_2stringA civil entity within
administrative_district_level_1.≤ 128 chars
countryCountryRequired
ISO 3166-1 alpha-2 country code.
ZZis the unknown/unspecified placeholder.One of 250 values; see the schema.
localitystringThe city or town.
≤ 128 chars
postal_codestringThe postal or ZIP code.
≤ 32 chars
sublocalitystringA civil region within the locality, if any.
≤ 128 chars
-
business_hoursarray of DaypartWindowRequired
The hours the location trades, in its own timezone.
≤ 8 items
daysarray of integerThe weekdays this window opens on, 1 (Monday) through 7 (Sunday). An empty or absent list is every day.
≤ 7 items
end_minuteintegerRequired
1–1440
start_minuteintegerRequired
0–1439
business_namestringRequired
The business the location belongs to, by its trading name where it has one.
collectionbooleanRequired
Whether a guest can order online to collect.
-
coordinatesCoordinatesRequired
A point on the WGS 84 ellipsoid, in decimal degrees. Square's location
coordinates.latitudenumber · doubleRequired
-90–90
longitudenumber · doubleRequired
-180–180
descriptionstringRequired
What the location says about itself. Empty when it says nothing.
≤ 280 chars
distance_metersinteger · int64Required
How far the location is from the point asked about, along the great circle, in meters.
≥ 0
location_idstring · uuidRequired
page_urlstring · uriRequiredNullable
The location's ordering page, or null when it takes orders only at its tables.
prep_time_minutesinteger · int32Required
What the location quotes for collection, in minutes.
≥ 0
table_orderingbooleanRequired
Whether a guest at a table can scan its code to order and pay.
timezoneTimezoneRequired
IANA time zone identifier.
Used to resolve a location's business day for reporting and settlement.
One of 348 values; see the schema.
next_cursorstringNullable
Opaque cursor for the next page, or null on the last page. Pass it back verbatim as the
cursorquery parameter; its contents are not part of this contract.
-
400
The request could not be parsed. Malformed JSON, a bad query parameter, or a header that failed to decode, among them an
API-Versionlater than the server speaks or not a date (api-version-unknown, with the server's own inapi_version).Distinct from
422: a400never reached validation, soinvalid_paramsis absent. Retrying without changing the request will fail again, except that a request refused for itsAPI-Versiongoes once the server is updated. -
401
No credentials, or credentials that could not be verified — missing bearer token, malformed JWT, expired token, or a signature that failed against the issuer's JWKS.
Refresh the token and retry once. Repeated
401after a refresh means the device needs to re-enrol. -
403
Authenticated, but not permitted. The token is valid and its merchant was resolved, but the caller's role does not allow this operation, or the target belongs to a different merchant.
Cross-tenant access is reported as
403on a resource the caller may not see, and as404where even confirming existence would leak information. Retrying will not help. -
410
The request names an
API-Versionthis server no longer serves (docs/decisions/0011). Nothing in it was read.api_versionnames the version the server speaks: the client is behind, and sends the request again once it is updated. -
429
Rate limit exceeded. Honour
Retry-Afterrather than applying your own backoff.A fleet of tills coming back online together after an outage is the realistic cause, which is exactly when uncoordinated client-side retry turns a brief outage into a sustained one. The limit is per process, and per site for what records trade there — a request spends its site's budget, and a till's own smaller one inside it — and per
(client, merchant)for everything else; noRateLimitfield is sent, so this response and itsRetry-Afterare the whole of the contract. -
500
Something failed on our side.
trace_ididentifies the request in our tracing — quote it in a support ticket.The body never carries internal detail: no SQL, no stack traces, no upstream error strings. Safe to retry with the same
Idempotency-Key.