Generated banner for Wix Manage
Generated logo for Wix Manage

Wix Manage

WixOfficialPublished by Wix

  • Skill
  • Tool integration
  • Automation and integrations
  • MIT
  • Low risk

From the author

REST recipes to configure and manage a Wix site's business solutions — stores, bookings, donations, 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: automations, stores, bookings, donations, get-paid, CMS, contacts, forms, media, app-installation, custom-apps, pricing-plans, restaurants, ricos rich-content, sites, collaborators, blog, calendar, domains, events, site-properties, ecommerce, marketing, online-programs, google-ads, google-business-profile, analytics, accessibility, seo, dashboard-navigation.
— the description by Wix

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The wix-manage skill provides a structured library of REST API recipes designed to help developers and agents interact with Wix business solutions. It covers a wide range of administrative and configuration tasks, including site setup, entity management, SEO, analytics, accessibility, and dashboard navigation. By providing specific endpoint, method, and payload patterns, it ensures accurate API usage for backend integrations, data synchronization, and automated site management.

What it does

  • Provides standardized REST API recipes for configuring Wix business apps like Stores, Bookings, and CMS.
  • Facilitates administrative tasks such as bulk updates, contact labeling, and data migrations.
  • Offers guidance on managing SEO tags, URL redirects, and Google Search Console connections.
  • Enables programmatic accessibility scanning and reporting for Wix sites.
  • Generates direct dashboard navigation links for various Wix business solutions.
  • Supports backend integrations through server-to-server automations and data synchronization.

When to use it

  • When you need to perform administrative or configuration tasks on a Wix site via REST API.
  • When you need to retrieve or update business data like products, services, or contacts.
  • When you need to provide a user with a direct link to a specific page in their Wix dashboard.
  • When you are building backend integrations or automations for a Wix site.
  • When you need to audit or manage SEO, accessibility, or analytics configurations.

Advantages

  • Reduces errors by providing exact API endpoints, methods, and payload structures.
  • Eliminates the need to guess API paths or manually construct dashboard URLs.
  • Ensures consistent and reliable interaction with Wix business entities.
  • Simplifies complex workflows like multi-step booking service setup or accessibility scanning.
  • Provides a clear separation between management operations and frontend display logic.

Usage examples

“How can I update the SEO title for my homepage?”
The agent uses the Manage SEO Tags recipe to identify the homepage, retrieve current tags, and apply the requested update via the appropriate API endpoint.
“Where can I find my site's booking calendar in the dashboard?”
The agent uses the Bookings Dashboard Navigation recipe to generate a direct link to the calendar page within the user's Wix dashboard.
“Scan my site for accessibility issues.”
The agent initiates an accessibility scan using the Accessibility Scans API, polls for completion, and reports findings categorized by severity.
“List all my installed Wix apps.”
The agent calls the List Installed Apps API and returns a summary of all apps currently active on the site.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/wix/wix-manage/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip wix-manage.zip -d .agents/skills

Documentation by Wix

Management Recipes Index

Standard call shape for every curl example across these recipes. The <AUTH> placeholder in example curls is shorthand for the Authorization header only; body-bearing calls also need Content-Type: application/json.

What Are Management Recipes?

Management recipes are for REST API operations that configure, set up, and manage Wix business entities on your site. These recipes use REST API calls and are designed for:

  • Site setup and configuration — Initial setup of stores, bookings, payments, and other business apps

  • Entity management — Creating, updating, and deleting products, services, staff members, pricing plans

  • Administrative operations — Bulk updates, contact labeling, data migrations

  • Backend integrations — Server-to-server automations, webhooks, data synchronization

These recipes do NOT cover frontend development or SDK usage for displaying data to users.


App Installation

Install Wix Apps

Installs Wix apps on a site using Apps Installer API. Covers enabling Velo (Wix Code), app installation, and common app definition IDs.

List Installed Apps

Lists all apps installed on a site using Apps Installer API. Useful for verifying app installations before making API calls and diagnosing authorization errors.

App Management Dashboard Navigation

"Builds direct links to the app-management dashboard pages on manage.wix.com — the App Market and the installed-apps management page. Pairs installed apps with the List Installed Apps read API. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Custom Apps

Use App Tools

"Discovers and runs app tools, the actions and lookups that apps installed on a Wix site expose to AI agents, for example converting a price with a pricing app or tracking a package with a shipping app. Covers listing the site's app tools, choosing one by its description, and running it with a payload built from its input schema. Use when the user asks for something an installed app provides rather than a built-in Wix feature, asks what their apps can do, or names an app or app tool."


SEO

Manage a Wix Site's SEO Tags

Read and update SEO titles and tags at the right level, and publish static-page SEO changes. "Change my site's SEO title" names no page, so its default is one question and no write, also under instructions to work autonomously or pick defaults: ask whether the user means the homepage, a specific page, or a page-type pattern, with no API call; site-level tags accept meta tags only, never titles. Discover item IDs and pattern variables, preserve existing tags, and report resolved tags with their sources.

Manage URL Redirects on a Wix Site

"Retrieve, create, and delete URL redirects on a Wix site using the public SEO Redirects API. Covers exact and group redirects, language-scoped redirects for multilingual sites, bulk creates of up to 100 and bulk deletes of up to 500, and the change flow for a redirect that already exists. This API has no query, search, or update method: List Redirects is the only read-many. Redirects do not chain, so creating one that points at a path another redirect starts from permanently deletes that other redirect; list and check before every write."

Manage Google Search Console for a Wix Site

"Connect a Wix site to Google Search Console and drive its setup through the public GSC Connection and Site Readiness APIs: check connection and readiness, start the Google authorization, verify ownership, add the property, submit the sitemap, request indexing, read search performance, run URL inspection, recover a stale connection, or disconnect. The site owner authorizes in their own browser via a single-use connect URL."

Generate AI SEO Suggestions for a Wix Site

"Generate AI-written SEO text for a Wix site through the public Tag Suggestions and Page Optimization APIs: title tag and meta description options for a page, alt text for the images of a page, store product, or blog post (one image or up to 20 per call), corrected heading levels for a page's headings, and a whole-page rewrite of title, description, headings, and body text aimed at the page's focus keyword, returned as before/after pairs. Use it when the user asks for SEO title or meta description options or ideas, or wants to improve, optimize, audit, or write the SEO text of a page or the homepage: Wix's AI writes the texts. Suggestions are returned for review; applying one is a separate SEO tags write."


Accessibility

Scan a Wix Site for Accessibility Issues

Run a Wix accessibility scan for a full site, one page, or every page in any supported page collection, including products, blog posts, booking services, events, and restaurant pages. Poll the asynchronous scan to completion, report failed pages separately, retrieve prioritized findings, and use the returned fix guidance to help the user resolve and verify issues.


Analytics

Query Site Analytics

Retrieve a Wix site's analytics through the Semantic Model API. Covers listing semantic models, inspecting a model's schema (measures, dimensions, parameters), and querying model data with a required time interval, filters, sorting, paging, and human-readable formatting.

Analytics Dashboard Navigation

"Builds direct links to Wix Analytics dashboard pages on manage.wix.com — highlights, reports, per-domain overviews (traffic, behavior, sales, marketing), and performance insights/benchmarks. Pairs analytics data with its read API so you can answer a question via API and hand back a 'see it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Blog

How to Create Blog Posts

Creates and publishes blog posts using Blog Posts API. Covers resolving the required author memberId (including creating an author member when the site has none), Ricos rich content format, image upload via Media Manager, category/tag assignment, and bulk post creation.

Find and Update Blog Posts

"Finds a site's live blog posts and changes existing posts and drafts through the Wix Blog REST APIs. Covers looking up published posts by title, publish date, category or tag (including the newest and the first post ever), editing an existing post (adding or changing a sentence, paragraph or link in its text, its cover image, excerpt, categories and tags), publishing a draft, moving a live post back to drafts, and deleting or restoring posts. Use whenever the user names a post that already exists on the blog: to find it, change its content, publish, unpublish or delete it; writing a new post is How to Create Blog Posts."

Blog Dashboard Navigation

"Builds direct links to Wix Blog dashboard pages on manage.wix.com — posts list (published and draft tabs), categories, tags, writers, comment moderation, blog analytics, monetization, and settings. Pairs each main Blog entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Bookings

Booking Service Policy Setup

Sets up booking policies, cancellation rules, and waitlist configuration using the Booking Policies API — query for the (default) bookingPolicy entity, then PATCH it with its revision. Covers cancellationPolicy, reschedulePolicy, booking-notice limits, waitlistPolicy, and participants limits — e.g. "customers can cancel up to 24 hours before".

Bookings Staff Setup

"Creates staff members and configures custom working hours using Staff API + Calendar Events API. Critical two-step process: create staff → assign schedule → create working hours events."

Create and Update Booking Services

"Creates and updates Wix Bookings services of every type — appointments, classes and courses — from a plain request such as 'a 60-minute consultation for $75', 'a yoga class for 12 people every Tuesday' or 'a 6-week photography course'. Covers choosing the service type, defaults for what the request leaves out, pricing (free, fixed, free-to-paid), staff, capacity, duration, categories, visibility, images, scheduling class and course sessions on the calendar, and changing existing services."

Check Bookings Availability (and Diagnose Issues)

"Answers whether an appointment-based Wix Bookings service currently has bookable availability — the primary question — and diagnoses the cause only when there's no availability or the owner asks why. To diagnose, first rules out service-level blockers the availability endpoint can't see (service hidden, online booking off), then runs DiagnoseAvailability for ordered, machine-readable staff/setup reasons, with a manual fallback for booking-policy and capacity causes. Use when someone asks whether a service has availability, or why a service shows no times / customers can't book it."

End-to-End Booking Flow

Books and settles appointments, classes and courses with the site owner's credentials — an operator managing bookings, or server-side code booking as the owner. Covers service discovery, availability with Time Slots V2, creating the booking, and settling it by direct confirmation or by taking payment through eCommerce checkout. A visitor booking for themselves needs a visitor token instead; this recipe links that path.

External Calendar Integration

