Listings
Units for rent. PUT /listings/{id} by your own reference is the call to make whenever a unit is saved in your system; POST /listings/{id}/unpublish takes it off the market.
Read a listing
id is a Shace UUID or ext:<externalRef>. A UUID that is not one of your listings is looked up as an externalRef, so the URL you pushed to with PUT always reads back.
path Parameters
idListing id, or ext:<your reference>.
Read a listing › Responses
OK
id^([0-9a-fA-F]{8}-[0-… · requiredShace id.
Your reference, or null when none was sent.
statusdraft (never live), published, or unpublished (was live, taken off).
publishBlockersEmpty when the listing can go live; otherwise what is missing: images, price, noticePeriod, object.
The object (building or address) the listing sits on.
typeoffice for a whole office, coworking for desks or rooms in a shared workspace, part_of_office for part of a larger office.
localeLocale the description was submitted in; Shace translates the rest.
Free text about the premises, in locale.
Floor area in square metres.
Number of workplaces.
Furnished or not.
Base rent, as sent.
Notice period in months, month-priced listings only.
Binding period in months, or null for no minimum.
amenityIdsIds from the catalogue in GET /amenities.
Amenities outside the catalogue, as sent.
imagesPublic image URLs in display order.
Public floor plan URL, or null.
Opening hours per weekday for coworking listings, or null.
Email of the assigned organization member.
createdViaWhether the listing was created in the app or through this API.
Last time a PUT through this API wrote content fields.
createdAt^(?:(?:\d\d[2468][04… · requiredISO 8601 UTC.
updatedAt^(?:(?:\d\d[2468][04… · requiredLatest update to the listing, its primary-language description, or its object. ISO 8601 UTC, millisecond precision.
Create or update a listing by your own reference
Idempotent. Pushing the same ref again updates the listing instead of duplicating it; an unchanged body is a no-op. The body points at the object the listing sits on with exactly one of objectRef, objectId or address. Publishes on success unless the body says status: "draft". A listing that is valid but not publishable is stored as a draft and the response lists the publishBlockers. A ref whose listing was unpublished is republished.
Outcomes
The same request in other situations, as outcome, status and any publishBlockers:
- First push of a new reference:
created,published - The same body again: nothing is written, no translation is queued, updatedAt does not move:
unchanged,published - A field changed, for example the price:
updated,published - Two images instead of three on a listing that was live: stored, taken off the market until a third is pushed:
updated,unpublished, blockersimages - The body says status: "draft" for a listing that was live:
updated,unpublished - The body says status: "draft" for a listing that was never live, with the same content:
unchanged,draft - The reference of a listing that was unpublished, pushed again:
updated,published
path Parameters
idYour external reference for the listing, URL-encoded. Send it directly, without adding ext:.
Create or update a listing by your own reference › Request Body
typeoffice for a whole office, coworking for desks or rooms in a shared workspace, part_of_office for part of a larger office.
Base rent. Transparent pricing is part of Shace, so there is no price on request.
objectRefYour reference for an object pushed with PUT /objects/{id}. Send exactly one of objectRef, objectId or address.
objectIdA Shace object id, or ext:<your reference>. Send exactly one of objectRef, objectId or address.
Inline address. Reuses your organization's active object at that address or creates and geocodes one. Send exactly one of objectRef, objectId or address.
localeLanguage of description and customAmenities. Shace translates to the other locales.
Free text about the premises, in locale.
Floor area in square metres, with at most two decimal places.
Number of workplaces.
Furnished or not.
Notice period in months. Required to publish month-priced listings; must be omitted for day pricing.
Binding period in months, month-priced listings only. Omit for no minimum.
amenityIdsIds from the catalogue in GET /amenities.
Amenities not in the catalogue: { id (uuid), icon, translations: { sv?, en? } }. Include a label in locale. Supplied labels are preserved; omitted languages are translated automatically.
imagesURLs returned by POST /uploads/images for your organization, in display order; the first is the cover. At least 3 to publish. Reordering counts as a change.
Blur placeholders keyed by image URL, as returned by the upload endpoint. Optional.
URL returned by POST /uploads/floor-plan. Optional; does not count towards the three-image minimum.
Opening hours per weekday for coworking listings. Each day is { open, close } as HH:MM, or null for closed.
statuspublished (default) goes live when there are no publish blockers; draft holds the listing back.
assignedTo^(?!\.)(?!.*\.\.)([A…Email of the organization member who owns the listing. Defaults to the organization owner when the listing is created; omitted on an update, the current assignee is kept.
Create or update a listing by your own reference › Responses
OK
id^([0-9a-fA-F]{8}-[0-… · requiredShace id.
Your reference, or null when none was sent.
statusdraft (never live), published, or unpublished (was live, taken off).
publishBlockersEmpty when the listing can go live; otherwise what is missing: images, price, noticePeriod, object.
The object (building or address) the listing sits on.
typeoffice for a whole office, coworking for desks or rooms in a shared workspace, part_of_office for part of a larger office.
localeLocale the description was submitted in; Shace translates the rest.
Free text about the premises, in locale.
Floor area in square metres.
Number of workplaces.
Furnished or not.
Base rent, as sent.
Notice period in months, month-priced listings only.
Binding period in months, or null for no minimum.
amenityIdsIds from the catalogue in GET /amenities.
Amenities outside the catalogue, as sent.
imagesPublic image URLs in display order.
Public floor plan URL, or null.
Opening hours per weekday for coworking listings, or null.
Email of the assigned organization member.
createdViaWhether the listing was created in the app or through this API.
Last time a PUT through this API wrote content fields.
createdAt^(?:(?:\d\d[2468][04… · requiredISO 8601 UTC.
updatedAt^(?:(?:\d\d[2468][04… · requiredLatest update to the listing, its primary-language description, or its object. ISO 8601 UTC, millisecond precision.
outcomeWhat the request did. unchanged means the body matched what Shace already holds.
List your listings
Newest first, cursor paginated. Use updatedSince to verify what Shace holds without re-pushing.
query Parameters
cursornextCursor from the previous page.
limitPage size, 1 to 200.
statusOnly listings in this status.
updatedSince^(?:(?:\d\d[2468][04…ISO 8601 instant. Only listings whose returned updatedAt is after it, compared at millisecond precision. Includes changes to their objects and primary-language descriptions.
List your listings › Responses
OK
The page, newest first.
Pass as ?cursor= to fetch the next page; null on the last page.
Create a listing without an external reference
For landlords with nothing to key on. Every call creates a new listing; prefer PUT /listings/{id} when your system has a stable id for the unit. Same body as the upsert, including exactly one of objectRef, objectId or address.
Create a listing without an external reference › Request Body
typeoffice for a whole office, coworking for desks or rooms in a shared workspace, part_of_office for part of a larger office.
Base rent. Transparent pricing is part of Shace, so there is no price on request.
objectRefYour reference for an object pushed with PUT /objects/{id}. Send exactly one of objectRef, objectId or address.
objectIdA Shace object id, or ext:<your reference>. Send exactly one of objectRef, objectId or address.
Inline address. Reuses your organization's active object at that address or creates and geocodes one. Send exactly one of objectRef, objectId or address.
localeLanguage of description and customAmenities. Shace translates to the other locales.
Free text about the premises, in locale.
Floor area in square metres, with at most two decimal places.
Number of workplaces.
Furnished or not.
Notice period in months. Required to publish month-priced listings; must be omitted for day pricing.
Binding period in months, month-priced listings only. Omit for no minimum.
amenityIdsIds from the catalogue in GET /amenities.
Amenities not in the catalogue: { id (uuid), icon, translations: { sv?, en? } }. Include a label in locale. Supplied labels are preserved; omitted languages are translated automatically.
imagesURLs returned by POST /uploads/images for your organization, in display order; the first is the cover. At least 3 to publish. Reordering counts as a change.
Blur placeholders keyed by image URL, as returned by the upload endpoint. Optional.
URL returned by POST /uploads/floor-plan. Optional; does not count towards the three-image minimum.
Opening hours per weekday for coworking listings. Each day is { open, close } as HH:MM, or null for closed.
statuspublished (default) goes live when there are no publish blockers; draft holds the listing back.
assignedTo^(?!\.)(?!.*\.\.)([A…Email of the organization member who owns the listing. Defaults to the organization owner when the listing is created; omitted on an update, the current assignee is kept.
Create a listing without an external reference › Responses
OK
id^([0-9a-fA-F]{8}-[0-… · requiredShace id.
Your reference, or null when none was sent.
statusdraft (never live), published, or unpublished (was live, taken off).
publishBlockersEmpty when the listing can go live; otherwise what is missing: images, price, noticePeriod, object.
The object (building or address) the listing sits on.
typeoffice for a whole office, coworking for desks or rooms in a shared workspace, part_of_office for part of a larger office.
localeLocale the description was submitted in; Shace translates the rest.
Free text about the premises, in locale.
Floor area in square metres.
Number of workplaces.
Furnished or not.
Base rent, as sent.
Notice period in months, month-priced listings only.
Binding period in months, or null for no minimum.
amenityIdsIds from the catalogue in GET /amenities.
Amenities outside the catalogue, as sent.
imagesPublic image URLs in display order.
Public floor plan URL, or null.
Opening hours per weekday for coworking listings, or null.
Email of the assigned organization member.
createdViaWhether the listing was created in the app or through this API.
Last time a PUT through this API wrote content fields.
createdAt^(?:(?:\d\d[2468][04… · requiredISO 8601 UTC.
updatedAt^(?:(?:\d\d[2468][04… · requiredLatest update to the listing, its primary-language description, or its object. ISO 8601 UTC, millisecond precision.
outcomeWhat the request did. unchanged means the body matched what Shace already holds.
Take a listing off the market
For the unpublish action in your system. id is a Shace UUID or ext:<externalRef>. The listing is hidden from matchmaking and keeps its content and reference; nothing is deleted, and the next PUT of the same reference puts it back on the market. Idempotent: a listing that is already off the market answers outcome: "unchanged".
path Parameters
idListing id, or ext:<your reference>.
Take a listing off the market › Responses
OK
id^([0-9a-fA-F]{8}-[0-… · requiredShace id.
Your reference, or null when none was sent.
statusdraft (never live), published, or unpublished (was live, taken off).
publishBlockersEmpty when the listing can go live; otherwise what is missing: images, price, noticePeriod, object.
The object (building or address) the listing sits on.
typeoffice for a whole office, coworking for desks or rooms in a shared workspace, part_of_office for part of a larger office.
localeLocale the description was submitted in; Shace translates the rest.
Free text about the premises, in locale.
Floor area in square metres.
Number of workplaces.
Furnished or not.
Base rent, as sent.
Notice period in months, month-priced listings only.
Binding period in months, or null for no minimum.
amenityIdsIds from the catalogue in GET /amenities.
Amenities outside the catalogue, as sent.
imagesPublic image URLs in display order.
Public floor plan URL, or null.
Opening hours per weekday for coworking listings, or null.
Email of the assigned organization member.
createdViaWhether the listing was created in the app or through this API.
Last time a PUT through this API wrote content fields.
createdAt^(?:(?:\d\d[2468][04… · requiredISO 8601 UTC.
updatedAt^(?:(?:\d\d[2468][04… · requiredLatest update to the listing, its primary-language description, or its object. ISO 8601 UTC, millisecond precision.
outcomeWhat the request did. unchanged means the body matched what Shace already holds.