@jskit-ai/connectors-catalog 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +192 -0
- package/docs/ai-upstream-notices.md +51 -0
- package/docs/ai.md +191 -0
- package/docs/airtable.md +130 -0
- package/docs/algolia.md +190 -0
- package/docs/amazon-redshift.md +229 -0
- package/docs/amplitude.md +210 -0
- package/docs/apify.md +162 -0
- package/docs/apollo-io.md +200 -0
- package/docs/asana.md +126 -0
- package/docs/ashby.md +188 -0
- package/docs/atlassian.md +224 -0
- package/docs/attention.md +162 -0
- package/docs/aws-athena.md +150 -0
- package/docs/aws-credentials.md +75 -0
- package/docs/aws-s3.md +193 -0
- package/docs/bigquery.md +146 -0
- package/docs/brevo.md +122 -0
- package/docs/calendly.md +158 -0
- package/docs/canva.md +191 -0
- package/docs/chargebee.md +192 -0
- package/docs/clay.md +194 -0
- package/docs/clickhouse.md +242 -0
- package/docs/confidence-exp.md +74 -0
- package/docs/confidence-flags.md +75 -0
- package/docs/confidence-oauth.md +137 -0
- package/docs/contentful.md +123 -0
- package/docs/databricks.md +180 -0
- package/docs/dbt-semantic-layer.md +175 -0
- package/docs/elevenlabs.md +102 -0
- package/docs/figma.md +132 -0
- package/docs/firebase-cloud-messaging.md +262 -0
- package/docs/firecrawl.md +137 -0
- package/docs/fireflies.md +95 -0
- package/docs/fireworks-ai.md +53 -0
- package/docs/gatewayapi.md +113 -0
- package/docs/gemini-enterprise.md +224 -0
- package/docs/github-api.md +133 -0
- package/docs/gitlab-api.md +138 -0
- package/docs/gmail.md +133 -0
- package/docs/gong.md +205 -0
- package/docs/google-ads.md +156 -0
- package/docs/google-analytics.md +202 -0
- package/docs/google-docs.md +105 -0
- package/docs/google-drive.md +108 -0
- package/docs/google-maps-platform.md +208 -0
- package/docs/google-oauth.md +123 -0
- package/docs/google-search-console.md +124 -0
- package/docs/google-sheets.md +94 -0
- package/docs/google-slides.md +95 -0
- package/docs/granola.md +178 -0
- package/docs/hex.md +161 -0
- package/docs/heygen.md +124 -0
- package/docs/hubspot.md +142 -0
- package/docs/incident-io.md +118 -0
- package/docs/inngest.md +178 -0
- package/docs/klipy.md +149 -0
- package/docs/lexware.md +144 -0
- package/docs/lightspeed.md +193 -0
- package/docs/linear.md +137 -0
- package/docs/linkedin.md +196 -0
- package/docs/logo-dev.md +152 -0
- package/docs/mailgun.md +153 -0
- package/docs/mapbox.md +174 -0
- package/docs/microsoft-excel.md +97 -0
- package/docs/microsoft-fabric.md +249 -0
- package/docs/microsoft-oauth.md +143 -0
- package/docs/microsoft-onedrive.md +76 -0
- package/docs/microsoft-onenote.md +75 -0
- package/docs/microsoft-outlook.md +90 -0
- package/docs/microsoft-powerpoint.md +119 -0
- package/docs/microsoft-sharepoint.md +75 -0
- package/docs/microsoft-teams.md +72 -0
- package/docs/microsoft-word.md +119 -0
- package/docs/miro.md +117 -0
- package/docs/n8n.md +169 -0
- package/docs/notion.md +137 -0
- package/docs/oura.md +161 -0
- package/docs/paddle.md +168 -0
- package/docs/perplexity.md +85 -0
- package/docs/pipedrive.md +120 -0
- package/docs/polar.md +63 -0
- package/docs/posthog.md +227 -0
- package/docs/prestashop.md +151 -0
- package/docs/replicate.md +60 -0
- package/docs/resend.md +153 -0
- package/docs/salesforce.md +234 -0
- package/docs/sanity.md +122 -0
- package/docs/semrush.md +276 -0
- package/docs/sentry.md +112 -0
- package/docs/sevdesk.md +107 -0
- package/docs/shopify.md +206 -0
- package/docs/slack.md +257 -0
- package/docs/snowflake.md +271 -0
- package/docs/storyblok.md +130 -0
- package/docs/stripe.md +77 -0
- package/docs/supabase.md +51 -0
- package/docs/tally.md +105 -0
- package/docs/telegram.md +165 -0
- package/docs/tiktok.md +201 -0
- package/docs/twilio.md +284 -0
- package/docs/twitch.md +428 -0
- package/docs/wave.md +440 -0
- package/docs/wix.md +1249 -0
- package/docs/wiz.md +177 -0
- package/docs/woocommerce.md +400 -0
- package/docs/wordpress-com.md +358 -0
- package/docs/wordpress-self-hosted.md +252 -0
- package/docs/workday.md +292 -0
- package/docs/x-twitter.md +188 -0
- package/docs/xero.md +429 -0
- package/docs/zoho-books.md +214 -0
- package/docs/zoho-crm.md +192 -0
- package/package.json +153 -0
- package/patterns/ai-connections/PATTERN.md +84 -0
- package/patterns/ai-connections/example/ai-model.js +11 -0
- package/patterns/ai-connections/example/perplexity-answer.js +29 -0
- package/patterns/api-key-connection/PATTERN.md +368 -0
- package/patterns/api-key-connection/example/connections.js +18 -0
- package/patterns/api-key-connection/example/integrations.json +19 -0
- package/patterns/assistant-mcp/PATTERN.md +110 -0
- package/patterns/assistant-mcp/example/integrations.json +13 -0
- package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
- package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
- package/patterns/aws-storage-queries/PATTERN.md +169 -0
- package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
- package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
- package/patterns/aws-storage-queries/example/formats/package.json +12 -0
- package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
- package/patterns/aws-storage-queries/example/integrations.json +38 -0
- package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
- package/patterns/event-delivery/PATTERN.md +151 -0
- package/patterns/event-delivery/example/integrations.json +17 -0
- package/patterns/firebase-messaging/PATTERN.md +156 -0
- package/patterns/firebase-messaging/example/server/notifications.js +23 -0
- package/patterns/google-ads-search/PATTERN.md +92 -0
- package/patterns/google-ads-search/example/ads-setup.js +25 -0
- package/patterns/oauth-connection/PATTERN.md +724 -0
- package/patterns/oauth-connection/example/integrations.json +20 -0
- package/patterns/paddle-catalogue/PATTERN.md +78 -0
- package/patterns/paddle-catalogue/example/create-products.js +38 -0
- package/patterns/public-image/PATTERN.md +84 -0
- package/patterns/public-image/example/integrations.json +13 -0
- package/patterns/public-image/example/logo-url.js +16 -0
- package/patterns/redshift-queries/PATTERN.md +150 -0
- package/patterns/redshift-queries/example/integrations.json +33 -0
- package/patterns/source-scanning/PATTERN.md +83 -0
- package/patterns/source-scanning/example/source-scanner.js +13 -0
- package/src/client/firebase-cloud-messaging.js +10 -0
- package/src/client/google-analytics.js +72 -0
- package/src/client/google-maps-platform.js +39 -0
- package/src/client/logo-dev.js +36 -0
- package/src/server/ai.js +46 -0
- package/src/server/airtable.js +67 -0
- package/src/server/algolia.js +63 -0
- package/src/server/amazon-redshift.js +96 -0
- package/src/server/amplitude.js +31 -0
- package/src/server/apify.js +68 -0
- package/src/server/apollo-io.js +85 -0
- package/src/server/asana.js +64 -0
- package/src/server/ashby.js +61 -0
- package/src/server/atlassian.js +32 -0
- package/src/server/attention.js +93 -0
- package/src/server/aws-athena.js +82 -0
- package/src/server/aws-s3.js +49 -0
- package/src/server/awsTransport.js +75 -0
- package/src/server/bigquery.js +97 -0
- package/src/server/brevo.js +97 -0
- package/src/server/calendly.js +77 -0
- package/src/server/canva.js +13 -0
- package/src/server/chargebee.js +88 -0
- package/src/server/clay.js +78 -0
- package/src/server/clickhouse.js +66 -0
- package/src/server/confidence.js +29 -0
- package/src/server/contentful.js +40 -0
- package/src/server/databricks.js +55 -0
- package/src/server/dbt-semantic-layer.js +95 -0
- package/src/server/elevenlabs.js +81 -0
- package/src/server/figma.js +24 -0
- package/src/server/firebase-cloud-messaging.js +111 -0
- package/src/server/firecrawl.js +70 -0
- package/src/server/fireflies.js +31 -0
- package/src/server/fireworks-ai.js +16 -0
- package/src/server/gatewayapi.js +48 -0
- package/src/server/gemini-enterprise.js +47 -0
- package/src/server/github-api.js +90 -0
- package/src/server/gitlab-api.js +67 -0
- package/src/server/gmail.js +60 -0
- package/src/server/gong.js +52 -0
- package/src/server/google-ads-search.js +134 -0
- package/src/server/google-ads.js +80 -0
- package/src/server/google-docs.js +36 -0
- package/src/server/google-drive.js +71 -0
- package/src/server/google-maps-platform.js +90 -0
- package/src/server/google-search-console.js +31 -0
- package/src/server/google-sheets.js +60 -0
- package/src/server/google-slides.js +36 -0
- package/src/server/google.js +61 -0
- package/src/server/granola.js +115 -0
- package/src/server/graphqlOperation.js +15 -0
- package/src/server/hex.js +29 -0
- package/src/server/heygen.js +54 -0
- package/src/server/hubspot.js +85 -0
- package/src/server/incident-io.js +68 -0
- package/src/server/inngest.js +86 -0
- package/src/server/jsonOperation.js +34 -0
- package/src/server/klipy.js +34 -0
- package/src/server/lexware.js +59 -0
- package/src/server/lightspeed.js +82 -0
- package/src/server/linear.js +52 -0
- package/src/server/linkedin.js +74 -0
- package/src/server/mailgun.js +76 -0
- package/src/server/mapbox.js +46 -0
- package/src/server/mcpRegistration.js +41 -0
- package/src/server/mcpTransport.js +60 -0
- package/src/server/microsoft-excel.js +67 -0
- package/src/server/microsoft-fabric.js +81 -0
- package/src/server/microsoft-onedrive.js +58 -0
- package/src/server/microsoft-onenote.js +52 -0
- package/src/server/microsoft-outlook.js +58 -0
- package/src/server/microsoft-powerpoint.js +5 -0
- package/src/server/microsoft-sharepoint.js +46 -0
- package/src/server/microsoft-teams.js +29 -0
- package/src/server/microsoft-word.js +5 -0
- package/src/server/microsoft.js +88 -0
- package/src/server/miro.js +29 -0
- package/src/server/n8n.js +78 -0
- package/src/server/notion.js +76 -0
- package/src/server/oura.js +48 -0
- package/src/server/paddle.js +83 -0
- package/src/server/perplexity.js +15 -0
- package/src/server/pipedrive.js +95 -0
- package/src/server/polar.js +20 -0
- package/src/server/posthog.js +44 -0
- package/src/server/prestashop.js +42 -0
- package/src/server/replicate.js +42 -0
- package/src/server/resend.js +93 -0
- package/src/server/salesforce.js +84 -0
- package/src/server/sanity.js +31 -0
- package/src/server/semrush.js +359 -0
- package/src/server/sentry.js +30 -0
- package/src/server/sevdesk.js +20 -0
- package/src/server/shopify.js +99 -0
- package/src/server/slack.js +143 -0
- package/src/server/snowflake.js +139 -0
- package/src/server/storyblok.js +49 -0
- package/src/server/stripe.js +13 -0
- package/src/server/supabase.js +13 -0
- package/src/server/tally.js +78 -0
- package/src/server/telegram.js +55 -0
- package/src/server/tiktok.js +86 -0
- package/src/server/twilio.js +90 -0
- package/src/server/twitch.js +409 -0
- package/src/server/wave.js +520 -0
- package/src/server/wix.js +1048 -0
- package/src/server/wiz.js +117 -0
- package/src/server/woocommerce.js +412 -0
- package/src/server/wordpress-com.js +236 -0
- package/src/server/wordpress-self-hosted.js +134 -0
- package/src/server/workday.js +136 -0
- package/src/server/x-twitter.js +110 -0
- package/src/server/xero.js +397 -0
- package/src/server/zoho-books.js +90 -0
- package/src/server/zoho-crm.js +89 -0
- package/src/server/zohoOAuth.js +21 -0
- package/src/shared/ai-models.json +8049 -0
- package/src/shared/ai.js +63 -0
- package/src/shared/algolia.js +29 -0
- package/src/shared/amazon-redshift.js +51 -0
- package/src/shared/amplitude.js +28 -0
- package/src/shared/atlassian.js +43 -0
- package/src/shared/aws.js +72 -0
- package/src/shared/canva.js +66 -0
- package/src/shared/chargebee.js +26 -0
- package/src/shared/clickhouse.js +38 -0
- package/src/shared/confidence.js +28 -0
- package/src/shared/databricks.js +33 -0
- package/src/shared/dbt-semantic-layer.js +32 -0
- package/src/shared/definitions.js +140 -0
- package/src/shared/figma.js +21 -0
- package/src/shared/firebase-cloud-messaging.js +45 -0
- package/src/shared/gemini-enterprise.js +33 -0
- package/src/shared/gong.js +33 -0
- package/src/shared/google-ads-search.js +31 -0
- package/src/shared/google-ads.js +28 -0
- package/src/shared/google-maps-platform.js +28 -0
- package/src/shared/google.js +133 -0
- package/src/shared/granola.js +25 -0
- package/src/shared/hex.js +28 -0
- package/src/shared/inngest.js +35 -0
- package/src/shared/lightspeed.js +75 -0
- package/src/shared/linkedin.js +27 -0
- package/src/shared/logo-dev.js +21 -0
- package/src/shared/mapbox.js +38 -0
- package/src/shared/mcp.js +92 -0
- package/src/shared/microsoft-fabric.js +47 -0
- package/src/shared/microsoft.js +231 -0
- package/src/shared/miro.js +27 -0
- package/src/shared/oura.js +23 -0
- package/src/shared/posthog.js +33 -0
- package/src/shared/prestashop.js +23 -0
- package/src/shared/salesforce.js +36 -0
- package/src/shared/semrush.js +24 -0
- package/src/shared/shopify.js +51 -0
- package/src/shared/siteUrl.js +12 -0
- package/src/shared/slack.js +88 -0
- package/src/shared/snowflake.js +55 -0
- package/src/shared/tiktok.js +22 -0
- package/src/shared/tokens.js +747 -0
- package/src/shared/twilio.js +41 -0
- package/src/shared/twitch.js +49 -0
- package/src/shared/wave.js +52 -0
- package/src/shared/wix.js +40 -0
- package/src/shared/wiz.js +41 -0
- package/src/shared/wordpress-com.js +30 -0
- package/src/shared/wordpress.js +69 -0
- package/src/shared/workday.js +50 -0
- package/src/shared/x-twitter.js +19 -0
- package/src/shared/xero.js +46 -0
- package/src/shared/zoho-books.js +39 -0
- package/src/shared/zoho-crm.js +43 -0
- package/src/shared/zoho-regions.js +12 -0
- package/test/ai.test.js +136 -0
- package/test/airtable.test.js +125 -0
- package/test/algolia.test.js +207 -0
- package/test/amazon-redshift.test.js +272 -0
- package/test/amplitude.test.js +239 -0
- package/test/apify.test.js +93 -0
- package/test/apollo-io.test.js +125 -0
- package/test/asana.test.js +99 -0
- package/test/ashby.test.js +97 -0
- package/test/atlassian.test.js +249 -0
- package/test/attention.test.js +79 -0
- package/test/aws.test.js +405 -0
- package/test/brevo.test.js +71 -0
- package/test/calendly.test.js +136 -0
- package/test/canva.test.js +258 -0
- package/test/chargebee.test.js +195 -0
- package/test/clickhouse.test.js +278 -0
- package/test/confidence.test.js +205 -0
- package/test/databricks.test.js +253 -0
- package/test/dbt-semantic-layer.test.js +221 -0
- package/test/designMcp.test.js +336 -0
- package/test/elevenlabs.test.js +52 -0
- package/test/firebase-cloud-messaging.test.js +242 -0
- package/test/firecrawl.test.js +66 -0
- package/test/gemini-enterprise.test.js +218 -0
- package/test/github-api.test.js +167 -0
- package/test/gitlab-api.test.js +160 -0
- package/test/gong.test.js +192 -0
- package/test/google-ads.test.js +350 -0
- package/test/google-maps-platform.test.js +191 -0
- package/test/google.test.js +710 -0
- package/test/granola.test.js +240 -0
- package/test/hex.test.js +253 -0
- package/test/heygen.test.js +121 -0
- package/test/hubspot.test.js +103 -0
- package/test/inngest.test.js +219 -0
- package/test/lightspeed.test.js +250 -0
- package/test/linear.test.js +146 -0
- package/test/linkedin.test.js +243 -0
- package/test/logo-dev.test.js +79 -0
- package/test/mailgun.test.js +107 -0
- package/test/mapbox.test.js +181 -0
- package/test/mcp.test.js +227 -0
- package/test/microsoft-fabric.test.js +258 -0
- package/test/microsoft.test.js +554 -0
- package/test/n8nOAuth.test.js +188 -0
- package/test/notionOAuth.test.js +183 -0
- package/test/oura.test.js +211 -0
- package/test/paddleCatalogue.test.js +51 -0
- package/test/paddlePermissions.test.js +101 -0
- package/test/perplexityComposition.test.js +39 -0
- package/test/pipedriveOAuth.test.js +140 -0
- package/test/posthog.test.js +200 -0
- package/test/prestashop.test.js +207 -0
- package/test/resend.test.js +163 -0
- package/test/salesforce.test.js +276 -0
- package/test/semrush.test.js +479 -0
- package/test/sentry.test.js +35 -0
- package/test/shopify.test.js +247 -0
- package/test/slack.test.js +320 -0
- package/test/snowflake.test.js +391 -0
- package/test/tally.test.js +75 -0
- package/test/telegram.test.js +58 -0
- package/test/tiktok.test.js +243 -0
- package/test/tokens.test.js +1079 -0
- package/test/twilio.test.js +221 -0
- package/test/twitch.test.js +573 -0
- package/test/wave.test.js +678 -0
- package/test/wix.test.js +1099 -0
- package/test/wiz.test.js +185 -0
- package/test/wordpress-com.test.js +469 -0
- package/test/wordpress.test.js +660 -0
- package/test/workday.test.js +314 -0
- package/test/x-twitter.test.js +256 -0
- package/test/xero.test.js +700 -0
- package/test/zoho-books.test.js +253 -0
- package/test/zoho-crm.test.js +223 -0
package/docs/wix.md
ADDED
|
@@ -0,0 +1,1249 @@
|
|
|
1
|
+
# Wix
|
|
2
|
+
|
|
3
|
+
Import `wixProvider` from `@jskit-ai/connectors-catalog/server/wix`. The
|
|
4
|
+
runtime reads account sites and business locations, manages site contacts and
|
|
5
|
+
booking-service settings, queries availability, creates/cancels bookings, reads orders
|
|
6
|
+
and reads/edits products in both Wix catalogue versions. Vibe64 and CLI consumers
|
|
7
|
+
edit the same JSON and use shared validation, authorization and encrypted file
|
|
8
|
+
storage. Provider acceptance is still in progress; see Verification status below.
|
|
9
|
+
|
|
10
|
+
## Provider setup
|
|
11
|
+
|
|
12
|
+
1. Sign into the intended Wix account as an owner or co-owner. Open account
|
|
13
|
+
settings and its API Keys Manager. Copy the Account ID shown there.
|
|
14
|
+
2. Generate a key, name it for this integration and select **Read Site Data**
|
|
15
|
+
for querying sites. Grant only the access the application needs. Complete
|
|
16
|
+
the requested verification and store the issued token securely on the backend.
|
|
17
|
+
3. In an Enterprise dashboard, the documented path is API Keys, **Generate API
|
|
18
|
+
Key**, key details/permissions, **Generate Key**, account verification, then
|
|
19
|
+
**Copy Token & Close**. Other account dashboards may present different labels.
|
|
20
|
+
4. Put the token in `WIX_API_KEY`; put its reference and the Account ID in the
|
|
21
|
+
JSON below. The account ID is not a site ID. Save the file, then explicitly
|
|
22
|
+
call `connectApiKey` when ready. It checks account site discovery; it does not
|
|
23
|
+
prove permission for every site operation. Verify the intended read operation
|
|
24
|
+
before enabling its feature, and grant write permissions only when needed.
|
|
25
|
+
|
|
26
|
+
[Key generation](https://dev.wix.com/docs/go-headless/authentication/admin/generate-an-api-key),
|
|
27
|
+
[Enterprise console steps](https://support.wix.com/en/article/wix-enterprise-using-wix-api-keys),
|
|
28
|
+
[account and site identifiers](https://dev.wix.com/docs/develop-websites-sdk/code-your-site/authorization/make-rest-api-calls-with-an-api-key).
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"schemaVersion": 1,
|
|
33
|
+
"registrations": {},
|
|
34
|
+
"integrations": {
|
|
35
|
+
"website-account": {
|
|
36
|
+
"provider": "wix",
|
|
37
|
+
"displayName": "Wix sites",
|
|
38
|
+
"accountMode": "shared",
|
|
39
|
+
"scopes": [],
|
|
40
|
+
"authentication": { "method": "api-key", "secretRef": "env:WIX_API_KEY" },
|
|
41
|
+
"settings": {
|
|
42
|
+
"accountId": "01234567-89ab-cdef-0123-456789abcdef",
|
|
43
|
+
"siteId": "12345678-9abc-def0-1234-56789abcdef0"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Replace both illustrative IDs with your own account and intended site. Site ID
|
|
51
|
+
is required for every operation except `sites.list`; omit it only while discovering
|
|
52
|
+
the site. Copy it from the Wix dashboard URL after `/dashboard/`, or from an
|
|
53
|
+
authorized `sites.list` result. Save and verify again after changing either binding. Assistant ownership is available with the host's access policy. Per-user
|
|
54
|
+
OAuth and Wix member/application login are separate flows, outside this fragment.
|
|
55
|
+
An account key grants administrative access without a user session; it must stay
|
|
56
|
+
on the server. [Authentication boundary](https://dev.wix.com/docs/overview/auth-permissions/authentication-methods).
|
|
57
|
+
|
|
58
|
+
## CLI and runtime
|
|
59
|
+
|
|
60
|
+
Compose `createConnectionService` with `wixProvider`, the parsed file, encrypted
|
|
61
|
+
file storage and the host's trusted owner/operation policy, following the
|
|
62
|
+
packaged API-key connection pattern. Pass this provider to configuration
|
|
63
|
+
validation as well. No application template or editor database is needed.
|
|
64
|
+
|
|
65
|
+
```js
|
|
66
|
+
await connections.connectApiKey({
|
|
67
|
+
context: authenticatedOwner, integrationId: "website-account"
|
|
68
|
+
});
|
|
69
|
+
const page = await connections.invoke({
|
|
70
|
+
context: authenticatedOwner, integrationId: "website-account",
|
|
71
|
+
operation: "sites.list", input: { limit: 20 }
|
|
72
|
+
});
|
|
73
|
+
const next = page.metadata?.cursors?.next;
|
|
74
|
+
// Pass next as input.cursor only for an explicit subsequent page request.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`sites.list` POSTs to `https://www.wixapis.com/site-list/v2/sites/query` with a
|
|
78
|
+
`query.cursorPaging` object. `limit` is 1–100 (library default 20); `cursor` is
|
|
79
|
+
an opaque returned string. There is no arbitrary filter, URL, account override
|
|
80
|
+
or site-write operation on `sites.list`. Empty site lists are successful. Results use REST `id`, not
|
|
81
|
+
the SDK's `_id`, and preserve original site fields plus optional metadata.
|
|
82
|
+
Wix documents a maximum of 1,000 retrievable sites for this endpoint; this
|
|
83
|
+
fragment does not promise a complete unlimited account export.
|
|
84
|
+
[Query Sites](https://dev.wix.com/docs/api-reference/account-level/sites/sites/query-sites),
|
|
85
|
+
[endpoint limitations](https://dev.wix.com/docs/api-reference/account-level/sites/sites/introduction).
|
|
86
|
+
|
|
87
|
+
`sites.list` sends the key itself in `Authorization` and the configured account
|
|
88
|
+
in `wix-account-id`. Site operations instead send only `wix-site-id`. No Bearer
|
|
89
|
+
prefix is added to the key.
|
|
90
|
+
Keep cursors with the same account and query. Consumers must authorize returned
|
|
91
|
+
site data and treat returned URLs as data, not privileged runtime destinations.
|
|
92
|
+
[REST headers](https://dev.wix.com/docs/develop-websites-sdk/code-your-site/authorization/make-rest-api-calls-with-an-api-key).
|
|
93
|
+
|
|
94
|
+
The runtime verifies before saving and resolves the key reference again for
|
|
95
|
+
later operations, allowing operator rotation. Status reports reconnect-required
|
|
96
|
+
after a key change until verification or a successful operation verifies it.
|
|
97
|
+
Changing the account or site setting requires
|
|
98
|
+
verification again. Local disconnect deletes local access without revoking the
|
|
99
|
+
provider key. API failures are sanitized; 401 requires reconnect, 403 indicates
|
|
100
|
+
missing access, and 429 reports a rate limit without retrying. Malformed result
|
|
101
|
+
fields and input values fail explicitly. Cancellation preserves a verified grant.
|
|
102
|
+
|
|
103
|
+
## Public, Online and automation
|
|
104
|
+
|
|
105
|
+
For this account-key flow, the universal OAuth callback is **not applicable**.
|
|
106
|
+
Customer VPS and custom-domain URLs do not enter the provider authentication
|
|
107
|
+
request. Each connected customer account requires its own authorized account
|
|
108
|
+
binding. A single Vibe64-owned account key cannot grant access to unrelated
|
|
109
|
+
customers' Wix accounts.
|
|
110
|
+
|
|
111
|
+
The application owner supplies the authorized key and its matching Wix account
|
|
112
|
+
binding through private Env and configuration. The backend enforces access to
|
|
113
|
+
that account and keeps the key off browsers. Separate keys do not establish
|
|
114
|
+
independent quota pools; provider limits and permitted use still apply. CLI and
|
|
115
|
+
Vibe64 users configure the same application-owned key flow.
|
|
116
|
+
|
|
117
|
+
| Task | Automation assessment |
|
|
118
|
+
|---|---|
|
|
119
|
+
| Create an application-owned provider registration | This captured mode uses account keys, with no OAuth app registration. Other Wix app flows require a separate implementation. |
|
|
120
|
+
| Issue account keys | Reviewed documentation establishes the console and account verification process. No unattended key-issuance API was established for this workflow. |
|
|
121
|
+
| Prepare configuration and runtime wiring | AI can write/validate the portable file, compose existing library APIs and supply the operation policy. |
|
|
122
|
+
| Read accessible sites | The library performs explicit pages after verification. It does not create, publish or modify sites. |
|
|
123
|
+
|
|
124
|
+
## Capability and permission map
|
|
125
|
+
|
|
126
|
+
Permissions below are granted to the key in Wix. The JSON `scopes` remains empty;
|
|
127
|
+
selecting a capability in an application cannot grant a missing provider permission.
|
|
128
|
+
|
|
129
|
+
| Workflow | Operations | Required access |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| Find account sites | `sites.list` | Read Site Data |
|
|
132
|
+
| Select business locations | `locations.list/get` | Read Locations |
|
|
133
|
+
| Read contacts | `contacts.list/get` | Read Contacts |
|
|
134
|
+
| Create/edit contacts | `contacts.create/update` | Manage Contacts |
|
|
135
|
+
| Read booking offerings | `bookingServices.list/get` | Read Bookings - Public Data |
|
|
136
|
+
| Create/edit services; create/cancel bookings | `bookingServices.create/update`, `bookings.create/cancel` | Manage Bookings |
|
|
137
|
+
| Inspect bookings | `bookings.list` | Read Bookings or applicable Manage Bookings access |
|
|
138
|
+
| Check appointment/class availability | `availability.list/get`, `classAvailability.list/get` | Time Slots read permission |
|
|
139
|
+
| Discover booking form fields | `forms.summary` | Get Form Summary |
|
|
140
|
+
| Read orders | `orders.list/get` | Read Orders |
|
|
141
|
+
| Discover catalogue version | `catalog.version` | Read v3 catalog (PII) |
|
|
142
|
+
| Read V1/V3 products | `productsV1.list/get`, `productsV3.list/get` | Read Products / Read products in v3 catalog |
|
|
143
|
+
| Edit V1/V3 products | `productsV1.update`, `productsV3.update` | Manage Products / Product write in v3 catalog |
|
|
144
|
+
|
|
145
|
+
The runtime's trusted host policy must authorize the actual operation and its
|
|
146
|
+
business object. A shared site key is not proof that an app user owns a booking,
|
|
147
|
+
contact or order. Authorize that relationship before returning data or writing.
|
|
148
|
+
The generated app owns its customer screens, checkout and domain-specific rules.
|
|
149
|
+
Public Vibe64 owns editing this project configuration; Online adds no Wix gateway.
|
|
150
|
+
|
|
151
|
+
## Verification status
|
|
152
|
+
|
|
153
|
+
The controlled provider suite currently passes **40/40**, including identity
|
|
154
|
+
headers, input validation, pagination, exact revisions, write bodies, ownership,
|
|
155
|
+
key rotation and failure handling. These use fixtures, not a live Wix account.
|
|
156
|
+
The expanded and compact editor cases each pass with the current Site ID,
|
|
157
|
+
Selectable Site IDs and setup guidance: invalid input, text configuration save and
|
|
158
|
+
reload, missing credentials, connect, reconnect and local disconnect. These browser
|
|
159
|
+
cases use controlled connection responses. A freshly packed catalog installed
|
|
160
|
+
offline in a standalone consumer passed the same 29 controlled cases through
|
|
161
|
+
public package exports, including this guide’s configuration. This proves the
|
|
162
|
+
implemented operations and configuration/lifecycle UI, not the missing workflows
|
|
163
|
+
below or live provider behavior.
|
|
164
|
+
No generated application, payment, real booking or release has been exercised.
|
|
165
|
+
|
|
166
|
+
The following remain outside the implemented operations and need explicit scope
|
|
167
|
+
reconciliation before acceptance: scheduled session management,
|
|
168
|
+
variable-duration and service-variant/add-on booking choices, product creation,
|
|
169
|
+
variant/inventory edits, checkout/fulfilment/refunds.
|
|
170
|
+
Do not infer support for them from a successful connection check.
|
|
171
|
+
|
|
172
|
+
## Site CRM queries
|
|
173
|
+
|
|
174
|
+
Set `settings.siteId` to the intended site's ID, copied from the Wix dashboard URL
|
|
175
|
+
after `/dashboard/`, or selected from `sites.list`. Grant the key **Read Contacts**
|
|
176
|
+
and restrict its site access to the intended sites. Save configuration and verify
|
|
177
|
+
again after changing this binding. By default the caller cannot override this site. Explicit selection is allowed
|
|
178
|
+
only through the configured Selectable Site IDs described below. The app's authorization policy controls which user may read its contacts.
|
|
179
|
+
|
|
180
|
+
`contacts.list` accepts `limit` (1–100, default 20), `offset` (0–100000, default 0)
|
|
181
|
+
and optional `search` (1–100 characters). It calls the documented Contacts v4 query
|
|
182
|
+
with `query.paging` and top-level search. The backend sends the API key and only
|
|
183
|
+
`wix-site-id`; `sites.list` continues to send only `wix-account-id`. These two
|
|
184
|
+
identity headers must not be combined. Contact fields and paging metadata remain
|
|
185
|
+
provider data; no personal details are exposed to unauthenticated callers by the
|
|
186
|
+
library. Native frameworks use the same endpoint and header selection.
|
|
187
|
+
|
|
188
|
+
[Contacts query](https://dev.wix.com/docs/api-reference/crm/members-contacts/contacts/contacts/contact-v4/query-contacts).
|
|
189
|
+
|
|
190
|
+
Rotating the Env key changes status to reconnect-required until a successful
|
|
191
|
+
verification or authorized operation verifies the new key. No OAuth callback or
|
|
192
|
+
application login is introduced by this administrative credential.
|
|
193
|
+
|
|
194
|
+
## Contact creation and updates
|
|
195
|
+
|
|
196
|
+
Grant **Manage Contacts** for `contacts.create` and `contacts.update`, and
|
|
197
|
+
**Read Contacts** for `contacts.get` and `contacts.list`. These are permissions
|
|
198
|
+
on the provider key, rather than OAuth scopes chosen in the application file.
|
|
199
|
+
The same configured Site ID and private Env key are used by CLI and editor hosts.
|
|
200
|
+
|
|
201
|
+
- `contacts.create`: `{ info, allowDuplicates?: false }`. Supply a name, an email
|
|
202
|
+
or a phone; company alone is insufficient. Supported info fields are
|
|
203
|
+
`name: { first, last }`, `company`, `jobTitle`,
|
|
204
|
+
`emails: { items: [{ email, primary?, tag? }] }`, and
|
|
205
|
+
`phones: { items: [{ phone, countryCode?, primary? }] }`. Email and phone lists
|
|
206
|
+
are bounded to 50 entries. Duplicate creation remains disabled by default.
|
|
207
|
+
- `contacts.get`: `{ contactId }`. Use its returned `contact.revision` when editing.
|
|
208
|
+
- `contacts.update`: `{ contactId, revision, info, allowDuplicates?: false }`.
|
|
209
|
+
Submit the intended changed fields. Revision is required and Wix rejects stale
|
|
210
|
+
changes; reload and reconcile with the user rather than automatically replaying.
|
|
211
|
+
|
|
212
|
+
Native frameworks POST to `/contacts/v4/contacts`, GET a contact by ID, or PATCH
|
|
213
|
+
`/contacts/v4/contacts/{contactId}` with revision and info. Returned contact IDs
|
|
214
|
+
are checked against the requested target. The app owns authorization, validation
|
|
215
|
+
of business intent and handling of uncertain writes. A successful transport is
|
|
216
|
+
not proof of a live provider connection in this milestone.
|
|
217
|
+
|
|
218
|
+
Member login emails use Wix's separate Members API; do not use contact updates
|
|
219
|
+
to change them. Contact merging, deletion, addresses, labels and custom fields
|
|
220
|
+
are outside these operations.
|
|
221
|
+
|
|
222
|
+
[Create Contact](https://dev.wix.com/docs/api-reference/crm/members-contacts/contacts/contacts/contact-v4/create-contact),
|
|
223
|
+
[Update Contact](https://dev.wix.com/docs/api-reference/crm/members-contacts/contacts/contacts/contact-v4/update-contact).
|
|
224
|
+
|
|
225
|
+
## Booking service catalog
|
|
226
|
+
|
|
227
|
+
Enable Wix Bookings on the intended site. Grant **Read Bookings - Public Data**
|
|
228
|
+
for `bookingServices.list/get`, and **Manage Bookings** for updates. The configured
|
|
229
|
+
Site ID controls every request; account discovery remains separately account-bound.
|
|
230
|
+
|
|
231
|
+
`bookingServices.list` accepts `limit` (1–100, default 20) and `offset`
|
|
232
|
+
(0–100000, default 0), returning services and provider paging metadata.
|
|
233
|
+
`bookingServices.get` accepts `{ serviceId }`. `bookingServices.update` accepts
|
|
234
|
+
`{ serviceId, revision, name?, description?, tagLine? }`, with at least one changed
|
|
235
|
+
field. Copy the returned revision **as a string**, including values beyond
|
|
236
|
+
JavaScript's safe integer range. Wix checks that it is current; the adapter does
|
|
237
|
+
not automatically replay conflicts or network failures.
|
|
238
|
+
|
|
239
|
+
Native frameworks use POST `/_api/bookings/v2/services/query` with `query.paging`,
|
|
240
|
+
GET `/_api/bookings/v2/services/{id}`, and PATCH that path with
|
|
241
|
+
`{ service: { id, revision, ...changedFields } }`. Returned service IDs are checked
|
|
242
|
+
against the requested target. Service IDs refer to offerings, not appointments.
|
|
243
|
+
The app owns editing screens, authorization and reconciliation. Service creation
|
|
244
|
+
and updates to pricing, staff and appointment constraints are documented below.
|
|
245
|
+
Scheduled sessions, service locations and add-ons use separate native operations.
|
|
246
|
+
|
|
247
|
+
[Query Services](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/query-services),
|
|
248
|
+
[Update Service](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/update-service).
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
### Cancel an existing booking
|
|
252
|
+
|
|
253
|
+
`bookings.cancel` accepts `bookingId`, the current `revision` as an exact decimal
|
|
254
|
+
string, optional `notifyParticipants` and `message`, and optional `waiveCharges`.
|
|
255
|
+
Both booleans default to false. A message requires notification to be enabled.
|
|
256
|
+
The project backend must authorize access to that booking before invoking it.
|
|
257
|
+
The configured Site ID determines the Wix site unless the caller selects a
|
|
258
|
+
project-approved site through Selectable Site IDs.
|
|
259
|
+
|
|
260
|
+
This uses [Cancel Booking](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/cancel-booking)
|
|
261
|
+
and requires Manage Bookings. It preserves normal provider cancellation policies,
|
|
262
|
+
rejects an unexpected booking/status response, and never retries a conflict or
|
|
263
|
+
ambiguous write automatically. Read the current booking state before deciding
|
|
264
|
+
whether another attempt is appropriate. `waiveCharges` can also cancel an eligible
|
|
265
|
+
outstanding Wix eCommerce order under Wix's documented conditions; it does not
|
|
266
|
+
issue a refund. Applications own their cancellation confirmation and notification UI.
|
|
267
|
+
The same operation/configuration is available to CLI-created JSKIT apps; other
|
|
268
|
+
frameworks can use that documented endpoint with their own HTTP/runtime code.
|
|
269
|
+
|
|
270
|
+
Booking creation and appointment availability are described below.
|
|
271
|
+
Do not substitute [Confirm Booking](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/confirm-booking)
|
|
272
|
+
for a normal availability check: that method explicitly confirms without checking
|
|
273
|
+
availability and is restricted to custom checkout flows. Wix eCommerce checkout
|
|
274
|
+
owns confirmation in its own flow.
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
### Read bookings before acting
|
|
278
|
+
|
|
279
|
+
`bookings.list` uses [Query Extended Bookings](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-reader-v2/query-extended-bookings).
|
|
280
|
+
Pass optional `bookingId` for an exact ID lookup, or `limit` (1–100) and `offset`
|
|
281
|
+
for a page. It returns native `extendedBookings` and `pagingMetadata`, including
|
|
282
|
+
current booking revision/status and requested `allowedActions`. Empty results are
|
|
283
|
+
valid, including an ID that no longer exists. A filtered response containing a
|
|
284
|
+
different booking is rejected. Do not assume an allowed action is still available
|
|
285
|
+
later; cancellation can fail if policy or revision changed in the meantime.
|
|
286
|
+
|
|
287
|
+
Grant the corresponding Read Bookings permission (or Manage Bookings for the
|
|
288
|
+
administrative write workflow). This is a backend site-wide credential, not each
|
|
289
|
+
customer's authorization. The generated app must check booking ownership before
|
|
290
|
+
returning private details or invoking actions. Frameworks other than JSKIT use the
|
|
291
|
+
same configured site and Env credential with their native HTTP client. No editor
|
|
292
|
+
or Vibe64 server is required by the deployed app.
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
### Appointment availability
|
|
296
|
+
|
|
297
|
+
`availability.list` accepts an appointment `serviceId`, explicit IANA `timeZone`,
|
|
298
|
+
`fromLocalDate` and `toLocalDate` in `YYYY-MM-DDThh:mm:ss` without an offset, and
|
|
299
|
+
optional `limit` (1–1000, default 100). It requests bookable slots using
|
|
300
|
+
[List Availability Time Slots](https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/list-availability-time-slots).
|
|
301
|
+
For the next page pass only the returned `cursor` and the same `limit`. Responses
|
|
302
|
+
retain native resources/location details and `cursorPagingMetadata`.
|
|
303
|
+
|
|
304
|
+
After selection, call `availability.get` with `serviceId`, `timeZone`, and the
|
|
305
|
+
returned `localStartDate`/`localEndDate`. This uses
|
|
306
|
+
[Get Availability Time Slot](https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/get-availability-time-slot).
|
|
307
|
+
Check `timeSlot.bookable` again; false is a valid changed-availability result.
|
|
308
|
+
The operation does not reserve capacity. Creation can still fail due to a race.
|
|
309
|
+
These calls require the Time Slots read permission
|
|
310
|
+
(`BOOKINGS.AVAILABILITY_READ_TIME_SLOTS`) on the project's Wix key.
|
|
311
|
+
|
|
312
|
+
The generated app owns the date picker, customer authorization and stale-slot
|
|
313
|
+
message. CLI-created JSKIT apps invoke the same operations; other frameworks use
|
|
314
|
+
these native endpoints with the same site/Env configuration. Current operations
|
|
315
|
+
cover appointment defaults. Class/event slots are described below. Duration-range choices still need implementation; resource/location filters are
|
|
316
|
+
described below.
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
### Create a booking
|
|
321
|
+
|
|
322
|
+
`bookings.create` uses [Create Booking](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/create-booking)
|
|
323
|
+
with Manage Bookings permission. Required common input: `serviceId`, `kind`,
|
|
324
|
+
`timeZone`, and `formSubmission` (JSON object, at most 100 KB). For fixed-price
|
|
325
|
+
services, `totalParticipants` defaults to 1. Optional `notifyParticipants` and
|
|
326
|
+
`sendSmsReminder` both default to false in this adapter; opt in deliberately.
|
|
327
|
+
|
|
328
|
+
- `APPOINTMENT`: supply increasing local `startDate`/`endDate`, selected
|
|
329
|
+
`resourceId`, and `location` (`locationType`, business `id` where applicable,
|
|
330
|
+
optional name/formattedAddress). Recheck availability first.
|
|
331
|
+
- `CLASS`: supply the selected `eventId`; Wix derives slot details. Do not mix
|
|
332
|
+
appointment fields into this input.
|
|
333
|
+
- `COURSE`: supply the selected `scheduleId`; verify remaining capacity first.
|
|
334
|
+
|
|
335
|
+
Fetch the service's `form.id` and use
|
|
336
|
+
[Get Form Summary](https://dev.wix.com/docs/rest/crm/forms/form-schemas/get-form-summary)
|
|
337
|
+
to build the form. Use each returned field's exact `target` as its
|
|
338
|
+
`formSubmission` key, not its display label. Wix stores standard contact fields
|
|
339
|
+
on the booking contact and other fields in its form submission. The app owns the
|
|
340
|
+
form rendering, validation, customer authorization and any checkout. Use `forms.summary` with `formId` for that discovery; the native GET endpoint is
|
|
341
|
+
`https://www.wixapis.com/form-schema-service/v4/forms/{formId}/summary`.
|
|
342
|
+
|
|
343
|
+
The response is the native booking, including its real status. Creation does not
|
|
344
|
+
mean payment or confirmation. No payment status or policy override can be supplied
|
|
345
|
+
through this operation. An unavailable/full slot or missing required form value
|
|
346
|
+
can fail at Wix; surface a useful application error and do not retry the create
|
|
347
|
+
blindly. JSKIT CLI apps use this same operation with project config/Env; other
|
|
348
|
+
frameworks use the documented POST body with their own HTTP library. Custom/duration variants and add-ons are supported as described below;
|
|
349
|
+
custom-checkout confirmation is explicit as described below; Wix-hosted checkout uses Cart V2 below.
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
### Booking form discovery
|
|
353
|
+
|
|
354
|
+
`forms.summary` reads the selected service's `form.id`. It returns the native
|
|
355
|
+
`formSummary`: field `target`, `label`, `type`, `options`, `deleted` and nested
|
|
356
|
+
field data where provided. Skip deleted fields, escape labels when rendering, and
|
|
357
|
+
map submitted values to exact targets. The summary intentionally omits complex
|
|
358
|
+
validation/layout details; it is not a complete form-validation engine. Applications
|
|
359
|
+
must still handle Wix validation failures, and complex custom forms may need the
|
|
360
|
+
full native Forms API. Grant Get Form Summary (`forms:v4:form:get_form_summary`)
|
|
361
|
+
as required for the intended site's forms. API-key authorization stays server-side.
|
|
362
|
+
|
|
363
|
+
The operation uses a fixed site and validates the returned form identity and
|
|
364
|
+
basic field structure. No field data becomes executable markup. CLI callers use
|
|
365
|
+
`connections.invoke({ context, integrationId, operation: "forms.summary", input:
|
|
366
|
+
{ formId } })`; other frameworks call the same GET with their own HTTP client.
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
### Class availability
|
|
371
|
+
|
|
372
|
+
`classAvailability.list` takes the same service/local-date/time-zone range as
|
|
373
|
+
appointment availability, plus optional `minBookableCapacity` for party size.
|
|
374
|
+
It uses [List Event Time Slots](https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/list-event-time-slots),
|
|
375
|
+
filters to the selected service, and excludes non-bookable slots. Continue with
|
|
376
|
+
only `cursor`/`limit`; class responses use `pagingMetadata`, while appointment
|
|
377
|
+
responses use `cursorPagingMetadata`.
|
|
378
|
+
|
|
379
|
+
Call `classAvailability.get` with the selected `timeSlot.eventInfo.eventId` as `eventId` and `timeZone` to use
|
|
380
|
+
[Get Event Time Slot](https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/get-event-time-slot).
|
|
381
|
+
Check current bookability/capacity before submitting `bookings.create` with
|
|
382
|
+
`kind: "CLASS"`. The generated app owns party-size selection and lost-capacity
|
|
383
|
+
feedback. This does not reserve seats. A mismatched event/service/time-zone
|
|
384
|
+
response is rejected. CLI/native framework users follow the same native flow and
|
|
385
|
+
project-owned credentials; no Vibe64 service participates in the booking.
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
### Select a resource and location
|
|
389
|
+
|
|
390
|
+
Appointment `availability.list` accepts up to five `locations` and up to 100
|
|
391
|
+
`includeResourceTypeIds`. These type IDs request resource detail in the response;
|
|
392
|
+
they do not themselves select a particular staff member. Wix normally leaves
|
|
393
|
+
`availableResources` empty on list responses unless resource details are requested.
|
|
394
|
+
`availability.get` returns candidate resources by default and accepts `location`
|
|
395
|
+
and up to eight `resourceTypes` entries, each with `resourceTypeId` and 1–135
|
|
396
|
+
`resourceIds`, to recheck a chosen resource. Use resource IDs, not staff contact IDs.
|
|
397
|
+
|
|
398
|
+
Availability location types differ from Bookings Writer types. Follow Wix's
|
|
399
|
+
[location mapping](https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/get-availability-time-slot):
|
|
400
|
+
`BUSINESS` becomes `OWNER_BUSINESS`, and `CUSTOM` becomes `OWNER_CUSTOM` when
|
|
401
|
+
passing a selected location to `bookings.create`. Business locations require their
|
|
402
|
+
ID. For a customer-chosen address, collect the address and use the writer's
|
|
403
|
+
`CUSTOM` location explicitly. Do not copy availability's `CUSTOMER` enum into the
|
|
404
|
+
writer request. CLI/native framework code must perform the same mapping.
|
|
405
|
+
|
|
406
|
+
The native class slot nests its event ID at `eventInfo.eventId`; there is no
|
|
407
|
+
top-level slot `eventId`.
|
|
408
|
+
|
|
409
|
+
### eCommerce order reads
|
|
410
|
+
|
|
411
|
+
Grant **Read Orders** on the intended site's API key. `orders.list` uses
|
|
412
|
+
[Search Orders](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/orders/search-orders)
|
|
413
|
+
with optional `status`, buyer `contactId`, and `limit` (1–100, default 20).
|
|
414
|
+
Continue with only the returned `cursor` and `limit`. The result preserves native
|
|
415
|
+
orders and `metadata`, including decimal money strings and payment status.
|
|
416
|
+
A contact filter is a query convenience; the app must separately enforce who can
|
|
417
|
+
read each order. Never expose site-wide order data to an unauthenticated caller.
|
|
418
|
+
|
|
419
|
+
Wix excludes PENDING and REJECTED orders by default; request those statuses
|
|
420
|
+
explicitly when needed. Search never returns INITIALIZED orders. Use `orders.get`
|
|
421
|
+
with a known `orderId` for the individual
|
|
422
|
+
[Get Order](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/orders/get-order)
|
|
423
|
+
endpoint. Missing orders produce the provider error; a response for a different
|
|
424
|
+
order is rejected. Neither operation collects payment or changes an order.
|
|
425
|
+
Detailed transaction/refund history requires the native transactions API.
|
|
426
|
+
|
|
427
|
+
CLI-created JSKIT apps invoke these operations through the same connection
|
|
428
|
+
service; other frameworks use the same site-scoped endpoints and Env key with
|
|
429
|
+
their own HTTP client. The generated app owns commerce screens, authorization,
|
|
430
|
+
fulfilment and payment reconciliation. No Vibe64 gateway or managed key is used.
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
### Determine the store catalogue version
|
|
435
|
+
|
|
436
|
+
Call `catalog.version` with no input, after setting the project's Site ID. It uses
|
|
437
|
+
[Get Catalog Version](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-versioning/get-catalog-version)
|
|
438
|
+
and returns `V1_CATALOG`, `V3_CATALOG` or `STORES_NOT_INSTALLED`. The latter is a
|
|
439
|
+
valid prerequisite result: install Wix Stores in the intended site before trying
|
|
440
|
+
to use product operations. Grant the documented **Read v3 catalog (PII)** permission
|
|
441
|
+
for version discovery, along with the permissions needed for actual product access.
|
|
442
|
+
|
|
443
|
+
Wix's [catalogue-version guidance](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-versioning/introduction?apiView=SDK)
|
|
444
|
+
requires using the site's actual version. V1 and V3 are incompatible, including
|
|
445
|
+
product/variant data and paging. Product support must cover both; do not assume
|
|
446
|
+
new-site V3 behavior applies to existing stores. The same check is available to
|
|
447
|
+
CLI apps and native frameworks, using only the site-owned key and configuration.
|
|
448
|
+
No automatic store installation, catalogue migration or account provisioning occurs.
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
### Read products from either catalogue
|
|
452
|
+
|
|
453
|
+
Start with `catalog.version`, then select `productsV1.list`/`productsV1.get` or
|
|
454
|
+
`productsV3.list`/`productsV3.get`. A site without Wix Stores needs installation
|
|
455
|
+
before these operations. Both get operations accept `productId`; list limits are
|
|
456
|
+
1–100, default 20. All operations use the project's configured Site ID.
|
|
457
|
+
|
|
458
|
+
- V1 uses `offset` (default 0) and optional `includeVariants` (default false).
|
|
459
|
+
It preserves `metadata` and `totalResults` from
|
|
460
|
+
[Query Products V1](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v1/catalog/query-products).
|
|
461
|
+
- V3 uses the returned `cursor` and preserves `pagingMetadata` from
|
|
462
|
+
[Query Products V3](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/query-products).
|
|
463
|
+
V3 product queries omit variants. Use the individual
|
|
464
|
+
[Get Product V3](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/get-product)
|
|
465
|
+
operation for product/variant details.
|
|
466
|
+
|
|
467
|
+
Grant Read Products for V1 or Read products in v3 catalog for V3. Hidden products
|
|
468
|
+
require additional provider administrative permissions; these list operations do
|
|
469
|
+
not request hidden products or merchant-specific financial data. A provider denial
|
|
470
|
+
is surfaced without retrying another catalogue version. Recheck the actual version
|
|
471
|
+
if a site was migrated; never reuse an old cursor across versions.
|
|
472
|
+
|
|
473
|
+
The library preserves native prices, variants and product data, including the
|
|
474
|
+
structural differences between V1 and V3. Applications own the product UI and
|
|
475
|
+
version-specific interpretation. CLI-created JSKIT apps use these same names and
|
|
476
|
+
configuration; other frameworks dispatch to the documented native endpoints after
|
|
477
|
+
version discovery. No compatibility shim converts money or variants between APIs.
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
### V3 product name and visibility edits
|
|
482
|
+
|
|
483
|
+
After `catalog.version` returns `V3_CATALOG`, use `productsV3.get` to read the
|
|
484
|
+
current revision, then `productsV3.update` with `productId`, the exact string
|
|
485
|
+
`revision`, and `name` (1–80 characters), `visible`, or both. Requires **Product
|
|
486
|
+
write in v3 catalog** on the configured site. The runtime sends only those
|
|
487
|
+
changed scalar fields; omitted fields remain unchanged. Wix also changes the
|
|
488
|
+
default variant's visibility for a product without options. For products with
|
|
489
|
+
options, variant visibility is independent.
|
|
490
|
+
|
|
491
|
+
A conflict requires a fresh read and a deliberate decision about the proposed
|
|
492
|
+
change. Failed writes are not automatically replayed. This operation does not
|
|
493
|
+
edit variant arrays, prices or inventory; their separate contracts remain work
|
|
494
|
+
in progress. Applications and CLI consumers use the same project-owned runtime
|
|
495
|
+
and Env key, with their own administrator authorization.
|
|
496
|
+
|
|
497
|
+
Contract: [Wix Update Product](https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/update-product).
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
### V1 product edits
|
|
501
|
+
|
|
502
|
+
For `V1_CATALOG`, `productsV1.update` accepts `productId` and at least one of
|
|
503
|
+
`name` (1–80 characters), `visible`, or numeric `price` (0–999999999.99).
|
|
504
|
+
Grant **Manage Products** to the site API key. Prices are base prices in the
|
|
505
|
+
site's currency, not minor units or converted visitor prices. Zero is valid.
|
|
506
|
+
The adapter uses `PATCH /stores/v1/products/{id}`; reads use the separate
|
|
507
|
+
`stores-reader` endpoint. Omitted fields are preserved. V1 does not offer the
|
|
508
|
+
V3 revision guard: the app must manage concurrent administrator edits and
|
|
509
|
+
reconcile uncertain writes before trying again. This operation does not edit
|
|
510
|
+
variant prices, discounts or inventory.
|
|
511
|
+
|
|
512
|
+
Contract: [Wix V1 Update Product](https://dev.wix.com/docs/rest/business-solutions/stores/catalog/update-product).
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
### Business locations for booking selection
|
|
516
|
+
|
|
517
|
+
Grant **Read Locations** for `locations.list` and `locations.get`. Both use the
|
|
518
|
+
configured project Site ID. List accepts `limit` (1–100), `offset` and `archived`
|
|
519
|
+
(default false), and requests only authorized locations. The response preserves
|
|
520
|
+
Wix addresses, business schedules and time zones; the app chooses which details
|
|
521
|
+
to expose. Get accepts `locationId` and checks the returned identity. Use these
|
|
522
|
+
IDs for business-location availability filters and booking creation, with each
|
|
523
|
+
API's documented location-type mapping. Location discovery does not reserve a
|
|
524
|
+
slot or change business hours. CLI consumers invoke the same operations.
|
|
525
|
+
|
|
526
|
+
[Wix Query Locations](https://dev.wix.com/docs/api-reference/business-management/locations/query-locations).
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
### CMS collection browser
|
|
530
|
+
|
|
531
|
+
`cmsCollections.list` reads collections for the configured site. Grant **Manage
|
|
532
|
+
Data Collections**, even though these operations only read. Pass `limit` (1–100),
|
|
533
|
+
`offset` and optional `consistentRead` (default false). Responses preserve
|
|
534
|
+
`collections` and `pagingMetadata`, including field metadata. Use
|
|
535
|
+
`cmsCollections.get` with the returned `collectionId` to inspect a collection.
|
|
536
|
+
App collection IDs such as `AppName/CollectionName` retain their namespace.
|
|
537
|
+
Both operations are site-bound; another Site ID is accepted only when explicitly
|
|
538
|
+
approved through Selectable Site IDs.
|
|
539
|
+
|
|
540
|
+
Consistent reads request primary-database data at a performance cost. The app owns
|
|
541
|
+
collection selection, escaping metadata labels and authorization. This is schema
|
|
542
|
+
browsing, not content-item querying, collection replacement or field deletion.
|
|
543
|
+
CLI apps use these operations and the same Env key; native frameworks use the
|
|
544
|
+
GET collection endpoints with their own client.
|
|
545
|
+
|
|
546
|
+
[Wix List Data Collections](https://dev.wix.com/docs/api-reference/business-solutions/cms/collection-management/data-collections/list-data-collections).
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
`cmsItems.list` completes content browsing after collection selection. Grant
|
|
550
|
+
**Read Data Items**, then pass `collectionId`, `limit` (1–100), `offset` and
|
|
551
|
+
optional `consistentRead`. It calls `POST /wix-data/v2/items/query` and preserves
|
|
552
|
+
native `dataItems` and `pagingMetadata`, including Wix date objects. Cross-collection
|
|
553
|
+
results are rejected. The app must authorize collection and record access before
|
|
554
|
+
exposing content, and safely render field values. Field editing is available through cmsItems.patch below; draft/publication workflows remain unimplemented.
|
|
555
|
+
|
|
556
|
+
[Wix Query Data Items](https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items/query-data-items).
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
### Select an authorized site inside the app
|
|
560
|
+
|
|
561
|
+
For multi-site operations, the project owner may set `settings.selectableSiteIds`
|
|
562
|
+
to a comma-separated list of up to 100 distinct Wix Site IDs. Discover IDs with
|
|
563
|
+
`sites.list`, then explicitly approve the sites in project configuration. This is
|
|
564
|
+
not an account-wide wildcard. Save and verify the changed configuration again.
|
|
565
|
+
|
|
566
|
+
All site operations accept optional `siteId` when it occurs in that configured
|
|
567
|
+
list. Omission uses `settings.siteId` as before; an explicit unlisted ID is rejected
|
|
568
|
+
before network access. `sites.list` stays account-scoped and rejects this override.
|
|
569
|
+
Each request gets its own site header without changing configuration or another
|
|
570
|
+
request's binding. The host authorization callback receives the original input,
|
|
571
|
+
including siteId, and must authorize that user's access to the requested site and
|
|
572
|
+
business object. Hide unauthorized sites in the app's picker as well.
|
|
573
|
+
|
|
574
|
+
This is the same text configuration and operation interface for CLI projects.
|
|
575
|
+
Other frameworks must enforce the configured allowed IDs and user authorization
|
|
576
|
+
before choosing the site header. No new Vibe64 server or gateway is involved.
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
### Filtered CMS content and references
|
|
580
|
+
|
|
581
|
+
`cmsItems.list` also accepts native `filter`, `sort`, `fields`,
|
|
582
|
+
`returnTotalCount` and `includeReferences` options. They use the same Read Data
|
|
583
|
+
Items permission and project-owned site connection as unfiltered queries:
|
|
584
|
+
|
|
585
|
+
```js
|
|
586
|
+
const page = await connections.invoke({
|
|
587
|
+
...owner,
|
|
588
|
+
integrationId: "wix",
|
|
589
|
+
operation: "cmsItems.list",
|
|
590
|
+
input: {
|
|
591
|
+
collectionId: "Articles",
|
|
592
|
+
filter: { published: true },
|
|
593
|
+
sort: [{ fieldName: "title", order: "ASC" }],
|
|
594
|
+
fields: ["title", "author"],
|
|
595
|
+
includeReferences: [{ field: "author", limit: 1 }],
|
|
596
|
+
returnTotalCount: true,
|
|
597
|
+
limit: 20,
|
|
598
|
+
offset: 0
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
Use field keys from the collection schema, not display labels. Wix evaluates
|
|
604
|
+
its query-language operators; JSKIT validates the request shape without rewriting
|
|
605
|
+
those operators. Filters must be serializable JSON objects within 100KB. Sorts
|
|
606
|
+
accept up to 100 fields with ASC/DESC order; projection accepts up to 1000 fields.
|
|
607
|
+
An empty projection requests all fields. Reference expansion accepts up to 100
|
|
608
|
+
configurations with a reference/multi-reference field and optional limit of 1–1000.
|
|
609
|
+
Wix defaults that limit to 50; an expanded reference may therefore be incomplete.
|
|
610
|
+
Use `includeReferences`, not the deprecated `includeReferencedItems` parameter.
|
|
611
|
+
|
|
612
|
+
`returnTotalCount: true` requests offset-page totals, but `tooManyToCount` can
|
|
613
|
+
mean no total is available. Preserve that distinction instead of showing zero.
|
|
614
|
+
Returned items, related content and paging metadata retain Wix's native shape.
|
|
615
|
+
The app must authorize access to the collection and its related data before
|
|
616
|
+
invoking the operation; a filter is not an authorization policy. Never accept
|
|
617
|
+
arbitrary browser-provided queries as an access-control mechanism.
|
|
618
|
+
|
|
619
|
+
Other frameworks send these same documented request fields using their native
|
|
620
|
+
Wix/HTTP library and backend Env credentials. No editor service or JSKIT runtime
|
|
621
|
+
is required for that implementation.
|
|
622
|
+
|
|
623
|
+
Source: [Wix Query Data Items](https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items/query-data-items).
|
|
624
|
+
The filtered-query case passes in both the source and installed-package suites.
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
### Read and edit one CMS item
|
|
628
|
+
|
|
629
|
+
`cmsItems.get` reads a specific `itemId` in a `collectionId`. Set
|
|
630
|
+
`consistentRead: true` when current content is needed immediately after a write.
|
|
631
|
+
The site remains the configured site or an explicitly allowed runtime selection.
|
|
632
|
+
|
|
633
|
+
To edit content, grant the API key the permission identified by Wix as
|
|
634
|
+
`WIX_DATA.PATCH` in [Patch Data Item](https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items/patch-data-item).
|
|
635
|
+
Keep read-only applications on Read Data Items; enable patch permission only for
|
|
636
|
+
apps that need editing. The app must authorize the requested collection, item and
|
|
637
|
+
fields before invoking the write.
|
|
638
|
+
|
|
639
|
+
```js
|
|
640
|
+
await connections.invoke({
|
|
641
|
+
...owner,
|
|
642
|
+
integrationId: "wix",
|
|
643
|
+
operation: "cmsItems.patch",
|
|
644
|
+
input: {
|
|
645
|
+
collectionId: "Articles",
|
|
646
|
+
itemId: "article-one",
|
|
647
|
+
conditionFilter: { title: "Original title" },
|
|
648
|
+
fieldModifications: [
|
|
649
|
+
{ fieldPath: "title", action: "SET_FIELD", setFieldOptions: { value: "New title" } }
|
|
650
|
+
]
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
This uses native PATCH, leaving unspecified fields untouched. Field paths use
|
|
656
|
+
Wix's dot notation. Supply 1–100 modifications, within 100KB of JSON. Supported
|
|
657
|
+
actions are SET_FIELD, REMOVE_FIELD, INCREMENT_FIELD, APPEND_TO_ARRAY and
|
|
658
|
+
REMOVE_FROM_ARRAY. Each action uses its corresponding native options object;
|
|
659
|
+
REMOVE_FIELD has none. False, zero and null values are preserved. Removing an
|
|
660
|
+
array value removes its first matching occurrence according to Wix's semantics.
|
|
661
|
+
|
|
662
|
+
`conditionFilter` maps to Wix's server-side conditional update. Use expected
|
|
663
|
+
field values when concurrent changes should prevent your edit. Omitting it
|
|
664
|
+
performs an unconditional patch; the library does not invent a revision token or
|
|
665
|
+
perform a read-modify-write replacement. On a conflict, reload and let the user
|
|
666
|
+
resolve it. On a timeout or service failure, check the current item before any
|
|
667
|
+
explicit retry, particularly for increments and array appends. JSKIT never
|
|
668
|
+
replays these writes automatically.
|
|
669
|
+
|
|
670
|
+
Responses are checked against the requested item and collection. The same
|
|
671
|
+
backend Env key and project authorization apply in CLI apps and other frameworks;
|
|
672
|
+
use native Wix GET/PATCH calls there. This is not a content-editor UI, schema
|
|
673
|
+
migration or draft/publication system.
|
|
674
|
+
|
|
675
|
+
Controlled source proof: **28/28**, including conditional request shape, wrong
|
|
676
|
+
item/collection rejection, explicit field operations and no write replay. The
|
|
677
|
+
installed-package suite also passes **28/28** through public exports. The added
|
|
678
|
+
permission instruction has expanded rendered proof; compact refresh is pending.
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
### Create and replace business locations
|
|
682
|
+
|
|
683
|
+
Grant **Manage Locations** (`LOCATIONS.MANAGE`) in the Wix API key permissions
|
|
684
|
+
for writes. `locations.create` accepts name, IANA timeZone and address, plus
|
|
685
|
+
optional description, contact details, status, locationTypes, businessSchedule
|
|
686
|
+
and extendedFields. `locations.update` additionally requires locationId and the
|
|
687
|
+
current exact revision string from `locations.get`. IDs and revisions are never
|
|
688
|
+
converted to numbers. Both operations require the project-owned site binding.
|
|
689
|
+
|
|
690
|
+
**Update replaces the complete writable location.** Read it first and send every
|
|
691
|
+
writable field you want retained. Do not treat this operation as a patch. Remove
|
|
692
|
+
read-only id/default/archived from the returned object, pass id as locationId,
|
|
693
|
+
keep revision, and preserve optional fields such as phone, businessSchedule and
|
|
694
|
+
extendedFields. Change only the intended values in that complete object. A stale
|
|
695
|
+
revision must be resolved by re-reading the location; there is no automatic retry.
|
|
696
|
+
An archived location cannot be updated.
|
|
697
|
+
|
|
698
|
+
```js
|
|
699
|
+
const { location } = await connections.invoke({
|
|
700
|
+
...owner, integrationId: "wix", operation: "locations.get",
|
|
701
|
+
input: { locationId: "01234567-89ab-cdef-0123-456789abcdef" }
|
|
702
|
+
});
|
|
703
|
+
const { id, default: isDefault, archived, locationType, ...writable } = location;
|
|
704
|
+
await connections.invoke({
|
|
705
|
+
...owner, integrationId: "wix", operation: "locations.update",
|
|
706
|
+
input: { ...writable, locationId: id, name: "Updated studio name" }
|
|
707
|
+
});
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
The deprecated locationType field is omitted. The supported locationTypes list
|
|
711
|
+
is retained. Wix currently supports ACTIVE status; changing that is not an
|
|
712
|
+
archive operation. BusinessSchedule is passed in Wix's native structure, with
|
|
713
|
+
up to 100 regular periods and 100 special-hour periods. Wix validates its time
|
|
714
|
+
and schedule semantics. These location hours do not configure Wix Bookings.
|
|
715
|
+
The adapter checks address shape, coordinates and timezone and preserves native
|
|
716
|
+
extension data. New properties not represented by the adapter must be handled
|
|
717
|
+
explicitly before using full replacement; do not silently strip unknown data.
|
|
718
|
+
|
|
719
|
+
If creation times out, inspect the locations before explicitly retrying to avoid
|
|
720
|
+
a duplicate. Native create/update responses preserve the location and revision;
|
|
721
|
+
update responses must match the requested location ID. The framework owns app
|
|
722
|
+
user authorization, and the same calls work from a CLI-owned Node backend or
|
|
723
|
+
through another framework's native Wix client.
|
|
724
|
+
|
|
725
|
+
Sources: [Create Location](https://dev.wix.com/docs/api-reference/business-management/locations/create-location),
|
|
726
|
+
[Update Location](https://dev.wix.com/docs/api-reference/business-management/locations/update-location).
|
|
727
|
+
Source suite **29/29** covers native create/PUT bodies, preserved optional fields,
|
|
728
|
+
exact revisions, invalid coordinates/timezones, response identity and no retries.
|
|
729
|
+
The installed-package suite passes29/29 through public exports; these latest
|
|
730
|
+
instructions have expanded rendered proof; compact refresh remains pending. Archive/default-location controls are described below.
|
|
731
|
+
|
|
732
|
+
|
|
733
|
+
### Archive or select the default location
|
|
734
|
+
|
|
735
|
+
`locations.archive` and `locations.setDefault` each accept only `locationId`
|
|
736
|
+
(and an explicitly allowed siteId where configured). Both require Manage Locations.
|
|
737
|
+
They make one native POST request and verify the returned location ID and resulting
|
|
738
|
+
archived/default flag. The application must authorize these administrative changes.
|
|
739
|
+
For example:
|
|
740
|
+
|
|
741
|
+
```js
|
|
742
|
+
await connections.invoke({
|
|
743
|
+
...owner, integrationId: "wix", operation: "locations.setDefault",
|
|
744
|
+
input: { locationId: "01234567-89ab-cdef-0123-456789abcdef" }
|
|
745
|
+
});
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
Only one location can be default for a site. Wix prevents archiving that location;
|
|
749
|
+
select another default deliberately before trying to archive it. Archiving sets
|
|
750
|
+
archived=true, does not change status, and prevents further location updates.
|
|
751
|
+
These controls do not delete bookings or reconfigure their schedules. No supported
|
|
752
|
+
public restore endpoint was established from the reviewed API documentation, so
|
|
753
|
+
this adapter does not offer a guessed unarchive operation. Do not promise undo.
|
|
754
|
+
After an uncertain result, read the location before a deliberate retry.
|
|
755
|
+
|
|
756
|
+
Sources: [Archive Location](https://dev.wix.com/docs/api-reference/business-management/locations/archive-location),
|
|
757
|
+
[Set Default Location](https://dev.wix.com/docs/api-reference/business-management/locations/set-default-location).
|
|
758
|
+
Controlled source suite **30/30** passes; installed-package proof remains29/29
|
|
759
|
+
until the next refresh. Tests include request placement, resulting state, identity,
|
|
760
|
+
provider refusal and host-denied writes. No live site has been modified.
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
### Create a booking service
|
|
764
|
+
|
|
765
|
+
`bookingServices.create` accepts a native `service` object within 100KB of JSON,
|
|
766
|
+
using Manage Bookings on the configured site. It creates appointment, class or
|
|
767
|
+
course services with explicit name, type, defaultCapacity, onlineBooking and
|
|
768
|
+
payment settings. The adapter checks required relationships and preserves the
|
|
769
|
+
native remaining fields; Wix validates those fields and referenced resources.
|
|
770
|
+
|
|
771
|
+
```js
|
|
772
|
+
await connections.invoke({
|
|
773
|
+
...owner, integrationId: "wix", operation: "bookingServices.create",
|
|
774
|
+
input: { service: {
|
|
775
|
+
type: "APPOINTMENT", name: "Consultation", defaultCapacity: 1,
|
|
776
|
+
onlineBooking: { enabled: true, requireManualApproval: false },
|
|
777
|
+
payment: { rateType: "FIXED", fixed: { price: { value: "50.25", currency: "AUD" } },
|
|
778
|
+
options: { inPerson: true, online: false } },
|
|
779
|
+
staffMemberIds: [staffResourceId],
|
|
780
|
+
schedule: { availabilityConstraints: { sessionDurations: [30] } },
|
|
781
|
+
category: { id: categoryId }
|
|
782
|
+
} }
|
|
783
|
+
});
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
Obtain the staff resource and category IDs with bookingStaff.list and
|
|
787
|
+
bookingCategories.list on the selected site, as shown below. Despite its name, staffMemberIds takes resource IDs,
|
|
788
|
+
not staff member IDs. Appointments need at least one staff resource and positive
|
|
789
|
+
session durations in minutes, with capacity1. Classes and courses take capacity
|
|
790
|
+
1–1000; create their sessions separately and do not send appointment durations.
|
|
791
|
+
Services without category assignment are not visible on the live Wix site.
|
|
792
|
+
The connector does not auto-create staff, categories or scheduled sessions.
|
|
793
|
+
|
|
794
|
+
Choose FIXED, VARIED, CUSTOM or NO_FEE. Fixed/varied amounts are positive decimal
|
|
795
|
+
strings with up to two decimal places and an ISO currency. Even free services
|
|
796
|
+
must select an in-person or online payment option. Online payment requires fixed
|
|
797
|
+
or varied pricing and online booking enabled. Deposits additionally require a
|
|
798
|
+
deposit amount and in-person payment disabled. Manual approval cannot be combined
|
|
799
|
+
with pricing-plan payment. Subscription-priced courses are not implemented here.
|
|
800
|
+
|
|
801
|
+
Do not supply generated service IDs/revisions or existing add-on groups during
|
|
802
|
+
creation. For varied appointment durations, the supplied sessionDurations remain
|
|
803
|
+
mandatory, but Wix actually uses the service variants for pricing/availability;
|
|
804
|
+
creating the service does not configure those variants. Add-ons also require their
|
|
805
|
+
own creation workflow. Those workflows remain open rather than implied by success.
|
|
806
|
+
|
|
807
|
+
Authorization stays with the application, and no provider write is retried.
|
|
808
|
+
If a request times out, inspect existing services before an explicit retry to
|
|
809
|
+
avoid duplicates. A successful response returns the native service ID and
|
|
810
|
+
revision. This configures how the service may be paid for; it does not charge a
|
|
811
|
+
customer or establish an online payment provider. CLI and other frameworks can
|
|
812
|
+
send the same service object to the native Wix endpoint.
|
|
813
|
+
|
|
814
|
+
Source: [Wix Create Service](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/create-service).
|
|
815
|
+
Source proof **31/31** includes all three service types, required payment/staff/
|
|
816
|
+
duration checks, native price preservation and no replay. Latest installed-package
|
|
817
|
+
proof remains29/29 and the added inline setup sentence requires rendered refresh.
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
### Select service categories and staff
|
|
821
|
+
|
|
822
|
+
With **Read Bookings - Public Data**, use `bookingCategories.list` and
|
|
823
|
+
`bookingStaff.list` to fill your application's service-creation selectors.
|
|
824
|
+
Both accept limit1–100 (default20) and a returned cursor. Results retain native
|
|
825
|
+
`pagingMetadata`; fetch the next page explicitly until exhausted.
|
|
826
|
+
|
|
827
|
+
```js
|
|
828
|
+
const categories = await connections.invoke({
|
|
829
|
+
...owner, integrationId: "wix", operation: "bookingCategories.list"
|
|
830
|
+
});
|
|
831
|
+
const staff = await connections.invoke({
|
|
832
|
+
...owner, integrationId: "wix", operation: "bookingStaff.list"
|
|
833
|
+
});
|
|
834
|
+
// Let the authorized administrator choose a category.id and staffMember.resourceId.
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
Category discovery uses Categories V2. Staff discovery uses the documented V1
|
|
838
|
+
query, explicitly filters serviceProvider=true and requests RESOURCE_DETAILS at
|
|
839
|
+
the request's top level. This returns bookable staff, not the whole company
|
|
840
|
+
staff directory. Native staff IDs are preserved, but **service creation uses
|
|
841
|
+
resourceId**, not id. The adapter rejects a staff result missing that required
|
|
842
|
+
resource identity rather than offering an unusable selection. Resource/schedule
|
|
843
|
+
information is preserved for the framework; these queries do not create or
|
|
844
|
+
change staff working hours. An empty response means no choices are available,
|
|
845
|
+
not a successful automatic service setup.
|
|
846
|
+
|
|
847
|
+
The app owns the selectors and their authorization. Both operations also work
|
|
848
|
+
with explicit allowlisted site selection and the same portable project settings.
|
|
849
|
+
Read results can contain staff details; expose only what the user's role needs.
|
|
850
|
+
The remaining runtime and CLI guidance applies without an editor dependency.
|
|
851
|
+
|
|
852
|
+
Sources: [Query Categories](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/categories-v2/query-categories),
|
|
853
|
+
[Query Staff Members](https://dev.wix.com/docs/api-reference/business-solutions/bookings/staff-members/staff-members/query-staff-members).
|
|
854
|
+
Source suite **32/32** covers cursor and native-body placement, resource identity,
|
|
855
|
+
empty choices and rejection of an unsupported staff filter. Installed-package and
|
|
856
|
+
latest inline setup rendering still need refresh after these additions.
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
### Update pricing and booking settings
|
|
860
|
+
|
|
861
|
+
`bookingServices.update` also accepts payment, onlineBooking, defaultCapacity,
|
|
862
|
+
staffMemberIds and schedule.availabilityConstraints. The same serviceId, exact
|
|
863
|
+
revision string and Manage Bookings permission apply. Read the service first,
|
|
864
|
+
retain the current nested settings and change only the intended values:
|
|
865
|
+
|
|
866
|
+
```js
|
|
867
|
+
const { service } = await connections.invoke({
|
|
868
|
+
...owner, integrationId: "wix", operation: "bookingServices.get",
|
|
869
|
+
input: { serviceId }
|
|
870
|
+
});
|
|
871
|
+
await connections.invoke({
|
|
872
|
+
...owner, integrationId: "wix", operation: "bookingServices.update",
|
|
873
|
+
input: { serviceId, revision: service.revision,
|
|
874
|
+
payment: { ...service.payment,
|
|
875
|
+
fixed: { ...service.payment.fixed, price: { value: "75.10", currency: "AUD" } }
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
});
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
The example assumes an existing FIXED-price service. Deliberately changing rate
|
|
882
|
+
type also requires compatible rate and payment-option fields; Wix checks those
|
|
883
|
+
relationships against the existing service. Remove provider-computed read-only
|
|
884
|
+
payment data before writing it. The adapter bounds native JSON and request shape,
|
|
885
|
+
while Wix validates service-specific rules. False online-booking settings and
|
|
886
|
+
zero buffer time are preserved. Staff selections use resource IDs from the staff
|
|
887
|
+
lookup; the connector accepts1–100 IDs.
|
|
888
|
+
|
|
889
|
+
Appointment availability constraints can set sessionDurations and
|
|
890
|
+
timeBetweenSessions. Change sessionDurations only for appointments without varied
|
|
891
|
+
pricing based on session length. For varied-duration appointments, configure the
|
|
892
|
+
variants instead. Classes/courses get their durations from scheduled sessions.
|
|
893
|
+
The library does not fetch the service implicitly to infer its type; the app
|
|
894
|
+
must choose appropriate settings from its preceding read.
|
|
895
|
+
|
|
896
|
+
This operation rejects locations and addOnGroups: Wix requires dedicated
|
|
897
|
+
Set Service Locations and add-on operations. It does not create calendar events,
|
|
898
|
+
change staff working-hour schedules or resolve revision conflicts automatically.
|
|
899
|
+
Source: [Update Service](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/update-service).
|
|
900
|
+
Source suite **33/33** passes, including native nested values, exact revision,
|
|
901
|
+
empty settings, invalid JSON and stale writes. Installed-package proof remains
|
|
902
|
+
29/29 until refreshed for these additions.
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
### Replace a service's locations
|
|
906
|
+
|
|
907
|
+
`bookingServices.setLocations` uses Manage Bookings and takes the full replacement
|
|
908
|
+
locations list. Omitting an existing location removes it from the service. The app
|
|
909
|
+
must show that effect to its authorized administrator before invoking the operation.
|
|
910
|
+
|
|
911
|
+
```js
|
|
912
|
+
await connections.invoke({
|
|
913
|
+
...owner, integrationId: "wix", operation: "bookingServices.setLocations",
|
|
914
|
+
input: { serviceId,
|
|
915
|
+
locations: [{ type: "BUSINESS", business: { id: businessLocationId } }],
|
|
916
|
+
removedLocationAction: "KEEP_AT_CURRENT_LOCATION"
|
|
917
|
+
}
|
|
918
|
+
});
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
Use BUSINESS with business.id from locations.list; CUSTOM with a complete native
|
|
922
|
+
custom.address object; or CUSTOMER with no business/custom details. The connector
|
|
923
|
+
accepts up to100 entries. It requires removedLocationAction explicitly, even when
|
|
924
|
+
adding locations, so removing one later cannot silently choose a session policy.
|
|
925
|
+
KEEP_AT_CURRENT_LOCATION preserves future sessions at their old venue: the business
|
|
926
|
+
must still be able to provide access there. MOVE_TO_LOCATION requires moveToLocation
|
|
927
|
+
in the same location format and moves future affected sessions to that destination.
|
|
928
|
+
Wix does not support mixing these choices per session in this operation. Past
|
|
929
|
+
sessions and sessions at customer-defined locations are not relocated.
|
|
930
|
+
|
|
931
|
+
Participant notifications default off. To notify affected participants, explicitly
|
|
932
|
+
set notifyParticipants=true and optionally notificationMessage (up to2000 characters).
|
|
933
|
+
A message without that opt-in is rejected. This can notify real people when called
|
|
934
|
+
against a live site; the application owns the user confirmation for that action.
|
|
935
|
+
There is no automatic retry or invented revision field for this endpoint. After an
|
|
936
|
+
uncertain response, inspect the service and affected sessions before deciding what
|
|
937
|
+
to do next. Returned service identity is checked against serviceId.
|
|
938
|
+
|
|
939
|
+
Source: [Set Service Locations](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/set-service-locations).
|
|
940
|
+
Source suite **34/34** includes both session decisions, explicit notification,
|
|
941
|
+
location details, wrong service results and one-attempt provider failure. All use
|
|
942
|
+
fixtures. Package/rendered proof still requires the next refresh.
|
|
943
|
+
|
|
944
|
+
|
|
945
|
+
### Service choices before booking
|
|
946
|
+
|
|
947
|
+
`bookingServices.getVariants({ serviceId })` retrieves native options and variants
|
|
948
|
+
for the selected service through the project-owned site connection. The response
|
|
949
|
+
field is `serviceVariants`, not `serviceOptionsAndVariants`. Preserve its option
|
|
950
|
+
IDs, choices, revision and decimal price strings. The generated application's
|
|
951
|
+
own form displays the choices and collects participants per choice; Vibe64 does
|
|
952
|
+
not maintain a separate catalogue or expose the API key to that form.
|
|
953
|
+
|
|
954
|
+
Use the selected service ID from `bookingServices.list` or `.get`. The API key
|
|
955
|
+
needs the service-options read permission (`BOOKINGS.SERVICE_OPTIONS_AND_VARIANTS_READ`);
|
|
956
|
+
the standard options lookup is documented under Read Bookings - Public Data.
|
|
957
|
+
If permission is missing, edit the key's permissions in Wix Account Settings >
|
|
958
|
+
API Keys, update the project's Env value if Wix issues a replacement, and verify
|
|
959
|
+
again. A failed lookup is not silently converted to “no variants”: surface the
|
|
960
|
+
provider error and check service configuration before offering a booking.
|
|
961
|
+
|
|
962
|
+
CLI callers use the same invocation and existing Env-backed connection as the
|
|
963
|
+
other site operations. Other frameworks call Wix's native endpoint with their
|
|
964
|
+
project-owned key and site header. No additional Vibe64 service is required.
|
|
965
|
+
|
|
966
|
+
The lookup feeds the explicit availability and booking selections below.
|
|
967
|
+
The generated app owns the form and authorization. Confirmation is an explicit operation described below; creation does not
|
|
968
|
+
automatically confirm or charge a booking.
|
|
969
|
+
|
|
970
|
+
References: [lookup by service ID](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/service-options-and-variants/get-service-options-and-variants-by-service-id),
|
|
971
|
+
[single-service booking flow](https://dev.wix.com/docs/api-reference/business-solutions/bookings/flow-single-service-booking).
|
|
972
|
+
Source suite **35/35** passed with controlled transport, including exact endpoint,
|
|
973
|
+
site header, preserved choices/prices, mismatched service rejection, malformed
|
|
974
|
+
responses, host denial and an unretried 404. Installed-package proof was refreshed: **35/35** passed (719ms) using an
|
|
975
|
+
offline-installed tarball in the isolated consumer, including this new operation.
|
|
976
|
+
Tarball SHA1: `529b9da1227db1489b359161d2393414948d75ac`. No generated app or live provider was used.
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
### Apply service choices and add-ons
|
|
980
|
+
|
|
981
|
+
`bookingServices.listAddOnGroups({ serviceId })` returns all service groups under
|
|
982
|
+
`addOnGroupsDetails`, with the native display order, prompts, labels, prices and
|
|
983
|
+
selection limits. An empty list is valid. This uses Read Bookings - Public Data.
|
|
984
|
+
Render each group's `groupName`/`prompt` and enforce `maxNumberOfAddOns`; enforce
|
|
985
|
+
`maxQuantity` for quantity add-ons. Preserve `groupId` and each `addOnId`.
|
|
986
|
+
|
|
987
|
+
For appointment `availability.list` and `.get`, pass `customerChoices`:
|
|
988
|
+
|
|
989
|
+
```json
|
|
990
|
+
{ "customerChoices": { "addOnIds": ["12345678-9abc-def0-1234-56789abcdef0"] } }
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
A duration variant can use `durationInMinutes`. With add-ons, prefer supplying
|
|
994
|
+
only their IDs so Wix calculates duration. If both are supplied, the duration
|
|
995
|
+
must include all selected add-on durations. Repeat the same choices when
|
|
996
|
+
revalidating the selected slot. Duration-range services do not support this
|
|
997
|
+
object; omit it and use their native configured range. Class event availability
|
|
998
|
+
continues to use capacity and event IDs, not appointment customerChoices.
|
|
999
|
+
|
|
1000
|
+
For `bookings.create`, use either fixed `totalParticipants` (defaults to 1 when
|
|
1001
|
+
neither field is supplied) or variant groups:
|
|
1002
|
+
|
|
1003
|
+
```json
|
|
1004
|
+
{
|
|
1005
|
+
"participantsChoices": {
|
|
1006
|
+
"serviceChoices": [
|
|
1007
|
+
{ "numberOfParticipants": 2, "choices": [
|
|
1008
|
+
{ "optionId": "12345678-9abc-def0-1234-56789abcdef0", "custom": "Child" }
|
|
1009
|
+
] }
|
|
1010
|
+
]
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
```
|
|
1014
|
+
|
|
1015
|
+
Use `duration: { "minutes": 90 }` instead of `custom` for a duration choice.
|
|
1016
|
+
Copy these values from the selected service's variants. Do not send both a
|
|
1017
|
+
custom and duration value, repeat an option within a group, or supply a fixed
|
|
1018
|
+
total alongside variant groups. The adapter supports up to 20 participant groups,
|
|
1019
|
+
5 choices each, and 1000 participants in total. Preview choice-ID/date-time/
|
|
1020
|
+
participant-range variants are not yet exposed by this operation. Wix validates
|
|
1021
|
+
whether the choices actually exist for the selected service; an invalid-choice
|
|
1022
|
+
failure is surfaced without retrying the create.
|
|
1023
|
+
|
|
1024
|
+
Optional `bookedAddOns` is an array of `{ id, groupId?, quantity? }`, mapping the
|
|
1025
|
+
lookup's `addOnId` to `id`. Omit quantity for duration add-ons. Use quantity only
|
|
1026
|
+
for quantity-based add-ons within their returned limit. Do not send calculated
|
|
1027
|
+
prices, duration or read-only labels in this object. This records selected
|
|
1028
|
+
add-ons; it does not create or edit the add-on catalogue.
|
|
1029
|
+
|
|
1030
|
+
The same JSON inputs work from the JSKIT CLI/runtime. For another framework,
|
|
1031
|
+
use its native HTTP client: `customerChoices` is top-level in the availability
|
|
1032
|
+
body; `participantsChoices` and `bookedAddOns` belong inside `booking`. Never
|
|
1033
|
+
forward the fixed total too. Keep credentials in the project's Env and validate
|
|
1034
|
+
the app user's choices on the backend before making the request.
|
|
1035
|
+
|
|
1036
|
+
References: [add-on lookup](https://dev.wix.com/docs/api-reference/business-solutions/bookings/services/services-v2/list-add-on-groups-by-service-id),
|
|
1037
|
+
[availability](https://dev.wix.com/docs/api-reference/business-solutions/bookings/time-slots/time-slots-v2/list-availability-time-slots),
|
|
1038
|
+
[booking](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/create-booking).
|
|
1039
|
+
Source **37/37** passed (790ms), including native availability/booking bodies,
|
|
1040
|
+
mutually exclusive totals, invalid groups/selections, preserved add-on discovery
|
|
1041
|
+
and single-attempt provider errors. Installed proof remains the previous
|
|
1042
|
+
35-case snapshot; the new two cases and newest inline copy need their final
|
|
1043
|
+
package/rendering refresh. No live booking, customer notification or payment was
|
|
1044
|
+
performed.
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
### Custom-checkout booking decisions
|
|
1048
|
+
|
|
1049
|
+
Use these operations only for the generated application's **custom checkout**.
|
|
1050
|
+
For Wix eCommerce checkout, let Wix's order flow update booking confirmation.
|
|
1051
|
+
The app backend owns payment evidence, the administrator's authorization and the
|
|
1052
|
+
checkout decision; do not accept payment status directly from a browser.
|
|
1053
|
+
|
|
1054
|
+
- `bookings.confirmOrDecline({ bookingId, paymentStatus })` asks Wix to evaluate
|
|
1055
|
+
payment, availability and business approval. Supply the actual payment status:
|
|
1056
|
+
UNDEFINED, NOT_PAID, PAID, PARTIALLY_PAID, REFUNDED or EXEMPT. Preserve the returned
|
|
1057
|
+
CONFIRMED, PENDING or DECLINED result and any doubleBooked flag. There is no
|
|
1058
|
+
revision or notification input on this native endpoint. It is not a force-confirm
|
|
1059
|
+
operation and does not collect or refund money.
|
|
1060
|
+
- `bookings.confirm({ bookingId, revision, notifyParticipants?, message? })` is an
|
|
1061
|
+
explicit administrator decision. **It does not validate availability**, so it
|
|
1062
|
+
can confirm a conflicting booking. Recheck availability and present the conflict
|
|
1063
|
+
before the administrator acts. Eligible original statuses are PENDING, CREATED
|
|
1064
|
+
and WAITING_LIST. Use the exact revision from the current booking.
|
|
1065
|
+
- `bookings.decline` takes the same inputs and explicitly declines an eligible
|
|
1066
|
+
booking. Notification defaults to false; a message requires notifyParticipants
|
|
1067
|
+
true. Declining does not refund a payment.
|
|
1068
|
+
|
|
1069
|
+
These require Manage Bookings. Enable that permission on the project's Wix key
|
|
1070
|
+
only when the app needs booking management. The public editor's configuration
|
|
1071
|
+
instructions identify the permission; the generated app supplies the booking
|
|
1072
|
+
review/decision UI. CLI users call the same operations. Other frameworks POST to
|
|
1073
|
+
Wix's native endpoints with their own HTTP library, project key and site header.
|
|
1074
|
+
|
|
1075
|
+
Read the exact booking before acting and reconcile uncertain failures before a
|
|
1076
|
+
retry. The adapter sends one request and rejects a mismatched booking response.
|
|
1077
|
+
It never starts checkout, marks an unrelated order paid or silently overrides
|
|
1078
|
+
booking policies. Existing Wix flow-control settings on externally created
|
|
1079
|
+
bookings may still affect Wix's automatic decision.
|
|
1080
|
+
|
|
1081
|
+
References: [automatic decision](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/confirm-or-decline-booking),
|
|
1082
|
+
[explicit confirm](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/confirm-booking),
|
|
1083
|
+
[explicit decline](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/decline-booking).
|
|
1084
|
+
Controlled source **38/38** passed (786ms), covering all three endpoints, precise
|
|
1085
|
+
revision strings, notification opt-in, all automatic result states, mismatched
|
|
1086
|
+
identity, invalid input, host denial and single-attempt failure. Package evidence
|
|
1087
|
+
still covers the prior35-case snapshot; final refresh remains pending.
|
|
1088
|
+
|
|
1089
|
+
|
|
1090
|
+
### Reschedule appointments and classes
|
|
1091
|
+
|
|
1092
|
+
`bookings.reschedule({ bookingId, revision, slot, notifyParticipants?, message? })`
|
|
1093
|
+
moves an existing appointment or class booking. Query the exact booking first,
|
|
1094
|
+
check `allowedActions.reschedule`, authorize its owner and recheck the chosen
|
|
1095
|
+
availability. Use the exact current revision. Manage Bookings is required.
|
|
1096
|
+
|
|
1097
|
+
For an appointment, supply the full selected slot with `serviceId`, `scheduleId`,
|
|
1098
|
+
local `startDate` and `endDate` (`YYYY-MM-DDThh:mm:ss`), IANA `timezone` and the
|
|
1099
|
+
selected resource/location details. Keep the original service/schedule identity
|
|
1100
|
+
when moving the booking. V2 time-slot results use `localStartDate`/`localEndDate`;
|
|
1101
|
+
map these to the writer's `startDate`/`endDate`, using the service's schedule ID.
|
|
1102
|
+
For a class, pass only `{ "eventId": "the-selected-event-id" }` as slot; it must
|
|
1103
|
+
belong to the same class. Wix does not support moving course bookings this way.
|
|
1104
|
+
|
|
1105
|
+
Notifications default to false and a message requires explicit notification.
|
|
1106
|
+
The adapter does not forward policy/availability overrides or change add-ons
|
|
1107
|
+
while rescheduling. Wix validates the move; surface unavailable-slot or stale
|
|
1108
|
+
revision errors and reload the booking before retrying. Keep the returned status:
|
|
1109
|
+
a custom-checkout booking may still need the explicit confirmation step.
|
|
1110
|
+
|
|
1111
|
+
CLI and other-framework users use the same portable inputs and project Env
|
|
1112
|
+
credentials; the native request body is `{ revision, slot, participantNotification }`.
|
|
1113
|
+
The generated app owns the slot picker, confirmation and error handling.
|
|
1114
|
+
|
|
1115
|
+
[Wix rescheduling reference](https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/reschedule-booking).
|
|
1116
|
+
Source **39/39** passed (808ms), including full appointment/event requests,
|
|
1117
|
+
notifications, rejected overrides, invalid timing, mismatched booking identity and
|
|
1118
|
+
single-attempt provider failure. Final installed and rendered refresh remains
|
|
1119
|
+
pending; no live changes were made.
|
|
1120
|
+
|
|
1121
|
+
|
|
1122
|
+
### Send a customer to Wix-hosted checkout
|
|
1123
|
+
|
|
1124
|
+
Use Cart V2 for new integrations. Wix's Cart V1/Checkout V1 retirement is scheduled
|
|
1125
|
+
for 1 February 2027. This adapter does not add the deprecated checkout entity.
|
|
1126
|
+
|
|
1127
|
+
In Wix Account Settings > API Keys, edit the project's key and select **Write
|
|
1128
|
+
Carts V2 (PII)** for creation and **Read Carts V2 (PII)** for checkout URLs. The
|
|
1129
|
+
Create Cart reference also lists **Manage eCommerce - Admin Permissions** as an
|
|
1130
|
+
alternative permission. Keep the selected site's ID in project configuration.
|
|
1131
|
+
Publish the Wix site and configure its checkout/payment methods before expecting
|
|
1132
|
+
a working payment page. SITE_NOT_PUBLISHED or CHECKOUT_PAGE_NOT_FOUND requires
|
|
1133
|
+
fixing the Wix site, not adding an OAuth app or a Vibe64 gateway.
|
|
1134
|
+
|
|
1135
|
+
The app backend calls `carts.create` with a nonempty `catalogItems` array and an
|
|
1136
|
+
optional `note`. Each item has `quantity` and `catalogReference`:
|
|
1137
|
+
|
|
1138
|
+
```json
|
|
1139
|
+
{
|
|
1140
|
+
"catalogItems": [{
|
|
1141
|
+
"quantity": 1,
|
|
1142
|
+
"catalogReference": {
|
|
1143
|
+
"appId": "13d21c63-b5ec-5912-8397-c3a5ddb27a97",
|
|
1144
|
+
"catalogItemId": "01234567-89ab-cdef-0123-456789abcdef"
|
|
1145
|
+
}
|
|
1146
|
+
}]
|
|
1147
|
+
}
|
|
1148
|
+
```
|
|
1149
|
+
|
|
1150
|
+
For Wix Bookings, use the **created booking ID** as catalogItemId and the Bookings
|
|
1151
|
+
app ID shown above. For Wix Stores, use app ID `215238eb-22a5-4c36-9e7b-e7c08025e04e`,
|
|
1152
|
+
the product ID and the appropriate catalogue version's `options`. Native options
|
|
1153
|
+
are preserved; do not convert V1/V3 variant selections into each other. The adapter
|
|
1154
|
+
sets the web sales channel and lets Wix resolve catalogue prices. It does not
|
|
1155
|
+
accept caller price overrides, custom-price items, coupons or membership payment
|
|
1156
|
+
in this operation. These remain separate capability gaps if the app needs them.
|
|
1157
|
+
|
|
1158
|
+
Store `response.cart.id` against the authorized customer in the generated app.
|
|
1159
|
+
Call `carts.getCheckoutUrl({ cartId })`, then redirect the customer to the returned
|
|
1160
|
+
`checkoutUrl`. Wix may return its site's custom checkout domain; the adapter
|
|
1161
|
+
accepts HTTPS URLs without embedded credentials. The app must authorize access to
|
|
1162
|
+
the cart before requesting or exposing its URL. A cart ID is not a permission.
|
|
1163
|
+
|
|
1164
|
+
Cart creation and URL retrieval do not prove payment. Use the order's actual
|
|
1165
|
+
payment status through the order operations before granting paid access. For
|
|
1166
|
+
Wix-hosted booking checkout, Wix updates booking confirmation; do not call the
|
|
1167
|
+
custom-checkout confirmation methods as a second step. Inventory/catalogue
|
|
1168
|
+
errors must be shown to the customer; the adapter does not silently remove items
|
|
1169
|
+
or retry creation.
|
|
1170
|
+
|
|
1171
|
+
JSKIT CLI/runtime consumers use the same calls with text/Env configuration. Other
|
|
1172
|
+
frameworks POST `{ cart: { source: { channelType: "WEB" }, note? }, catalogItems }`
|
|
1173
|
+
to `/ecom/v2/carts`, then POST `{}` to `/ecom/v2/carts/{cartId}/get-checkout-url`
|
|
1174
|
+
with the project-owned key and `wix-site-id` header. They can use their framework's
|
|
1175
|
+
normal redirect response. No card details, provider credentials or Vibe64 billing
|
|
1176
|
+
service are passed through the browser.
|
|
1177
|
+
|
|
1178
|
+
References: [Create Cart](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/create-cart),
|
|
1179
|
+
[Get Checkout URL](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/get-checkout-url),
|
|
1180
|
+
[Cart V2 migration guide](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/migration-guide).
|
|
1181
|
+
Controlled source **40/40 passed** (823ms), including exact V2 bodies/paths, native
|
|
1182
|
+
options and money preservation, key/site ownership, invalid URLs/inputs, host
|
|
1183
|
+
denial and unretried inventory failure. The installed snapshot is still35/35;
|
|
1184
|
+
newest runtime and inline-copy package/browser proof remains pending. No real
|
|
1185
|
+
checkout or payment was created.
|
|
1186
|
+
|
|
1187
|
+
Installed-package refresh: **40/40 passed** (802ms) in the isolated offline consumer.
|
|
1188
|
+
Tarball SHA1: `8523ad1db0917879df986d91c5800994dc233291`. This supersedes the earlier35-case
|
|
1189
|
+
installed snapshot for all current runtime operations. Latest browser proof is
|
|
1190
|
+
recorded separately.
|
|
1191
|
+
|
|
1192
|
+
Latest public-editor verification: fresh-build expanded form/lifecycle **1/1**
|
|
1193
|
+
passed (27.4s). It explicitly asserts Cart V2 permission labels, add-on guidance
|
|
1194
|
+
and direct confirmation's availability warning, plus configuration save/reload
|
|
1195
|
+
and connect/reconnect/disconnect. Compact latest-copy refresh remains pending.
|
|
1196
|
+
|
|
1197
|
+
|
|
1198
|
+
### Read recorded order fulfillments
|
|
1199
|
+
|
|
1200
|
+
Grant **Read Orders** to the site's API key. Call
|
|
1201
|
+
`orderFulfillments.list` with `{ orderId }` through the existing connection service.
|
|
1202
|
+
The native GET `/ecom/v1/fulfillments/orders/{orderId}` returns
|
|
1203
|
+
`orderWithFulfillments`, containing the order ID and its `fulfillments` array.
|
|
1204
|
+
An empty array is valid. Native tracking, custom fulfillment information, status
|
|
1205
|
+
and completion fields are preserved alongside line-item IDs and quantities.
|
|
1206
|
+
|
|
1207
|
+
Your app must authorize the customer's access to the order before invocation.
|
|
1208
|
+
Keep the selected site bound to the same project connection. Handling status is
|
|
1209
|
+
not evidence of payment or a substitute for the order's fulfillment quantities.
|
|
1210
|
+
This reader does not create shipments or send shipping notifications. Use the
|
|
1211
|
+
separate create/update operations documented below to record shipments or change
|
|
1212
|
+
tracking. Those writes can trigger Wix shipping notifications.
|
|
1213
|
+
CLI and other frameworks use the same project Env key, site header and native
|
|
1214
|
+
endpoint; there is no Vibe64 service dependency.
|
|
1215
|
+
|
|
1216
|
+
Reference: [Wix List Fulfillments For Single Order](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/order-fulfillments/list-fulfillments-for-single-order).
|
|
1217
|
+
|
|
1218
|
+
|
|
1219
|
+
### Record shipments and update tracking
|
|
1220
|
+
|
|
1221
|
+
In Wix account API-key permissions, add **Manage Orders** for the selected site
|
|
1222
|
+
and update the same private Env reference if replacing the key. No callback is
|
|
1223
|
+
needed. Your application authorizes the order and confirms the intended shipment.
|
|
1224
|
+
|
|
1225
|
+
`orderFulfillments.create({ orderId, lineItems: [{ id, quantity }], trackingInfo })`
|
|
1226
|
+
posts `{ fulfillment: { lineItems, trackingInfo } }` to
|
|
1227
|
+
`/ecom/v1/fulfillments/orders/{orderId}/create-fulfillment`. Obtain line-item IDs
|
|
1228
|
+
from `orders.get`; this adapter requires explicit quantities. Wix requires an
|
|
1229
|
+
APPROVED order and checks unfulfilled quantities. It assigns the fulfillment ID.
|
|
1230
|
+
If supplying tracking, include `trackingNumber` and `shippingProvider`. Custom
|
|
1231
|
+
carriers also need `trackingLink`; Wix generates links for its predefined carriers.
|
|
1232
|
+
|
|
1233
|
+
`orderFulfillments.update({ orderId, fulfillmentId, trackingInfo, status, completed })`
|
|
1234
|
+
PATCHes `/ecom/v1/fulfillments/{fulfillmentId}/orders/{orderId}`. Pass only changed
|
|
1235
|
+
fields. Tracking number/provider cannot be removed. Optional `lineItems` replaces
|
|
1236
|
+
the shipment items with explicit quantities; Wix disallows this once completed.
|
|
1237
|
+
Status values are Pending, Accepted, Ready, In_Delivery and Fulfilled; these are
|
|
1238
|
+
handling labels, not payment evidence. The adapter also preserves explicit false
|
|
1239
|
+
for `completed`. Custom fulfillment fields and deletion are not supplied yet.
|
|
1240
|
+
|
|
1241
|
+
Creation or changed tracking can send buyer emails according to Wix site settings.
|
|
1242
|
+
There is no invented suppress-email option. Order fulfillment totals update
|
|
1243
|
+
asynchronously; read the order again when the app needs the latest totals. Never
|
|
1244
|
+
retry an uncertain write automatically: list existing fulfillments and reconcile
|
|
1245
|
+
before a deliberate retry. A 409 can indicate an existing tracking number.
|
|
1246
|
+
Other frameworks use these same native requests and project Env credentials.
|
|
1247
|
+
|
|
1248
|
+
References: [Create](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/order-fulfillments/create-fulfillment),
|
|
1249
|
+
[Update](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/order-fulfillments/update-fulfillment).
|