@biggora/claude-plugins 1.2.0 → 1.3.0
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 +13 -4
- package/package.json +1 -1
- package/registry/registry.json +334 -244
- package/specs/coding.md +30 -0
- package/specs/pod.md +2 -0
- package/src/commands/skills/add.js +63 -7
- package/src/commands/skills/list.js +23 -52
- package/src/commands/skills/remove.js +26 -27
- package/src/commands/skills/resolve.js +155 -0
- package/src/commands/skills/update.js +58 -74
- 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/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/nest-best-practices/SKILL.md +251 -0
- package/src/skills/nest-best-practices/references/best-practices-request-lifecycle.md +158 -0
- package/src/skills/nest-best-practices/references/cli-monorepo.md +106 -0
- package/src/skills/nest-best-practices/references/cli-overview.md +157 -0
- package/src/skills/nest-best-practices/references/core-controllers.md +165 -0
- package/src/skills/nest-best-practices/references/core-dependency-injection.md +179 -0
- package/src/skills/nest-best-practices/references/core-middleware.md +139 -0
- package/src/skills/nest-best-practices/references/core-modules.md +138 -0
- package/src/skills/nest-best-practices/references/core-providers.md +188 -0
- package/src/skills/nest-best-practices/references/faq-raw-body-hybrid.md +122 -0
- package/src/skills/nest-best-practices/references/fundamentals-circular-dependency.md +89 -0
- package/src/skills/nest-best-practices/references/fundamentals-custom-decorators.md +107 -0
- package/src/skills/nest-best-practices/references/fundamentals-dynamic-modules.md +125 -0
- package/src/skills/nest-best-practices/references/fundamentals-exception-filters.md +202 -0
- package/src/skills/nest-best-practices/references/fundamentals-execution-context.md +107 -0
- package/src/skills/nest-best-practices/references/fundamentals-guards.md +136 -0
- package/src/skills/nest-best-practices/references/fundamentals-interceptors.md +187 -0
- package/src/skills/nest-best-practices/references/fundamentals-lazy-loading.md +89 -0
- package/src/skills/nest-best-practices/references/fundamentals-lifecycle-events.md +87 -0
- package/src/skills/nest-best-practices/references/fundamentals-module-reference.md +107 -0
- package/src/skills/nest-best-practices/references/fundamentals-pipes.md +197 -0
- package/src/skills/nest-best-practices/references/fundamentals-provider-scopes.md +92 -0
- package/src/skills/nest-best-practices/references/fundamentals-testing.md +142 -0
- package/src/skills/nest-best-practices/references/graphql-overview.md +233 -0
- package/src/skills/nest-best-practices/references/graphql-resolvers-mutations.md +199 -0
- package/src/skills/nest-best-practices/references/graphql-scalars-unions-enums.md +180 -0
- package/src/skills/nest-best-practices/references/graphql-subscriptions.md +228 -0
- package/src/skills/nest-best-practices/references/microservices-grpc.md +175 -0
- package/src/skills/nest-best-practices/references/microservices-overview.md +221 -0
- package/src/skills/nest-best-practices/references/microservices-transports.md +119 -0
- package/src/skills/nest-best-practices/references/openapi-swagger.md +207 -0
- package/src/skills/nest-best-practices/references/recipes-authentication.md +97 -0
- package/src/skills/nest-best-practices/references/recipes-cqrs.md +176 -0
- package/src/skills/nest-best-practices/references/recipes-crud-generator.md +87 -0
- package/src/skills/nest-best-practices/references/recipes-documentation.md +93 -0
- package/src/skills/nest-best-practices/references/recipes-mongoose.md +153 -0
- package/src/skills/nest-best-practices/references/recipes-prisma.md +98 -0
- package/src/skills/nest-best-practices/references/recipes-terminus.md +148 -0
- package/src/skills/nest-best-practices/references/recipes-typeorm.md +122 -0
- package/src/skills/nest-best-practices/references/security-authorization.md +196 -0
- package/src/skills/nest-best-practices/references/security-cors-helmet-rate-limiting.md +204 -0
- package/src/skills/nest-best-practices/references/security-encryption-hashing.md +93 -0
- package/src/skills/nest-best-practices/references/techniques-caching.md +142 -0
- package/src/skills/nest-best-practices/references/techniques-compression-streaming-sse.md +194 -0
- package/src/skills/nest-best-practices/references/techniques-configuration.md +132 -0
- package/src/skills/nest-best-practices/references/techniques-database.md +153 -0
- package/src/skills/nest-best-practices/references/techniques-events.md +163 -0
- package/src/skills/nest-best-practices/references/techniques-fastify.md +137 -0
- package/src/skills/nest-best-practices/references/techniques-file-upload.md +140 -0
- package/src/skills/nest-best-practices/references/techniques-http-module.md +176 -0
- package/src/skills/nest-best-practices/references/techniques-logging.md +146 -0
- package/src/skills/nest-best-practices/references/techniques-mvc-serve-static.md +132 -0
- package/src/skills/nest-best-practices/references/techniques-queues.md +162 -0
- package/src/skills/nest-best-practices/references/techniques-serialization.md +158 -0
- package/src/skills/nest-best-practices/references/techniques-sessions-cookies.md +167 -0
- package/src/skills/nest-best-practices/references/techniques-task-scheduling.md +166 -0
- package/src/skills/nest-best-practices/references/techniques-validation.md +126 -0
- package/src/skills/nest-best-practices/references/techniques-versioning.md +153 -0
- package/src/skills/nest-best-practices/references/websockets-advanced.md +96 -0
- package/src/skills/nest-best-practices/references/websockets-gateways.md +215 -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/typescript-expert/SKILL.md +145 -0
- package/src/skills/typescript-expert/commands/typescript-fix.md +65 -0
- package/src/skills/typescript-expert/references/advanced-conditional-types.md +190 -0
- package/src/skills/typescript-expert/references/advanced-decorators.md +243 -0
- package/src/skills/typescript-expert/references/advanced-mapped-types.md +223 -0
- package/src/skills/typescript-expert/references/advanced-template-literals.md +209 -0
- package/src/skills/typescript-expert/references/advanced-type-guards.md +308 -0
- package/src/skills/typescript-expert/references/best-practices-patterns.md +313 -0
- package/src/skills/typescript-expert/references/best-practices-performance.md +185 -0
- package/src/skills/typescript-expert/references/best-practices-tsconfig.md +242 -0
- package/src/skills/typescript-expert/references/core-generics.md +246 -0
- package/src/skills/typescript-expert/references/core-interfaces-types.md +231 -0
- package/src/skills/typescript-expert/references/core-type-system.md +261 -0
- package/src/skills/typescript-expert/references/core-utility-types.md +235 -0
- package/src/skills/typescript-expert/references/features-ts5x.md +370 -0
- 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/codex-cli-workspace/iteration-1/benchmark.json +0 -122
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/eval_metadata.json +0 -13
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/grading.json +0 -52
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/outputs/response.md +0 -163
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/grading.json +0 -58
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/outputs/response.md +0 -151
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +0 -13
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +0 -52
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -86
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +0 -58
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -164
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/eval_metadata.json +0 -13
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/grading.json +0 -52
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/outputs/response.md +0 -130
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/grading.json +0 -64
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/outputs/response.md +0 -209
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/review.html +0 -1325
- package/gemini-cli-workspace/iteration-1/benchmark.json +0 -86
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/outputs/response.md +0 -401
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/outputs/response.md +0 -405
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -212
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -427
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/eval_metadata.json +0 -32
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/outputs/response.md +0 -171
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/outputs/response.md +0 -199
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/review.html +0 -1325
- package/gemini-cli-workspace/iteration-2/benchmark.json +0 -173
- package/gemini-cli-workspace/iteration-2/benchmark.md +0 -28
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/outputs/response.md +0 -195
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/outputs/response.md +0 -377
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -127
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -164
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/eval_metadata.json +0 -32
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/outputs/response.md +0 -91
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/outputs/response.md +0 -112
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-viewer.html +0 -1325
- package/screen-recording-workspace/evals.json +0 -41
- package/screen-recording-workspace/iteration-1/benchmark.json +0 -102
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/eval_metadata.json +0 -31
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/outputs/demo.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/outputs/demo.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/eval_metadata.json +0 -31
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/outputs/region_capture.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/outputs/region_capture.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/eval_metadata.json +0 -31
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/outputs/fallback_recording.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/fallback_recording.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/record_screen.py +0 -67
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/review.html +0 -1325
- package/src/skills/codex-cli/evals/evals.json +0 -47
- package/src/skills/gemini-cli/evals/evals.json +0 -46
- package/src/skills/tm-search/evals/evals.json +0 -23
|
@@ -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
|
+
```
|