Skip to main content
Subscribe to our newsletter to be notified about developer platform updates.
REST API
Deliveries are in the API. Retrieve deliveries of the network, a location, a customer, or a user, get a delivery, create one with a photo from create a media upload, update it, for example to mark it pickedUp, and delete it. OAuth apps request the new deliveries.readonly or deliveries scope, and with bearer token authentication the user needs the deliveries area in locationPermissionLevels of retrieve registrations for the delivery’s location.
REST API
Plans and resource tiers can require a contract at sign-up. Set selfSignup.contract.templateRef on create a plan, update a plan, create a resource or patch a resource, and a customer who signs up immediately signs a contract from that template. The subscription starts once the contract is signed, and its first invoice is issued then. The template must belong to the location of the plan or resource, the location must have eSignature turned on, and the sign-up type must be immediate. selfSignup is replaced as a whole, so sending it without contract stops requiring one, as does switching the sign-up type to request. Retrieve a plan, retrieve plans and get a resource return selfSignup.contract when a contract is required.
REST API
Create a booking with Basic authentication accepts a paymentMethod, such as external for a payment collected outside Spacebring, and pays for the booking the way an administrator would, also on a resource only administrators can book. Pass the membershipRefOwner of the customer the booking is paid for. Before, Basic authentication could create only free bookings and got 403 for any payment method.
Webhooks
The new booking.upcoming webhook is sent an hour before a booking starts, and an hour before each date of a repeating booking, so an integration can act on every date a resource is booked, such as sending a door code. A repeating booking is a single booking, so booking.created is sent for it once, with its first date. booking.upcoming carries the date’s own startDate and endDate, and an id of {bookingId}_{isoDate} for each date after the first, as retrieve bookings returns them with singleBookings. Only confirmed bookings are sent, and a booking made, paid or rescheduled less than an hour before it starts is left out, as booking.created, booking.paid or booking.updated already carries it. See Webhooks.
REST APIWebhooks
refundPolicy on resources has partialRefunds, and refundPolicy.public has its own for nonmembers: up to five shares refunded when a booking is canceled after its full refund threshold has passed, each a percent from 1 to 99 and a value threshold. A cancellation gets back the percent of the longest threshold it still meets, of what the booking was paid with by card, externally, in credits, in day passes or on an invoice not yet issued, and nothing once every threshold has passed. Day passes are refunded whole, rounded down. Each threshold must be shorter than value, unless value is noRefund, and a shorter threshold must refund a smaller share. Create a resource and patch a resource accept them; a patch that leaves partialRefunds out keeps the current ones, and an empty list removes them. Get a resource, retrieve resources and resource webhook payloads return them, as an empty list when there are none. A booking keeps the partial refunds of the policy it was made with. See Webhooks.
REST API
Retrieve subscriptions accepts requested in status, and retrieve a subscription can return it. A requested subscription is one a person asked for on a plan that needs an administrator’s approval: it bills nothing, grants no credits or day passes and holds no resource until it is approved. A request ends as declined when an administrator declines it or nobody answers it within 30 days, and as withdrawn when the person takes it back; status accepts both too. An approved request is returned as approved, and the subscription the approval created is a separate one. Without status, the list still returns active, scheduled and incomplete subscriptions only.
Webhooks
Location payloads no longer carry guidance and ticketReplies in supportLemAI. Agents reply to support tickets, each with its own instructions, so these fields had no effect. supportLemAI.autoAssignTickets stays. See Webhooks.
REST API
Retrieve resource assignments for a location with a bearer token needs resources access to the location instead of analytics access, the same access get a resource assignment needs.
REST API
A booking made with basic authentication through create a booking notifies its owner and attendees when sendUpdates is all, the default, as a booking made with a bearer token already did, and attendees added with basic authentication through update a booking are notified too. Set sendUpdates to none to skip these notifications. The confirmationEmail options of create a resource and get a resource now pick the email by the role of the customer the booking is for, not of the person who made it.
REST API
companyRequester in retrieve a ticket and retrieve tickets carries the company’s logo with its key and url when an administrator uploaded one, and publicLogoUrl derived from the company’s website.
REST APIWebhooks
A support ticket can be requested for the requester’s company, so every member of the company can read it and comment on it. userRequester stays the member who opened it. Create a ticket accepts an optional companyRefRequester, the ID of the requester’s company, and fails with 400 when the requester is not a member of that company or the ticket’s type is discriminationAndHarassment. Retrieve a ticket and retrieve tickets return companyRefRequester and companyRequester with the company’s id and title, and a member sees the tickets requested for their company next to their own. Retrieve tickets also filters by companyRefRequester, one or more comma-separated company IDs, for support admins of the company’s location and for members of the company. Together with membershipRefRequester, it lists the tickets that match either one. Members of the company can create a ticket comment on the ticket. The support.ticket.created webhook carries companyRefRequester too. A ticket without companyRefRequester stays visible to its requester only. See Webhooks.
REST API
Campaigns are in the API. Retrieve campaigns and get a campaign with its delivery statistics, and create, update, and delete drafts. The API never sends a campaign: an administrator sends a draft from the admin web portal. OAuth apps request the new campaigns.readonly or campaigns scope, and with bearer token authentication the user needs the campaigns area in locationPermissionLevels of retrieve registrations for the campaign’s locations.
REST API
Administrators have a deliveries area in locationPermissionLevels and locationPermissions of retrieve registrations. Every existing administrator starts out with write, and owners and super administrators always have it. read lets an administrator see the deliveries kept at their locations, and write also lets them add, change, and delete them.
REST API
Retrieve bookings accepts requested and declined in status. A booking request is what a person creates when a resource’s booking permission doesn’t let them book it directly, and it holds no time until an administrator approves it. requested lists the requests waiting for an answer, and declined the ones an administrator declined or nobody answered before they started. Without status, the list still returns tentative and confirmed bookings only.
REST API
Administrators have a visitors area in locationPermissionLevels and locationPermissions of retrieve registrations. Every existing administrator starts out with write, and owners and super administrators always have it. With read, an administrator can still retrieve visits, get requests, and get contacts, but create a request, create a contact, check in a visit, and check out a visit fail with 403, and create a visit and update a visit treat them like any other member. With none, getting a single visit, request, or contact fails with 403 too, and the lists leave out the locations where they hold it.
REST API
Administrators have a checkIns area in locationPermissionLevels and locationPermissions of retrieve registrations. Every existing administrator starts out with write, and owners and super administrators always have it. With read, an administrator can still get a check-in and retrieve check-ins, but check in, check out, and update a check-in fail with 403. With none, getting a check-in fails with 403 too, and retrieving check-ins leaves out the locations where they hold it.
REST API
An administrator in retrieve registrations has locationPermissionLevels next to locationPermissions: the access level they hold in each area of the locations they manage. none hides the area, read shows it without changes, and write manages it. Analytics is only none or read, and settings only none or write. A permission in locationPermissions is true only when its area holds the highest level, so an administrator with none and one with read both show false there.
REST API
Get a check-in and list check-ins return the new accessControl value in checkInMethod for a check-in opened when a member unlocked a door through an access control integration.
REST API
A product and a benefit can have no category. Create a product, update a product, create a benefit, and update a benefit accept categoryRef left out or null. Partially update a product and partially update a benefit take a product or a benefit out of its category with categoryRef: null. A product or a benefit without a category returns categoryRef: null. The categoryRef filter of retrieve orders and retrieve applications accepts none next to category IDs, for orders of products and applications for benefits that had no category.
REST API
The receiptPdfUrl of a money transaction now expires. A link stops working 190 days after it was issued, whether or not the transaction is fetched again, and opening it after that fails with 400 and the code receiptLinkExpired. A link issued before this change got an expiration date somewhere in the 180 days after it, so it keeps working for at least 10 more days. Retrieve a money transaction and retrieve money transactions return a new link once the current one is 180 days old, so fetch the transaction again for the current link rather than storing it.
REST API
The locationPermissions of an administrator in retrieve registrations has a campaigns permission: whether the administrator can manage campaigns in the locations they manage. It starts out with the value of feed, and owners and super administrators always have it.
REST API
A resource can have a separate booking window for nonmembers in bookingWindow.public, with its own enabled, bookAhead, and minNotice. While bookingWindow.public.enabled is true, a booking of a nonmember follows it instead of the rest of bookingWindow, even when bookingWindow.enabled is false, and both values are required. Members keep following the rest of bookingWindow. Create a resource and patch a resource accept it, and get a resource and retrieve resources return it. Create a booking, update a booking, and check resource availability apply it. Retrieve bookings filters bookings by when they were created with createDate[gt], createDate[gte], createDate[lt] and createDate[lte], in any order and together with the start and end date filters. With singleBookings, each occurrence of a repeating booking matches by the date the repeating booking was created. Create a booking keeps the attendees of a booking an API key or an administrator makes for a nonmember owner. They were left out before, as they still are when a nonmember books for themselves.
REST API
A visit’s check-in in list check-ins and get a check-in returns the host’s email in visit.userHost.email, and the host’s company in visit.companyHost with its id and title. visit.companyHost is absent when the host was not a member of a company when the visit was created.
REST API
Check in with a customerRef accepts a past checkInDate to record an arrival nobody checked the member in for. The member stays checked in from that date until they check out. Send a past checkOutDate as well to create the check-in as checked out at those dates, even while the member is checked in right now, without the checkInCheckedIn or checkInCheckedOut webhooks. Get a check-in and list check-ins return the new backdated value in checkInMethod and checkOutMethod for a past check-in an administrator added in the admin app.
REST API
Retrieve invoices without customerRef or locationRef, list invoice items without customerRef, invoiceRef or locationRef, and retrieve credit notes without invoiceRef or locationRef return the records of every location in the network, with the same filters and pagination. Search by q works across the network too. An administrator limited to some locations still has to pass one of the references.
REST API
Create an alternative currency and update an alternative currency accept null again for the one of exchangeRate and provider that is not used, and treat it as absent. Since October 20, a request with "provider": null or "exchangeRate": null was rejected with “The provider is not supported.” or “The exchange rate must be a positive number.”
REST API
An external payment can record how the money was collected. Pay an invoice and create a money transaction take an optional paidBy inside payment.method.external: bankTransfer, card, cash, check, or paymentLink. The invoice payments in retrieve an invoice and the transaction in retrieve a money transaction return it in payment.method.external.paidBy, and the invoice PDF names it in place of External. Absent when it was not recorded.
REST APIWebhooks
A check-in in list check-ins, get a check-in, and everywhere else check-ins are returned has a checkInMethod and a checkOutMethod: how the customer was checked in and out. The values are reception for a code entered on the Reception app, manual for an administrator, agent for the AI agent, and api for an API key or OAuth app. A check-out can also be automatic. The checkInCheckedIn and checkInCheckedOut webhooks carry them as check_in_method and check_out_method. Check-ins made before methods were recorded have neither.
REST API
A contract with the subscription action carries the new subscriptionRef once it is issued, the ID of the subscription it created. Get a contract, retrieve contracts, and issue a contract return it, and retrieve a subscription already links back through contract.id.
REST API
Update a check-in, PATCH /check_ins/v1/{checkInId}, changes the checkInDate or checkOutDate of a check-in, both in the past. checkOutDate is accepted only for a check-in that is checked out. The booking, event ticket, or visit behind the check-in returns the new dates too. No webhooks are sent.
REST APIWebhooks
A check-in in list check-ins, get a check-in, and everywhere else check-ins are returned has a checkInMethod and a checkOutMethod: how the customer was checked in and out. The values are reception for a code entered on the Reception app, manual for an administrator, agent for the AI agent, and api for an API key or OAuth app. A check-out can also be automatic. The checkInCheckedIn and checkInCheckedOut webhooks carry them as check_in_method and check_out_method. Check-ins made before methods were recorded have neither.
REST API
Coupons can have a name. Create a coupon and update a coupon accept an optional title, and retrieve coupons and get a coupon return it. A coupon without a name has no title. Update a coupon now takes title and limitedItems each on its own, so any coupon can be renamed, and an empty title removes the name. Sending limitedItems still needs a coupon created with limited items enabled. Plans can have a cover image. Create a media upload, send the file, then pass its key as media[0].key to create a plan or update a plan. An empty media on update removes the image. Every plan response, including retrieve plans and retrieve a plan, carries media with the image’s key and public url. See File uploads.
REST API
bufferTime now applies to desks as well as rooms. Create a resource and patch a resource store it for a hotDesk, dedicatedDesk, or station, and bookings of that desk keep it free before and after them. Until now a desk dropped the bufferTime sent to it. Other resource types still ignore it. In retrieve a ticket, a reply an agent posted shows that agent: lemAI carries the new agentRef with the agent’s ID, and its name and photoUrl are the agent’s. photoUrl is null when the agent has no photo. Replies posted before agents keep the name Agent and the agent icon, without agentRef.
Webhooks
Location payloads carry which billing details customers see at checkout in new fields, companyBillingDetailsFields for companies and userBillingDetailsFields for individual users, each with legalName, address, and taxId set to required, optional, or hidden. The customerBillingDetailsRequired and userBillingDetailsRequired fields are deprecated and will be removed. Until then they are true only while every field of that customer type is required. See Webhooks.
REST API
Create a shop category and create a benefit category need the Settings permission in the location, as reordering categories already did, instead of the Shop or Benefits permission. API keys are not affected.
REST API
The request body of create an alternative currency and update an alternative currency is now documented as one object with optional exchangeRate and provider, of which exactly one is required. The same requests are accepted as before, and an unsupported provider or a rate that is not positive is now reported on altCurrency.provider or altCurrency.exchangeRate with its own message instead of “Either provider or exchange rate is required.”
REST API
An invoice item in list invoice items, retrieve an invoice item and everywhere else items are returned has a status: the status of the invoice it is on, as the status filter of list invoice items reads it. An item on no invoice has none.
REST API
Get posts no longer requires locationRef. Leave it out to list the posts of every location in the network where the feed is on, pinned posts first and then newest first. Each location’s feed visibility still applies: API keys see every location’s posts, and administrators and members see the posts of the locations whose feed they may open.
REST API
The reference now documents void a credit note, PUT /billing/credit_notes/v1/{id}/void, which answers with the voided credit note in the shape retrieve a credit note returns.
REST API
Get a resource assignment reads one assignment by id, in the shape retrieve resource assignments lists them, so you can read an assignment back after updating it. It needs resources access to the assignment’s location. The reference now also documents delete a resource assignment and delete a resource, which both answer 204 No Content.
REST API
The user of a check-in in retrieve check-ins, get a check-in, check in and check out has a deleteDate when the user account was deleted.
REST API
Retrieve events no longer requires locationRef. Leave it out to list the events of every location in the network, with the same date filters and order as before; each event keeps the visibility it has in its own location. Retrieve tickets no longer requires locationRef, eventRef, customerRef or userRef. Leave all four out to list the tickets of every location, newest first. API keys see every ticket; administrators see the tickets of the locations where they have events access and their own tickets elsewhere, and members only their own tickets.
REST API
Retrieve visits, get contacts and get requests no longer require locationRef. Leave it out to list the visits, contacts or pending requests of every location in the network; visits then come newest visit date first. API keys see every location’s records; administrators see those of the locations they manage, plus the visits and requests they host elsewhere, and members only their own visits and requests. Listing contacts without locationRef needs an administrator.
REST API
Retrieve check-ins no longer requires locationRef. Leave it out to list the check-ins of every location in the network. API keys see every check-in, and administrators see the check-ins of the locations they manage.
REST API
Partially update an event, partially update a post and partially update a product change only the fields a request sets and keep the others, so renaming an event, a post or a product no longer means sending the whole record. They answer 204 No Content; read the result with retrieve an event, get a post or get a product. Update an event, update a post and update a product still replace every field.
REST API
Partially update a benefit changes only the fields a request sets and keeps the others, so renaming a benefit no longer means sending the whole benefit. It answers 204 No Content; read the result with retrieve a benefit. Update a benefit still replaces every field.
REST API
Retrieve products no longer requires locationRef, categoryRef or id. Leave them out to list the products of every location in the network, newest first; each product’s visibility still applies against its own location. Retrieve categories no longer requires locationRef; leave it out to list the categories of every location, grouped by location. Retrieve orders no longer requires locationRef, customerRef or userRef. Leave all three out to list the orders of every location, newest first, with the status, categoryRef, productRef and createDate filters. API keys see every order, and administrators their own orders and those of the locations where they have shop access; a caller who is not an administrator in the network gets 403.
REST APIWebhooks
Resources have a refundPolicy with the same shape as duration and schedule: value is the rescheduling policy, and public holds a separate one for nonmembers, with enabled and value. Create a resource and patch a resource accept it, and get a resource, retrieve resources and resource webhook payloads return it. When public.enabled is true, a booking made for a customer who is not a member of the location follows public.value. A booking keeps the policy it was made with; moving it to another resource takes that resource’s policy for the customer. refundThreshold is deprecated: responses still return it with the same value as refundPolicy.value, and a request that sends it without refundPolicy changes refundPolicy.value only. See Webhooks.
REST API
With query, GET /customers/v1 finds customers by the beginning of their phone number again. A query made only of digits, spaces, +, -, . and brackets is compared by its digits, so +380 67 12 finds +380671234567, and these matches come after email matches.
REST API
With query, GET /customers/v1 matches customers by meaning, across a person’s name, about text and company or a company’s title and website, and by the beginning of their email, instead of matching names, emails and phone numbers by spelling. Customers whose email starts with the query come first. A query that contains @ or is made only of digits is matched by email only, so it no longer finds a customer by phone number.
REST API
Create a resource no longer lists an id field in its request body. Spacebring has always given a new resource its own id and ignored the one sent, so requests that still send id keep working and get the same result.
REST API
Retrieve a package returns one package by its id, with the same fields as retrieve packages. API keys read any package in the network; members read the packages of the locations where they are a member, and administrators those of the locations where they have billing access.
REST API
Create a company saves the taxId it is given; before, the company was created without a tax ID.
REST API
Retrieve tickets applies eventRef together with customerRef, returning only that customer’s tickets for the event. Before, eventRef was ignored when customerRef was set.
REST API
Update a plan changes only the fields the request sends. It used to reset commitmentCycles, credits, dayPasses and setupFee to 0, description to empty and exclusiveAccess to no resources whenever the request left them out, so a request that renamed a plan also cleared them.
REST API
With query, GET /customers/v1 searches members and nonmembers when membershipType is left out, and returns at most 10 matches when limit is left out, so a single search finds a former customer too. Pass membershipType=member to search current members only, or a limit of up to 100. Without query, the defaults are unchanged: members only, 100 per page.
REST API
Retrieve orders ignores spaces around each status, categoryRef and productRef value and names the values it rejects: an unknown status reads Invalid status: "shipped". Use one or more of canceled, completed, inProgress, new, pending, separated by commas. (was status should be new, inProgress, completed or canceled.), and a categoryRef or productRef that is not a UUID reads Invalid categoryRef: "…". Use one or more UUIDs, separated by commas. (was categoryRefs should be uuid. and productRef should be uuid.). The reference now lists pending, which the status filter already accepted. Retrieve products ignores spaces around each id the same way, and an id that is not a UUID reads Invalid id: "…". Use one or more UUIDs, separated by commas. (was productIds should be a list of valid UUIDs.).
REST API
Retrieve subscriptions no longer requires locationRef or customerRef. Leave both out to list the subscriptions of every location in the network, grouped by location, with the status, planRef and createDate filters; order still needs locationRef. API keys see the subscriptions of every location, and administrators those of the locations where they have billing access.
REST API
The status filter of retrieve invoices, list invoice items and retrieve credit notes, and the type filter of list invoice items, ignore spaces around each comma-separated value, and a value they do not accept is reported as Invalid status: "unpaid". Use one or more of draft, issued, paid, voided, separated by commas. instead of status should be draft, issued, paid or voided., and the same way for credit note statuses and item types. Retrieve the upcoming invoice, list upcoming invoice items and retrieve a credit note report invalid parameters as a validationError that lists each rejected field in issues. The upcoming invoice reads Subscription ref is required. or subscriptionRef should be a valid UUID. (was Subscription reference is not valid.), a credit note id that is not a UUID reads creditNoteId should be a valid UUID. (was Credit note ref is not valid.), and list upcoming invoice items keeps its messages. The invoice, invoice item and credit note references now document discounts[].promocode.expiration as the { enabled, date } object it has always been, not a date.
REST API
GET /customers/v1 takes an optional query that finds customers by a person’s name, email or phone number, a company title, or the company of a person. Matching is fuzzy and accent-insensitive, the locationRef, type and membershipType filters still apply, and the response holds at most limit matches, best first, without a nextPageToken. An optional userRef lists the person customers of that user, one per location they belong to, under the same filters; a userRef that is not a UUID reads userRef should be a valid UUID.. The type and membershipType filters ignore spaces around each value, and a rejected value is now named with the accepted ones: Invalid type: "person". Use one or more of user, company, separated by commas. (was type should be user or company.), and the same for membershipType (was membershipType should be member or nonmember.).
REST API
Retrieve benefits no longer requires locationRef or categoryRef. Leave both out to list the benefits of every location in the network, newest first; each benefit’s visibility still applies against its own location. categoryRef on its own now only returns benefits of the caller’s network. Retrieve categories no longer requires locationRef; leave it out to list the categories of every location. Retrieve applications no longer requires a filter: without locationRef, benefitRef, customerRef or userRef, API keys see the applications of every location, administrators those of the locations where they have benefits access and their own, and other users their own. Applications of a deleted location no longer appear in any list, including the lists by benefit, customer or user.
REST API
Retrieve resources and retrieve bookings trim spaces around each type and status value, and their error now names the rejected values and the accepted ones, for example Invalid type: "castle". Use one or more of …, separated by commas. (was type is not valid., and status is not valid. for status). The reference lists the accepted values from the same list the API checks. Bookings returned by retrieve bookings, get a booking, create a booking and update a booking always include isCheckInRequired, as the reference documents: a free booking on a resource without auto-release now returns false instead of leaving the field out.
REST API
Retrieve visits, get contacts and get requests report invalid parameters as a validationError that lists each rejected field in issues, with the same messages as before. Retrieve a visit, get a contact and retrieve a request report an id that is not a UUID the same way. Two messages now name the actual problem: a locationRef that is not a UUID on retrieve visits reads The locationRef should be a valid UUID. (was The locationRef is required.), and a visitId that is not a UUID reads visitId should be a valid UUID. (was visitId is required.). The visit reference now documents that location.address is null for a location without an address.
REST API
Retrieve coupons, get a coupon, retrieve promocodes, get a promocode, and retrieve redemptions reject an invalid parameter with a validationError whose issues name the field, instead of an invalidParams error. The type filter of retrieve coupons takes the product types a coupon applies to, such as roomBookings,shopProducts, as it always has; the reference now lists them, spaces around each value are ignored, and the error names the values it rejects. Retrieve redemptions caps limit at 100. In redemptions, limitedRedemption.usage of the coupon and promocode is 0 instead of missing when nothing was counted yet, customer.user.photoUrl is null for a member without a photo, and the reference marks customer.user.name and surname optional, as a member who has not set them has neither.
REST API
Retrieve events documents the createDate, startDate and endDate filters it already accepted, and reports invalid parameters as a validationError that lists each rejected field in issues, with the same messages as before. Retrieve an event and retrieve a ticket report an id that is not a UUID the same way. Retrieve tickets trims spaces around each status value and names the rejected value and the accepted ones in its error. The event ticket reference no longer lists payment.method.paymentGateway.location and payment.method.external.location, which tickets never returned.
REST API
Retrieve tickets no longer requires locationRef. Leave it out to list the tickets of every location in the network, sorted by order as before. API keys see every ticket; administrators see the tickets of the locations where they have support access and their own tickets elsewhere, and members only their own tickets.
REST APIWebhooks
PayTabs joins the payment gateways. Create a money transaction charges a customer’s saved PayTabs card with payment.method.paymentGateway.gateway set to paytabs, and bookings, orders, event tickets, invoice payments, and money transactions paid through PayTabs return paytabs as their payment gateway. The location in location webhooks includes paytabsConnectionStatus.
REST API
Retrieve an alternative currency returns one alternative currency by its id, with the same fields as retrieve alternative currencies. It takes the invoices.readonly or invoices scope.
REST API
Revoking tokens now follows RFC 7009. Send token in an x-www-form-urlencoded body with your client_id and client_secret, as you do when you get or refresh a token. A token in the query string is ignored, and the GET variant of the endpoint is removed. You can revoke only tokens issued to your own client. Revoking a refresh token now also stops it from issuing new access tokens.
REST API
Create a resource assignment and update a resource assignment now end the assignment at 23:59 on the day of endDate, in the time zone of the location, as assignments from subscriptions do. An assignment that ends on a day now overlaps another that starts that day.
REST API
Create a ticket accepts Basic authentication, so an integration can create a support ticket for a member without acting as a user. With Basic authentication, userRefRequester is required, and the ticket and its ticketCreated activity have no creator.
REST API
Retrieve packages no longer requires locationRef. Leave it out to list the packages of every location in the network, newest first. A member sees the packages of the locations where they are a member.
REST API
Retrieve contracts no longer requires customerRef or locationRef. Leave both out to list the contracts of every location in the network; status, createDate and the q title search still apply. Administrators see the contracts of the locations where they have billing access, and members their own contracts. Retrieve templates no longer requires locationRef; leave it out to list the templates of every location in the network.
REST API
Retrieve coupons no longer requires locationRef. Leave it out to list the coupons of every location in the network, or pass only customerRef to list the coupons of that customer’s location. Retrieve promocodes lists the promocodes of every location when both locationRef and couponRef are left out. API keys see the coupons and promocodes of every location, and administrators those of the locations where they have billing access. Retrieve guides no longer requires locationRef. Leave it out to list the guides of every location in the network, newest first. Each guide’s visibility still applies, against the guide’s own location.
REST API
Retrieve plans no longer requires locationRef. Leave it out to list the plans of every location in the network. As with one location, API keys see every plan, administrators also see the plans without self sign-up in the locations where they have billing access, and everyone else sees only plans with self sign-up enabled.
REST API
Events can have a ticketsPerAttendee limit on how many tickets one attendee can get. Retrieve events and retrieve an event return it, and leave it out when the event is unlimited. Create an event and update an event accept it; omit it to make the event unlimited, including on an update. Purchasing more tickets than the limit is rejected with the eventTicketsPerAttendeeExceeded error.
REST API
Locations no longer set a booking window for each resource type, so a resource whose bookingWindow.enabled is false has none: users can book it up to its start and any time ahead. While enabled is true, its minNotice and bookAhead apply as before. Create a booking, update a booking, and check resource availability follow the resource’s window, which create a resource, patch a resource, get a resource, and retrieve resources carry in bookingWindow.
Webhooks
The roomBookAhead, deskBookAhead, officeBookAhead, parkingBookAhead, and equipmentBookAhead fields of location payloads, and the *BookingPeriod fields already deprecated in their favor, are deprecated and will be removed. Bookings no longer follow them: each resource has its own bookingWindow. See Webhooks.
REST API
Retrieve resources and retrieve bookings no longer require locationRef. Leave it out to list the resources or bookings of every location in the network; the other filters, such as type, status, and the date ranges, still apply. Retrieve bookings also accepts userRefOwner on its own, for the bookings a user made in any location, and customerRef or companyRefOwner on their own, for the bookings in the customer’s location. Update a booking can extend a booking paid with invoice, or add seats to it, after its invoice is issued. The extra charge goes on a new pending invoice item and appears as its own entry in the booking’s payments, with its method.invoice.invoiceItemRef. Shortening such a booking or moving it to another resource still fails. When delete a booking refunds a booking whose invoice is issued, it removes the pending invoice items of its extensions.
REST API
Retrieve tickets and retrieve a ticket return checkOutDate, the time the attendee last checked out. It is cleared when the attendee checks in again, so a ticket with a checkInDate and no checkOutDate belongs to an attendee who is checked in.
REST API
Update a money transaction accepts internalNote, a note about the payment that only administrators see, such as how an external payment was collected. It can be changed on any money transaction, together with status or on its own, and an empty string clears it. status is now optional, and a request must contain internalNote or status. The request now needs the Billing permission in the transaction’s location instead of Customers, including to approve or cancel a pending external payment. Retrieve a money transaction and retrieve money transactions return internalNote to administrators.
REST API
The customer of a resource assignment includes the company logo and the user’s photoUrl in retrieve resource assignments, create a resource assignment, update a resource assignment, retrieve resources, and get a resource.
REST API
Create a money transaction charges a customer’s saved PayPal card with payment.method.paymentGateway.gateway set to paypal.
REST API
Create a resource and patch a resource accept a bookingStepMinutes of 60 for rooms, conference rooms, event spaces, meeting rooms, phone booths, and studios, next to 5, 10, 15, and 30.
REST API
Create a resource and patch a resource accept a bookingStepMinutes of 60 for rooms, conference rooms, event spaces, meeting rooms, phone booths, and studios, next to 5, 10, 15, and 30. Create a booking invites people from outside the location. Each attendee is either an existing user, { "user": { "id": "…" } }, or a person by email, { "user": { "email": "…", "name": "…", "surname": "…" } }. A person invited by email is matched to the user with that email or added as a new user, and attends without a membership in the location. An id that is not an existing user is rejected with the attendeeNotValid error, and an existing user who is not a member of the location is now kept as an attendee instead of being left out.
REST API
Update a subscription and update a subscription item ignore the deprecated discounts field of an item when the request carries grantedDiscounts, so sending an item back as it was returned, with its grantedDiscounts edited, keeps exactly the coupons in that list. Before, the discounts percentages the response derives from a granted coupon re-created that coupon when grantedDiscounts was emptied in the same request. A request without grantedDiscounts still applies discounts.
REST API
A user whose profile the authorized user may not see is now left out of transactions instead of being returned with null fields, the same as in bookings. The user object (customer.user, userCreatedBy, userOwner, a refund’s or a booking’s user) and every reference to them (userRefOwner, userRefCreator, customerRefCreatedBy, membershipRef, membershipRefCreator) are omitted. Admins of the location and requests authenticated with an API key still get every user.
REST API
Transactions retrieved with an OAuth2 access token respect the privacy settings of the users they embed. When the authorized user is not an admin of the location, another user’s name, surname, photoUrl, about, email, and phoneNumber are null unless that user shares their profile, email, or phone number with them. Requests authenticated with an API key are unchanged. This applies to retrieve credit transactions, retrieve a credit transaction, retrieve day pass transactions, retrieve a day pass transaction, retrieve money transactions, retrieve a money transaction, retrieve scheduled credits transactions, and retrieve scheduled day pass transactions.
REST API
Retrieve visits filters by visitor with userRefVisitor, the id of the user who visits, as returned in each visit’s userRefVisitor.
REST API
A booking paid by invoice carries payments[].method.invoice.invoiceRef, the invoice its invoice item was added to. It is not set while the item is pending. This applies to get a booking, retrieve bookings, create a booking, and update a booking.
REST API
List invoice items accepts invoiceRef to list the items of one invoice, in place of customerRef or locationRef or together with them. They page and sort like the rest of the list, and the other filters still apply.
REST API
List invoice items lists pending invoice items with pending=true, for one customer with customerRef or for a whole location with locationRef. List upcoming invoice items is deprecated: use list invoice items with pending=true and customerRef instead. It keeps working for existing integrations. Listing the items of one invoice (GET /billing/invoices/v1/{invoiceId}/items) is no longer in the API reference and keeps working too. In list invoice items, createDate[gte] and createDate[lte] filter by when the item was created, while status, issueDate[gte], and issueDate[lte] filter by the invoice the item is on.
REST API
The OpenAPI spec lists the OAuth2 authorization, token, and refresh URLs on https://oauth2.spacebring.com/api/oauth2/, the same URLs the authentication page documents. The https://api.spacebring.com/oauth2/ URLs it listed before reach the same endpoints and keep working, so existing integrations need no change.
REST APIWebhooks
Location media follows the order administrators arrange the photos and videos in, and the first one is the location’s cover. Media added since the last arrangement comes first, newest first, which is the order every location returned before. This applies to get a location, retrieve all locations, and the location in webhook payloads.
REST API
Update a subscription item with grantedDiscounts now keeps exactly the coupons in the list, and an empty list removes them all. Before, a coupon the item carried as a product-type percentage discount, the deprecated discounts field, came back after the update.
REST API
A resource can charge different prices on some weekdays. pricingRules lists the rules, each with the days it covers and the money and credits tiers that replace the regular ones for a booking starting on one of those days, in the location’s time zone. Pass it when you create a resource or patch a resource: the list replaces the current rule, an empty list removes it, and a patch without it keeps it. The list holds at most one rule, a rule must select at least one day, and a rule keeps only the prices the resource charges, so its money tiers are dropped while money is disabled and its credits tiers while credits are disabled. Get a resource returns the rules, and create a booking prices the booking with the rule covering its start day. Dynamic pricing still applies on top of the day’s tiers.
REST API
Invoice items carry issueDate, when their invoice was issued. It is returned once the item is on an issued invoice: list invoice items, retrieve an invoice item, retrieve an invoice, and issue an invoice.
REST API
List invoice items accepts pending. With true it returns only pending items, the ones not on an invoice and not part of a subscription, and with false only the rest.
REST API
A resource can have its own booking window. Create a resource and patch a resource accept bookingWindow, and get a resource and retrieve resources return it. While bookingWindow.enabled is true, minNotice, how many minutes before it starts a booking has to be made, and bookAhead, how far ahead users can book (oneDay, twoDays, oneWeek, twoWeeks, oneMonth, threeMonths, sixMonths, oneYear, or unlimited), replace the ones the location sets for the resource type, and both are required. While it is false, the resource follows its location and keeps its own values. Create a booking, update a booking, and check resource availability apply the resource’s window.
Webhooks
Location payloads carry how far ahead users can book in new fields, roomBookAhead, deskBookAhead, officeBookAhead, parkingBookAhead, and equipmentBookAhead, with the values oneDay, twoDays, oneWeek, twoWeeks, oneMonth, threeMonths, sixMonths, oneYear, and unlimited. The roomBookingPeriod, deskBookingPeriod, officeBookingPeriod, parkingBookingPeriod, and equipmentBookingPeriod fields and their BOOKING_PERIOD_* values are deprecated and will be removed. Until then they keep the same values. See Webhooks.
REST API
Invoice items carry the customer they are billed to, with the company name in title for a company and the member in user, the same way invoices do. It is returned wherever an invoice item is: list invoice items, retrieve an invoice item, create an invoice item, list upcoming invoice items, retrieve the upcoming invoice, retrieve an invoice, and issue an invoice.
REST API
A membership’s role is read-only. Administrators are managed on the Administrators page, so create a membership and update a membership no longer take role, and role is no longer required on create. A role sent in the request is ignored and never changes the user’s administrator access. The role returned by retrieve a membership and the other membership endpoints still says whether the user administers the location, and removing a membership no longer removes that access.
REST API
Update a booking can move a booking paid by card or externally to a pricier resource with resourceRef. The difference is charged as a separate money transaction, the way an extension is: the booking stays tentative while the charge is pending, and a failed charge returns it to its previous resource and interval. A move to a resource with a lower price is still rejected with bookingMovePriceMismatch, and a move while an extra charge is pending is rejected with bookingPaymentPending.
REST API
Ticket comment and guide attachments can be uploaded through the API. Create an upload for a file of any type up to 50 MB with ticket comments or guides, send the file to the presigned URL with the headers returned, then pass the returned key in activity.attachments when you create a ticket comment within 25 minutes, or in attachments when you create a guide or update a guide within an hour. A key that is unknown, expired, already attached, or uploaded by another network now fails with 400 and the code fileUploadNotFound, where a ticket comment returned 404 and a guide dropped the attachment, and one whose file is still in transit fails with 409 and fileUploadPending. See File uploads for the full flow.
REST API
Retrieve resource assignments no longer returns an assignment that a subscription reserved during a checkout that expired without completing. Such a reservation never held the resource, as creating or updating an assignment already ignored it once expired, but it stayed in the list until it was deleted, which could take days.
REST API
Check-ins are part of the API. Retrieve check-ins lists a location’s check-ins, newest arrival first, filtered by arrival date, status, type, or userRef, and get a check-in returns one by its id. Check in records an arrival for a booking, an event ticket, a visit, or a member’s subscription, found by its check-in id, by a location and a six-digit code, or by a location and a customerRef, and check out records the departure. They come with their own OAuth scopes: reading needs checkIns.readonly or checkIns, and checking in or out needs checkIns. With a bearer token, the user must be an administrator of the check-in’s location.
REST API
Contract template files can be uploaded through the API. Create a template upload for a .docx file of up to 50 MB, send the file to the presigned URL, then pass the returned key as template.file.key when you create a template or update a template. A key that is unknown, expired, already used, or uploaded by another network now fails with 400 and the code fileUploadNotFound instead of 404, and one whose file is still in transit with 409 and fileUploadPending. An update that replaces the file fails with 409 and the code conflict when another request replaced it first. See File uploads for the full flow.
REST API
Product, resource, guide, and post media and company logos can be uploaded through the API. Create an upload with products, resources, guides, posts, or companies, send the file to the presigned URL, then attach it: media[0].key on a product, a key in media on a resource or a post, a Markdown image with the returned url in a guide description, or logo.key on a company. Guides and posts also take MP4, QuickTime, and WebM videos up to 50 MB. Create a company and update a company now accept logo, where null removes it, and companies return logo with its key and url. An attached key that is unknown, expired, or already used fails with fileUploadNotFound, and one whose file is still in transit with fileUploadPending. See File uploads for the full flow.
REST API
A resource can have up to 10 images. media lists them in display order, and imageUrl is the URL of the first one, the resource’s cover. When you create a resource or patch a resource, media sets the whole list in the order given, so send the current keys in a new order to reorder the images, or an empty list to remove them all. A patch without media keeps the current images. Before, a patch used only the first key in media and ignored an empty list. See Get a resource.
REST API
Retrieve bookings sorts by cancellation with order=deleteDate:desc or order=deleteDate:asc. The list then holds only cancelled bookings, ordered by their deleteDate, and status defaults to canceled. It works with every lookup the endpoint supports, but not with singleBookings, which returns a validation error as it does for createDate.
REST API
Location and resource schedules can stay open past midnight. A schedule item’s hours.to is counted from the start of its weekday, so a day open from 6:00 PM to 2:00 AM returns from: "18:00:00" and to: "26:00:00", at most 24 hours after from. Parse hours.to as a number of hours and minutes rather than as a time of day. Bookings inside such a day can run past midnight, and a hot desk booking spends one day pass per seat for each schedule day it covers. See Get a location and Get a resource.
REST APIWebhooks
Orders can carry the external payment method, which an administrator uses to record a payment collected outside Spacebring, such as cash or a bank transfer. When getting an order or retrieving orders, such an order returns payment.method.type as external and the paying customer in payment.method.external.customer. When the payment is recorded as still owed, payment.status stays pending until it is marked as paid. The shop.order.created and shop.order.paid webhooks carry the same payment with type set to external.
REST API
Update a booking paid by card or externally to extend it or add seats. The added part is charged as a separate money transaction, so payments lists one entry per charge, the booking stays tentative while the charge is pending, and a failed charge returns the booking to its previous interval instead of canceling it. Shortening such a booking is still rejected with bookingDurationChangeNotAllowed for users and is not refunded for administrators, and a change to the duration or seats while a payment is pending is rejected with bookingPaymentPending. See Get a booking for the payments field.
Webhooks
The benefit.application.created payload always includes the benefit object with the applied benefit’s id and title, so an integration no longer has to treat it as optional. No other field of the payload changes. See Webhooks.
REST API
Shop orders paid through a payment gateway are created with the pending status and move to new once the payment succeeds. Pass status=pending when you retrieve orders to list them; the default status filter still excludes them. Updating a pending order fails with a validation error until its payment completes.
REST API
Check resource availability before creating a booking. Send the startDate and endDate of the slot, plus quantity for seat-based resources such as hot desks, entire to check a whole office, or recurrence RRULE lines for a repeating slot. The response returns available, and when the slot cannot be booked, a reason with the code and message the booking would fail with, such as bookingConflict or bookingScheduleConflict. The same capacity, schedule, duration, and booking window rules as booking creation apply.
REST API
Event cover images can be uploaded through the API. Create a media upload to get a presigned URL, send the file to it, then pass the returned key as media[0].key when creating or updating an event. Creating or updating an event with a key that is unknown, not yet uploaded, or expired now fails with the fileUploadNotFound code, or fileUploadPending while the file is still in transit, instead of saving the event without an image. See File uploads for the full flow.
REST API
Transactions share one response format across credits, day passes, and money, and money transactions can now be updated and refunded through the API:
  • All transaction responses: customer identifies the company or user the transaction belongs to, product links the transaction to its booking, ticket, order, invoice, or subscription and carries a display title, and userCreatedBy names who created it
  • Credits and day pass transactions: amounts splits a charge across the expiring and permanent balances it was deducted from
  • Money transactions: payment carries the payment method, price, surcharge, refunds, dispute, and whether the payment is still refundable, alongside top-level currencyCode, customerName, customerTaxId, customerAddress, and receiptPdfUrl
  • New money routes: update a money transaction to approve or cancel a pending external payment, and refund a money transaction fully or partially through the payment gateway it was paid with