OAuth-based integration with Google Calendar, Microsoft Outlook, and Apple Calendar. Covers authentication flows, sync configuration, and bidirectional event management.

Multi-Resource Service Creation

Creates resource types and individual resources using Resources API. Enables services that require multiple resources (rooms + equipment + staff) with automatic allocation.

Bookings Dashboard Navigation

"Builds direct links to Wix Bookings dashboard pages on manage.wix.com — services list, edit a specific service, calendar, booking list, staff, availability, resources, and settings pages. Pairs each main Bookings entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Calendar

Configure Default Business Hours

Uses Calendar Events API to create WORKING_HOURS events on the business schedule. Covers the critical distinction between Calendar Events API (correct) vs Site Properties API (incorrect) for setting base availability.

Dashboard links for calendar surfaces (availability, default business hours) are in Bookings Dashboard Navigation.


CMS

CMS Data Items CRUD

"Add, query, update, and delete items in CMS collections, one at a time or in bulk. Also covers counting items, upserting with bulk save, truncating a collection, aggregating data with a pipeline, linking items through single- and multi-reference fields, and reading items with their referenced items expanded."

CMS eCommerce Catalog Integration

The recommended way to sell existing CMS collection items (tickets, bookings, memberships) through Wix checkout. Add the CATALOG plugin to convert any CMS collection into purchasable products with cart and payment integration.

CMS Schema Management

Create and modify CMS collection structures. Covers listing collections, creating collections with fields, adding/removing fields (including single- and multi-reference fields that link two collections), and updating collection settings.

CMS Draft & Publish Workflow (Draft Items plugin)

"Interact with CMS collections that gate their items behind a draft/publish workflow via the Draft Items plugin. Covers detecting the plugin, locating the paired drafts collection, reading published vs draft items, authoring/editing drafts, and publishing, unpublishing, reverting, and deleting items. Key endpoints: /wix-data/v2/items/publish-draft, /wix-data/v2/items/unpublish, /wix-data/v2/collections/add-draft-items-plugin, and the paired drafts collection referenced by draftItemsPluginOptions.draftsCollectionId."

CMS Dashboard Navigation

"Builds direct links to the Wix CMS (Content Manager) dashboard pages on manage.wix.com — the collections list and a specific collection's items view. Pairs collections and data items with their read APIs so you can fetch data and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Contacts

  • Site members (is someone a member, list or count members, approve a join request, block or unblock a member, change the name a member shows on the site, add a member) → use Find and Manage Site Members. A contact is not always a member: for people who are not members, use the contacts recipes below.

Bulk Delete Contacts

Deletes multiple contacts using filter-based bulk delete. Covers safe deletion patterns, GDPR compliance, soft delete alternatives, and batch processing strategies.

Bulk Label and Unlabel Contacts

Creates contact label definitions or adds/removes labels from matching contacts. Use Find or Create Label for label creation alone; use bulk labeling only when the user requests contact assignments.

Create a Contact

Creates a contact with the Contacts API. Covers the minimum identifying fields, the single-object shape of email and phone, and adding a physical address with the ISO 3166-2 subdivision format required for state, region, and province codes.

Update a Contact

Updates an existing contact's email, phone, name, or address with the Contacts API. Covers locating the contact when the user identifies it by name, passing its current revision, and the ISO 3166-2 subdivision format required for state, region and province codes.

Find Contacts

"Finds a site's contacts and answers questions about them: one contact by name, email or phone, contacts in a city, state or country, contacts with a label, birthdays, site members or email subscribers among the contacts, how many contacts match, every contact for an export, and possible duplicate contacts. Covers which contact fields can be filtered, how name matching works, paging through every result, and which fields the answer reads. Use when the user asks to find, look up, list, count or export contacts, wants a contact's details such as their address, or needs a contact's ID for another task such as their bookings or orders."

Find and Manage Site Members

"Finds a site's members and manages their access: one member by login email or name, the list of members with their emails, status and join dates, how many members a site has, pending, approved and blocked members, approving a pending member, blocking or unblocking a member, adding a member, and changing the name a member shows on the site. Covers which member fields can be filtered, the fieldsets that return email and status, and the member ID other tasks need. Use when the user asks whether someone is a member, wants to see or count their site members, approve a join request, block or unblock someone, add a member, or needs a member's ID for a task other than writing a blog post."

Contacts Dashboard Navigation

"Builds direct links to Wix Contacts (CRM) dashboard pages on manage.wix.com — the contacts list, a specific contact's view page, contact import, and the segments page. Pairs each main contacts entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Dashboard Navigation

Dashboard URLs are recipe data, not general knowledge. A manage.wix.com route is an app-registered slug that appears in no API reference and cannot be derived from the entity's name or its API path (Forms pages live under wix-forms, not contacts/forms; Stores products under wix-stores/products). So for every request for a dashboard link — even one that needs no API call, and even when a route feels obvious — open the solution's dashboard-navigation recipe below and copy the route from its table. Answering from memory is the one failure mode these recipes exist to prevent.

Dashboard Navigation

"Entry point for building direct links into a site's Wix dashboard (manage.wix.com). Documents the shared URL structure for all dashboard pages (site and account level, app-ID fallback, entity deep links, machine-readable routes.json) and routes to a per-business-solution recipe for every covered solution — bookings, stores/ecommerce, events, blog, pricing plans, restaurants, CMS, contacts, forms, marketing, get paid, analytics, google ads, app management, site settings, sites, and domains. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Domains

Analyse Domain

Report on the domains in the user's own Wix account — what kind a domain is, which site it is on, when it expires and whether it renews — for one domain, or by listing and filtering the account's domains.

Assign Domain

Connect a domain the user already owns to one of their Wix sites, as its primary domain or as a redirect — the starting point for every "connect my domain to my site" request, whether or not a domain is named; change which of a site's domains is primary; move a domain from one site to another; or take a domain off its site.

Check Domain Availability

Answer whether a domain name, or several at once, is available to register through Wix — a stand-alone "is example.com available?" question with no request to buy or connect.

Domain Search, Purchase and Connect

Buy a domain through Wix — intent, suggestions, site resolution, registration, privacy, cart and checkout — or bring a domain registered elsewhere into the Wix account with the dashboard connect link, once Assign Domain finds it is not there yet. A request to connect a domain the user owns to their site starts at Assign Domain. Availability checks are not done here: they all use Check Domain Availability.

Domains Dashboard Navigation

"Builds direct links to the domain-management pages on manage.wix.com — the site-level domain settings page and the account-level My Domains page. Pairs domain search/purchase with its read APIs. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


eCommerce

Routing — pick the right entry point:

  • Any sales/business improvement request (boost sales, promotions, help my business, holiday deals, improve revenue, discounts, shipping, coupons, clearance, gift cards) → use Recommend: eCommerce Strategy. This is the default entry point — it analyzes ALL domains (discounts, shipping, gift cards) and generates cross-domain recommendations. Do NOT ask clarifying questions.

  • Traffic acquisition is NOT an eCommerce-strategy request ("grow my traffic", SEO, ads, social, content) → do NOT use Recommend: eCommerce Strategy; it only converts visitors a store already has. Route these to marketing.

  • Pricing & promotions (coupons, discount rules, ribbons, sales) → use the Pricing & Promotions dispatcher.

  • Shipping setup (rates, regions, pickup, free shipping, fix coverage) → use the Shipping dispatcher.

  • Orders (find an order by its number, order history, what a customer bought, unpaid or unshipped orders, units sold, sales reports and exports) → use Find and Report on Orders. Totals and trends that are already aggregated (revenue over time, order count, AOV) → use Query Site Analytics.

  • Gift cards ("should I sell gift cards", "add a gift card", "what amounts should my gift card have") → these are recommendations, so they go through Recommend: eCommerce Strategy, which activates its GIFT_CARDS domain and loads the gift-cards goal itself. Issuing/redeeming an individual gift card is the Gift Cards API, not a recommendation.

eCommerce: Load Context

L1 loader — loads general site data (siteId, country, currency, industry, catalog analytics) needed by every eCommerce category. Each category dispatcher loads this before tag-matching; runs once per session.

Recommend: eCommerce Strategy

