curl --request GET \
--url https://api.opencals.com/storefront/locations/{locationId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.opencals.com/storefront/locations/{locationId}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.opencals.com/storefront/locations/{locationId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.opencals.com/storefront/locations/{locationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.opencals.com/storefront/locations/{locationId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.opencals.com/storefront/locations/{locationId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opencals.com/storefront/locations/{locationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"storeId": "123e4567-e89b-12d3-a456-426614174001",
"scheduleId": "123e4567-e89b-12d3-a456-426614174002",
"title": "Main Office",
"description": "Our main downtown office location with 3 treatment rooms",
"slug": "new-york",
"type": "physical",
"link": "https://zoom.us/j/123456789",
"addressLine1": "123 Main Street",
"addressLine2": "Suite 200",
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"country": "United States",
"addressPlaceId": "ChIJIQBpAG2ahYAR_6128GcTUEo",
"latitude": 37.4224764,
"longitude": -122.0842499,
"createdAt": "2023-01-20T08:30:00Z",
"updatedAt": "2023-02-15T14:20:00Z",
"deletedAt": "2023-03-10T11:45:00Z",
"address": "<string>",
"products": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"productId": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "1234567890",
"externalVariantId": "9876543210",
"storeId": "123e4567-e89b-12d3-a456-426614174001",
"slug": "haircut-basic",
"scheduleId": "<string>",
"productPoolId": "<string>",
"title": "Haircut Service",
"variantTitle": "Short Hair",
"description": "<string>",
"imageId": "<string>",
"color": "BLUE",
"price": 250,
"taxable": false,
"duration": 3600,
"allowCustomDuration": false,
"maxDuration": -1,
"maxAttendees": 1,
"maxGuests": 123,
"allowGuests": false,
"allowCustomerReschedule": false,
"allowCustomerCancel": false,
"rescheduleGap": 123,
"cancelGap": 123,
"beforeGap": 123,
"afterGap": 123,
"fixedTimes": false,
"fixedStartTime": "09:00:00",
"fixedEndTime": "17:00:00",
"advanceScheduleThreshold": 0,
"sendConfirmationEmail": true,
"sendReminderEmail": false,
"sendFeedbackEmail": false,
"skipCheckout": false,
"status": "ACTIVE",
"createdAt": "<string>",
"updatedAt": "<string>",
"deletedAt": "<string>",
"image": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "img_123456",
"url": "https://storage.example.com/images/product-image.jpg",
"filename": "product-image.jpg",
"mime": "image/jpeg",
"createdAt": "2023-01-01T12:00:00Z",
"updatedAt": "2023-01-02T12:00:00Z",
"deletedAt": "2023-01-03T12:00:00Z",
"storeId": "store-uuid"
}
}
],
"staffMembers": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"storeId": "123e4567-e89b-12d3-a456-426614174111",
"userId": "user-uuid",
"scheduleId": "123e4567-e89b-12d3-a456-426614174000",
"imageId": "123e4567-e89b-12d3-a456-426614174000",
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"slug": "mike",
"refreshToken": "abc123xyz456",
"createdAt": "2025-05-01T12:00:00Z",
"updatedAt": "2025-05-15T14:30:00Z",
"deletedAt": "2025-06-01T09:15:00Z",
"image": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "img_123456",
"url": "https://storage.example.com/images/product-image.jpg",
"filename": "product-image.jpg",
"mime": "image/jpeg",
"createdAt": "2023-01-01T12:00:00Z",
"updatedAt": "2023-01-02T12:00:00Z",
"deletedAt": "2023-01-03T12:00:00Z",
"storeId": "store-uuid"
}
}
],
"schedule": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"storeId": "123e4567-e89b-12d3-a456-426614174001",
"name": "Standard Business Hours",
"timezone": "UTC",
"scheduleGap": "every-15-minutes",
"appointmentsGap": 900,
"advanceScheduleDays": 60,
"availabilityType": "recurring",
"status": "active",
"createdAt": "2023-01-20T08:30:00Z",
"updatedAt": "2023-02-15T14:20:00Z",
"deletedAt": "2023-06-03T09:45:00Z"
},
"availabilities": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"locationId": "123e4567-e89b-12d3-a456-426614174001",
"fromDate": "2023-06-15",
"fromTime": "09:00:00",
"toDate": "2023-06-15",
"toTime": "17:00:00",
"day": 1,
"status": "available",
"createdAt": "2023-01-20T08:30:00Z",
"updatedAt": "2023-02-15T14:20:00Z"
}
],
"displayAddress": "Podcast House, Floor 3, 87 Turmill Street, London, EC1M 5QU"
}Get location by ID
Retrieve a location by its internal ID for current store
curl --request GET \
--url https://api.opencals.com/storefront/locations/{locationId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.opencals.com/storefront/locations/{locationId}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.opencals.com/storefront/locations/{locationId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.opencals.com/storefront/locations/{locationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.opencals.com/storefront/locations/{locationId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.opencals.com/storefront/locations/{locationId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opencals.com/storefront/locations/{locationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"storeId": "123e4567-e89b-12d3-a456-426614174001",
"scheduleId": "123e4567-e89b-12d3-a456-426614174002",
"title": "Main Office",
"description": "Our main downtown office location with 3 treatment rooms",
"slug": "new-york",
"type": "physical",
"link": "https://zoom.us/j/123456789",
"addressLine1": "123 Main Street",
"addressLine2": "Suite 200",
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"country": "United States",
"addressPlaceId": "ChIJIQBpAG2ahYAR_6128GcTUEo",
"latitude": 37.4224764,
"longitude": -122.0842499,
"createdAt": "2023-01-20T08:30:00Z",
"updatedAt": "2023-02-15T14:20:00Z",
"deletedAt": "2023-03-10T11:45:00Z",
"address": "<string>",
"products": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"productId": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "1234567890",
"externalVariantId": "9876543210",
"storeId": "123e4567-e89b-12d3-a456-426614174001",
"slug": "haircut-basic",
"scheduleId": "<string>",
"productPoolId": "<string>",
"title": "Haircut Service",
"variantTitle": "Short Hair",
"description": "<string>",
"imageId": "<string>",
"color": "BLUE",
"price": 250,
"taxable": false,
"duration": 3600,
"allowCustomDuration": false,
"maxDuration": -1,
"maxAttendees": 1,
"maxGuests": 123,
"allowGuests": false,
"allowCustomerReschedule": false,
"allowCustomerCancel": false,
"rescheduleGap": 123,
"cancelGap": 123,
"beforeGap": 123,
"afterGap": 123,
"fixedTimes": false,
"fixedStartTime": "09:00:00",
"fixedEndTime": "17:00:00",
"advanceScheduleThreshold": 0,
"sendConfirmationEmail": true,
"sendReminderEmail": false,
"sendFeedbackEmail": false,
"skipCheckout": false,
"status": "ACTIVE",
"createdAt": "<string>",
"updatedAt": "<string>",
"deletedAt": "<string>",
"image": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "img_123456",
"url": "https://storage.example.com/images/product-image.jpg",
"filename": "product-image.jpg",
"mime": "image/jpeg",
"createdAt": "2023-01-01T12:00:00Z",
"updatedAt": "2023-01-02T12:00:00Z",
"deletedAt": "2023-01-03T12:00:00Z",
"storeId": "store-uuid"
}
}
],
"staffMembers": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"storeId": "123e4567-e89b-12d3-a456-426614174111",
"userId": "user-uuid",
"scheduleId": "123e4567-e89b-12d3-a456-426614174000",
"imageId": "123e4567-e89b-12d3-a456-426614174000",
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"slug": "mike",
"refreshToken": "abc123xyz456",
"createdAt": "2025-05-01T12:00:00Z",
"updatedAt": "2025-05-15T14:30:00Z",
"deletedAt": "2025-06-01T09:15:00Z",
"image": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"externalId": "img_123456",
"url": "https://storage.example.com/images/product-image.jpg",
"filename": "product-image.jpg",
"mime": "image/jpeg",
"createdAt": "2023-01-01T12:00:00Z",
"updatedAt": "2023-01-02T12:00:00Z",
"deletedAt": "2023-01-03T12:00:00Z",
"storeId": "store-uuid"
}
}
],
"schedule": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"storeId": "123e4567-e89b-12d3-a456-426614174001",
"name": "Standard Business Hours",
"timezone": "UTC",
"scheduleGap": "every-15-minutes",
"appointmentsGap": 900,
"advanceScheduleDays": 60,
"availabilityType": "recurring",
"status": "active",
"createdAt": "2023-01-20T08:30:00Z",
"updatedAt": "2023-02-15T14:20:00Z",
"deletedAt": "2023-06-03T09:45:00Z"
},
"availabilities": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"locationId": "123e4567-e89b-12d3-a456-426614174001",
"fromDate": "2023-06-15",
"fromTime": "09:00:00",
"toDate": "2023-06-15",
"toTime": "17:00:00",
"day": 1,
"status": "available",
"createdAt": "2023-01-20T08:30:00Z",
"updatedAt": "2023-02-15T14:20:00Z"
}
],
"displayAddress": "Podcast House, Floor 3, 87 Turmill Street, London, EC1M 5QU"
}Authorizations
Storefront API key (sfk_...)
Path Parameters
Location ID
"123e4567-e89b-12d3-a456-426614174000"
Response
Location retrieved successfully
Unique identifier of the location
"123e4567-e89b-12d3-a456-426614174000"
ID of the store that owns this location
"123e4567-e89b-12d3-a456-426614174001"
ID of the schedule assigned to this location (if any)
"123e4567-e89b-12d3-a456-426614174002"
Name of the location
"Main Office"
Description of the location
"Our main downtown office location with 3 treatment rooms"
URL-friendly slug for the location (unique per store)
"new-york"
Type of location
physical, online, delivery "physical"
URL link for online locations
"https://zoom.us/j/123456789"
First line of address for physical locations
"123 Main Street"
Second line of address for physical locations
"Suite 200"
City for physical locations
"San Francisco"
State/province for physical locations
"CA"
Postal code for physical locations
"94105"
Country for physical locations
"United States"
Google Place ID for the physical address
"ChIJIQBpAG2ahYAR_6128GcTUEo"
Latitude in WGS84
37.4224764
Longitude in WGS84
-122.0842499
Date when the location was created
"2023-01-20T08:30:00Z"
Date when the location was last updated
"2023-02-15T14:20:00Z"
Date when the location was deleted (for soft deletes)
"2023-03-10T11:45:00Z"
The formatted address string
Products that can be offered at this location
Show child attributes
Show child attributes
Staff members who can work at this location
Show child attributes
Show child attributes
Schedule assigned to the location
Show child attributes
Show child attributes
Availability records for this location
Show child attributes
Show child attributes
Merchant-defined display address that overrides the auto-formatted address (emails, booking page). Null falls back to the concatenated address fields.
"Podcast House, Floor 3, 87 Turmill Street, London, EC1M 5QU"
Was this page helpful?