The previous fields are deprecated and will be removed in a future release:
  • membershipRef, companyRef, company, user, and userOwner — use customer and customer.user instead
  • membershipRefCreator, userCreator, and userRefCreator — use userCreatedBy instead
  • The booking, ticket, order, invoice, plan, and creditPackage embeds — use product instead
  • expiringAmount and permanentAmount on credits transactions — use amounts instead
  • paymentMethod, refund, refunds, billingAddressBy, and billingAddressTo on money transactions — use payment.method, payment.refunds, locationAddress, and customerAddress instead
  • membershipRef and companyRef in transaction list queries and in create credit or day pass transaction requests — pass customerRef instead
The deprecated fields keep working for now, so existing integrations are not affected. We recommend migrating to the new fields at your earliest convenience.
REST API
Create booking requests accept a paymentMethod with the external type to record a payment collected outside Spacebring. Pass external.status as succeeded to confirm the booking, or pending to keep it tentative until the payment is marked as paid. Spacebring issues the invoice once the payment is confirmed.
Webhooks
New webhook event types for events, alongside the existing event.created:
  • event.updated — sent when an event’s details change
  • event.canceled — sent when an event is canceled
  • event.deleted — sent when an event is deleted
The event payload now includes cancelDate and deleteDate. Select the new event types for your endpoint in Network Settings > Developers.
REST API
Support ticket assignees are now users instead of memberships. The membership-based assignee fields are deprecated and will be removed in a future release:
  • Ticket responses: membershipAssignee and membershipRefAssignee are deprecated — use userAssignee and userRefAssignee instead
  • Ticket activity responses: data.membershipAssignee and data.previousAttributes.membershipAssignee are deprecated — use data.userAssignee and data.previousAttributes.userAssignee instead
  • Update ticket assignee requests: ticket.membershipRefAssignee is deprecated — pass ticket.userRefAssignee with the ID of the user to assign, or null to unassign