Entry point for all eCommerce recommendation requests. Unified skill that analyzes site data across ALL domains (discounts + shipping + gift cards), generates up to 5 cross-domain recommendations, and persists them to the tracking database. Covers discount strategies (seasonal, upsell, stock mover, bundling), shipping optimization (coverage gaps, free shipping, rate strategy, carrier backup), AND selling gift cards (denominations sized from the site's own AOV and catalog prices). Use this for business improvement requests about earning more from existing visitors. Traffic acquisition (SEO, ads, social, content) is out of scope — route "grow my traffic" to marketing.

Pricing & Promotions

Routes discounts, coupons, sales and bundles to promotion recipes, and visual product ribbons to the Catalog Ribbons API. Load this dispatcher for mixed pricing/refund/payment/product-price/shipping requests to choose the appropriate APIs.

Shipping

Dispatcher — routes shipping-setup requests (rates, regions, pickup, free shipping, fix coverage, optimize rates) to the right leaf recipe. The Shipping Options + Delivery Profiles APIs have no public docs page; ecom-shipping-api.md is the authoritative inline reference.

Find and Report on Orders

"Finds a Wix site's eCommerce orders and turns them into answers and reports: one order by its number, orders in a date range, the orders of one buyer, orders that contain a product, unpaid or unfulfilled orders, and sales totals such as units sold per product or revenue for a period. Covers which order fields can be filtered, paging through every result, and which fields a report reads. Use when the user asks about a specific order, their order history or what customers bought, or wants a sales report or an export built from their store's orders."

<details> <summary>Internal skills (loaded automatically by the dispatchers / orchestrator above — do NOT use directly)</summary>

Pricing & promotions leaves (loaded by the Pricing dispatcher or by the strategy orchestrator)
Gift-cards leaf (loaded by the strategy orchestrator when it activates the GIFT_CARDS domain)
  • Goal: Sell Gift Cards — existing-product gate (one per site), eligibility, denomination sizing from AOV / catalog prices, no-expiry-by-default policy, and the mapping onto Create Gift Card Product

Shipping leaves (loaded by the Shipping dispatcher)
Cross-cutting tracking
  • API: Recommendation Tracking — load BEFORE generating any recommendation; persists PROPOSED state and tracks MarkExecuting → MarkDone/MarkFailed.

</details>

Dashboard links for eCommerce surfaces (orders, abandoned checkouts, gift cards, shipping, tax, checkout settings) are in Stores Dashboard Navigation.


Donations

Create and Update Donation Campaigns

Create, inspect, update and archive Wix Donations campaigns, including suggested amounts and impact text, custom limits, giving frequencies, goals, donor notes, fee coverage and imagery.


Events

Create an Event with the Wix Events API

"Creates an event with the Wix Events V3 API — one-off or recurring, RSVP, ticketed, registration-free or with external registration — including date and time, venue or online location, guest limit, description and ticket tiers. Covers the exact field shapes and the API's misleading validation messages. Use when the user wants to create or set up an event, an information-only event, or a repeating event — including a weekly workshop, class or meetup series held on set dates at a venue or online; a Bookings class or course is booked per session instead."

Manage Wix Events — Publishing, Cancelling, Cloning and Counting

"Operates on Wix events that already exist with the Wix Events V3 API — finding (by name or date), updating (date, venue, main image, description, page settings), controlling registration (close, reopen, registration-free, external, members-only, limits), switching between RSVP and ticketed (a new event — ask before creating it), publishing, cancelling, deleting, cloning and counting, including single occurrences of a recurring event. Use to close registration, move or cancel an event, or change how guests register."

Manage Event Tickets

"Manages the ticket types of a ticketed Wix event with the Ticket Definitions V3 API — adding, editing, repricing, hiding, reordering and deleting tickets, scheduling or ending ticket sales, and changing the ticket currency. Use when the user wants to add early-bird, VIP, child or donation tickets to an existing event, change a ticket's price or quantity, or set when tickets stop selling."

Manage Event Guests

"Manages the people registered for a Wix event — RSVPs on RSVP events, and orders, tickets and ticket holders on ticketed events: listing and counting guests for one event or across all events, new registrations since a date, attendee lists to export, adding or removing a guest, changing an RSVP, checking guests in, and marking orders paid. Use when the user asks who is coming or how many registered, or wants to add, remove or check in a guest. Notes what the API can't do, such as refunds and resending emails."

Events Dashboard Navigation

"Builds direct links to Wix Events dashboard pages on manage.wix.com — the published and draft event lists, a new event, categories, staff, a recurring series' occurrences, and one event's pages: overview, edit, tickets, guests (RSVP or ticketed), orders, schedule, registration settings and form, and policies. Pairs each Events entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."

Event Registration Form

"Customizes the registration form of a Wix event with the Events Form API — adding, editing, reordering and removing questions, the additional-guests field, and the messages guests see after registering or when registration is closed. Use when the user wants to add or require a question on an event's RSVP or checkout form, let guests bring a plus-one, or reword a confirmation message."

Event Schedule, Policies and Categories

"Configures what appears around a Wix event on its page — the schedule or agenda, the policies guests accept (terms, refunds), and event categories. Use when the user wants to add an agenda or timetable to an event, add terms or a refund policy, or group events into categories such as workshops or concerts."


Forms

Create Form

"Creates a visitor-fillable Wix form with Form Schemas v4 — a contact or enquiry form, a signup or waitlist, an application, a survey, a quote request, and forms whose submissions create a contact. Ships a complete create request and the field table for the common kinds, with the value each one submits — dropdown, single and multi choice, date and time, number, consent and email-subscription (GDPR marketing) checkboxes — plus multi-page forms and the silent breakers that produce an empty or invisible form. Changing a form that already exists is Update Form."

Update Form

"Changes a Wix form that already exists, with Form Schemas v4 PATCH — add a field to my form, add a dropdown or a consent checkbox, make a field required or optional, rename a label, reorder, remove or retire a question. Covers reading the form back for its revision (and the required namespace query parameter), the whole-form body that a PATCH needs, the wholesale formFields replace that silently soft-deletes anything you omit, changing a field's component type in place, removing a field or hiding one from visitors, and the read-back that proves what was stored. Use whenever the form exists and the request changes what it collects; use Create Form when there is no form yet."

Read Forms and Submissions

"Reads a site's Wix forms and the submissions visitors sent to them — what forms do I have, find a form by name, show the latest submissions, who filled in my contact form, how many submissions did I get last week, submissions from one contact, unread submissions. Covers finding the form's namespace instead of guessing it, where that namespace goes on each read, the Form Schemas and Form Submissions endpoints (and the look-alike URLs that 404), forms hidden from a default listing, the closed list of submission fields you can filter and sort by, date ranges, cursor paging, totals per form, and reading answers by field. Read-only; changing a form is Update Form, building one is Create Form."

Forms Dashboard Navigation

"Builds direct links to Wix Forms dashboard pages on manage.wix.com. The paths are not guessable and appear in no API reference, so take them from here: under https://manage.wix.com/dashboard/{metaSiteId}/, the forms list is wix-forms, a form's builder is wix-forms/form/{formId}, and that form's submissions are wix-forms/form/{formId}/submissions — there is no site-wide submissions page, and nothing lives under contacts/forms, forms, form-builder or wix-forms-and-payments (the legacy app). Also standalone forms, and the dashboard link for each Forms entity; reading forms and submissions is Read Forms and Submissions."


Get Paid

Creates payment links for collecting payments without a checkout flow. Covers store products (catalog items), custom line items, variants, due dates, and sending links via email.

How to Setup Wix Payments

Configures Wix Payments as the payment provider. Covers eligibility checking, business verification, bank account setup, and payment method configuration (cards, PayPal, Apple Pay).

Creates payment links for unpaid bookings using Payment Links API. Links booking IDs to payment requests with proper redirect handling.

Get Paid Dashboard Navigation

"Builds direct links to Wix payments and invoicing dashboard pages on manage.wix.com — payment links, invoices (list, create, settings), recurring invoices, and the accept-payments settings page. Pairs each main get-paid entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Google Ads

Routing — Google paid-advertising campaigns for a site (Smart & Performance Max). All flows require a Google Ads account, created once via the setup recipe. Budgets are in micros (1,000,000 = 1 currency unit). REST base: https://www.wixapis.com/_serverless/pa-google/v1.

Install Google Ads and Create an Account

"One-time setup for running Google paid ads on a Wix site: install the Wix Google Ads app, then create the Google Ads account that every campaign, suggestion, and analytics call depends on. Covers checking whether an account already exists, choosing a currency, optionally attaching a promotional incentive (credit offer), linking a Google Merchant Center account, and deleting an account. Use when the user wants to 'set up Google Ads', 'connect Google Ads', 'start advertising on Google', 'create a Google Ads account', or hits an ACCOUNT_NOT_FOUND / app-not-installed error before creating a campaign. Google Ads REST API, base https://www.wixapis.com/_serverless/pa-google/v1."

Get AI Campaign Suggestions for Google Ads

"Reference for the Google Ads Suggestions API on a Wix site: AI/Google-generated inputs that help build effective campaigns — keyword themes (from a URL or autocomplete), geo-target options, low/recommended/high daily-budget tiers with estimated clicks, PMAX budget recommendations, text assets (headlines/descriptions), AI image assets (auto-uploaded to Wix Media), search themes, promotional incentive offers, and complete AI-generated campaign configurations from a campaign brief. Use when the user asks 'suggest keywords for my ads', 'what budget should I use', 'where should I target', 'generate ad copy/headlines', 'generate ad images', 'suggest a whole campaign', or when a create-campaign flow needs suggested values. REST base https://www.wixapis.com/_serverless/pa-google/v1."

Create and Launch a Performance Max Campaign

"Creates and launches a Google Ads Performance Max (PMAX) campaign for a Wix site — a goal-based campaign that runs across all Google channels (Search, Display, YouTube, Gmail, Discover, Maps) from an asset group of headlines, descriptions, images, and (for PMAX Leads) search-theme signals. Covers generating AI text and image assets, generating search themes, getting a Google budget recommendation, assembling the asset group with the required minimum assets, choosing PERFORMANCE_MAX vs PERFORMANCE_MAX_LEADS (leads: phone/form goals, negative keywords, 28-day learning) vs retail/Shopping (Merchant Center feed), creating in PAUSED, and launching. Use for 'create a Performance Max campaign', 'PMAX', 'run ads across all of Google', 'lead-gen Google campaign', or 'Google Shopping ads'. Requires an existing Google Ads account. REST base https://www.wixapis.com/_serverless/pa-google/v1."

Manage Campaign Lifecycle

"Manages existing Google Ads campaigns on a Wix site: list/get, launch (first activation) vs resume (reactivate after a pause), pause a running campaign — optionally with a scheduled auto-resume date — update name/budget/targeting, change the daily budget, delete permanently, and read status history / change log. Use when the user wants to 'pause my Google ad', 'resume my campaign', 'stop the campaign', 'change my daily budget', 'rename the campaign', 'delete this campaign', 'list my Google Ads campaigns', or 'why did my campaign status change'. Requires an existing Google Ads account and campaign. REST base https://www.wixapis.com/_serverless/pa-google/v1."

Manage a Campaign Success Guide

"Campaign Success Guide for existing Wix Google Ads Performance Max Leads campaigns. Use after creating a supported campaign, even while it is learning or has no metrics, and whenever users ask how to improve a campaign, what to fix next, to view the guide, or to mark or reopen a recommendation. Covers campaign and site selection; prioritized actionable recommendations; deduplicated, destination-specific Editor and Google Ads navigation; offers to perform supported work after approval; Merchant Center and Business Profile connection follow-ups; and suggestion-status tracking."

Query Campaign Performance Analytics

"Reads performance analytics for a Google Ads campaign on a Wix site: daily performance metrics (impressions, clicks, CTR, cost, leads, phone calls) with optional previous-period comparison and trends; conversion metrics from Wix Analytics (orders, revenue, leads, CPL, ROAS); the search terms that triggered a campaign's ads; per-product shopping performance for retail campaigns; and per-asset performance (headlines, descriptions, images) for PMAX Leads. Explains when to use campaignResourceName vs the Wix campaignId, the dateRange shape, field enums, sorting, and paging. Use when the user asks 'how is my campaign doing', 'show ad performance', 'what search terms triggered my ads', 'which products/assets perform best', 'campaign ROI/ROAS', or 'conversions from my Google ads'. REST base https://www.wixapis.com/_serverless/pa-google/v1."

Retrieve Google Ads Billing and Payment Details

"Retrieves billing and payment details for a Wix site's Google Ads account: the current billing period's ad spend (usage), the Wix service fee, the total charge, any promotional coupon adjustment, the billing period dates, and the account's credit balance (positive = available credits, negative = outstanding debt not yet charged). Also explains reading current vs remaining budget from the account object. Use when the user asks 'how much have I spent on Google Ads', 'what's my next Google Ads charge', 'show my ad billing', 'do I have ad credits left', 'why was I charged', or 'upcoming Google Ads payment'. Requires an existing Google Ads account. REST base https://www.wixapis.com/_serverless/pa-google/v1."

Google Ads Dashboard Navigation

"Builds a direct link to the Wix Google Ads dashboard page on manage.wix.com, where campaigns created via the Google Ads API recipes are managed. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Google Business Profile

Routing — how a business appears on Google Search and Maps. A Google connection is the prerequisite for all Google-backed location work: check it first, and route "connect / reconnect / disconnect Google" to the connection recipe.

Connect a Wix Site to Google Business Profile

Connect the authenticated Wix site to a Google Business Profile account, check whether an existing connection is still usable, recover a connection whose stored credentials are gone, switch to a different Google account, or disconnect. The site owner authorizes in their own browser through a single-use connect URL; the agent never completes the Google authorization itself. Warns before any reconnect that permanently removes the site's imported locations.

Manage Google Business Profile Locations for a Wix Site

Import Google Business Profile locations into the authenticated Wix site, list and query them with or without live Google data, update Wix-side and Google-side details through the correct method for each, create a new Google listing, check whether a profile is actually live on Google, and remove a location from Wix or delete its Google listing. Checks the site's Google connection first and reports a missing one as a setup step, warns before destructive or Google-visible writes, and respects Google's shared rate budget.


Marketing

Create and Publish a Social Media Post

"End-to-end flow to create a social media post, with its text written for you or your own, and publish or schedule it to a site's connected channel (Instagram, Facebook, LinkedIn, X/Twitter, TikTok, Pinterest, YouTube, Google Business Profile) using the Wix Publisher API. Can write a full per-channel post from a free-text idea or from the site's own assets (products, blog posts, events, bookings, coupons, categories), with your own image, and suggest captions and titles. Settles the post content with you first, then confirms the channel is connected, checks premium quota, creates a draft, and publishes now or schedules it. Use for 'create a post', 'generate a post from my product/idea', 'write a caption', 'caption ideas/suggestions', 'post to Instagram/Facebook/TikTok', 'connect my Instagram/Pinterest/LinkedIn', or 'schedule a post'."

Generate a Marketing Plan and Schedule Its Posts

"End-to-end flow to generate a site's social media marketing plan with the Wix Marketing Plan API and schedule the post drafts it returns. Recommends configuring marketing settings (goal, tone, cadence, content pillars) before the first generation, generates the plan asynchronously, polls until it's ready, then schedules the DRAFT posts. Includes generating posts for additional activities. Use for 'generate a marketing plan', 'create a social media plan/calendar', or 'schedule my plan's posts' requests."

Review and Send Email Campaigns

"Reads a Wix site's email marketing campaigns and reports on them: which campaigns were sent and when, drafts and scheduled campaigns, the subject and content of a campaign (for example whether one mentions a discount code, or its word count), delivery and engagement results, the contacts who received, opened or clicked a campaign, and the site's monthly email quota. Also creates a draft campaign from text and sends or schedules a draft once the user confirms. Use when the user asks about their email campaigns or newsletters, how a campaign performed or who it reached, or wants a campaign drafted or a draft sent."

Marketing Dashboard Navigation

"Builds direct links to Wix marketing dashboard pages on manage.wix.com — the social posts hub (drafts, scheduled and published posts across connected channels), post design templates, saved designs, and the email marketing pages (campaigns list, campaign templates, campaign analytics). Pairs each main marketing entity (social post item, connected social account, marketing-plan post, email campaign) with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Media

Upload Media to Wix

Uploads images and files to the Wix Media Manager using the Import File API. Covers importing from external URLs, checking file status, and using the returned wixstatic.com URL in other APIs.

Generate an Image with AI

Generates an image from a text prompt with the Wix AI APIs (Runware). Returns a short-lived URL that must be imported to be kept — importing is Upload Media to Wix's job, and this recipe hands off to it. Covers choosing a model and its cost/latency/content-filter trade-off, the accepted output sizes, per-model batching limits, the AI credit each call spends, and why a content refusal arrives as a success response with no image.


Online Programs

Manage Online Program Categories

Lists, creates and renames the categories of a Wix site's Online Programs, shows which programs a category holds, and adds a program to a category, removes it, or moves it from one category to another. Use when the user wants to see, create or rename a program category, or change which categories a program is in.


Pricing Plans

Create and Update Pricing Plans

"Creates, finds and changes Wix Pricing Plans with the Plans API. Covers pricing models (recurring, one-time, free), trial periods, perks and plan visibility; finding a plan by name and listing the plans a site sells; and renaming, repricing, hiding and archiving a plan."

Pricing Plans Bookings Integration

Links Pricing Plans to Bookings services using the Benefit Programs API. Enables package deals and memberships that grant booking access.

Find and Manage Pricing Plan Orders

"Finds and manages the orders of a site's Wix Pricing Plans: the purchases and subscriptions that buyers hold. Covers who bought a plan and when, new purchases in a period, how many active subscribers a plan has, memberships that end or renew soon, the names and emails of current and former buyers, and changes to an order: pausing, resuming, cancelling, extending it, marking an offline order as paid, and recording a manual (offline) order for a member. Use when the user asks about their plan subscribers or members' subscriptions, wants a report or an export of plan purchases, or wants to change or add a plan order."

Pricing Plans Dashboard Navigation

"Builds direct links to Wix Pricing Plans dashboard pages on manage.wix.com — plans list, create a plan, edit a plan, record a manual order, and settings. Pairs each main Pricing Plans entity (plan, order) with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Restaurants

Wix Restaurants Setup

Configures restaurant menus, sections, and items using Menus API. Covers menu structure (Menu → Section → Item), the two-step item modifier / modifier group flow, pricing, availability schedules, and ordering settings.

Restaurants Dashboard Navigation

"Builds direct links to Wix Restaurants dashboard pages on manage.wix.com — menus, menu items, the online orders board, online-ordering fulfillment settings (pickup, delivery, dine-in), the reservations list, floor plans, and reservation experience settings. Pairs each main Restaurants entity (menu, section, item, order, reservation) with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Rich Content

Routing rule (READ FIRST). For every request to hand-author, output, or return Ricos / richContent JSON (nodes tree) for Blog, Stores, Events, or CMS, use the available full-documentation reading capability to retrieve and read the canonical Author Ricos Rich Content recipe before using API schema search, convert/validate APIs, or memory. This also applies when the user asks for JSON only.

Ricos Converter Service

Validates and converts content between Ricos documents and HTML/Markdown/plain text using the Ricos Documents API. Covers plugin configuration, format conversion in both directions, and document validation.

Author Ricos Rich Content

Authoritative recipe for hand-authoring valid Ricos rich-content JSON (the richContent/nodes tree) used across Wix Blog posts, Stores product descriptions, Events, and CMS rich-text fields. Use whenever a user asks to create, output, or return Ricos, richContent, or nodes-tree JSON; retrieve and read this full recipe before API schema search or constructing the JSON. Covers paragraphs, headings, lists, blockquotes, dividers, tables, code blocks, images, buttons, audio, video, galleries, collapsible lists, HTML embeds, inline decorations, and nesting rules.


Site Properties

RECIPE: Change a Site's Regional Properties (Currency, Time Zone, Language, Region) via Site Properties API

"Updates the site-level payment currency (store billing currency) using Site Properties API, including the required request body shape and field mask. Covers the site time zone, primary language, and site region (locale country); field masks name top-level properties."

Show and Update Business Info

"Shows and changes a site's business info through the Site Properties API: the business name, description and company ID, the public contact email, phone, fax and address, and the opening hours the site shows. Covers changing one detail while keeping the others, removing a detail, and adding, changing or removing business hours and holiday closures. Not for Wix Bookings availability (default bookable hours) or the site's currency, time zone, language or region."

Site Settings Dashboard Navigation

"Builds direct links to the site-settings dashboard pages on manage.wix.com — the settings hub, website settings, and language & region. Pairs site properties with the Site Properties read API. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."


Collaborators

Manage Site Collaborators

Manages who has access to a Wix site as a collaborator (contributor) — finds the site's current collaborators, invites someone, removes a collaborator, and resends or revokes a pending collaborator invite. Use when the user wants to give someone access to the site, take it away, or follow up on an invitation that has not been accepted.


Sites

Create Site from Template

Creates new Wix sites from templates using account-level APIs. Covers template search, site creation, and publishing. Not for headless sites.

Create Headless Site

Creates a Wix Headless website: a site in the user's Wix account whose frontend is files uploaded to Wix hosting, with the Wix business backend behind it through APIs. The site is created and its pages put live by Upload a Website or HTML Files; a Wix Business Solution (a store, blog, bookings and more) is then integrated into it by the Wix Headless kit, from its cold start.

Manage OAuth Apps

Create, read, update, and query OAuth apps for a Wix headless site. Each OAuth app's id is the client_id a frontend uses to mint anonymous visitor tokens and call Wix APIs.

Query Sites

List, count, and find the sites in a Wix account. Covers the namespace filter for headless sites, counting before enumerating, cursor pagination, and resolving a site by name.

Read Account or Site Context

Probe a Wix site or account for full context in one call — installed apps by display name, locale, currency, timezone, and status. Account token + siteId targets one site; account token alone returns up to 10; site-scoped token alone returns the site it is scoped to.

Send Feedback to Wix

Relay the user's feedback about building with Wix — the APIs, docs, recipes, Wix MCP and tooling — to Wix, attributed to the authenticated user. Covers when to offer it, how to compose a message Wix can act on, and the call that sends it. Use when the user asks to report something to Wix, is frustrated with a Wix API or flow, or a recipe's flow fell short. Not a support channel, and not for the user's own site content.

Site Import

Drive the Wix Site Import agent to migrate an existing store or site from another platform (Shopify, WooCommerce, Magento, or any URL) into Wix — as a brand-new site or into the user's existing one — or to import from CSV/TSV export files with no source site. Use this skill whenever the user wants to import, migrate, or clone a store/site into Wix, mentions moving off Shopify/WooCommerce/Magento, or gives a source store URL and asks to bring it into Wix. Covers starting the import, polling progress, answering the agent's mid-import questions, handling deploy/failure/auth-expiry states, and sending post-deploy follow-up changes.

Sites Dashboard Navigation

"Builds direct links to the account-level sites pages on manage.wix.com — the My Sites list (all sites in the account) and each site's own dashboard. Pairs the site list with the Query Sites read API. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."

Upload a Website or HTML Files

Publish HTML, CSS, JavaScript or a static build as a Wix Headless website; inspect its deployed files and edit them on the same site and URL. Covers file and ZIP uploads, selective additions, replacements and deletions while preserving other files, full-site replacement, authenticated and anonymous publishing, verification, and connecting a Wix business backend; a Wix Astro build is released as a server-rendered site rather than dropped. Use for files the user supplies or pages you create for them. Not for migrating a live site from another platform by URL or CSV (use Site Import), embedding code in an editor-built Wix site, or uploading assets to Media Manager.


Stores

Change Store Currency

Changes the store's payment currency through Site Properties and explains delayed currency updates in catalog responses.

Create Product (Catalog V1)

Create products using the Catalog V1 Products API. Use this recipe when the site's catalog version is CATALOG_V1. Covers simple product creation, product with options, and key V1 request structure differences from V3.

Create Product (Catalog V3)

Mandatory first recipe for every Wix Stores Catalog V3 create-product request. Before any mutation, require an explicit name and price for every product; an absent price is never 0. If no product is identified, offer both image-upload and text-description paths and stop. If name or price is missing, ask or offer a suggestion and stop. When both are present, create from the supplied details without requiring optional enrichment. Covers single/bulk creation, inventory, physical/digital products, images, options, variants, SKUs, and validation.

Find Products (Query and Search, Catalog V3)

Find, search, query, and list products from a Wix Store using Catalog V3 Search Products, Query Products, Get Product, and Query Inventory Items: by name, SKU, option choice, stock status, or price, with sorting and paging; reading one product's variants and details; and listing products with their variant count and stock.

Query Products (Catalog V1)

Query and list products from a Wix Store using the Catalog V1 Query Products endpoint. Use this recipe when the site's catalog version is CATALOG_V1. Covers basic queries, filtering, sorting, and paging.

Manage Store Categories (Catalog V3)

Organizes a Wix Store's products into categories with the Catalog V3 Categories API. Covers listing the category tree and finding a category by name; creating categories and subcategories; renaming a category or changing its description or URL slug; hiding or showing it; reordering it or moving it under another parent; deleting it; and adding products to a category, removing them, listing what a category holds, or moving all of a category's products to another category. Use when the user wants to see, set up, reorganize or clean up their store categories, or asks which products are in a category.

Update Product Stock and Pre-Order (Catalog V3)

Changes the stock and pre-order settings of existing Catalog V3 product variants through their inventory items. Covers finding a variant's inventory item by product name or SKU, setting a quantity, adding or removing units, marking a variant in or out of stock, starting or stopping quantity tracking, and enabling or disabling pre-orders with a message and a limit.

Update Product with Options (Catalog V3)

Start here for existing Catalog V3 product updates, including digital products that fail at add-to-cart with ITEM_NOT_FOUND_IN_CATALOG. Includes name lookup, Get Product, and PATCH in one flow, plus importing a supplied PDF and attaching it to the existing variant. Covers options, variant prices and SKUs, variant shipping weight in the site's weight unit, product visibility (hide/unhide through visible, never delete), description edits that preserve Rich Content, and revision-based updates. Read another recipe only for a field or operation this flow does not cover.

Stores Dashboard Navigation

"Builds direct links to Wix Stores and eCommerce dashboard pages on manage.wix.com — products list, edit a specific product, categories, inventory, orders list, a specific order, abandoned checkouts, gift cards, shipping and tax settings. Pairs each main Stores/eCommerce entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."

<!-- automations-builder-sync:begin -->

Automations

Build and Manage Wix Automations

Create, update, activate or deactivate Wix Automations with app actions, trigger filters, conditions, delays, variables, branches and schedules, and check their current status, using the public Wix Automations APIs.

<details> <summary>Internal skills (loaded on demand by Build and Manage Wix Automations — do NOT use directly)</summary>

</details>

<!-- automations-builder-sync:end -->

Files

references/marketing/create-and-publish-social-post.md


name: "Create and Publish a Social Media Post" description: "End-to-end flow to create a social media post, with its text written for you or your own, and publish or schedule it to a site's connected channel (Instagram, Facebook, LinkedIn, X/Twitter, TikTok, Pinterest, YouTube, Google Business Profile) using the Wix Publisher API. Can write a full per-channel post from a free-text idea or from the site's own assets (products, blog posts, events, bookings, coupons, categories), with your own image, and suggest captions and titles. Settles the post content with you first, then confirms the channel is connected, checks premium quota, creates a draft, and publishes now or schedules it. Use for 'create a post', 'generate a post from my product/idea', 'write a caption', 'caption ideas/suggestions', 'post to Instagram/Facebook/TikTok', 'connect my Instagram/Pinterest/LinkedIn', or 'schedule a post'."

RECIPE: Create and Publish a Social Media Post

THE PROTOCOL (read this first — every rule is mandatory)

Run every post request through these steps, in this order. The principle is value first: settle what the post is and show it to the user before you touch delivery. Don't open with connection or plan checks — reach those only once there's an approved post to deliver. Skip a question only when the user's own words in this conversation already answered it.

  1. Channel + subject first — no API calls yet. Determine the target channel from the request; if the user didn't name one, ask. Then get, in the user's own words, what the post is about: a free-text idea, or a specific site asset (a product, blog post, event, booking, coupon, or category). The subject is a hard gate — a reply that answers only part of a question (an account pick, a bare "you decide") does not supply it, and you must never derive a topic from the site's profile or content on your own. Ask again and wait.

  2. Ask: own or generated? "Do you already have the post text, or should I write it? And which image goes with it: one of your site's, or one you upload?" The image is always the user's own. Wait for the answer.

  3. If generating, ask: idea or asset? "From an idea, or built around one of your site's assets (a product, blog post, event, booking, coupon, or category)?" Offer the asset option explicitly, every time. Wait for the answer.

  4. Route exactly one way:

    • User has their own text → use it verbatim; skip generation → go to STEP 3 (choose type), then STEP 6 (assemble).

    • Idea → generate-post-data with userInput and the user's media (STEP 2a; returns the caption with that image).

    • Asset → resolve the asset id, then generate-post-data with siteAssets and the asset's image as media (STEP 2a).

    • User explicitly wants only a caption → generate-text (STEP 2b).

    No step produces an image. The post's image is the user's: a site asset's image, a file they upload, or a Media Manager file (Media handling in STEP 3).

  5. Show it and get approval. Present the tool's actual output — the caption and the image (rendered inline, or its URL). Never hand-write the caption or claim generated content you didn't get from the API. Get explicit approval on the final post before any delivery step.

  6. Only now, check delivery — just-in-time. After the user approves, confirm the channel is connected (STEP 4; connect if needed) and check the plan for publish vs. schedule (STEP 5). This is where connection/plan problems surface — never lead with them. If SCHEDULE_POST is disabled, never present scheduling. A positive quotaInfo.limit with remainingUsage: 0 means that action's quota is used up (offer the other action if enabled — a near-future schedule works like publish-now); limit: 0 means unmetered, so treat the action as available. Generation is never plan-gated; never tell the user it is.

  7. Publish exactly what was approved. Create the draft (STEP 6) from the approved content plus the account's IDs, then publish or schedule (STEP 7). For a scheduled time, verify the resolved scheduledDate is strictly in the future right before the call (a "today at 9am"-style time can resolve to the past). Reuse the approved caption, image, and draft on any retry; never regenerate after approval.

The rest of this recipe is the reference for executing each step.


This recipe creates a post — called an item — and publishes it to one of a site's connected social channels, or schedules it for a future date. You can have the post text written (STEP 2) or bring your own; the image is always the user's own. Each item targets a single channel, and its type and content must match a combination the channel supports.

Base URL for all endpoints: https://www.wixapis.com/social-publisher/v1.

Prerequisites:

  • AI generation (STEP 2) is available on every site — it is not plan-gated. Offer it by default; skip it only if the user brings their own caption and media.

  • To deliver the post, the target channel must be connected by the site owner (checked in STEP 4; connect it there if not) and the plan must allow the action (STEP 5).

  • Post media must be a Wix Media Manager URL (static.wixstatic.com); see Media handling in STEP 3.

Flow (value-first): STEP 1 settle channel + subject → STEP 2 generate the content (offer this proactively) → STEP 3 choose channel/type → show the post and get approval → STEP 4 confirm the channel is connected (connect if needed) → STEP 5 check premium → STEP 6 create the draft → STEP 7 publish or schedule. Generation and approval come first so the user sees value before any connection or plan gate; the delivery checks (STEP 4–5) run just-in-time, right before creating and publishing.

Not covered here: editing or analyzing already-published posts, and post analytics/insights.


STEP 1: Decide the channel and subject

No API calls here — this is the conversation that anchors everything else.

  • Channel. Determine the target channel from the request (INSTAGRAM, FACEBOOK, YOUTUBE, LINKEDIN, PINTEREST, GBP, TIKTOK, TWITTER). If the user didn't name one, ask which channel to post to. TWITTER (X) is available only through July 31, 2026 — see the cutoff rule in STEP 7.

  • Subject (hard gate). Get, in the user's own words, what the post is about: a free-text idea, or a specific site asset. Don't proceed to generation without it, and never invent a topic from the site's content.

Then follow THE PROTOCOL rules 2–4 to decide own-vs-generated and idea-vs-asset, and route to the right STEP 2 call.


STEP 2: Generate the post text

Generation isn't gated by the plan (no premium check applies), so offer it by default. THE PROTOCOL at the top of this recipe governs this step: hold the subject gate (rule 1), ask own-or-generated (rule 2), offer idea-or-asset (rule 3), and route per rule 4. Never hand-write the caption or title; producing the post means calling the API below and presenting its output.

2a. Generate a full post — from an idea and/or the site's own assets

Produces ready-to-use, per-channel payloads that drop into STEP 6. This is the default — lead with it for any "create a post" request, offering both the idea-based and asset-based paths.

API Endpoint: POST https://www.wixapis.com/social-publisher/v1/generate-post-data

  • userInput — free-text idea to base the post on.

  • siteAssets — the site's own content to ground the post in, as { "id": "<asset-guid>", "type": "<asset-type>" }. Exactly one asset per call (multiple assets aren't supported yet). This recipe doesn't look assets up for you — resolve the id from the owning app's query API first, then pick the asset the user meant. The linked method docs are authoritative: read them for the exact request/response, or if an inline call stops working.

    typeOwning appEndpointDocs
    STORES_PRODUCTWix StoresPOST https://www.wixapis.com/stores/v3/products/query (body { "query": {} })Query Products
    STORES_CATEGORYWix StoresPOST https://www.wixapis.com/categories/v1/categories/query — requires treeReference, e.g. { "treeReference": { "appNamespace": "@wix/stores" } }Query Categories
    STORES_COUPONWix StoresPOST https://www.wixapis.com/stores/v2/coupons/query (body { "query": {} })Query Coupons
    BLOG_POSTWix BlogPOST https://www.wixapis.com/blog/v3/posts/query (body { "paging": { "limit": 10 } })Query Posts
    EVENTWix EventsPOST https://www.wixapis.com/events/v3/events/query (body { "query": { "paging": { "limit": 10 } } } — paging.limit must be > 0)Query Events
    BOOKINGS_SERVICEWix BookingsPOST https://www.wixapis.com/bookings/v2/services/query (body { "query": {} })Query Services
  • media — the user's images to include, as { "type": "IMAGE", "url": "<public-url>" } (images only). Always pass at least one: a site asset's image, an uploaded file, or a Media Manager file.

  • channels — which channels to generate for. Omit to get one result for each of INSTAGRAM, FACEBOOK, LINKEDIN, PINTEREST, GBP, and TIKTOK.

