late-sdk 1.4.413__tar.gz → 1.4.415__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.
Files changed (159) hide show
  1. {late_sdk-1.4.413 → late_sdk-1.4.415}/PKG-INFO +1 -1
  2. {late_sdk-1.4.413 → late_sdk-1.4.415}/openapi.yaml +26 -1
  3. {late_sdk-1.4.413 → late_sdk-1.4.415}/pyproject.toml +1 -1
  4. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/__init__.py +1 -1
  5. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/generated_tools.py +3 -0
  6. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/models/_generated/models.py +85 -66
  7. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/whatsapp.py +4 -0
  8. {late_sdk-1.4.413 → late_sdk-1.4.415}/uv.lock +1 -1
  9. {late_sdk-1.4.413 → late_sdk-1.4.415}/.dockerignore +0 -0
  10. {late_sdk-1.4.413 → late_sdk-1.4.415}/.env.example +0 -0
  11. {late_sdk-1.4.413 → late_sdk-1.4.415}/.github/.tmp/.generated-actions/run-pypi-publish-in-docker-container/action.yml +0 -0
  12. {late_sdk-1.4.413 → late_sdk-1.4.415}/.github/CODEOWNERS +0 -0
  13. {late_sdk-1.4.413 → late_sdk-1.4.415}/.github/workflows/generate.yml +0 -0
  14. {late_sdk-1.4.413 → late_sdk-1.4.415}/.github/workflows/release-preview.yml +0 -0
  15. {late_sdk-1.4.413 → late_sdk-1.4.415}/.github/workflows/release.yml +0 -0
  16. {late_sdk-1.4.413 → late_sdk-1.4.415}/.github/workflows/test.yml +0 -0
  17. {late_sdk-1.4.413 → late_sdk-1.4.415}/.gitignore +0 -0
  18. {late_sdk-1.4.413 → late_sdk-1.4.415}/CHANGELOG.md +0 -0
  19. {late_sdk-1.4.413 → late_sdk-1.4.415}/Dockerfile +0 -0
  20. {late_sdk-1.4.413 → late_sdk-1.4.415}/Dockerfile.docker +0 -0
  21. {late_sdk-1.4.413 → late_sdk-1.4.415}/LICENSE +0 -0
  22. {late_sdk-1.4.413 → late_sdk-1.4.415}/README.md +0 -0
  23. {late_sdk-1.4.413 → late_sdk-1.4.415}/claude-desktop-config.json +0 -0
  24. {late_sdk-1.4.413 → late_sdk-1.4.415}/docs/HTTP_DEPLOYMENT.md +0 -0
  25. {late_sdk-1.4.413 → late_sdk-1.4.415}/docs/MCP.md +0 -0
  26. {late_sdk-1.4.413 → late_sdk-1.4.415}/examples/01_basic_usage.py +0 -0
  27. {late_sdk-1.4.413 → late_sdk-1.4.415}/examples/02_schedule_from_csv.py +0 -0
  28. {late_sdk-1.4.413 → late_sdk-1.4.415}/examples/03_cross_posting.py +0 -0
  29. {late_sdk-1.4.413 → late_sdk-1.4.415}/examples/04_ai_content_generation.py +0 -0
  30. {late_sdk-1.4.413 → late_sdk-1.4.415}/examples/05_download_tools.py +0 -0
  31. {late_sdk-1.4.413 → late_sdk-1.4.415}/examples/data/sample_posts.csv +0 -0
  32. {late_sdk-1.4.413 → late_sdk-1.4.415}/examples/publish_post.py +0 -0
  33. {late_sdk-1.4.413 → late_sdk-1.4.415}/railway.toml +0 -0
  34. {late_sdk-1.4.413 → late_sdk-1.4.415}/scripts/generate_examples.py +0 -0
  35. {late_sdk-1.4.413 → late_sdk-1.4.415}/scripts/generate_mcp_docs.py +0 -0
  36. {late_sdk-1.4.413 → late_sdk-1.4.415}/scripts/generate_mcp_tools.py +0 -0
  37. {late_sdk-1.4.413 → late_sdk-1.4.415}/scripts/generate_models.py +0 -0
  38. {late_sdk-1.4.413 → late_sdk-1.4.415}/scripts/generate_readme_reference.py +0 -0
  39. {late_sdk-1.4.413 → late_sdk-1.4.415}/scripts/generate_resources.py +0 -0
  40. {late_sdk-1.4.413 → late_sdk-1.4.415}/scripts/smoketest_streamable_http.py +0 -0
  41. {late_sdk-1.4.413 → late_sdk-1.4.415}/server.json +0 -0
  42. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/ai/__init__.py +0 -0
  43. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/ai/content_generator.py +0 -0
  44. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/ai/protocols.py +0 -0
  45. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/ai/providers/__init__.py +0 -0
  46. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/ai/providers/openai.py +0 -0
  47. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/client/__init__.py +0 -0
  48. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/client/base.py +0 -0
  49. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/client/exceptions.py +0 -0
  50. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/client/late_client.py +0 -0
  51. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/client/rate_limiter.py +0 -0
  52. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/enums.py +0 -0
  53. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/__init__.py +0 -0
  54. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/__main__.py +0 -0
  55. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/auth.py +0 -0
  56. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/config.py +0 -0
  57. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/constants.py +0 -0
  58. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/http_server.py +0 -0
  59. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/server.py +0 -0
  60. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/mcp/tool_definitions.py +0 -0
  61. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/models/__init__.py +0 -0
  62. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/models/_generated/__init__.py +0 -0
  63. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/models/responses.py +0 -0
  64. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/pipelines/__init__.py +0 -0
  65. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/pipelines/cross_poster.py +0 -0
  66. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/pipelines/csv_scheduler.py +0 -0
  67. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/__init__.py +0 -0
  68. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/__init__.py +0 -0
  69. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/account_groups.py +0 -0
  70. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/account_settings.py +0 -0
  71. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/accounts.py +0 -0
  72. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/ad_accounts.py +0 -0
  73. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/ad_audiences.py +0 -0
  74. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/ad_campaigns.py +0 -0
  75. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/ad_creatives.py +0 -0
  76. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/ad_insights.py +0 -0
  77. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/ad_targeting.py +0 -0
  78. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/ads.py +0 -0
  79. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/analytics.py +0 -0
  80. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/api_keys.py +0 -0
  81. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/broadcasts.py +0 -0
  82. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/calls.py +0 -0
  83. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/comment_automations.py +0 -0
  84. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/comments.py +0 -0
  85. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/connect.py +0 -0
  86. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/connected_apps.py +0 -0
  87. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/contacts.py +0 -0
  88. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/conversions.py +0 -0
  89. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/custom_fields.py +0 -0
  90. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/discord.py +0 -0
  91. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/gmb_attributes.py +0 -0
  92. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/gmb_food_menus.py +0 -0
  93. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/gmb_location_details.py +0 -0
  94. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/gmb_media.py +0 -0
  95. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/gmb_place_actions.py +0 -0
  96. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/gmb_services.py +0 -0
  97. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/gmb_verifications.py +0 -0
  98. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/inbox.py +0 -0
  99. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/inbox_analytics.py +0 -0
  100. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/instagram.py +0 -0
  101. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/invites.py +0 -0
  102. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/lead_gen.py +0 -0
  103. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/logs.py +0 -0
  104. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/media.py +0 -0
  105. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/mentions.py +0 -0
  106. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/messages.py +0 -0
  107. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/messaging_ads.py +0 -0
  108. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/phone_numbers.py +0 -0
  109. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/posts.py +0 -0
  110. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/profiles.py +0 -0
  111. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/queue.py +0 -0
  112. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/reach_and_frequency.py +0 -0
  113. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/reddit.py +0 -0
  114. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/reviews.py +0 -0
  115. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/sequences.py +0 -0
  116. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/sms.py +0 -0
  117. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/tools.py +0 -0
  118. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/tracking_tags.py +0 -0
  119. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/twitter_engagement.py +0 -0
  120. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/usage.py +0 -0
  121. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/users.py +0 -0
  122. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/validate.py +0 -0
  123. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/verify.py +0 -0
  124. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/voice.py +0 -0
  125. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/webhooks.py +0 -0
  126. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/whatsapp_calling.py +0 -0
  127. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/whatsapp_flows.py +0 -0
  128. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/whatsapp_phone_numbers.py +0 -0
  129. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/whatsapp_sandbox.py +0 -0
  130. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/whatsapp_templates.py +0 -0
  131. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/_generated/workflows.py +0 -0
  132. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/accounts.py +0 -0
  133. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/ads.py +0 -0
  134. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/analytics.py +0 -0
  135. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/base.py +0 -0
  136. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/media.py +0 -0
  137. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/posts.py +0 -0
  138. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/profiles.py +0 -0
  139. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/queue.py +0 -0
  140. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/tools.py +0 -0
  141. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/resources/users.py +0 -0
  142. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/__init__.py +0 -0
  143. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/config.py +0 -0
  144. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/direct.py +0 -0
  145. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/protocols.py +0 -0
  146. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/smart.py +0 -0
  147. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/utils.py +0 -0
  148. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/vercel/__init__.py +0 -0
  149. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/vercel/client.py +0 -0
  150. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/late/upload/vercel/uploader.py +0 -0
  151. {late_sdk-1.4.413 → late_sdk-1.4.415}/src/zernio/__init__.py +0 -0
  152. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/__init__.py +0 -0
  153. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/conftest.py +0 -0
  154. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/test_client.py +0 -0
  155. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/test_exhaustive.py +0 -0
  156. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/test_integration.py +0 -0
  157. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/test_mcp_retry_regression.py +0 -0
  158. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/test_patch_methods.py +0 -0
  159. {late_sdk-1.4.413 → late_sdk-1.4.415}/tests/test_resolve_account.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: late-sdk