The deprecated fields keep working for now, so existing integrations are not affected. We recommend migrating to the user-based fields at your earliest convenience.
REST API
New API routes for floors management:
  • Retrieve a list of all floors
  • Delete a floor
New Discounts section with API routes for coupons and promocodes:
  • Retrieve, create, get, update, and delete coupons
  • Retrieve, create, get, and archive promocodes
  • Retrieve promocode redemptions
REST API
New API routes for credit notes management:
  • Issue, preview and update credit notes
New API routes for invoice management:
  • Update, delete, duplicate, issue, void, and resend invoices
  • Cancel a payment on an invoice
  • Retrieve an upcoming invoice preview
  • Search invoices by code or number
New API routes for invoice item management:
  • Retrieve, update, and delete invoice items
  • List invoice items by invoice, scheduled, or upcoming
New API routes for guide management:
  • Retrieve a single guide or list of all guides
  • Add, modify, and delete guides
REST API
Manage subscriptions with ease! With new API routes, you can:
  • Retrieve subscription data
  • Add, modify, and delete subscription items
  • Patch subscription details, as advance invoicing, pause payment collection etc.
Streamline your subscription management and enhance customer experience!
REST API
Check out new ways to manage visitors! With new API routes, you can:
  • Check in and check out visitors
  • Create visit requests
  • Approve and reject requests
  • Register contacts