Provide userInput, siteAssets, or both.

Scope: this method produces standard image-post payloads for the six channels above only. It does not generate YouTube content, X/Twitter posts, or story/reel/video formats — for those, use 2b (caption) and assemble the content object yourself in STEP 6.

Example — from an idea + an image, for Instagram and Facebook:

{
  "userInput": "Announce our new summer collection of handmade ceramic mugs with a 20% discount this week",
  "media": [{ "type": "IMAGE", "url": "https://static.wixstatic.com/media/cf2434_4b3a2d8eb7f54bc89c0d4524430a2af3~mv2.jpg" }],
  "channels": ["INSTAGRAM", "FACEBOOK"]
}

Example — from a site asset (a Stores product):

{
  "siteAssets": [{ "id": "f1e4c0a2-9b87-4d31-a6e5-2c8b7f0d1a93", "type": "STORES_PRODUCT" }],
  "channels": ["INSTAGRAM"]
}

Expected response — one entry per requested channel, each holding a channel-specific payload (instagramPost, facebookPost, …) shaped exactly like the content in STEP 6 (Instagram shown below; the two-channel request above also returns a facebookPost entry):

{
  "results": [
    {
      "channelName": "INSTAGRAM",
      "instagramPost": {
        "mediaWrapper": { "media": [{ "type": "IMAGE", "url": "https://static.wixstatic.com/media/cf2434_...~mv2.jpg" }] },
        "caption": "New summer collection: handmade ceramic mugs ☀️🍶 20% off this week! #HandmadeMugs #CeramicLove"
      }
    }
  ]
}