3
- Version: 1.4.413
3
+ Version: 1.4.415
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
@@ -1457,6 +1457,11 @@ components:
1457
1457
  type: array
1458
1458
  items: { type: string }
1459
1459
  description: Sample values for header text variables
1460
+ header_text_named_params:
1461
+ type: array
1462
+ items:
1463
+ $ref: '#/components/schemas/WhatsAppNamedParamExample'
1464
+ description: 'Sample values for NAMED header variables (templates using {{customer_name}}-style tokens with parameter_format: NAMED).'
1460
1465
  header_handle:
1461
1466
  type: array
1462
1467
  minItems: 1
@@ -1487,6 +1492,22 @@ components:
1487
1492
  type: array
1488
1493
  items: { type: string }
1489
1494
  description: Sample values for body variables (array of arrays)
1495
+ body_text_named_params:
1496
+ type: array
1497
+ items:
1498
+ $ref: '#/components/schemas/WhatsAppNamedParamExample'
1499
+ description: 'Sample values for NAMED body variables (templates using {{customer_name}}-style tokens with parameter_format: NAMED).'
1500
+ WhatsAppNamedParamExample:
1501
+ type: object
1502
+ required: [param_name, example]
1503
+ properties:
1504
+ param_name:
1505
+ type: string
1506
+ pattern: '^[a-z0-9_]+$'
1507
+ description: 'Variable name as it appears in the text, without braces (e.g. customer_name for {{customer_name}}).'
1508
+ example:
1509
+ type: string
1510
+ description: Sample value for this variable.
1490
1511
  WhatsAppFooterComponent:
1491
1512
  type: object
1492
1513
  required: [type]
@@ -6995,7 +7016,7 @@ components:
6995
7016
  type: [object, "null"]
6996
7017
  description: Platform-specific creative data. Fields vary by platform.
6997
7018
  properties:
6998
- thumbnailUrl: { type: string, description: Primary thumbnail/image URL }
7019
+ thumbnailUrl: { type: [string, "null"], description: Primary thumbnail/image URL }
6999
7020
  imageUrl: { type: string, description: Alternative image URL }
7000
7021
  videoId: { type: [string, "null"], description: "Meta video ID for VIDEO-type ads. Null for non-video ads. Callers that need an embeddable MP4 can call GET /{videoId}?fields=source with the page access token." }
7001
7022
  videoUrl: { type: [string, "null"], description: "Public Facebook watch URL for VIDEO-type ads (https://www.facebook.com/watch/?v={videoId}). Null for non-video ads." }
@@ -26161,6 +26182,10 @@ paths:
26161
26182
  language:
26162
26183
  type: string
26163
26184
  description: Template language code (e.g., en_US)
26185
+ parameter_format:
26186
+ type: string
26187
+ enum: [POSITIONAL, NAMED, positional, named]
26188
+ description: 'Variable style: POSITIONAL ({{1}}, the default) or NAMED ({{customer_name}}). Named templates provide examples via body_text_named_params / header_text_named_params. Inferred as NAMED when omitted but a named-params example is present.'
26164
26189
  components:
26165
26190
  type: array
26166
26191
  description: "Template components (header, body, footer, buttons, carousel, limited_time_offer). Required for custom templates, omit when using library_template_name."
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "late-sdk"
3
- version = "1.4.413"
3
+ version = "1.4.415"
4
4
  description = "The official Python library for the Zernio API"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -42,7 +42,7 @@ from .enums import (
42
42
  Visibility,
43
43
  )
44
44
 
45
- __version__ = "1.4.413"
45
+ __version__ = "1.4.415"
46
46
 
47
47
  __all__ = [
48
48
  # Client
@@ -14545,6 +14545,7 @@ def register_generated_tools(mcp, _get_client):
14545
14545
  name: str,
14546
14546
  category: str,
14547
14547
  language: str,
14548
+ parameter_format: str | None = None,
14548
14549
  components: list[dict[str, Any]] | None = None,
14549
14550
  library_template_name: str | None = None,
14550
14551
  library_template_body_inputs: dict[str, Any] | None = None,
@@ -14557,6 +14558,7 @@ def register_generated_tools(mcp, _get_client):
14557
14558
  name: Template name (lowercase, letters/numbers/underscores, must start with a letter) (required)
14558
14559
  category: Template category (required)
14559
14560
  language: Template language code (e.g., en_US) (required)
14561
+ parameter_format: Variable style: POSITIONAL ({{1}}, the default) or NAMED ({{customer_name}}). Named templates provide examples via body_text_named_params / header_text_named_params. Inferred as NAMED when omitted but a named-params example is present.
14560
14562
  components: Template components (header, body, footer, buttons, carousel, limited_time_offer). Required for custom templates, omit when using library_template_name.
14561
14563
  library_template_name: Name of a pre-built template from Meta's template library (e.g., "appointment_reminder",
14562
14564
  "auto_pay_reminder_1", "address_update"). When provided, the template is pre-approved
@@ -14573,6 +14575,7 @@ def register_generated_tools(mcp, _get_client):
14573
14575
  name=name,
14574
14576
  category=category,
14575
14577
  language=language,
14578
+ parameter_format=parameter_format,
14576
14579
  components=components,
14577
14580
  library_template_name=library_template_name,
14578
14581
  library_template_body_inputs=library_template_body_inputs,
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: openapi.yaml
3
- # timestamp: 2026-08-04T11:57:30+00:00
3
+ # timestamp: 2026-08-04T14:32:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1076,49 +1076,19 @@ class Format(str, Enum):
1076
1076
  LOCATION = "location"
1077
1077
 
1078
1078
 
1079
- class Example(BaseModel):
1080
- header_text: List[str] | None = None
1081
- """
1082
- Sample values for header text variables
1083
- """
1084
- header_handle: List[AnyUrl] | None = None
1085
- """
1086
- When the header format is a media type (image, video, gif, document), provide a public URL here. Zernio will download and upload it to WhatsApp on your behalf, replacing it with the internal file handle before creating the template.
1087
- """
1088
-
1089
-
1090
- class WhatsAppHeaderComponent(BaseModel):
1091
- type: Literal["header"]
1092
- format: Format
1093
- text: str | None = None
1094
- """
1095
- Header text (may include {{1}} variable). Used when format is TEXT.
1096
- """
1097
- example: Example | None = None
1098
-
1099
-
1100
1079
  class Type5(str, Enum):
1101
1080
  BODY = "body"
1102
1081
 
1103
1082
 