Build better community with your customers using new capabilities!
REST API
Comprehensive social feed management capabilities:• Feed Posts Management – Create, retrieve, update, and delete feed posts seamlessly – Browse all posts with filtering by hashtags and pagination• Interactive Comments System – Add, retrieve, and manage comments on any feed post – Enable rich discussions and community engagement• Social Engagement Features – Like and unlike both posts and commentsBuild dynamic social experiences and foster community engagement with these powerful feed management tools!
REST API
Introducing comprehensive support and subscription management capabilities:• Support – Open, update, and close support tickets effortlessly• Subscription Plans – Create, modify, and monitor customer plansUnlock new possibilities for customer service and subscription management with these robust tools!
REST API
Major expansion in product catalog and event coordination features:• Product & Order Management – Add or modify products with a single call – Place, track, and update orders seamlessly• Event Management – Schedule events, manage details, and publish updatesTransform how you handle events—streamline operations like never before!
REST API
Powerful new capabilities for benefits administration and visitor insights:• Benefits & Applications – Create, organize, and update benefit and their categories – Submit and review user applications in one go• Visitor Tracking – Capture and query visitors dataEnhance your platform with better benefits and visitor management!
REST APIWebhooks
Introducing New API & WebhooksWe’re thrilled to introduce the newly redesigned Spacebring API, built from the ground up to help you create more powerful, seamless integrations and automated workflows.Expanded Endpoints: Take advantage of the restructured existing endpoints and many new ones to build more flexible, custom integrations. Webhook Support: Receive real-time event notifications, enabling faster and more responsive interactions. Improved Documentation: Get up and running with the development process more quickly thanks to helpful explanations in our newly added guides.