v1Resources/Locations/patchUpdate a location
Update a location
Edits an existing location's business details — address, categories, Google Business Profile attributes, services, and hours. Pass only the fields you want to change; a field you do pass replaces its current value entirely (an empty string clears a text field, a full new list replaces an existing one). The country can't be changed after creation. Saved changes are automatically queued to sync out to the connected directories and listings.
patch
locations:write/api/v1/locations/{id}Query parameters
idstringrequired
The location to update.
Request body
namestringoptional
The location's business name.
descriptionstringoptional
A short description of the business.
taglinestringoptional
A short tagline/slogan for the business.
storeCodestringoptional
Your internal store code / reference for this location.
logoUrlstringoptional
URL of the location's logo image.
languageCodestringoptional
The primary language of the listing, as a code (e.g. "en").
streetstringoptional
Street address.
street1stringoptional
Street address, line 2.
citystringoptional
City.
stateIsostringoptional
State or region, as an ISO code (e.g. "CA").
postalCodestringoptional
Postal or ZIP code.
latitudenumberoptional
Latitude. If you change the address without also setting this, it's re-derived automatically.
longitudenumberoptional
Longitude. If you change the address without also setting this, it's re-derived automatically.
phonestringoptional
Phone number.
additionalPhonesarray of stringoptional
Any additional phone numbers beyond the primary one.
websitestringoptional
Website URL.
businessEmailstringoptional
A public contact email for the business.
categoryIdstringoptional
General category id — look it up with GET /api/v1/locations/categories.
categoryNamestringoptional
General category display name.
publisherCategoriesobjectoptional
Per-publisher PRIMARY category — currently only google is supported here (an id and a name are both required; passing one alone would clear the category). Facebook/Apple/Bing can only be changed in the location editor. Look up google's id/name pair with GET /api/v1/locations/publisher-categories.
googleobjectoptional
idstringoptional
namestringoptional
additionalCategoriesarray of objectoptional
Up to 9 extra categories, each an { id?, name }. A bare name is accepted and its id is resolved from the category catalog where one matches. Look up ids yourself with GET /api/v1/locations/categories.
idstringoptional
namestringoptional
attributesobjectoptional
Google Business Profile attributes, as a map of attribute id to value (e.g. { "attributes/wi_fi": "free" }) — REPLACES the whole set, so read the current ones from GET /api/v1/locations/{id} and pass back everything you want kept. An id with no valid Google representation for this location's category is dropped and reported back in rejectedAttributes rather than failing the whole request. There's no endpoint listing which attribute ids are valid for a category — that's Google's own Business Profile attribute reference, not Synup's.
servicesarray of objectoptional
The services or products this location offers — replaces the existing list.
namestringoptional
descriptionstringoptional
pricenumberoptional
currencystringoptional
googleServiceTypeIdstringoptional
ownerNamestringoptional
The owner's name.
menuUrlstringoptional
URL of the business's menu.
yearEstablishednumberoptional
The year the business was established (e.g. 2012).
tagsarray of stringoptional
Internal tags for your own organization — not shown publicly. Replaces the existing list.
labelsarray of stringoptional
Internal labels for this location. Replaces the existing list.
regularHoursarray of objectoptional
The weekly regular-hours schedule — replaces the existing schedule entirely. One entry per day of the week.
daystring (MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY | SATURDAY | SUNDAY)optional
closedbooleanoptional
periodsarray of objectoptional
openstringoptional
closestringoptional
moreHoursarray of objectoptional
Extra hour types beyond regular hours (delivery, takeout, happy hour, etc.), replaces the existing list.
specialHoursarray of objectoptional
One-off date overrides — holiday closures or a single day's special hours — replaces the existing list. Any calendar date works, not just named holidays.
applyToPublishersarray of string (google | facebook | apple | bing)optional
Change these values for specific publishers only instead of the shared default every publisher inherits.
Response
dataobjectoptional
locationobjectoptional
The full business profile for one location: address, hours, categories, attributes, services, media, and status — everything update_location can change, plus what create returned.
idstringoptional
Unique identifier for the location.
namestringoptional
The location's business name.
descriptionstringoptional
A description of the business, or null.
taglinestringoptional
A short tagline/slogan for the business, or null.
storeCodestringoptional
Your internal store code / reference for this location, or null.
logoUrlstringoptional
URL of the location's logo image, or null.
streetstringoptional
Street address, line 1, or null.
street1stringoptional
Street address, line 2, or null.
citystringoptional
City.
statestringoptional
State or region.
postalCodestringoptional
Postal or ZIP code, or null.
countrystringoptional
Country, as an ISO-3166-1 alpha-2 code, or null.
latitudenumberoptional
Latitude, or null.
longitudenumberoptional
Longitude, or null.
phonestringoptional
Primary phone number, or null.
additionalPhonesarray of stringoptional
Any additional phone numbers beyond the primary one.
websitestringoptional
The location's website URL, or null.
businessEmailstringoptional
A public contact email for the business, or null.
categoryNamestringoptional
The general category's display name, or null.
primaryCategoryDisplaystringoptional
The effective primary category's display name — per-publisher (Google) if set, else general — or null.
primaryCategoryGooglestringoptional
The location's primary Google category id (gcid), or null.
additionalCategoriesarray of objectoptional
Up to 9 extra categories, each with an id (when resolved) and a display name.
idstringoptional
namestringoptional
attributesarray of objectoptional
Google Business Profile attributes, as the stored { id, value } list.
idstringoptional
valueobjectoptional
The attribute's value — a boolean for yes/no attributes, a string for single-choice ones, or an object with setValues/unsetValues for multi-select.
servicesarray of objectoptional
The services or products this location offers.
namestringoptional
descriptionstringoptional
pricenumberoptional
currencystringoptional
googleServiceTypeIdstringoptional
ownerNamestringoptional
The owner's name, or null.
menuUrlstringoptional
URL of the business's menu, or null.
yearEstablishednumberoptional
The year the business was established, or null.
tagsarray of stringoptional
Internal tags for your own organization — not shown publicly.
labelsarray of stringoptional
Internal labels for this location.
regularHoursarray of objectoptional
The weekly regular-hours schedule, or null.
daystring (MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY | SATURDAY | SUNDAY)optional
closedbooleanoptional
periodsarray of objectoptional
moreHoursarray of objectoptional
Extra hour types beyond regular hours (delivery, takeout, etc.), or null.
specialHoursarray of objectoptional
One-off date overrides — holiday closures or a single day's special hours — or null.
mediaByCategoryobjectoptional
Media items grouped by category (e.g. EXTERIOR, INTERIOR, FOOD_AND_DRINK, LOGO, TEAMS). Each item has a url, and optionally a label, kind (PHOTO or VIDEO), source, starred flag, and asset key.
clientIdstringoptional
ID of the client this location belongs to, or null.
archivedbooleanoptional
Whether the location is archived.
scheduledArchiveAtstringoptional
When archival was requested (also the token cancel-archive matches on), as an ISO 8601 timestamp, or null if none is pending.
verificationStatusstring (verified | pending | unverified | unknown)optional
Google verification state: verified, pending, unverified, or unknown, or null.
rejectedAttributesarray of stringoptional
Attribute ids from the request that were NOT written — either they have a dedicated field of their own, or their value had no valid Google representation. Present only when at least one was rejected.
Errors
400The request is missing a required parameter or is otherwise malformed.
401Missing, invalid, expired, or revoked API key.
403The key lacks the required scope, or isn't authorized for this client/location.
404The resource wasn't found, or doesn't belong to your agency.
422The request is missing a required parameter or is otherwise malformed.
429Too many requests. Retry after the number of seconds in the Retry-After header.
patch/api/v1/locations/{id}
Your API key
id *
Request body
{
"data": {
"location": {
"id": "loc_456",
"name": "Acme Dental — Downtown",
"tagline": "Gentle care, on time",
"city": "Austin",
"state": "TX",
"clientId": "cli_123"
},
"rejectedAttributes": []
}
}Guides that use this endpoint
- What Is a Business Listings API?A business listings API manages a business's name, address, hours and more across many publishers at once, with sync status and duplicate detection built in.
- Business Listings API: Complete Developer GuideHow a business listings API works and how to create, update, sync and monitor locations across Google, Apple, Bing and directories with the Synup API.
- Google Business Profile API vs a Listings Management APIHow Google's Business Profile API compares with a listings management API on scope, access, sync status, duplicates and reviews, and when to use each.
- How to Manage Business Listings ProgrammaticallyKeep business listings accurate from your own system with the Synup API. Covers change detection, idempotent updates, hours, photos and sync reporting.
- Update a Location's Opening Hours via APISet a weekly schedule with the Synup API, handle split shifts and 24-hour days, and avoid the read-versus-write time format that breaks naive diffs.
- How to Update Business Information Across Google, Apple, Bing and DirectoriesPush one business-information change to Google, Apple, Bing and the directory network through a single API call, and verify it reached each publisher.
- How Listing Syndication WorksListing syndication takes one business record, translates it into each publisher's format, and pushes it out asynchronously, which is why sync status matters.
- How to Build an AI Agent for Local SEOBuild an AI agent that audits and fixes listings, tracks local rankings, checks AI visibility and drafts review replies with Synup's MCP server or REST tools.
- How to Manage Thousands of Business Locations via APIDesign a sync job for thousands of locations on the Synup API with cursor pagination, tags, rate-limit handling, an id map and rollup health checks.
- Temporarily Close a Business Location via APIMark a location closed for a holiday or a renovation with specialHours, and why you must not use archival for a temporary closure.
- How Google Business Profile Synchronization WorksGoogle Business Profile sync rests on an owner's OAuth consent, matching a location to the right Google listing, then a write-and-verify loop.
- How to Connect and Manage Google Business Profiles via APIConnect a Google Business Profile to a location, match the account's listings, keep the profile in sync and handle reconnects with the Synup API.
- Building Publisher Integrations Directly vs Using SynupWhat it really costs to integrate Google, Apple, Bing and directories yourself, versus one API, and how to decide between them or combine both.
- Local SEO APIs: What Developers Actually NeedA practical checklist of what a local SEO API must cover, from listings and sync status to reviews, rank tracking and AI visibility, mapped to endpoints.