1104
- class Example1(BaseModel):
1105
- body_text: List[List[str]] | None = None
1083
+ class WhatsAppNamedParamExample(BaseModel):
1084
+ param_name: Annotated[str, Field(pattern="^[a-z0-9_]+$")]
1106
1085
  """
1107
- Sample values for body variables (array of arrays)
1086
+ Variable name as it appears in the text, without braces (e.g. customer_name for {{customer_name}}).
1108
1087
  """
1109
-
1110
-
1111
- class WhatsAppBodyComponent(BaseModel):
1112
- type: Literal["body"]
1113
- text: str
1114
- """
1115
- Body text with optional {{n}} variables
1088
+ example: str
1116
1089
  """
1117
- add_security_recommendation: bool | None = None
1118
- """
1119
- Add security recommendation text (authentication templates only)
1090
+ Sample value for this variable.
1120
1091
  """
1121
- example: Example1 | None = None
1122
1092
 
1123
1093
 
1124
1094
  class Type6(str, Enum):
@@ -9229,24 +9199,53 @@ class SharedAdAccount(BaseModel):
9229
9199
  """
9230
9200
 
9231
9201
 
9232
- class Card(BaseModel):
9233
- components: Annotated[
9234
- List[
9235
- WhatsAppHeaderComponent | WhatsAppBodyComponent | WhatsAppButtonsComponent
9236
- ],
9237
- Field(min_length=1),
9238
- ]
9202
+ class Example(BaseModel):
9203
+ header_text: List[str] | None = None
9239
9204
  """
9240
- Per-card components. Each card carries its own media header + optional body + up to 2 buttons. Footer and nested carousel are not allowed inside cards.
9205
+ Sample values for header text variables
9206
+ """
9207
+ header_text_named_params: List[WhatsAppNamedParamExample] | None = None
9208
+ """
9209
+ Sample values for NAMED header variables (templates using {{customer_name}}-style tokens with parameter_format: NAMED).
9210
+ """
9211
+ header_handle: List[AnyUrl] | None = None
9212
+ """
9213
+ When the header format is a media type (image, video, gif, document), provide a public URL here. Zernio will download and upload it to WhatsApp on your behalf, replacing it with the internal file handle before creating the template.
9241
9214
  """
9242
9215
 
9243
9216
 
9244
- class WhatsAppCarouselComponent(BaseModel):
9245
- type: Literal["carousel"]
9246
- cards: Annotated[List[Card], Field(max_length=10, min_length=2)]
9217
+ class WhatsAppHeaderComponent(BaseModel):
9218
+ type: Literal["header"]
9219
+ format: Format
9220
+ text: str | None = None
9247
9221
  """
9248
- 2-10 cards. Meta requires all cards to share the same component structure; a mismatch surfaces as a rejected_reason. MARKETING category only.
9222
+ Header text (may include {{1}} variable). Used when format is TEXT.
9223
+ """
9224
+ example: Example | None = None
9225
+
9226
+
9227
+ class Example1(BaseModel):
9228
+ body_text: List[List[str]] | None = None
9229
+ """
9230
+ Sample values for body variables (array of arrays)
9231
+ """
9232
+ body_text_named_params: List[WhatsAppNamedParamExample] | None = None
9249
9233
  """
9234
+ Sample values for NAMED body variables (templates using {{customer_name}}-style tokens with parameter_format: NAMED).
9235
+ """
9236
+
9237
+
9238
+ class WhatsAppBodyComponent(BaseModel):
9239
+ type: Literal["body"]
9240
+ text: str
9241
+ """
9242
+ Body text with optional {{n}} variables
9243
+ """
9244
+ add_security_recommendation: bool | None = None
9245
+ """
9246
+ Add security recommendation text (authentication templates only)
9247
+ """
9248
+ example: Example1 | None = None
9250
9249
 
9251
9250
 
9252
9251
  class ExternalPostWebhookPost(BaseModel):
@@ -9369,25 +9368,24 @@ class XApiPricing(BaseModel):
9369
9368
  """
9370
9369
 
9371
9370
 
