All skills
wix avatar

/wix-manage

@4895cc9 official
by Wix.comwix/skills33 stars
33

REST recipes to configure and manage a Wix site's business solutions — stores, bookings, payments, CMS, and more. Open the matching recipe for the exact endpoint, method, and payload before calling — never guess a Wix API, never write Wix dashboard URL from memory. Routes to: stores, bookings, get-paid, CMS, contacts, forms, media, app-installation, pricing-plans, restaurants, ricos rich-content, sites, blog, calendar, domains, events, site-properties, ecommerce, marketing, google-ads, google-business-profile, analytics, accessibility, seo, dashboard-navigation.

Use this Skill: https://skilld.dev/gh/wix/skills/wix-manage

This session only. Nothing lands on disk.

referencescontactsupdate-a-contact.md

≈1.2k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Update a Contact

Description

Changes fields on a contact that already exists — its email, phone, name, or address.

API Endpoints

  • POST https://www.wixapis.com/contacts/v5/contacts/search — locate the contact
  • PATCH https://www.wixapis.com/contacts/v5/contacts/{contactId} — change its fields
  • POST https://www.wixapis.com/contacts/v5/contacts/{contactId}/addresses — add one address

Contacts has two live versions. Use the v5 endpoints above for updates; the v4 update takes a different, more deeply nested body, and mixing the two shapes is rejected with 400 {"message":"Expected an object"}.

Steps

1. Locate the contact with Search Contacts, not Query Contacts

When the user identifies a contact by name — "my contact Jordan Lee" — the lookup is Search Contacts. Query Contacts filters on a small closed set of fields that does not include the contact's name, so a query filtered by name is rejected:

HTTP 400 {"message":"value Field 'name.first' is not declared as filterable",
 "details":{"validationError":{"fieldViolations":[{"field":"value",
   "description":"Field 'name.first' is not declared as filterable"}]}}}

Search Contacts takes a free-text expression, and matches on names. Note the doubled search — the outer one is the search request, the inner one is the free-text clause:

{ "search": { "search": { "expression": "Jordan Lee" } } }

Read both id and revision off the contact it returns. Step 2 needs both. Query Contacts is still the right call when you already have an email address, a phone number or an id to filter on.

2. Send the update with the contact's current revision

Copy this body and change the values. Only the fields you send are being set; id and revision identify which contact and which version you are updating:

{
  "contact": {
    "id": "<contact id from step 1>",
    "revision": "<revision from step 1>",
    "email": { "email": "jordan.lee@newmail.com" }
  }
}

Swap email for phone ({ "phone": { "phone": "+1-212-555-0100" } }) or name to change those instead. revision changes on every write, so re-read it if an update conflicts.

3. Add an address with Add Contact Address

To attach one more address, post it to the contact's addresses sub-resource rather than sending the whole contact — the address is appended, so existing addresses survive:

{
  "revision": "<revision from step 1>",
  "address": {
    "address": {
      "addressLine": "350 Fifth Avenue",
      "city": "New York",
      "subdivision": "US-NY",
      "postalCode": "10118",
      "country": "US"
    }
  }
}

Note the doubled address here too: the outer object is the contact's address entry, which can carry a tag, and the inner one is the postal address itself.

tag is one of OTHER, HOME, WORK, BILLING, SHIPPING, and that list is closed — there is no "untagged" or "none" member. When the user did not say what kind of address it is, leave tag out, exactly as above; inventing a value for that case is rejected:

HTTP 400 {"message":"address is invalid:
`-- tag enum must be in [UNKNOWN_ADDRESS_TAG(0), OTHER(1), HOME(2), WORK(3), BILLING(4), SHIPPING(5)]"}

4. Write subdivision in ISO 3166-2 form

subdivision is the 2-letter country code, a hyphen, then 1-3 characters for the state, region, prefecture or province: US-NY, GB-ENG, FR-976. A bare state code is rejected, on updates as well as on creates:

HTTP 400 {"message":"address is invalid:
`-- address is invalid:
    `-- subdivision is not a valid subdivision code",
 "details":{"validationError":{"fieldViolations":[{
   "field":"address.address.subdivision",
   "description":"is not a valid subdivision code","violatedRule":"FORMAT",
   "data":{"type":"SUBDIVISION"}}]}}}

The Contacts reference describes this field as a "short code (2 or 3 letters)" and gives NY as the example, which the server does not accept. Use the hyphenated form.

country is the plain ISO 3166-1 alpha-2 code — US, no hyphen. Only subdivision carries the country prefix.

Related

Source: SKILL.md on GitHub

1 warning1d4 checks · Risk SAFE
  • Gen Agent Trust Hub1d

    The wix-manage skill is an extensive collection of management recipes for Wix sites, covering business solutions such as eCommerce, Bookings, SEO, and site provisioning. It utilizes official Wix REST endpoints and incorporates robust safety patterns, including mandatory user confirmation for sensitive operations and careful validation of site data before mutation.

  • Socket1d

    No alerts

  • Snyk1d

    Risk: MEDIUM · 1 issue

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 4895cc9. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated yesterday
compatibility
Requires Wix REST API access (API key or OAuth).
  • wix
  • rest-api
  • ecommerce
  • bookings
  • cms
  • contacts
  • blog
  • domains
  • restaurants
  • site-configuration
  • api-integration

README badge

README badge for wix/skills/wix-manage

REST API operations for configuring Wix business solutions including stores, bookings, CMS, contacts, domains, and ecommerce. Routes to site setup, entity management (products, services, staff), bulk administrative operations, and server-to-server integrations across Wix's business app ecosystem.

Generated from the current SKILL.md.

Do I need API credentials to use these recipes?
Yes. The skill requires Wix REST API access via either an API key or OAuth token to execute any management operations.
Can I use these recipes to display data on my site frontend?
No. These recipes are for backend REST API operations only — site configuration, entity management, and administrative tasks. They do not cover frontend development or displaying data to users.
What business domains do these recipes cover?
The skill covers stores, bookings, payments, CMS, contacts, forms, media, apps, pricing plans, restaurants, rich content, sites, blogs, calendars, domains, and site properties.
Do these recipes handle OAuth authentication with external services like Google Calendar?
Yes. The external calendar integration recipe covers OAuth-based setup with Google Calendar, Microsoft Outlook, and Apple Calendar for bidirectional event sync.

Generated from the current SKILL.md. These answers refresh after source changes.