zernio-sdk 1.4.331__tar.gz → 1.4.332__tar.gz
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.
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/PKG-INFO +2 -1
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/README.md +1 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/openapi.yaml +61 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/pyproject.toml +1 -1
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/__init__.py +1 -1
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/generated_tools.py +54 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/models/_generated/models.py +1 -1
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/ad_campaigns.py +62 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/uv.lock +1 -1
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.dockerignore +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.env.example +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.github/CODEOWNERS +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.github/workflows/generate.yml +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.github/workflows/release-preview.yml +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.github/workflows/release.yml +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.github/workflows/test.yml +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/.gitignore +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/CHANGELOG.md +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/Dockerfile +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/Dockerfile.docker +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/LICENSE +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/claude-desktop-config.json +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/docs/HTTP_DEPLOYMENT.md +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/docs/MCP.md +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/examples/01_basic_usage.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/examples/02_schedule_from_csv.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/examples/03_cross_posting.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/examples/04_ai_content_generation.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/examples/05_download_tools.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/examples/data/sample_posts.csv +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/examples/publish_post.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/railway.toml +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/scripts/generate_examples.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/scripts/generate_mcp_docs.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/scripts/generate_mcp_tools.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/scripts/generate_models.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/scripts/generate_readme_reference.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/scripts/generate_resources.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/scripts/smoketest_streamable_http.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/server.json +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/ai/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/ai/content_generator.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/ai/protocols.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/ai/providers/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/ai/providers/openai.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/client/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/client/base.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/client/exceptions.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/client/late_client.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/client/rate_limiter.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/enums.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/__main__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/auth.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/config.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/constants.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/http_server.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/server.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/mcp/tool_definitions.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/models/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/models/_generated/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/models/responses.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/pipelines/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/pipelines/cross_poster.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/pipelines/csv_scheduler.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/account_groups.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/account_settings.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/accounts.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/ad_accounts.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/ad_audiences.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/ad_creatives.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/ad_insights.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/ad_targeting.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/ads.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/analytics.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/api_keys.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/broadcasts.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/calls.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/comment_automations.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/comments.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/connect.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/contacts.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/conversions.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/custom_fields.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/discord.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_attributes.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_food_menus.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_location_details.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_media.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_place_actions.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_services.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_verifications.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/inbox.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/inbox_analytics.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/instagram.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/invites.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/lead_gen.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/logs.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/media.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/mentions.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/messages.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/messaging_ads.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/phone_numbers.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/posts.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/profiles.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/queue.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/reach_and_frequency.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/reddit.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/reviews.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/sequences.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/sms.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/tools.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/tracking_tags.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/twitter_engagement.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/usage.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/users.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/validate.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/verify.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/voice.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/webhooks.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp_calling.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp_flows.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp_phone_numbers.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp_sandbox.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp_templates.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/workflows.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/accounts.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/ads.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/analytics.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/base.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/media.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/posts.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/profiles.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/queue.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/tools.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/users.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/config.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/direct.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/protocols.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/smart.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/utils.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/vercel/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/vercel/client.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/upload/vercel/uploader.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/zernio/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/tests/__init__.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/tests/conftest.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/tests/test_client.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/tests/test_exhaustive.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/tests/test_integration.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/tests/test_patch_methods.py +0 -0
- {zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/tests/test_resolve_account.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zernio-sdk
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.332
|
|
4
4
|
Summary: The official Python library for the Zernio API
|
|
5
5
|
Project-URL: Homepage, https://zernio.com
|
|
6
6
|
Project-URL: Documentation, https://docs.zernio.com
|
|
@@ -459,6 +459,7 @@ Both `from zernio import ...` and `from late import ...` work identically. The `
|
|
|
459
459
|
| Method | Description |
|
|
460
460
|
|--------|-------------|
|
|
461
461
|
| `ad_campaigns.list_ad_campaigns()` | List campaigns |
|
|
462
|
+
| `ad_campaigns.list_ad_keywords()` | List Search keywords |
|
|
462
463
|
| `ad_campaigns.list_ads()` | List ads |
|
|
463
464
|
| `ad_campaigns.bulk_update_ad_campaign_status()` | Pause or resume many campaigns |
|
|
464
465
|
| `ad_campaigns.create_ad_campaign()` | Create a standalone campaign |
|
|
@@ -406,6 +406,7 @@ Both `from zernio import ...` and `from late import ...` work identically. The `
|
|
|
406
406
|
| Method | Description |
|
|
407
407
|
|--------|-------------|
|
|
408
408
|
| `ad_campaigns.list_ad_campaigns()` | List campaigns |
|
|
409
|
+
| `ad_campaigns.list_ad_keywords()` | List Search keywords |
|
|
409
410
|
| `ad_campaigns.list_ads()` | List ads |
|
|
410
411
|
| `ad_campaigns.bulk_update_ad_campaign_status()` | Pause or resume many campaigns |
|
|
411
412
|
| `ad_campaigns.create_ad_campaign()` | Create a standalone campaign |
|
|
@@ -33711,6 +33711,67 @@ paths:
|
|
|
33711
33711
|
'403':
|
|
33712
33712
|
description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
|
|
33713
33713
|
|
|
33714
|
+
/v1/ads/keywords:
|
|
33715
|
+
get:
|
|
33716
|
+
operationId: listAdKeywords
|
|
33717
|
+
tags: ["Ad Campaigns"]
|
|
33718
|
+
x-platforms: ["google"]
|
|
33719
|
+
summary: List Search keywords
|
|
33720
|
+
description: |
|
|
33721
|
+
Returns the Google Search keyword criteria (positive and negative) synced from
|
|
33722
|
+
connected Google Ads accounts, one row per ad-group keyword. Populated by the
|
|
33723
|
+
periodic ads discovery sweep (roughly every 3 hours per account), so keywords
|
|
33724
|
+
added on Google appear with that delay. Campaign-level negative keywords are
|
|
33725
|
+
not included; only ad-group-level criteria are.
|
|
33726
|
+
security:
|
|
33727
|
+
- bearerAuth: []
|
|
33728
|
+
parameters:
|
|
33729
|
+
- $ref: '#/components/parameters/PageParam'
|
|
33730
|
+
- { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 500, default: 50 } }
|
|
33731
|
+
- { name: accountId, in: query, schema: { type: string }, description: Social account ID }
|
|
33732
|
+
- { name: adAccountId, in: query, schema: { type: string }, description: 'Platform ad account ID (Google customer ID). Mirrors the same filter on /v1/ads.' }
|
|
33733
|
+
- { name: profileId, in: query, schema: { type: string }, description: Profile ID }
|
|
33734
|
+
- { name: campaignId, in: query, schema: { type: string }, description: Platform campaign ID }
|
|
33735
|
+
- { name: adSetId, in: query, schema: { type: string }, description: 'Platform ad group ID (Google ad group)' }
|
|
33736
|
+
- { name: status, in: query, schema: { type: string, enum: [active, paused] }, description: Keyword criterion status }
|
|
33737
|
+
- { name: matchType, in: query, schema: { type: string, enum: [exact, phrase, broad, unknown] } }
|
|
33738
|
+
- { name: negative, in: query, schema: { type: boolean }, description: 'true = negative keywords only, false = positive only. Omit for both.' }
|
|
33739
|
+
- { name: search, in: query, schema: { type: string, maxLength: 200 }, description: 'Case-insensitive substring match on the keyword text' }
|
|
33740
|
+
responses:
|
|
33741
|
+
'200':
|
|
33742
|
+
description: Paginated keywords
|
|
33743
|
+
content:
|
|
33744
|
+
application/json:
|
|
33745
|
+
schema:
|
|
33746
|
+
type: object
|
|
33747
|
+
properties:
|
|
33748
|
+
keywords:
|
|
33749
|
+
type: array
|
|
33750
|
+
items:
|
|
33751
|
+
type: object
|
|
33752
|
+
properties:
|
|
33753
|
+
id: { type: string }
|
|
33754
|
+
accountId: { type: string, description: Social account ID owning the sync }
|
|
33755
|
+
profileId: { type: string }
|
|
33756
|
+
platform: { type: string, enum: [google] }
|
|
33757
|
+
adAccountId: { type: string, description: Google customer ID }
|
|
33758
|
+
campaignId: { type: string }
|
|
33759
|
+
campaignName: { type: [string, "null"] }
|
|
33760
|
+
campaignStatus: { type: [string, "null"] }
|
|
33761
|
+
adSetId: { type: string, description: Google ad group ID }
|
|
33762
|
+
adSetName: { type: [string, "null"] }
|
|
33763
|
+
adSetStatus: { type: [string, "null"] }
|
|
33764
|
+
keyword: { type: string }
|
|
33765
|
+
matchType: { type: string, enum: [exact, phrase, broad, unknown] }
|
|
33766
|
+
status: { type: string, enum: [active, paused] }
|
|
33767
|
+
negative: { type: boolean }
|
|
33768
|
+
syncedAt: { type: [string, "null"], format: date-time }
|
|
33769
|
+
pagination: { $ref: '#/components/schemas/Pagination' }
|
|
33770
|
+
'400': { $ref: '#/components/responses/BadRequest' }
|
|
33771
|
+
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
33772
|
+
'403':
|
|
33773
|
+
description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
|
|
33774
|
+
|
|
33714
33775
|
/v1/ads/campaigns:
|
|
33715
33776
|
get:
|
|
33716
33777
|
operationId: listAdCampaigns
|
|
@@ -1777,6 +1777,60 @@ def register_generated_tools(mcp, _get_client):
|
|
|
1777
1777
|
except Exception as e:
|
|
1778
1778
|
return f"Error: {e}"
|
|
1779
1779
|
|
|
1780
|
+
@mcp.tool(
|
|
1781
|
+
annotations=ToolAnnotations(
|
|
1782
|
+
title="List Search keywords",
|
|
1783
|
+
readOnlyHint=True,
|
|
1784
|
+
destructiveHint=False,
|
|
1785
|
+
openWorldHint=False,
|
|
1786
|
+
)
|
|
1787
|
+
)
|
|
1788
|
+
def ad_campaigns_list_ad_keywords(
|
|
1789
|
+
page: int = 1,
|
|
1790
|
+
limit: int = 50,
|
|
1791
|
+
account_id: str | None = None,
|
|
1792
|
+
ad_account_id: str | None = None,
|
|
1793
|
+
profile_id: str | None = None,
|
|
1794
|
+
campaign_id: str | None = None,
|
|
1795
|
+
ad_set_id: str | None = None,
|
|
1796
|
+
status: str | None = None,
|
|
1797
|
+
match_type: str | None = None,
|
|
1798
|
+
negative: bool | None = None,
|
|
1799
|
+
search: str | None = None,
|
|
1800
|
+
) -> str:
|
|
1801
|
+
"""List Search keywords
|
|
1802
|
+
|
|
1803
|
+
Args:
|
|
1804
|
+
page: Page number
|
|
1805
|
+
limit
|
|
1806
|
+
account_id: Social account ID
|
|
1807
|
+
ad_account_id: Platform ad account ID (Google customer ID). Mirrors the same filter on /v1/ads.
|
|
1808
|
+
profile_id: Profile ID
|
|
1809
|
+
campaign_id: Platform campaign ID
|
|
1810
|
+
ad_set_id: Platform ad group ID (Google ad group)
|
|
1811
|
+
status: Keyword criterion status
|
|
1812
|
+
match_type
|
|
1813
|
+
negative: true = negative keywords only, false = positive only. Omit for both.
|
|
1814
|
+
search: Case-insensitive substring match on the keyword text"""
|
|
1815
|
+
client = _get_client()
|
|
1816
|
+
try:
|
|
1817
|
+
response = client.ad_campaigns.list_ad_keywords(
|
|
1818
|
+
page=page,
|
|
1819
|
+
limit=limit,
|
|
1820
|
+
account_id=account_id,
|
|
1821
|
+
ad_account_id=ad_account_id,
|
|
1822
|
+
profile_id=profile_id,
|
|
1823
|
+
campaign_id=campaign_id,
|
|
1824
|
+
ad_set_id=ad_set_id,
|
|
1825
|
+
status=status,
|
|
1826
|
+
match_type=match_type,
|
|
1827
|
+
negative=negative,
|
|
1828
|
+
search=search,
|
|
1829
|
+
)
|
|
1830
|
+
return _format_response(response)
|
|
1831
|
+
except Exception as e:
|
|
1832
|
+
return f"Error: {e}"
|
|
1833
|
+
|
|
1780
1834
|
@mcp.tool(
|
|
1781
1835
|
annotations=ToolAnnotations(
|
|
1782
1836
|
title="List campaigns",
|
|
@@ -93,6 +93,37 @@ class AdCampaignsResource:
|
|
|
93
93
|
)
|
|
94
94
|
return self._client._get("/v1/ads", params=params)
|
|
95
95
|
|
|
96
|
+
def list_ad_keywords(
|
|
97
|
+
self,
|
|
98
|
+
*,
|
|
99
|
+
page: int | None = 1,
|
|
100
|
+
limit: int | None = 50,
|
|
101
|
+
account_id: str | None = None,
|
|
102
|
+
ad_account_id: str | None = None,
|
|
103
|
+
profile_id: str | None = None,
|
|
104
|
+
campaign_id: str | None = None,
|
|
105
|
+
ad_set_id: str | None = None,
|
|
106
|
+
status: str | None = None,
|
|
107
|
+
match_type: str | None = None,
|
|
108
|
+
negative: bool | None = None,
|
|
109
|
+
search: str | None = None,
|
|
110
|
+
) -> dict[str, Any]:
|
|
111
|
+
"""List Search keywords"""
|
|
112
|
+
params = self._build_params(
|
|
113
|
+
page=page,
|
|
114
|
+
limit=limit,
|
|
115
|
+
account_id=account_id,
|
|
116
|
+
ad_account_id=ad_account_id,
|
|
117
|
+
profile_id=profile_id,
|
|
118
|
+
campaign_id=campaign_id,
|
|
119
|
+
ad_set_id=ad_set_id,
|
|
120
|
+
status=status,
|
|
121
|
+
match_type=match_type,
|
|
122
|
+
negative=negative,
|
|
123
|
+
search=search,
|
|
124
|
+
)
|
|
125
|
+
return self._client._get("/v1/ads/keywords", params=params)
|
|
126
|
+
|
|
96
127
|
def list_ad_campaigns(
|
|
97
128
|
self,
|
|
98
129
|
*,
|
|
@@ -670,6 +701,37 @@ class AdCampaignsResource:
|
|
|
670
701
|
)
|
|
671
702
|
return await self._client._aget("/v1/ads", params=params)
|
|
672
703
|
|
|
704
|
+
async def alist_ad_keywords(
|
|
705
|
+
self,
|
|
706
|
+
*,
|
|
707
|
+
page: int | None = 1,
|
|
708
|
+
limit: int | None = 50,
|
|
709
|
+
account_id: str | None = None,
|
|
710
|
+
ad_account_id: str | None = None,
|
|
711
|
+
profile_id: str | None = None,
|
|
712
|
+
campaign_id: str | None = None,
|
|
713
|
+
ad_set_id: str | None = None,
|
|
714
|
+
status: str | None = None,
|
|
715
|
+
match_type: str | None = None,
|
|
716
|
+
negative: bool | None = None,
|
|
717
|
+
search: str | None = None,
|
|
718
|
+
) -> dict[str, Any]:
|
|
719
|
+
"""List Search keywords (async)"""
|
|
720
|
+
params = self._build_params(
|
|
721
|
+
page=page,
|
|
722
|
+
limit=limit,
|
|
723
|
+
account_id=account_id,
|
|
724
|
+
ad_account_id=ad_account_id,
|
|
725
|
+
profile_id=profile_id,
|
|
726
|
+
campaign_id=campaign_id,
|
|
727
|
+
ad_set_id=ad_set_id,
|
|
728
|
+
status=status,
|
|
729
|
+
match_type=match_type,
|
|
730
|
+
negative=negative,
|
|
731
|
+
search=search,
|
|
732
|
+
)
|
|
733
|
+
return await self._client._aget("/v1/ads/keywords", params=params)
|
|
734
|
+
|
|
673
735
|
async def alist_ad_campaigns(
|
|
674
736
|
self,
|
|
675
737
|
*,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/comment_automations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_location_details.py
RENAMED
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_place_actions.py
RENAMED
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/gmb_verifications.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/reach_and_frequency.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/twitter_engagement.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp_phone_numbers.py
RENAMED
|
File without changes
|
|
File without changes
|
{zernio_sdk-1.4.331 → zernio_sdk-1.4.332}/src/late/resources/_generated/whatsapp_templates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|