@biggora/claude-plugins 1.1.1 → 1.2.2
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/.claude/settings.local.json +3 -1
- package/README.md +24 -17
- package/package.json +1 -1
- package/registry/registry.json +319 -244
- package/specs/coding.md +24 -0
- package/specs/pod.md +2 -0
- package/src/skills/captcha/README.md +221 -0
- package/src/skills/captcha/SKILL.md +355 -0
- package/src/skills/captcha/references/captcha-types.md +254 -0
- package/src/skills/captcha/references/services.md +172 -0
- package/src/skills/captcha/references/stealth.md +238 -0
- package/src/skills/captcha/scripts/solve_captcha.py +323 -0
- package/src/skills/captcha/scripts/solve_image_grid.py +350 -0
- package/src/skills/codex-cli/SKILL.md +21 -11
- package/src/skills/gemini-cli/SKILL.md +27 -13
- package/src/skills/gemini-cli/references/commands.md +21 -14
- package/src/skills/gemini-cli/references/configuration.md +23 -18
- package/src/skills/gemini-cli/references/headless-and-scripting.md +7 -17
- package/src/skills/gemini-cli/references/mcp-and-extensions.md +12 -6
- package/src/skills/google-merchant-api/SKILL.md +581 -0
- package/src/skills/google-merchant-api/references/accounts.md +247 -0
- package/src/skills/google-merchant-api/references/content-api-legacy.md +216 -0
- package/src/skills/google-merchant-api/references/datasources.md +233 -0
- package/src/skills/google-merchant-api/references/inventories.md +201 -0
- package/src/skills/google-merchant-api/references/migration.md +267 -0
- package/src/skills/google-merchant-api/references/products.md +316 -0
- package/src/skills/google-merchant-api/references/promotions.md +201 -0
- package/src/skills/google-merchant-api/references/reports.md +240 -0
- package/src/skills/lv-aggregators-api/SKILL.md +113 -0
- package/src/skills/lv-aggregators-api/references/integration-guide.md +368 -0
- package/src/skills/lv-aggregators-api/references/kurpirkt.md +103 -0
- package/src/skills/lv-aggregators-api/references/salidzini.md +122 -0
- package/src/skills/notebook-lm/SKILL.md +1 -1
- package/src/skills/screen-recording/SKILL.md +243 -213
- package/src/skills/screen-recording/references/design-patterns.md +4 -2
- package/src/skills/screen-recording/references/ffmpeg-recording.md +473 -0
- package/src/skills/screen-recording/references/{approach1-programmatic.md → programmatic-generation.md} +45 -22
- package/src/skills/screen-recording/references/python-fallback.md +222 -0
- package/src/skills/tailwindcss-best-practices/SKILL.md +180 -0
- package/src/skills/tailwindcss-best-practices/references/best-practices-utility-patterns.md +87 -0
- package/src/skills/tailwindcss-best-practices/references/core-installation.md +109 -0
- package/src/skills/tailwindcss-best-practices/references/core-preflight.md +200 -0
- package/src/skills/tailwindcss-best-practices/references/core-responsive.md +163 -0
- package/src/skills/tailwindcss-best-practices/references/core-source-detection.md +114 -0
- package/src/skills/tailwindcss-best-practices/references/core-theme.md +108 -0
- package/src/skills/tailwindcss-best-practices/references/core-utility-classes.md +59 -0
- package/src/skills/tailwindcss-best-practices/references/core-variants.md +204 -0
- package/src/skills/tailwindcss-best-practices/references/effects-form-controls.md +76 -0
- package/src/skills/tailwindcss-best-practices/references/effects-mask.md +91 -0
- package/src/skills/tailwindcss-best-practices/references/effects-scroll-snap.md +59 -0
- package/src/skills/tailwindcss-best-practices/references/effects-text-shadow.md +78 -0
- package/src/skills/tailwindcss-best-practices/references/effects-transition-animation.md +80 -0
- package/src/skills/tailwindcss-best-practices/references/effects-visibility-interactivity.md +82 -0
- package/src/skills/tailwindcss-best-practices/references/features-content-detection.md +175 -0
- package/src/skills/tailwindcss-best-practices/references/features-custom-styles.md +203 -0
- package/src/skills/tailwindcss-best-practices/references/features-dark-mode.md +137 -0
- package/src/skills/tailwindcss-best-practices/references/features-functions-directives.md +241 -0
- package/src/skills/tailwindcss-best-practices/references/features-upgrade.md +160 -0
- package/src/skills/tailwindcss-best-practices/references/layout-aspect-ratio.md +39 -0
- package/src/skills/tailwindcss-best-practices/references/layout-columns.md +80 -0
- package/src/skills/tailwindcss-best-practices/references/layout-display.md +110 -0
- package/src/skills/tailwindcss-best-practices/references/layout-flexbox.md +112 -0
- package/src/skills/tailwindcss-best-practices/references/layout-grid.md +87 -0
- package/src/skills/tailwindcss-best-practices/references/layout-height.md +97 -0
- package/src/skills/tailwindcss-best-practices/references/layout-inset.md +103 -0
- package/src/skills/tailwindcss-best-practices/references/layout-logical-properties.md +92 -0
- package/src/skills/tailwindcss-best-practices/references/layout-margin.md +126 -0
- package/src/skills/tailwindcss-best-practices/references/layout-min-max-sizing.md +63 -0
- package/src/skills/tailwindcss-best-practices/references/layout-object-fit-position.md +64 -0
- package/src/skills/tailwindcss-best-practices/references/layout-overflow.md +57 -0
- package/src/skills/tailwindcss-best-practices/references/layout-padding.md +77 -0
- package/src/skills/tailwindcss-best-practices/references/layout-position.md +85 -0
- package/src/skills/tailwindcss-best-practices/references/layout-tables.md +67 -0
- package/src/skills/tailwindcss-best-practices/references/layout-width.md +102 -0
- package/src/skills/tailwindcss-best-practices/references/transform-base.md +68 -0
- package/src/skills/tailwindcss-best-practices/references/transform-rotate.md +70 -0
- package/src/skills/tailwindcss-best-practices/references/transform-scale.md +83 -0
- package/src/skills/tailwindcss-best-practices/references/transform-skew.md +62 -0
- package/src/skills/tailwindcss-best-practices/references/transform-translate.md +77 -0
- package/src/skills/tailwindcss-best-practices/references/typography-font-text.md +142 -0
- package/src/skills/tailwindcss-best-practices/references/typography-list-style.md +65 -0
- package/src/skills/tailwindcss-best-practices/references/typography-text-align.md +60 -0
- package/src/skills/tailwindcss-best-practices/references/visual-background.md +76 -0
- package/src/skills/tailwindcss-best-practices/references/visual-border.md +108 -0
- package/src/skills/tailwindcss-best-practices/references/visual-effects.md +111 -0
- package/src/skills/tailwindcss-best-practices/references/visual-svg.md +82 -0
- package/src/skills/test-mobile-app/SKILL.md +11 -6
- package/src/skills/test-mobile-app/scripts/analyze_apk.py +15 -4
- package/src/skills/test-mobile-app/scripts/check_environment.py +5 -5
- package/src/skills/test-mobile-app/scripts/run_tests.py +1 -1
- package/src/skills/test-web-ui/SKILL.md +264 -84
- package/src/skills/test-web-ui/scripts/discover.py +25 -12
- package/src/skills/test-web-ui/scripts/run_tests.py +3 -2
- package/src/skills/tm-search/SKILL.md +242 -106
- package/src/skills/tm-search/references/scraping-fallback.md +60 -95
- package/src/skills/tm-search/scripts/tm_search.py +453 -375
- package/src/skills/vite-best-practices/SKILL.md +115 -0
- package/src/skills/vite-best-practices/references/build-and-ssr.md +255 -0
- package/src/skills/vite-best-practices/references/core-config.md +231 -0
- package/src/skills/vite-best-practices/references/core-features.md +222 -0
- package/src/skills/vite-best-practices/references/core-plugin-api.md +294 -0
- package/src/skills/vite-best-practices/references/environment-api.md +108 -0
- package/src/skills/vite-best-practices/references/rolldown-migration.md +242 -0
- package/src/skills/screen-recording/references/approach2-xvfb.md +0 -232
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# Accounts Sub-API Reference
|
|
2
|
+
|
|
3
|
+
Base: `https://merchantapi.googleapis.com/accounts/v1`
|
|
4
|
+
|
|
5
|
+
## Account Management
|
|
6
|
+
|
|
7
|
+
### Core Account Operations
|
|
8
|
+
|
|
9
|
+
| Method | Endpoint | Description |
|
|
10
|
+
|--------|----------|-------------|
|
|
11
|
+
| `GET` | `/accounts/{account}` | Get account details |
|
|
12
|
+
| `PATCH` | `/accounts/{account}` | Update account |
|
|
13
|
+
| `DELETE` | `/accounts/{account}` | Delete account |
|
|
14
|
+
| `GET` | `/accounts` | List all accounts |
|
|
15
|
+
| `GET` | `/accounts/{parent}/subaccounts` | List sub-accounts |
|
|
16
|
+
| `POST` | `/accounts:createAndConfigure` | Create and configure new account |
|
|
17
|
+
| `POST` | `/accounts/{parent}/accounts:createTestAccount` | Create test account |
|
|
18
|
+
|
|
19
|
+
### Account Object
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"name": "accounts/123456789",
|
|
24
|
+
"accountId": "123456789",
|
|
25
|
+
"accountName": "My Store",
|
|
26
|
+
"languageCode": "en",
|
|
27
|
+
"adultContent": false,
|
|
28
|
+
"timeZone": {
|
|
29
|
+
"id": "America/New_York"
|
|
30
|
+
},
|
|
31
|
+
"accountType": "STANDALONE"
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Business Info
|
|
36
|
+
|
|
37
|
+
Manage store business information (address, phone, customer service).
|
|
38
|
+
|
|
39
|
+
| Method | Endpoint |
|
|
40
|
+
|--------|----------|
|
|
41
|
+
| `GET` | `/accounts/{account}/businessInfo` |
|
|
42
|
+
| `PATCH` | `/accounts/{account}/businessInfo` |
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"name": "accounts/123456789/businessInfo",
|
|
47
|
+
"address": {
|
|
48
|
+
"regionCode": "US",
|
|
49
|
+
"postalCode": "10001",
|
|
50
|
+
"locality": "New York",
|
|
51
|
+
"administrativeArea": "NY",
|
|
52
|
+
"streetAddress": "123 Commerce St"
|
|
53
|
+
},
|
|
54
|
+
"phone": {
|
|
55
|
+
"number": "+12125551234"
|
|
56
|
+
},
|
|
57
|
+
"customerService": {
|
|
58
|
+
"uri": "https://example.com/support",
|
|
59
|
+
"email": "support@example.com",
|
|
60
|
+
"phone": {
|
|
61
|
+
"number": "+12125551234"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Business Identity
|
|
68
|
+
|
|
69
|
+
Manage identity attributes (minority-owned, veteran-owned, etc.).
|
|
70
|
+
|
|
71
|
+
| Method | Endpoint |
|
|
72
|
+
|--------|----------|
|
|
73
|
+
| `GET` | `/accounts/{account}/businessIdentity` |
|
|
74
|
+
| `PATCH` | `/accounts/{account}/businessIdentity` |
|
|
75
|
+
|
|
76
|
+
## Shipping Settings
|
|
77
|
+
|
|
78
|
+
Configure account-level shipping rules.
|
|
79
|
+
|
|
80
|
+
| Method | Endpoint |
|
|
81
|
+
|--------|----------|
|
|
82
|
+
| `GET` | `/accounts/{account}/shippingSettings` |
|
|
83
|
+
| `POST` | `/accounts/{account}/shippingSettings` |
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"name": "accounts/123456789/shippingSettings",
|
|
88
|
+
"services": [
|
|
89
|
+
{
|
|
90
|
+
"serviceName": "Standard Shipping",
|
|
91
|
+
"active": true,
|
|
92
|
+
"deliveryCountries": ["US"],
|
|
93
|
+
"currencyCode": "USD",
|
|
94
|
+
"deliveryTime": {
|
|
95
|
+
"minTransitDays": 3,
|
|
96
|
+
"maxTransitDays": 7,
|
|
97
|
+
"minHandlingDays": 0,
|
|
98
|
+
"maxHandlingDays": 1
|
|
99
|
+
},
|
|
100
|
+
"rateGroups": [
|
|
101
|
+
{
|
|
102
|
+
"applicableShippingLabels": [],
|
|
103
|
+
"singleValue": {
|
|
104
|
+
"flatRate": {
|
|
105
|
+
"amountMicros": "5990000",
|
|
106
|
+
"currencyCode": "USD"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Users
|
|
117
|
+
|
|
118
|
+
Manage who can access the Merchant Center account.
|
|
119
|
+
|
|
120
|
+
| Method | Endpoint |
|
|
121
|
+
|--------|----------|
|
|
122
|
+
| `GET` | `/accounts/{account}/users/{user}` |
|
|
123
|
+
| `GET` | `/accounts/{account}/users` |
|
|
124
|
+
| `POST` | `/accounts/{account}/users` |
|
|
125
|
+
| `PATCH` | `/accounts/{account}/users/{user}` |
|
|
126
|
+
| `DELETE` | `/accounts/{account}/users/{user}` |
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"name": "accounts/123456789/users/user@example.com",
|
|
131
|
+
"emailAddress": "user@example.com",
|
|
132
|
+
"accessRights": ["STANDARD", "ADMIN"],
|
|
133
|
+
"state": "ACTIVE"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Access Rights:**
|
|
138
|
+
- `STANDARD` - View and manage products
|
|
139
|
+
- `ADMIN` - Full account control
|
|
140
|
+
- `PERFORMANCE_REPORTING` - View reports only
|
|
141
|
+
|
|
142
|
+
## Programs
|
|
143
|
+
|
|
144
|
+
Manage enrollment in Google programs (Shopping Ads, Free Listings, etc.).
|
|
145
|
+
|
|
146
|
+
| Method | Endpoint |
|
|
147
|
+
|--------|----------|
|
|
148
|
+
| `GET` | `/accounts/{account}/programs/{program}` |
|
|
149
|
+
| `GET` | `/accounts/{account}/programs` |
|
|
150
|
+
| `POST` | `/accounts/{account}/programs/{program}:enable` |
|
|
151
|
+
| `POST` | `/accounts/{account}/programs/{program}:disable` |
|
|
152
|
+
|
|
153
|
+
Common programs: `FREE_LISTINGS`, `SHOPPING_ADS`, `FREE_LOCAL_LISTINGS`, `LOCAL_INVENTORY_ADS`
|
|
154
|
+
|
|
155
|
+
## Regions
|
|
156
|
+
|
|
157
|
+
Define geographic regions for regional pricing and availability.
|
|
158
|
+
|
|
159
|
+
| Method | Endpoint |
|
|
160
|
+
|--------|----------|
|
|
161
|
+
| `GET` | `/accounts/{account}/regions/{region}` |
|
|
162
|
+
| `GET` | `/accounts/{account}/regions` |
|
|
163
|
+
| `POST` | `/accounts/{account}/regions` |
|
|
164
|
+
| `PATCH` | `/accounts/{account}/regions/{region}` |
|
|
165
|
+
| `DELETE` | `/accounts/{account}/regions/{region}` |
|
|
166
|
+
| `POST` | `/accounts/{account}/regions:batchCreate` |
|
|
167
|
+
| `POST` | `/accounts/{account}/regions:batchUpdate` |
|
|
168
|
+
| `POST` | `/accounts/{account}/regions:batchDelete` |
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{
|
|
172
|
+
"name": "accounts/123456789/regions/northeast",
|
|
173
|
+
"displayName": "US Northeast",
|
|
174
|
+
"postalCodeArea": {
|
|
175
|
+
"regionCode": "US",
|
|
176
|
+
"postalCodes": [
|
|
177
|
+
{ "begin": "10000", "end": "14999" },
|
|
178
|
+
{ "begin": "06000", "end": "06999" }
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Online Return Policies
|
|
185
|
+
|
|
186
|
+
| Method | Endpoint |
|
|
187
|
+
|--------|----------|
|
|
188
|
+
| `GET` | `/accounts/{account}/onlineReturnPolicies/{policy}` |
|
|
189
|
+
| `GET` | `/accounts/{account}/onlineReturnPolicies` |
|
|
190
|
+
| `POST` | `/accounts/{account}/onlineReturnPolicies` |
|
|
191
|
+
| `DELETE` | `/accounts/{account}/onlineReturnPolicies/{policy}` |
|
|
192
|
+
|
|
193
|
+
## Homepage
|
|
194
|
+
|
|
195
|
+
Claim and manage your store homepage URL.
|
|
196
|
+
|
|
197
|
+
| Method | Endpoint |
|
|
198
|
+
|--------|----------|
|
|
199
|
+
| `GET` | `/accounts/{account}/homepage` |
|
|
200
|
+
| `PATCH` | `/accounts/{account}/homepage` |
|
|
201
|
+
| `POST` | `/accounts/{account}/homepage:claim` |
|
|
202
|
+
| `POST` | `/accounts/{account}/homepage:unclaim` |
|
|
203
|
+
|
|
204
|
+
## Terms of Service
|
|
205
|
+
|
|
206
|
+
| Method | Endpoint |
|
|
207
|
+
|--------|----------|
|
|
208
|
+
| `GET` | `/termsOfService/{tos}` |
|
|
209
|
+
| `GET` | `/termsOfService:retrieveLatest` |
|
|
210
|
+
| `POST` | `/termsOfService/{tos}:accept` |
|
|
211
|
+
| `GET` | `/accounts/{account}/termsOfServiceAgreementStates/{state}` |
|
|
212
|
+
|
|
213
|
+
## Autofeed Settings
|
|
214
|
+
|
|
215
|
+
Enable Google to auto-crawl your site for product data.
|
|
216
|
+
|
|
217
|
+
| Method | Endpoint |
|
|
218
|
+
|--------|----------|
|
|
219
|
+
| `GET` | `/accounts/{account}/autofeedSettings` |
|
|
220
|
+
| `PATCH` | `/accounts/{account}/autofeedSettings` |
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"name": "accounts/123456789/autofeedSettings",
|
|
225
|
+
"enableProducts": true
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Developer Registration
|
|
230
|
+
|
|
231
|
+
Link your GCP project to Merchant Center.
|
|
232
|
+
|
|
233
|
+
| Method | Endpoint |
|
|
234
|
+
|--------|----------|
|
|
235
|
+
| `GET` | `/accounts/{account}/developerRegistration` |
|
|
236
|
+
| `POST` | `/accounts/{account}/developerRegistration:registerGcp` |
|
|
237
|
+
| `POST` | `/accounts/{account}/developerRegistration:unregisterGcp` |
|
|
238
|
+
|
|
239
|
+
## Account Issues
|
|
240
|
+
|
|
241
|
+
List problems affecting your account.
|
|
242
|
+
|
|
243
|
+
| Method | Endpoint |
|
|
244
|
+
|--------|----------|
|
|
245
|
+
| `GET` | `/accounts/{account}/issues` |
|
|
246
|
+
|
|
247
|
+
Returns validation issues, policy violations, and suggested fixes.
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Content API for Shopping v2.1 (Legacy Reference)
|
|
2
|
+
|
|
3
|
+
**Sunset date: August 18, 2026.** Use the Merchant API for new integrations.
|
|
4
|
+
|
|
5
|
+
Base: `https://shoppingcontent.googleapis.com/content/v2.1`
|
|
6
|
+
|
|
7
|
+
## Products
|
|
8
|
+
|
|
9
|
+
| Method | Endpoint | Description |
|
|
10
|
+
|--------|----------|-------------|
|
|
11
|
+
| `POST` | `/{merchantId}/products` | Insert product |
|
|
12
|
+
| `PATCH` | `/{merchantId}/products/{productId}` | Update product |
|
|
13
|
+
| `DELETE` | `/{merchantId}/products/{productId}` | Delete product |
|
|
14
|
+
| `GET` | `/{merchantId}/products/{productId}` | Get product |
|
|
15
|
+
| `GET` | `/{merchantId}/products` | List products |
|
|
16
|
+
| `POST` | `/products/batch` | Batch operations |
|
|
17
|
+
|
|
18
|
+
**Product ID format:** `channel:contentLanguage:targetCountry:offerId`
|
|
19
|
+
Example: `online:en:US:SKU-001`
|
|
20
|
+
|
|
21
|
+
### Insert Product
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
const product = {
|
|
25
|
+
offerId: 'SKU-001',
|
|
26
|
+
title: 'Premium Wireless Headphones',
|
|
27
|
+
description: 'Noise-cancelling Bluetooth headphones',
|
|
28
|
+
link: 'https://example.com/headphones',
|
|
29
|
+
imageLink: 'https://example.com/images/headphones.jpg',
|
|
30
|
+
contentLanguage: 'en',
|
|
31
|
+
targetCountry: 'US',
|
|
32
|
+
channel: 'online',
|
|
33
|
+
availability: 'in stock',
|
|
34
|
+
condition: 'new',
|
|
35
|
+
price: { value: '79.99', currency: 'USD' },
|
|
36
|
+
brand: 'AudioBrand',
|
|
37
|
+
gtin: '0123456789012',
|
|
38
|
+
googleProductCategory: 'Electronics > Audio > Headphones',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const response = await fetch(
|
|
42
|
+
`https://shoppingcontent.googleapis.com/content/v2.1/${MERCHANT_ID}/products`,
|
|
43
|
+
{
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
|
46
|
+
body: JSON.stringify(product),
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Custom Batch
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
const batchRequest = {
|
|
55
|
+
entries: [
|
|
56
|
+
{
|
|
57
|
+
batchId: 1,
|
|
58
|
+
merchantId: MERCHANT_ID,
|
|
59
|
+
method: 'insert',
|
|
60
|
+
product: {
|
|
61
|
+
offerId: 'SKU-001',
|
|
62
|
+
title: 'Product 1',
|
|
63
|
+
// ...
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
batchId: 2,
|
|
68
|
+
merchantId: MERCHANT_ID,
|
|
69
|
+
method: 'insert',
|
|
70
|
+
product: {
|
|
71
|
+
offerId: 'SKU-002',
|
|
72
|
+
title: 'Product 2',
|
|
73
|
+
// ...
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const response = await fetch(
|
|
80
|
+
`https://shoppingcontent.googleapis.com/content/v2.1/products/batch`,
|
|
81
|
+
{
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
|
84
|
+
body: JSON.stringify(batchRequest),
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Product Statuses
|
|
90
|
+
|
|
91
|
+
| Method | Endpoint |
|
|
92
|
+
|--------|----------|
|
|
93
|
+
| `GET` | `/{merchantId}/productstatuses/{productId}` |
|
|
94
|
+
| `GET` | `/{merchantId}/productstatuses` |
|
|
95
|
+
| `POST` | `/productstatuses/batch` |
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"productId": "online:en:US:SKU-001",
|
|
100
|
+
"title": "Premium Headphones",
|
|
101
|
+
"destinationStatuses": [
|
|
102
|
+
{
|
|
103
|
+
"destination": "SurfacesAcrossGoogle",
|
|
104
|
+
"status": "approved",
|
|
105
|
+
"approvedCountries": ["US"],
|
|
106
|
+
"pendingCountries": [],
|
|
107
|
+
"disapprovedCountries": []
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"itemLevelIssues": [
|
|
111
|
+
{
|
|
112
|
+
"code": "missing_recommended_attribute",
|
|
113
|
+
"servability": "unaffected",
|
|
114
|
+
"description": "Missing product highlight",
|
|
115
|
+
"detail": "Add product highlights for better visibility",
|
|
116
|
+
"attributeName": "product_highlight"
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Accounts
|
|
123
|
+
|
|
124
|
+
| Method | Endpoint |
|
|
125
|
+
|--------|----------|
|
|
126
|
+
| `GET` | `/{merchantId}/accounts/{accountId}` |
|
|
127
|
+
| `GET` | `/{merchantId}/accounts` |
|
|
128
|
+
| `POST` | `/{merchantId}/accounts` |
|
|
129
|
+
| `PATCH` | `/{merchantId}/accounts/{accountId}` |
|
|
130
|
+
| `DELETE` | `/{merchantId}/accounts/{accountId}` |
|
|
131
|
+
|
|
132
|
+
## Datafeeds
|
|
133
|
+
|
|
134
|
+
| Method | Endpoint |
|
|
135
|
+
|--------|----------|
|
|
136
|
+
| `GET` | `/{merchantId}/datafeeds/{datafeedId}` |
|
|
137
|
+
| `GET` | `/{merchantId}/datafeeds` |
|
|
138
|
+
| `POST` | `/{merchantId}/datafeeds` |
|
|
139
|
+
| `PATCH` | `/{merchantId}/datafeeds/{datafeedId}` |
|
|
140
|
+
| `DELETE` | `/{merchantId}/datafeeds/{datafeedId}` |
|
|
141
|
+
| `POST` | `/{merchantId}/datafeeds/{datafeedId}/fetchNow` |
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"id": "123456789",
|
|
146
|
+
"name": "Daily Product Feed",
|
|
147
|
+
"contentType": "products",
|
|
148
|
+
"fileName": "products.xml",
|
|
149
|
+
"fetchSchedule": {
|
|
150
|
+
"fetchUrl": "https://example.com/feeds/products.xml",
|
|
151
|
+
"hour": 6,
|
|
152
|
+
"timeZone": "America/New_York",
|
|
153
|
+
"dayOfMonth": 0,
|
|
154
|
+
"weekday": "monday",
|
|
155
|
+
"paused": false
|
|
156
|
+
},
|
|
157
|
+
"format": {
|
|
158
|
+
"fileEncoding": "utf-8",
|
|
159
|
+
"quotingMode": "none"
|
|
160
|
+
},
|
|
161
|
+
"targets": [
|
|
162
|
+
{
|
|
163
|
+
"language": "en",
|
|
164
|
+
"country": "US",
|
|
165
|
+
"includedDestinations": ["SurfacesAcrossGoogle", "ShoppingAds"]
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Price Object (Content API)
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"value": "79.99",
|
|
176
|
+
"currency": "USD"
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
`value` is a decimal string. `currency` is ISO 4217.
|
|
181
|
+
|
|
182
|
+
## Key Enums
|
|
183
|
+
|
|
184
|
+
**availability:** `in stock`, `out of stock`, `preorder`, `backorder`
|
|
185
|
+
(Note: spaces, not underscores — unlike Merchant API)
|
|
186
|
+
|
|
187
|
+
**condition:** `new`, `refurbished`, `used`
|
|
188
|
+
|
|
189
|
+
**channel:** `online`, `local`
|
|
190
|
+
(Note: lowercase strings — unlike Merchant API enums)
|
|
191
|
+
|
|
192
|
+
## Pagination
|
|
193
|
+
|
|
194
|
+
List endpoints support `maxResults` and `pageToken`:
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
GET /{merchantId}/products?maxResults=250&pageToken=abc123
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Error Format
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
{
|
|
204
|
+
"error": {
|
|
205
|
+
"errors": [
|
|
206
|
+
{
|
|
207
|
+
"domain": "content.ContentErrorDomain",
|
|
208
|
+
"reason": "not_found",
|
|
209
|
+
"message": "product not found"
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
"code": 404,
|
|
213
|
+
"message": "product not found"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
```
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# Data Sources Sub-API Reference
|
|
2
|
+
|
|
3
|
+
Base: `https://merchantapi.googleapis.com/datasources/v1`
|
|
4
|
+
|
|
5
|
+
Manage how product data flows into Merchant Center — via API, file uploads, or automatic crawling.
|
|
6
|
+
|
|
7
|
+
## Endpoints
|
|
8
|
+
|
|
9
|
+
| Method | Endpoint | Description |
|
|
10
|
+
|--------|----------|-------------|
|
|
11
|
+
| `POST` | `/accounts/{account}/dataSources` | Create data source |
|
|
12
|
+
| `GET` | `/accounts/{account}/dataSources/{dataSource}` | Get data source |
|
|
13
|
+
| `GET` | `/accounts/{account}/dataSources` | List data sources |
|
|
14
|
+
| `PATCH` | `/accounts/{account}/dataSources/{dataSource}` | Update data source |
|
|
15
|
+
| `DELETE` | `/accounts/{account}/dataSources/{dataSource}` | Delete data source |
|
|
16
|
+
| `POST` | `/accounts/{account}/dataSources/{dataSource}:fetch` | Trigger file fetch |
|
|
17
|
+
| `GET` | `/accounts/{account}/dataSources/{dataSource}/fileUploads/{fileUpload}` | Get file upload status |
|
|
18
|
+
|
|
19
|
+
## Data Source Types
|
|
20
|
+
|
|
21
|
+
### Primary API Data Source
|
|
22
|
+
|
|
23
|
+
Products inserted directly via `productInputs:insert`.
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"displayName": "My API Feed",
|
|
28
|
+
"primaryProductDataSource": {
|
|
29
|
+
"channel": "ONLINE_PRODUCTS",
|
|
30
|
+
"contentLanguage": "en",
|
|
31
|
+
"feedLabel": "US"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Primary File Data Source
|
|
37
|
+
|
|
38
|
+
Products loaded from a file (URL fetch or direct upload).
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"displayName": "Daily Product Feed",
|
|
43
|
+
"primaryProductDataSource": {
|
|
44
|
+
"channel": "ONLINE_PRODUCTS",
|
|
45
|
+
"contentLanguage": "en",
|
|
46
|
+
"feedLabel": "US"
|
|
47
|
+
},
|
|
48
|
+
"fileInput": {
|
|
49
|
+
"fetchSettings": {
|
|
50
|
+
"enabled": true,
|
|
51
|
+
"fetchUri": "https://example.com/feeds/products.xml",
|
|
52
|
+
"timeOfDay": { "hours": 6, "minutes": 0 },
|
|
53
|
+
"dayOfMonth": 0,
|
|
54
|
+
"timeZone": "America/New_York",
|
|
55
|
+
"frequency": "DAILY"
|
|
56
|
+
},
|
|
57
|
+
"fileName": "products.xml",
|
|
58
|
+
"fileInputType": "FETCH"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Supplemental API Data Source
|
|
64
|
+
|
|
65
|
+
Adds/overrides attributes on products from a primary source.
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"displayName": "Price Overrides",
|
|
70
|
+
"supplementalProductDataSource": {
|
|
71
|
+
"referencingPrimaryDataSources": [
|
|
72
|
+
"accounts/123456/dataSources/primary-feed-id"
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Supplemental File Data Source
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"displayName": "Weekly Sale Prices",
|
|
83
|
+
"supplementalProductDataSource": {
|
|
84
|
+
"referencingPrimaryDataSources": [
|
|
85
|
+
"accounts/123456/dataSources/primary-feed-id"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"fileInput": {
|
|
89
|
+
"fetchSettings": {
|
|
90
|
+
"enabled": true,
|
|
91
|
+
"fetchUri": "https://example.com/feeds/sale-prices.tsv",
|
|
92
|
+
"frequency": "WEEKLY",
|
|
93
|
+
"dayOfWeek": "MONDAY",
|
|
94
|
+
"timeOfDay": { "hours": 3, "minutes": 0 },
|
|
95
|
+
"timeZone": "America/New_York"
|
|
96
|
+
},
|
|
97
|
+
"fileName": "sale-prices.tsv",
|
|
98
|
+
"fileInputType": "FETCH"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Channel Types
|
|
104
|
+
|
|
105
|
+
| Channel | Description |
|
|
106
|
+
|---------|-------------|
|
|
107
|
+
| `ONLINE_PRODUCTS` | Online product listings |
|
|
108
|
+
| `LOCAL_PRODUCTS` | Local/in-store product listings |
|
|
109
|
+
| `PRODUCTS` | Both online and local |
|
|
110
|
+
|
|
111
|
+
## Fetch Frequency
|
|
112
|
+
|
|
113
|
+
| Value | Description |
|
|
114
|
+
|-------|-------------|
|
|
115
|
+
| `DAILY` | Every day at specified time |
|
|
116
|
+
| `WEEKLY` | Specified day + time each week |
|
|
117
|
+
| `MONTHLY` | Specified day of month + time |
|
|
118
|
+
|
|
119
|
+
## File Input Types
|
|
120
|
+
|
|
121
|
+
| Type | Description |
|
|
122
|
+
|------|-------------|
|
|
123
|
+
| `FETCH` | Google fetches from your URL on schedule |
|
|
124
|
+
| `GOOGLE_SHEETS` | Data from a Google Sheet |
|
|
125
|
+
| `UPLOAD` | Direct file upload via SFTP or Merchant Center UI |
|
|
126
|
+
|
|
127
|
+
## Key Fields
|
|
128
|
+
|
|
129
|
+
| Field | Type | Description |
|
|
130
|
+
|-------|------|-------------|
|
|
131
|
+
| `name` | string | Resource name (output only) |
|
|
132
|
+
| `dataSourceId` | string | Numeric ID (output only) |
|
|
133
|
+
| `displayName` | string | Human-readable name |
|
|
134
|
+
| `primaryProductDataSource` | object | Config for primary data source |
|
|
135
|
+
| `supplementalProductDataSource` | object | Config for supplemental source |
|
|
136
|
+
| `fileInput` | object | File-based fetch/upload settings |
|
|
137
|
+
| `input` | enum | `API`, `FILE`, `UI`, `AUTOFEED` (output only) |
|
|
138
|
+
|
|
139
|
+
## Common Workflows
|
|
140
|
+
|
|
141
|
+
### Create Primary API Feed and Insert Products
|
|
142
|
+
|
|
143
|
+
```javascript
|
|
144
|
+
// Step 1: Create the data source
|
|
145
|
+
const dsResponse = await fetch(
|
|
146
|
+
`https://merchantapi.googleapis.com/datasources/v1/accounts/${MERCHANT_ID}/dataSources`,
|
|
147
|
+
{
|
|
148
|
+
method: 'POST',
|
|
149
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
|
150
|
+
body: JSON.stringify({
|
|
151
|
+
displayName: 'Product API Feed',
|
|
152
|
+
primaryProductDataSource: {
|
|
153
|
+
channel: 'ONLINE_PRODUCTS',
|
|
154
|
+
contentLanguage: 'en',
|
|
155
|
+
feedLabel: 'US',
|
|
156
|
+
},
|
|
157
|
+
}),
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
const dataSource = await dsResponse.json();
|
|
161
|
+
const dataSourceName = dataSource.name; // accounts/123456/dataSources/789
|
|
162
|
+
|
|
163
|
+
// Step 2: Insert products referencing this data source
|
|
164
|
+
await fetch(
|
|
165
|
+
`https://merchantapi.googleapis.com/products/v1/accounts/${MERCHANT_ID}/productInputs:insert?dataSource=${dataSourceName}`,
|
|
166
|
+
{
|
|
167
|
+
method: 'POST',
|
|
168
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
|
169
|
+
body: JSON.stringify({
|
|
170
|
+
offerId: 'SKU-001',
|
|
171
|
+
contentLanguage: 'en',
|
|
172
|
+
feedLabel: 'US',
|
|
173
|
+
productAttributes: {
|
|
174
|
+
title: 'My Product',
|
|
175
|
+
// ... other attributes
|
|
176
|
+
},
|
|
177
|
+
}),
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Create Supplemental Feed for Sale Prices
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
// Supplemental feed overrides specific attributes
|
|
186
|
+
const dsResponse = await fetch(
|
|
187
|
+
`https://merchantapi.googleapis.com/datasources/v1/accounts/${MERCHANT_ID}/dataSources`,
|
|
188
|
+
{
|
|
189
|
+
method: 'POST',
|
|
190
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
|
191
|
+
body: JSON.stringify({
|
|
192
|
+
displayName: 'Sale Price Overrides',
|
|
193
|
+
supplementalProductDataSource: {
|
|
194
|
+
referencingPrimaryDataSources: [primaryDataSourceName],
|
|
195
|
+
},
|
|
196
|
+
}),
|
|
197
|
+
}
|
|
198
|
+
);
|
|
199
|
+
const supplementalDS = await dsResponse.json();
|
|
200
|
+
|
|
201
|
+
// Insert supplemental data (only the fields you want to override)
|
|
202
|
+
await fetch(
|
|
203
|
+
`https://merchantapi.googleapis.com/products/v1/accounts/${MERCHANT_ID}/productInputs:insert?dataSource=${supplementalDS.name}`,
|
|
204
|
+
{
|
|
205
|
+
method: 'POST',
|
|
206
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
|
207
|
+
body: JSON.stringify({
|
|
208
|
+
offerId: 'SKU-001',
|
|
209
|
+
contentLanguage: 'en',
|
|
210
|
+
feedLabel: 'US',
|
|
211
|
+
productAttributes: {
|
|
212
|
+
salePrice: { amountMicros: '59990000', currencyCode: 'USD' },
|
|
213
|
+
salePriceEffectiveDate: {
|
|
214
|
+
startTime: '2024-12-01T00:00:00Z',
|
|
215
|
+
endTime: '2024-12-31T23:59:59Z',
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
}),
|
|
219
|
+
}
|
|
220
|
+
);
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Trigger Manual File Fetch
|
|
224
|
+
|
|
225
|
+
```javascript
|
|
226
|
+
await fetch(
|
|
227
|
+
`https://merchantapi.googleapis.com/datasources/v1/accounts/${MERCHANT_ID}/dataSources/${DATA_SOURCE_ID}:fetch`,
|
|
228
|
+
{
|
|
229
|
+
method: 'POST',
|
|
230
|
+
headers: { 'Authorization': `Bearer ${token}` },
|
|
231
|
+
}
|
|
232
|
+
);
|
|
233
|
+
```
|