# Get a location by ID Returns a single location by its unique identifier. The response includes the full location details including address, business hours, and whether online ordering is enabled. Endpoint: GET /locations/{location_id} Version: 1.0.0 Security: oauth2 ## Path parameters: - `location_id` (string, required) Unique identifier for the location. ## Response 200 fields (application/json): - `id` (string, required) Unique identifier for this location. - `name` (string, required) Store name (e.g., "QuickStop Example: "QuickStop #247" - `address` (object, required) - `address.street` (string, required) Street address. Example: "4521 Congress Ave" - `address.city` (string, required) City name. Example: "Austin" - `address.state` (string, required) Two-letter state code (e.g., "TX"). Example: "TX" - `address.postal_code` (string, required) ZIP or postal code. Example: "78745" - `address.country` (string, required) Two-letter ISO 3166-1 alpha-2 country code. Example: "US" - `phone` (string) Store phone number in E.164 format (e.g., "+15125551234"). Example: "+15125551234" - `latitude` (number,null) Latitude in decimal degrees (WGS 84 datum). Null if the location has not been geocoded. Use with longitude for store locator features and distance calculations. Example: 30.2277 - `longitude` (number,null) Longitude in decimal degrees (WGS 84 datum). Null if the location has not been geocoded. Example: -97.7553 - `timezone` (string, required) IANA timezone identifier for this location. Used to interpret business_hours and daily_sales_start_time/end_time fields. Example: "America/Chicago" - `online_ordering_enabled` (boolean, required) Whether this location currently accepts online orders. Only locations with online_ordering_enabled=true should be displayed to customers. - `default_prep_time_minutes` (integer,null) Default estimated preparation time in minutes for orders at this location. Used to compute estimated_ready_at on orders when no item-specific prep time applies. Null if the location has not configured a default. Example: 15 - `minimum_order_amounts` (object,null) Minimum order subtotal required per handoff mode. If a customer's cart subtotal is below the minimum for their selected handoff mode, the server automatically applies a SMALL_ORDER fee covering the shortfall rather than blocking the order. Null if no minimums are configured. Keys are lowercase handoff mode identifiers. Only modes with minimums are present -- absence means no minimum for that mode. Example: {"delivery":{"amount":1500,"currency":"USD"},"pickup":{"amount":500,"currency":"USD"}} - `minimum_order_amounts.delivery` (object) Minimum order subtotal for delivery orders. Example: {"amount":1500,"currency":"USD"} - `minimum_order_amounts.delivery.amount` (integer, required) Monetary value in the smallest currency unit (cents for USD). Example: 1299 = $12.99. Example: 1500 - `minimum_order_amounts.delivery.currency` (string, required) ISO 4217 currency code. Example: "USD" - `minimum_order_amounts.pickup` (object) Minimum order subtotal for pickup orders. Example: {"amount":500,"currency":"USD"} - `minimum_order_amounts.curbside` (object) Minimum order subtotal for curbside orders. - `minimum_order_amounts.kiosk` (object) Minimum order subtotal for kiosk orders. - `business_hours` (array) Weekly business hours for this location. One entry per day of the week. Hours are in the location's local timezone. - `business_hours.day_of_week` (string, required) Day of the week. Enum: "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" - `business_hours.open_time` (string, required) Opening time in HH:MM format (24-hour, location local time). Example: "06:00" - `business_hours.close_time` (string, required) Closing time in HH:MM format (24-hour, location local time). A close_time of "00:00" with open_time of "00:00" indicates 24-hour operation. Example: "23:00" - `business_hours.is_closed` (boolean, required) Whether the location is closed on this day. When true, open_time and close_time are ignored. ## Response 401 fields (application/json): - `error` (object, required) - `error.code` (string, required) Machine-readable error category. Use this field for programmatic error handling (e.g., retry on RATE_LIMIT_ERROR, re-authenticate on AUTHENTICATION_ERROR). Enum: "AUTHENTICATION_ERROR", "INVALID_REQUEST_ERROR", "RATE_LIMIT_ERROR", "NOT_FOUND_ERROR", "CONFLICT_ERROR", "INTERNAL_ERROR" - `error.message` (string, required) Human-readable error description. Safe to display to developers in logs or debugging tools. Do not display to end users. - `error.detail` (string) Additional context about the error, including suggestions for resolution. May include specific field values or limits that were exceeded. - `error.request_id` (string, required) Unique identifier for this request. Include this value when contacting Tote Developer Support for troubleshooting. - `error.field` (string,null) JSON pointer to the field that caused the error. Null if the error is not field-specific. Example: "items[0].modifier_groups[1].modifiers" - `error.change_reasons` (array) Machine-readable reasons why the resource state changed, causing the conflict. Present on checkout 409 responses when expected_total does not match the current total. Clients should re-fetch the cart and call POST /carts/{cart_id}/calculate to get the updated total before retrying checkout. Enum: "PROMO_EXPIRED", "DISCOUNT_CHANGED", "ITEM_PRICE_CHANGED", "ITEM_UNAVAILABLE", "FEE_CHANGED" ## Response 404 fields (application/json): - `error` (object, required) - `error.code` (string, required) Machine-readable error category. Use this field for programmatic error handling (e.g., retry on RATE_LIMIT_ERROR, re-authenticate on AUTHENTICATION_ERROR). Enum: "AUTHENTICATION_ERROR", "INVALID_REQUEST_ERROR", "RATE_LIMIT_ERROR", "NOT_FOUND_ERROR", "CONFLICT_ERROR", "INTERNAL_ERROR" - `error.message` (string, required) Human-readable error description. Safe to display to developers in logs or debugging tools. Do not display to end users. - `error.detail` (string) Additional context about the error, including suggestions for resolution. May include specific field values or limits that were exceeded. - `error.request_id` (string, required) Unique identifier for this request. Include this value when contacting Tote Developer Support for troubleshooting. - `error.field` (string,null) JSON pointer to the field that caused the error. Null if the error is not field-specific. Example: "items[0].modifier_groups[1].modifiers" - `error.change_reasons` (array) Machine-readable reasons why the resource state changed, causing the conflict. Present on checkout 409 responses when expected_total does not match the current total. Clients should re-fetch the cart and call POST /carts/{cart_id}/calculate to get the updated total before retrying checkout. Enum: "PROMO_EXPIRED", "DISCOUNT_CHANGED", "ITEM_PRICE_CHANGED", "ITEM_UNAVAILABLE", "FEE_CHANGED" ## Response 429 fields (application/json): - `error` (object, required) - `error.code` (string, required) Machine-readable error category. Use this field for programmatic error handling (e.g., retry on RATE_LIMIT_ERROR, re-authenticate on AUTHENTICATION_ERROR). Enum: "AUTHENTICATION_ERROR", "INVALID_REQUEST_ERROR", "RATE_LIMIT_ERROR", "NOT_FOUND_ERROR", "CONFLICT_ERROR", "INTERNAL_ERROR" - `error.message` (string, required) Human-readable error description. Safe to display to developers in logs or debugging tools. Do not display to end users. - `error.detail` (string) Additional context about the error, including suggestions for resolution. May include specific field values or limits that were exceeded. - `error.request_id` (string, required) Unique identifier for this request. Include this value when contacting Tote Developer Support for troubleshooting. - `error.field` (string,null) JSON pointer to the field that caused the error. Null if the error is not field-specific. Example: "items[0].modifier_groups[1].modifiers" - `error.change_reasons` (array) Machine-readable reasons why the resource state changed, causing the conflict. Present on checkout 409 responses when expected_total does not match the current total. Clients should re-fetch the cart and call POST /carts/{cart_id}/calculate to get the updated total before retrying checkout. Enum: "PROMO_EXPIRED", "DISCOUNT_CHANGED", "ITEM_PRICE_CHANGED", "ITEM_UNAVAILABLE", "FEE_CHANGED" ## Response 500 fields (application/json): - `error` (object, required) - `error.code` (string, required) Machine-readable error category. Use this field for programmatic error handling (e.g., retry on RATE_LIMIT_ERROR, re-authenticate on AUTHENTICATION_ERROR). Enum: "AUTHENTICATION_ERROR", "INVALID_REQUEST_ERROR", "RATE_LIMIT_ERROR", "NOT_FOUND_ERROR", "CONFLICT_ERROR", "INTERNAL_ERROR" - `error.message` (string, required) Human-readable error description. Safe to display to developers in logs or debugging tools. Do not display to end users. - `error.detail` (string) Additional context about the error, including suggestions for resolution. May include specific field values or limits that were exceeded. - `error.request_id` (string, required) Unique identifier for this request. Include this value when contacting Tote Developer Support for troubleshooting. - `error.field` (string,null) JSON pointer to the field that caused the error. Null if the error is not field-specific. Example: "items[0].modifier_groups[1].modifiers" - `error.change_reasons` (array) Machine-readable reasons why the resource state changed, causing the conflict. Present on checkout 409 responses when expected_total does not match the current total. Clients should re-fetch the cart and call POST /carts/{cart_id}/calculate to get the updated total before retrying checkout. Enum: "PROMO_EXPIRED", "DISCOUNT_CHANGED", "ITEM_PRICE_CHANGED", "ITEM_UNAVAILABLE", "FEE_CHANGED"