Use the payload for your chosen channel as the content object in STEP 6. Pass the user's media on every call, so mediaWrapper.media[] holds their image; a result whose media is not the image you passed is not used. Review the whole payload with the user, the caption and the media (see STEP 3's approval note).

2b. Generate only a caption or title

Use when the user just wants caption suggestions to place into a post.

API Endpoint: POST https://www.wixapis.com/social-publisher/v1/generate-text

userInput is required. Options: channelName, tone (e.g. professional, playful), languageCode (ISO 639-1, e.g. en), and additionalContent (url, withHashtags, addLinkInBio).

{
  "userInput": "A summer sale on handmade ceramic mugs, 20% off this week",
  "channelName": "INSTAGRAM",
  "tone": "playful",
  "languageCode": "en",
  "additionalContent": { "withHashtags": true }
}

Expected response: { "results": [ { "caption": "…", "title": "…" } ] }. Put the chosen caption (and title where the channel uses one) into the content object in STEP 6.

STEP 3: Choose the channel and type (then show the post and get approval)

For the target channel from STEP 1, pick the item type and the matching content object (from STEP 2's output or the user's own content).

Channel (channel.name)typeContent objectMain content fields
INSTAGRAMPOSTinstagramPostcaption, imageUrl/videoUrl or mediaWrapper (media required)
INSTAGRAMSTORYinstagramStorymediaWrapper (media required)
FACEBOOKPOSTfacebookPostcaption, pageId, imageUrl/videoUrl/link or mediaWrapper
FACEBOOKREELfacebookReeldescription, pageId, videoUrl or mediaWrapper
FACEBOOKSTORYfacebookStorypageId, mediaWrapper
YOUTUBEVIDEOyoutubeVideotitle, description, videoUrl, channelId
YOUTUBESHORTyoutubeShorttitle, description, videoUrl, channelId
LINKEDINPOSTlinkedinPostcaption, authorId, mediaWrapper or linkMetadata
TWITTER (X)POSTtwitterPostcaption, imageUrl/videoUrl/link or mediaWrapper — available only until July 31, 2026 (see STEP 7)
PINTERESTPOSTpinterestPosttitle, description, boardId, link, mediaWrapper
GBPPOSTgbpPostlocationId, description and/or mediaWrapper, optional callToAction
TIKTOKPOSTtiktokPhototitle, description, privacyLevel, mediaWrapper
TIKTOKVIDEOtiktokVideodescription, privacyLevel, mediaWrapper

