The business info of a site is a set of Site Properties: the business profile (name, description, company ID), the public contact details (email, phone, fax, address) and the business hours. These are the details the site and its apps show as the business's public info, and the ones the dashboard settings show as business info.
| The user wants to... | Call |
|---|---|
| See the current details | Get Site Properties |
| Change the email, phone, fax or address, or remove one | Update Business Contact |
| Change the business name, description or company ID | Update Business Profile |
| Add, change or remove opening hours or a holiday closure | Update Business Schedule |
A request like "set the name, phone and email" needs two calls: the name goes through Update Business Profile, the phone and email through Update Business Contact. Each update method rejects the other method's fields with 400.
Not covered here:
description) or a text on a site page, which is edited in the site editor.fields.paths, the top-level field names you change. A request without it fails with 400 "Illegal request - No updates on request body".paths: ["phone", "email"] with only phone in the body deletes the email.address is one value. The mask takes address, never address.city (400 "Fields Vector(address.city) are not allowed"). The address you send replaces the stored one: an address with only city clears the street, zip, state and country. To change part of the address, read it, change the parts, and send the whole object, isPhysical and googleFormattedAddress included (see Change the address).periods and specialHourPeriod with what you send, and it ignores a field mask. To add or change one day, read the schedule, change it, and send all of it back.2xx with an empty body {} means the update is saved. Every update method returns {}. Do not make an extra call only to check a 2xx update. When you show the user the stored values, a GET right after the update already returns them.@, a time like 9am, or a close time before the open time is stored as sent with 2xx. Check the values before you send them: email name@domain, times HH:MM from 00:00 to 24:00, a country as a 2-letter ISO 3166-1 code. A 3-letter country code such as USA fails with 500.To read only some fields, repeat the fields query parameter:
GET https://www.wixapis.com/site-properties/v4/properties?fields=email&fields=phone&fields=address.
The business info is at the top level of properties:
A field that was never set is missing from the response. A removed address is missing too. siteDisplayName is the site's name in My Sites and the dashboard, not the business name. Renaming the site is a separate task that this recipe does not cover. The response also holds the regional fields (paymentCurrency, timeZone, language, locale) and others that this recipe does not change.
Update Business Contact: POST https://www.wixapis.com/site-properties/v4/properties/business-contact. Mask paths: email, phone, fax, address.
Change the email and phone:
phone is one free-text string. To change only the country prefix (for example to +34), read the current phone, replace its prefix, and send the whole new number.
Change the address: send all parts of the address. For a change to one part ("only the street changed"), read properties.address first, copy the whole object, change that part, and send it back. Two fields are easy to lose:
isPhysical: copy it from the read. Left out, it becomes false.googleFormattedAddress: the address as one line. When the read has one, write the new address in it. Copied unchanged, it keeps the old address. Left out, it becomes empty.Put the house number in streetNumber and the street name in street. country is a 2-letter code (US, GB, FR).
Remove a detail: name it in the mask and leave it out of the body. This removes the address and keeps the email and phone:
Update Business Profile: POST https://www.wixapis.com/site-properties/v4/properties/business-profile. Mask paths: businessName, description, companyId (the company number from the local authorities, shown on invoices and price quotes), and logo and siteDisplayName, which this recipe does not change. logo takes the path of an image that is already in the site's Wix Media, without the media base URL; this recipe does not cover uploading one.
This method rejects contact fields (email, phone, address) and fields it does not have (tagline, categories) with 400 "Illegal request - Fields Vector(<field>) are not allowed for updateBusinessProfile".
Update Business Schedule: POST https://www.wixapis.com/site-properties/v4/properties/business-schedule. No field mask. The body is the whole schedule:
periods: the weekly hours, one entry per open period. Days are MONDAY to SUNDAY. Times are HH:MM, 24-hour, 00:00 to 24:00. A period that ends after midnight closes on the next day ("openDay": "FRIDAY", "openTime": "20:00", "closeDay": "SATURDAY", "closeTime": "02:00"). A day with two periods (a lunch break) has two entries. A closed day has no entry.specialHourPeriod: holiday closures and other exceptions. Each entry is the time from startDate to endDate, as ISO 8601 date-times in UTC. isClosed: true means closed for that time, false means open. comment is optional text. To close for whole days, start at local midnight of the first day and end at local midnight after the last day, converted to UTC with the site's properties.timeZone. For a site in America/New_York (UTC-5 in winter), closed on December 25, 2026: "startDate": "2026-12-25T05:00:00Z", "endDate": "2026-12-26T05:00:00Z".To add or change hours, run the GET first, change properties.businessSchedule, and send both arrays. This keeps Monday to Friday and the holiday closure, and adds Saturday:
A body with only periods deletes every holiday closure, and a body with only specialHourPeriod deletes the weekly hours.
To remove all hours from the site, send { "businessSchedule": { "periods": [], "specialHourPeriod": [] } }. A later GET returns the two arrays empty.
Last updated: 3 November 2026