9372
- class WhatsAppTemplateComponent(
9373
- RootModel[
9374
- WhatsAppHeaderComponent
9375
- | WhatsAppBodyComponent
9376
- | WhatsAppFooterComponent
9377
- | WhatsAppButtonsComponent
9378
- | WhatsAppCarouselComponent
9379
- | WhatsAppLimitedTimeOfferComponent
9380
- ]
9381
- ):
9382
- root: Annotated[
9383
- WhatsAppHeaderComponent
9384
- | WhatsAppBodyComponent
9385
- | WhatsAppFooterComponent
9386
- | WhatsAppButtonsComponent
9387
- | WhatsAppCarouselComponent
9388
- | WhatsAppLimitedTimeOfferComponent,
9389
- Field(discriminator="type"),
9371
+ class Card(BaseModel):
9372
+ components: Annotated[
9373
+ List[
9374
+ WhatsAppHeaderComponent | WhatsAppBodyComponent | WhatsAppButtonsComponent
9375
+ ],
9376
+ Field(min_length=1),
9390
9377
  ]
9378
+ """
9379
+ Per-card components. Each card carries its own media header + optional body + up to 2 buttons. Footer and nested carousel are not allowed inside cards.
9380
+ """
9381
+
9382
+
9383
+ class WhatsAppCarouselComponent(BaseModel):
9384
+ type: Literal["carousel"]
9385
+ cards: Annotated[List[Card], Field(max_length=10, min_length=2)]
9386
+ """
9387
+ 2-10 cards. Meta requires all cards to share the same component structure; a mismatch surfaces as a rejected_reason. MARKETING category only.
9388
+ """
9391
9389
 
9392
9390
 
9393
9391
  class PlatformTarget(BaseModel):
@@ -9533,3 +9531,24 @@ class PostUpdateResponse(BaseModel):
9533
9531
  class PostRetryResponse(BaseModel):
9534
9532
  message: str | None = None
9535
9533
  post: Post3 | None = None
9534
+
9535
+
9536
+ class WhatsAppTemplateComponent(
9537
+ RootModel[
9538
+ WhatsAppHeaderComponent
9539
+ | WhatsAppBodyComponent
9540
+ | WhatsAppFooterComponent
9541
+ | WhatsAppButtonsComponent
9542
+ | WhatsAppCarouselComponent
9543
+ | WhatsAppLimitedTimeOfferComponent
9544
+ ]
9545
+ ):
9546
+ root: Annotated[
9547
+ WhatsAppHeaderComponent
9548
+ | WhatsAppBodyComponent
9549
+ | WhatsAppFooterComponent
9550
+ | WhatsAppButtonsComponent
9551
+ | WhatsAppCarouselComponent
9552
+ | WhatsAppLimitedTimeOfferComponent,
9553
+ Field(discriminator="type"),
9554
+ ]
@@ -105,6 +105,7 @@ class WhatsappResource:
105
105
  category: str,
106
106
  language: str,
107
107
  *,
108
+ parameter_format: str | None = None,
108
109
  components: list[Any] | None = None,
109
110
  library_template_name: str | None = None,
110
111
  library_template_body_inputs: dict[str, Any] | None = None,
@@ -116,6 +117,7 @@ class WhatsappResource:
116
117
  name=name,
117
118
  category=category,
118
119
  language=language,
120
+ parameter_format=parameter_format,
119
121
  components=components,
120
122
  library_template_name=library_template_name,
121
123
  library_template_body_inputs=library_template_body_inputs,
@@ -527,6 +529,7 @@ class WhatsappResource:
527
529
  category: str,
528
530
  language: str,
529
531
  *,
532
+ parameter_format: str | None = None,
530
533
  components: list[Any] | None = None,
531
534
  library_template_name: str | None = None,
532
535
  library_template_body_inputs: dict[str, Any] | None = None,
@@ -538,6 +541,7 @@ class WhatsappResource:
538
541
  name=name,
539
542
  category=category,
540
543
  language=language,
544
+ parameter_format=parameter_format,
541
545
  components=components,
542
546
  library_template_name=library_template_name,
543
547
  library_template_body_inputs=library_template_body_inputs,
@@ -2389,7 +2389,7 @@ wheels = [
2389
2389
 
2390
2390
  [[package]]
2391
2391
  name = "zernio-sdk"
2392
- version = "1.4.412"
2392
+ version = "1.4.414"
2393
2393
  source = { editable = "." }
2394
2394
  dependencies = [
2395
2395
  { name = "httpx" },
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