Notes:

  • Media items in mediaWrapper.media[] are { "type": "IMAGE" | "VIDEO", "url": "<public-url>" }.

  • Instagram and story types require media (GBP needs description and/or media). The image is the user's own; if they have none at hand, take one of the site's assets or ask for an upload — see Media handling below.

  • caption is the text field for Instagram, Facebook, LinkedIn, and X/Twitter; description for YouTube, Pinterest, Google Business Profile, and TikTok.

  • The account-derived IDs (pageId, boardId, locationId, authorId, channelId, privacyLevel) come from the account object fetched in STEP 4b — see the field-path table there.

  • TikTok privacyLevel must be one of the account's privacyLevelOptions (from STEP 4b) — one of PUBLIC_TO_EVERYONE, FOLLOWER_OF_CREATOR, MUTUAL_FOLLOW_FRIENDS, SELF_ONLY.

  • Text length limits: Instagram caption ≤ 2200 (about 30 hashtags / 20 mentions); Pinterest title ≤ 100, description ≤ 800, link ≤ 2048; Google Business Profile description ≤ 1500; TikTok photo title ≤ 90 and description ≤ 4000, TikTok video description ≤ 2200. Generated captions/titles (STEP 2b) are ≤ 1000.

  • GBP callToAction (optional) is one of BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP.

  • TWITTER (X) works like any other channel only through July 31, 2026; after that it's no longer functional (see STEP 7). Treat an UNSUPPORTED_CHANNEL error as authoritative.

Show the post and get approval (do this before any delivery step). Once the content and type are settled, present the final post to the user — the caption, the target channel, and the media: render the image inline if the surface supports it, otherwise post its URL as a clickable link. Never ask them to approve a post whose image they haven't seen. Only after they approve do you move on to the delivery checks (STEP 4 onward). Publishing is public and can't be undone, so this approval is the gate into delivery.

Media handling. Post media must be a Wix Media Manager URL — static.wixstatic.com for images, video.wixstatic.com for videos. Always use one, even for media that came from elsewhere. (The API only validates a generic URL and won't reject a non-Wix link, but don't rely on that: an external URL has to stay reachable when the post publishes — a real risk for scheduled posts — and skips the Media Manager processing channels expect. Treat a Wix URL as required.) In the content object, url is that Wix URL; fileId is optional when url is supplied.

Getting media into the Media Manager:

  • Already there (a site asset's image or a previously uploaded file) → use its static.wixstatic.com url directly.

  • A public external URL → import it; Wix fetches it server-side, no local download: POST https://www.wixapis.com/site-media/v1/files/import with { "url": "<external-url>", "mimeType": "image/jpeg", "displayName": "post.jpg" }.

  • A local file (no public URL) → POST https://www.wixapis.com/site-media/v1/files/generate-upload-url, then PUT the raw file bytes to the returned uploadUrl (set Content-Type to the file's MIME type); the response returns the file descriptor. See the Media Manager Upload API.

After import/upload the file returns operationStatus: PENDING — poll GET https://www.wixapis.com/site-media/v1/files/{id} until operationStatus is READY, then use its static.wixstatic.com url in the post.


STEP 4: Confirm the channel is connected

The user has approved a post — now check that its channel can receive it. The connection check is long-lived-token-status (4a) — that call alone tells you whether the channel is connected. List Accounts (4b) is a separate step: it fetches the connected account to post to (a precondition for creating the draft — and so for publishing and scheduling — not for checking connection). Call them in this order, and only reach 4b once 4a returns VALID. (Channel-name placement differs by endpoint: long-lived-token-status and connect-url take it as a path segment; accounts and features take it as a query param.)

A standalone "connect my <channel>" request (no post to create) is also in scope: run STEP 4 and stop once the connection is verified.

STEP 4a: Check the connection status (do this first)

API Endpoint: GET https://www.wixapis.com/social-publisher/v1/INSTAGRAM/long-lived-token-status (channel name is a path segment)

{ "status": "VALID" }

Decision point — branch on status:

  • VALID → connected. Continue to STEP 4b to get the account to post to.

  • NEVER_CREATED → never connected → offer to connect (STEP 4c).

  • DISCONNECTED → was connected, now disconnected → offer to reconnect (STEP 4c).

  • INVALID → connection expired → offer to reconnect (STEP 4c).

Only VALID proceeds to List Accounts. For every other status, go to STEP 4c and do not call List Accounts — there's no connected user, so it can only error.

This is per-channel — the status tells you only about the channel you queried, nothing about others. Scope statements to that channel ("Pinterest isn't connected yet"); never say "no accounts connected on this site" from a single-channel check.

STEP 4b: Get the account to publish to (only when status is VALID)

Because STEP 4a already confirmed VALID, this call returns the connected accounts and won't throw USER_NOT_EXIST_FOR_CHANNEL.

API Endpoint: GET https://www.wixapis.com/social-publisher/v1/accounts?channelName=INSTAGRAM (channel name is a query param)

Expected response (Instagram — one entry per connected account):

{
  "accounts": [
    { "channelName": "INSTAGRAM", "instagram": { "id": "17841405822304914", "username": "janes.pottery", "settings": { "default": true } } }
  ]
}

Each account sits under a channel-specific key (instagram, facebook, …). Its id is channel.accountId in STEP 6; some channels carry a second ID (page/board/location) that the content object needs — a different value from accountId. Read them from these paths:

Channelaccount keychannel.accountIdContent-object ID
Instagraminstagraminstagram.id—
Facebookfacebookfacebook.idpageId ← facebook.page.id
YouTubeyoutubeyoutube.idchannelId ← youtube.id (same value)
LinkedInlinkedinlinkedin.idauthorId ← linkedin.id (already a URN, e.g. urn:li:person:… or urn:li:organization:…)
X (Twitter)twittertwitter.id—
Pinterestpinterestpinterest.idboardId ← pinterest.board.id
GBPgbpgbp.idlocationId ← gbp.location.id
TikToktiktoktiktok.idprivacyLevel ∈ tiktok.privacyLevelOptions

Example — Facebook account (note accountId and pageId are different values):

{ "accounts": [ { "channelName": "FACEBOOK", "facebook": {
  "id": "1022334455667788",
  "displayName": "Jane's Pottery",
  "page": { "id": "102938475610293", "displayName": "Jane's Pottery Page" },
  "settings": { "default": true }
} } ] }

Here channel.accountId = facebook.id (1022334455667788) and facebookPost.pageId = facebook.page.id (102938475610293).

Decision point:

  • One account returned → use its id as channel.accountId (plus the second ID above where the channel needs one).

  • Several accounts returned (one per connected page/account) → pick the one with settings.default: true, or ask the user which page/account to post to. To change the default (what the dashboard's page picker does), call Update Account Settings: PATCH https://www.wixapis.com/social-publisher/v1/{channelName}/settings with the channel-specific default field:

    • Instagram → { "instagram": { "defaultAccountId": "<id>" } }

    • Facebook → { "facebook": { "defaultPageId": "<id>" } }

    • Pinterest → { "pinterest": { "defaultBoardId": "<id>" } }

    • Google Business Profile → { "gbp": { "defaultLocationId": "<id>" } }

    • TikTok → { "tiktok": { "defaultAccountId": "<id>" } }

    • LinkedIn → { "linkedin": { "defaultChannelId": "<id>" } }

  • accounts is empty (or NO_PAGES_FOR_USER) even though STEP 4a returned VALID → the token exists but no postable page/account was granted during authorization (e.g. no Facebook Page with a linked Instagram Business/Creator account). Treat it as "not connected": re-run STEP 4c and tell the user to grant the Page.

  • A 400 USER_NOT_EXIST_FOR_CHANNEL error (shouldn't happen after a VALID status, but possible if the channel was disconnected between calls) → treat exactly like "not connected" for this channel only and offer STEP 4c.

STEP 4c: Connect the channel (only if not connected)

Ask the user if they'd like to connect the channel now. If yes, run the OAuth connect flow — the site owner must authorize in their browser; it can't be completed server-side alone.

  1. Get the authorization URL — GET https://www.wixapis.com/social-publisher/v1/INSTAGRAM/connect-url (path segment is the channel name):

    { "connectUrl": "https://www.instagram.com/oauth/authorize?client_id=...&redirect_uri=...&state=..." }

    A 428 INELIGIBLE_FOR_FEATURE here means the site has hit its plan's cap on how many channels it can connect (free plans allow one), not that this channel is blocked. Since the cap is full, another channel is already connected — offer only two options: upgrade the plan, or post to the already-connected channel (find it via List Accounts on the other channels, or ask). Don't suggest connecting a different new channel (same cap, same 428) or disconnecting the existing one.

  2. Surface connectUrl to the user and ask them to open it and authorize the channel. The channel's OAuth redirect completes the connection server-side.

  3. Poll the connection status — GET https://www.wixapis.com/social-publisher/v1/INSTAGRAM/long-lived-token-status every few seconds, for up to ~2 minutes, until status is VALID:

    { "status": "VALID" }

    status values: NEVER_CREATED (not connected yet — keep polling until the timeout), VALID (connected — proceed), INVALID (connection expired — reconnect with the same flow), DISCONNECTED (was disconnected — reconnect). If it's still not VALID after ~2 minutes, stop and tell the user the connection wasn't completed and they can retry.

  4. If this was a standalone connect request, stop here — the channel is connected. Otherwise, run STEP 4b (List Accounts) to get the now-connected account's id for channel.accountId. (The poll already confirmed VALID, so no need to re-check status.)

If the user declines to connect, stop: the post can't be delivered to an unconnected channel.


STEP 5: Check premium features

One call tells you what the site's plan allows — whether you can publish or schedule — so you fail fast before creating anything. (AI generation is not gated by this call — see STEP 2 — so there's no need to check for it here.)

API Endpoint: GET https://www.wixapis.com/social-publisher/v1/features?featureTypes=PUBLISH_POST&featureTypes=SCHEDULE_POST

Expected response:

{
  "features": [
    { "type": "PUBLISH_POST", "enabled": true, "quotaInfo": { "limit": 30, "currentUsage": 4, "remainingUsage": 26, "period": "MONTH" } },
    { "type": "SCHEDULE_POST", "enabled": true, "quotaInfo": { "limit": 30, "currentUsage": 4, "remainingUsage": 26, "period": "MONTH" } }
  ],
  "monetizationEnabled": true
}

period is one of NO_PERIOD, MILLISECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR (NO_PERIOD means the quota doesn't reset).

"Available, no real cap" shows up two ways — treat both as available: either the entry carries no quotaInfo at all (monetizationEnabled: false, so quotas aren't enforced — rely on enabled), or it carries a quotaInfo of all-zeros (limit: 0, currentUsage: 0) from the unlimited-plan misreport.

Decision point:

  • The action you'll use — PUBLISH_POST (publish now) or SCHEDULE_POST (schedule) — enabled: false → the plan doesn't include it; advise upgrading the social media marketing plan.

  • If SCHEDULE_POST is enabled: false, drop scheduling from the conversation entirely — treat "publish now" as the only action. Don't offer a "publish now or schedule?" choice anywhere in the flow, and don't present scheduling while noting it's unavailable. At most mention once that scheduling would need a plan upgrade.

  • monetizationEnabled: true, a positive quotaInfo.limit, and remainingUsage: 0 → quota used up; don't attempt the action (it fails with a 428). Say when it resets (period, unless NO_PERIOD), offer the alternative action if it's enabled (e.g. publish-now exhausted + scheduling enabled → offer to schedule, even for a few minutes ahead), and mention upgrading once.

  • quotaInfo with limit: 0 / currentUsage: 0 → unmetered, not blocked (see above). Treat the action as available and proceed.

  • Otherwise → proceed.


STEP 6: Create the draft item

Create the approved post as a draft. The response returns the draft's id, which STEP 7 publishes.

API Endpoint: POST https://www.wixapis.com/social-publisher/v1/items

Build the request from item.channel (name + the accountId from STEP 4b), item.type (from the STEP 3 table), and exactly one channel-specific content object.

Assembling the content object:

  • If you generated with STEP 2a (generate-post-data), the returned per-channel object (e.g. instagramPost) is the content object — pass its caption/text through as-is, but first: (1) if its mediaWrapper.media[].url is on a temp/external host, run it through Media Manager import (STEP 3) and replace the URL with the resulting static.wixstatic.com one; (2) add the channel-specific IDs generation can't know, from the STEP 4b account object per the field-path table: authorId (LinkedIn), pageId (Facebook), boardId (Pinterest), locationId (GBP), channelId (YouTube), and privacyLevel (TikTok). The generated payload never includes these, the draft is accepted without them, and publishing then fails (e.g. LinkedIn rejects the post: /author :: field is required).

  • Otherwise, build it from the STEP 3 table row for your channel + type: the text field (caption for Instagram/Facebook/LinkedIn/X, description for YouTube/Pinterest/GBP/TikTok), the media (mediaWrapper, or imageUrl/videoUrl for a single item), and any channel-specific IDs from the STEP 4b account object, plus title where the channel uses one.

  • Instagram and story types require media.

Attribution (always set this). Set item.consumerInfo to { "name": "wix-skills-social" } on every create-draft call, for every channel. consumerInfo.name identifies what created the post — the Social Media Marketing dashboard sets social-marketing, and this recipe sets wix-skills-social. Set it on the draft: name is applied on creation only, and Update Item ignores it.

Idempotency (retry safety). Set a stable, caller-defined item.referenceId on the draft. The Publisher enforces its uniqueness — a second item created/published with the same referenceId is rejected with REFERENCE_ID_ALREADY_EXIST instead of posting a duplicate. So if a create or publish call times out, retry with the same referenceId rather than risk double-posting.

Example — Instagram image post:

{
  "item": {
    "channel": { "name": "INSTAGRAM", "accountId": "17841405822304914" },
    "type": "POST",
    "consumerInfo": { "name": "wix-skills-social" },
    "instagramPost": {
      "imageUrl": "https://static.wixstatic.com/media/cf2434_4b3a2d8eb7f54bc89c0d4524430a2af3~mv2.jpg",
      "caption": "Summer collection just dropped! Shop the look now. #summerstyle #newarrivals"
    }
  }
}

For multiple media, use mediaWrapper instead of imageUrl/videoUrl:

"instagramPost": { "mediaWrapper": { "media": [{ "type": "IMAGE", "url": "https://static.wixstatic.com/media/....jpg" }] }, "caption": "..." }

Example — Facebook image post (accountId = facebook.id, pageId = facebook.page.id, from STEP 4b):

{
  "item": {
    "channel": { "name": "FACEBOOK", "accountId": "1022334455667788" },
    "type": "POST",
    "facebookPost": {
      "pageId": "102938475610293",
      "imageUrl": "https://static.wixstatic.com/media/cf2434_4b3a2d8eb7f54bc89c0d4524430a2af3~mv2.jpg",
      "caption": "Summer sale is on — 20% off all handmade ceramic mugs this week!"
    }
  }
}

Example — TikTok photo post (needs privacyLevel from tiktok.privacyLevelOptions; description is the text field):

{
  "item": {
    "channel": { "name": "TIKTOK", "accountId": "7c9f0a12-4e6d-4a8b-9c3f-2d5e1a7b0c94" },
    "type": "POST",
    "tiktokPhoto": {
      "title": "Summer sale",
      "description": "20% off handmade ceramic mugs this week ☀️ #ceramics #handmade",
      "privacyLevel": "PUBLIC_TO_EVERYONE",
      "mediaWrapper": { "media": [{ "type": "IMAGE", "url": "https://static.wixstatic.com/media/cf2434_4b3a2d8eb7f54bc89c0d4524430a2af3~mv2.jpg" }] }
    }
  }
}

Example — YouTube video (channelId = youtube.id from STEP 4b; user brings the videoUrl — 2a can't generate YouTube content):

{
  "item": {
    "channel": { "name": "YOUTUBE", "accountId": "UC_x5XG1OV2P6uZZ5FSM9Ttw" },
    "type": "VIDEO",
    "youtubeVideo": {
      "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
      "title": "Summer collection behind the scenes",
      "description": "A look at how we make our handmade ceramic mugs.",
      "videoUrl": "https://video.wixstatic.com/video/cf2434_.../mp4/file.mp4"
    }
  }
}

Expected response (abridged) — save id:

{ "item": { "id": "ac01c174-5244-49df-8085-84d87cd0345a", "status": "DRAFT", "channel": { "name": "INSTAGRAM", "accountId": "17841405822304914" }, "type": "POST" } }

STEP 7: Publish now or schedule

Only offer scheduling if SCHEDULE_POST was enabled: true in STEP 5 (per that step's decision point); otherwise publish now is the only option.

The user already approved this exact content in STEP 3, so publish what was approved — don't regenerate. Publishing immediately is public and can't be undone (you can only delete the post afterward); if anything about the content changed since the STEP 3 approval, re-confirm before this call.

API Endpoint: POST https://www.wixapis.com/social-publisher/v1/publish-by-id

Publish immediately — omit scheduledDate:

{ "id": "ac01c174-5244-49df-8085-84d87cd0345a" }

Schedule for a future date — include scheduledDate (ISO 8601, must be strictly in the future; confirm SCHEDULE_POST in STEP 5). Resolve the user's relative wording ("next Monday 9am", "today at 9") as a wall-clock time in the site's timezone if known, otherwise UTC, then convert that to an ISO instant. Immediately before publish-by-id, validate new Date(scheduledDate).getTime() > Date.now() — wording like "today at 9am" easily resolves to an instant that has already passed. If it isn't strictly in the future, don't send it: advance to the next matching future occurrence (e.g. tomorrow at 9am) or ask the user to confirm a later time. For a series of scheduled posts, compute and validate each occurrence independently. Confirm the resolved date(s) with the user:

{ "id": "ac01c174-5244-49df-8085-84d87cd0345a", "scheduledDate": "<future-ISO-8601-datetime>" }

X (Twitter) cutoff. X is no longer functional after July 31, 2026. Don't publish to X once that date has passed, and don't schedule an X post with a scheduledDate after it — a post scheduled to fire past the cutoff won't be published.

Expected response: the item with an updated status:

  • PUBLISHED — live on the channel; externalItemUrl links to the post.

  • SCHEDULED — will publish automatically at scheduledDate.

  • PROCESSING — publishing in progress; final status follows asynchronously.

  • FAILED — publishing failed; surface the error.

(The full status set is DRAFT, SCHEDULED, PROCESSING, IN_QUEUE, PUBLISHED, CANCELED, FAILED, DELETED.)

The post appears on the site's Social Media Marketing page in the dashboard. To reschedule a SCHEDULED item, call POST https://www.wixapis.com/social-publisher/v1/items/{id}/reschedule with body { "scheduledDate": "<new-date>" } (the item moves to SCHEDULED at the new date). To cancel it, call PATCH https://www.wixapis.com/social-publisher/v1/items/{id}/cancel with an empty body {} (the item moves to CANCELED).


Error handling

SymptomCauseFix
STEP 4a long-lived-token-status returns NEVER_CREATED / DISCONNECTED / INVALIDChannel not connected (or connection expired)Offer STEP 4c to connect/reconnect; don't call List Accounts for this channel — status already told you there's no user
STEP 4b returns empty accounts even though status was VALIDToken exists but no postable page/account was granted at authorizationTreat as not-connected for that channel; re-run STEP 4c and tell the user to grant the Page
400 USER_NOT_EXIST_FOR_CHANNEL on List AccountsThe queried channel has no connected user. Shouldn't occur after a VALID status (STEP 4a gates this) — a stray one means it disconnected between callsTreat as not-connected for that channel only; offer STEP 4c. Don't conclude the whole site has no connected accounts — the check is per-channel
428 INELIGIBLE_FOR_FEATURE on Get Connect UrlSite has hit its plan's cap on number of connected channels (e.g. free = 1), not a channel-specific blockExplain the channel-count limit; offer to upgrade, or find the already-connected channel (List Accounts / ask) and offer to post there. Don't suggest connecting a different new channel (same cap), don't suggest disconnecting/switching, don't retry the connect flow
FAILED_PRECONDITION / NO_PAGES_FOR_USER on List AccountsConnected Facebook/Instagram user has no page with a linked postable accountAsk the owner to grant a Facebook page (with a linked Instagram Business/Creator account) during authorization, then retry
Publish fails on a missing account-derived ID (e.g. LinkedIn /author :: field is required)The authorId/pageId/boardId/locationId/channelId/privacyLevel wasn't added to the content objectRead it from the STEP 4b account object per the field-path table and add it before publishing
STEP 5 shows the publish/schedule feature enabled: false or remainingUsage: 0Plan doesn't allow the action, or quota used upAdvise upgrading, or wait for quota reset
FAILED_PRECONDITION / INELIGIBLE_FOR_FEATURE on publish or schedulePlan doesn't cover the action, or its quota is 0/exhausted (see the quotaInfo from STEP 5)Don't retry; offer the other action if enabled (schedule vs publish now), or advise upgrading
SCHEDULED_TIME_ALREADY_PASSED (or a generic/HTML 400) on scheduleThe resolved scheduledDate is in the past — usually a relative time like "today at 9am" that resolved to a past instantRecompute the wall-clock time in the site's timezone, validate the ISO instant is > Date.now(), and advance to the next future occurrence (or confirm a later time) before retrying — don't send-and-catch
429 RESOURCE_EXHAUSTED / PUBLISH_LIMIT_EXCEEDEDPublishing rate limit hitBack off and retry later
ALREADY_EXISTS / REFERENCE_ID_ALREADY_EXIST on create or publishAn item with the same referenceId already existsExpected when safely retrying a create/publish that already succeeded — don't retry with a new referenceId
FAILED_PRECONDITION / UNSUPPORTED_CHANNELTargeting an unsupported channel, or X/Twitter after its July 31, 2026 cutoffUse a supported channel; target X only before the cutoff
Create item rejected for missing mediaInstagram and story types require media (GBP needs description and/or media)Provide a public image/video URL from the user's own media
Reschedule/cancel returns ITEM_NOT_EXISTS, ITEM_IS_PUBLISHED, or ITEM_IS_DELETEDThe item can't be rescheduled/canceled in its current stateOnly reschedule/cancel items still in SCHEDULED status
Publish returns status: FAILEDContent/type mismatch or channel rejected the postVerify the type + content object match the channel's supported combination and that media URLs are public
An error arrives as an HTML page with only an HTTP status (no error code)Some gateways render branded HTML error pages to non-browser callers, hiding the structured errorInterpret by status + endpoint: 428 on Get Connect Url = channel-count cap (handle per that row); 428 on publish/schedule = plan or quota gate. A 400 on List Accounts = channel not connected, but you shouldn't reach it — gate on long-lived-token-status (STEP 4a). Never read the page as "app not installed" or a random outage

References

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Node.js

The author says: Requires Wix REST API access (API key or OAuth).

Security

What our scanner noticed· Low risk

  • Phrasing that asks for actions without confirmation
  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Wix
Publisher
Wix (Official)
Source
wix/skills · skills/wix-manage · commit d168bc2
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Wix.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download wix-manage.zip