late-sdk 0.0.110 → 0.0.112

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +20 -0
  3. data/docs/AnalyticsApi.md +154 -0
  4. data/docs/CreateInboxConversation201Response.md +20 -0
  5. data/docs/CreateInboxConversation201ResponseData.md +26 -0
  6. data/docs/CreateInboxConversation400Response.md +20 -0
  7. data/docs/CreateInboxConversation422Response.md +20 -0
  8. data/docs/CreateInboxConversationRequest.md +26 -0
  9. data/docs/CreatePostRequest.md +2 -0
  10. data/docs/EditPost200Response.md +24 -0
  11. data/docs/EditPostRequest.md +20 -0
  12. data/docs/FacebookPlatformData.md +3 -1
  13. data/docs/GetGoogleBusinessPerformance200Response.md +28 -0
  14. data/docs/GetGoogleBusinessPerformance200ResponseDateRange.md +20 -0
  15. data/docs/GetGoogleBusinessPerformance200ResponseMetricsValue.md +20 -0
  16. data/docs/GetGoogleBusinessPerformance200ResponseMetricsValueValuesInner.md +20 -0
  17. data/docs/GetGoogleBusinessPerformance400Response.md +20 -0
  18. data/docs/GetGoogleBusinessSearchKeywords200Response.md +28 -0
  19. data/docs/GetGoogleBusinessSearchKeywords200ResponseKeywordsInner.md +20 -0
  20. data/docs/GetGoogleBusinessSearchKeywords200ResponseMonthRange.md +20 -0
  21. data/docs/GetGoogleBusinessSearchKeywords400Response.md +18 -0
  22. data/docs/MessagesApi.md +70 -0
  23. data/docs/PostsApi.md +72 -0
  24. data/docs/TwitterPlatformData.md +3 -1
  25. data/docs/UpdatePostRequest.md +2 -0
  26. data/lib/late-sdk/api/analytics_api.rb +153 -0
  27. data/lib/late-sdk/api/messages_api.rb +68 -0
  28. data/lib/late-sdk/api/posts_api.rb +74 -0
  29. data/lib/late-sdk/models/create_inbox_conversation201_response.rb +156 -0
  30. data/lib/late-sdk/models/create_inbox_conversation201_response_data.rb +188 -0
  31. data/lib/late-sdk/models/create_inbox_conversation400_response.rb +190 -0
  32. data/lib/late-sdk/models/create_inbox_conversation422_response.rb +190 -0
  33. data/lib/late-sdk/models/create_inbox_conversation_request.rb +207 -0
  34. data/lib/late-sdk/models/create_post_request.rb +11 -1
  35. data/lib/late-sdk/models/edit_post200_response.rb +176 -0
  36. data/lib/late-sdk/models/edit_post_request.rb +216 -0
  37. data/lib/late-sdk/models/facebook_platform_data.rb +14 -2
  38. data/lib/late-sdk/models/get_google_business_performance200_response.rb +195 -0
  39. data/lib/late-sdk/models/get_google_business_performance200_response_date_range.rb +156 -0
  40. data/lib/late-sdk/models/get_google_business_performance200_response_metrics_value.rb +159 -0
  41. data/lib/late-sdk/models/get_google_business_performance200_response_metrics_value_values_inner.rb +156 -0
  42. data/lib/late-sdk/models/get_google_business_performance400_response.rb +158 -0
  43. data/lib/late-sdk/models/get_google_business_search_keywords200_response.rb +194 -0
  44. data/lib/late-sdk/models/get_google_business_search_keywords200_response_keywords_inner.rb +156 -0
  45. data/lib/late-sdk/models/get_google_business_search_keywords200_response_month_range.rb +156 -0
  46. data/lib/late-sdk/models/get_google_business_search_keywords400_response.rb +147 -0
  47. data/lib/late-sdk/models/twitter_platform_data.rb +16 -4
  48. data/lib/late-sdk/models/update_post_request.rb +11 -1
  49. data/lib/late-sdk/version.rb +1 -1
  50. data/lib/late-sdk.rb +16 -0
  51. data/openapi.yaml +423 -1
  52. data/spec/api/analytics_api_spec.rb +29 -0
  53. data/spec/api/messages_api_spec.rb +12 -0
  54. data/spec/api/posts_api_spec.rb +13 -0
  55. data/spec/models/create_inbox_conversation201_response_data_spec.rb +60 -0
  56. data/spec/models/create_inbox_conversation201_response_spec.rb +42 -0
  57. data/spec/models/create_inbox_conversation400_response_spec.rb +46 -0
  58. data/spec/models/create_inbox_conversation422_response_spec.rb +46 -0
  59. data/spec/models/create_inbox_conversation_request_spec.rb +60 -0
  60. data/spec/models/create_post_request_spec.rb +6 -0
  61. data/spec/models/edit_post200_response_spec.rb +54 -0
  62. data/spec/models/edit_post_request_spec.rb +46 -0
  63. data/spec/models/facebook_platform_data_spec.rb +6 -0
  64. data/spec/models/get_google_business_performance200_response_date_range_spec.rb +42 -0
  65. data/spec/models/get_google_business_performance200_response_metrics_value_spec.rb +42 -0
  66. data/spec/models/get_google_business_performance200_response_metrics_value_values_inner_spec.rb +42 -0
  67. data/spec/models/get_google_business_performance200_response_spec.rb +66 -0
  68. data/spec/models/get_google_business_performance400_response_spec.rb +42 -0
  69. data/spec/models/get_google_business_search_keywords200_response_keywords_inner_spec.rb +42 -0
  70. data/spec/models/get_google_business_search_keywords200_response_month_range_spec.rb +42 -0
  71. data/spec/models/get_google_business_search_keywords200_response_spec.rb +66 -0
  72. data/spec/models/get_google_business_search_keywords400_response_spec.rb +36 -0
  73. data/spec/models/twitter_platform_data_spec.rb +6 -0
  74. data/spec/models/update_post_request_spec.rb +6 -0
  75. data/zernio-sdk-0.0.112.gem +0 -0
  76. metadata +67 -3
  77. data/zernio-sdk-0.0.110.gem +0 -0
data/openapi.yaml CHANGED
@@ -1633,6 +1633,10 @@ components:
1633
1633
  required:
1634
1634
  - options
1635
1635
  - duration_minutes
1636
+ longVideo:
1637
+ type: boolean
1638
+ default: false
1639
+ description: Enable long video uploads (over 140 seconds) using amplify_video media category. Requires the connected X account to have an active X Premium subscription. When true, videos are uploaded with the amplify_video category which supports longer durations (up to 10 minutes via API). When false or omitted, the standard tweet_video category is used (140 second limit). Note that not all Premium accounts have API long-video access, as X may require separate allowlisting.
1636
1640
 
1637
1641
  ThreadsPlatformData:
1638
1642
  type: object
@@ -1657,6 +1661,10 @@ components:
1657
1661
  FacebookPlatformData:
1658
1662
  type: object
1659
1663
  properties:
1664
+ draft:
1665
+ type: boolean
1666
+ description: When true, creates the post as an unpublished draft visible in Facebook Publishing Tools instead of publishing immediately. Supported for feed posts (text, link, image, video) and reels. Not supported for stories. Drafts expire after ~30 days.
1667
+ default: false
1660
1668
  contentType:
1661
1669
  type: string
1662
1670
  enum: [story, reel]
@@ -1666,7 +1674,7 @@ components:
1666
1674
  description: Reel title (only for contentType=reel). Separate from the caption/content field.
1667
1675
  firstComment:
1668
1676
  type: string
1669
- description: Optional first comment to post immediately after publishing (feed posts only, not stories or reels)
1677
+ description: Optional first comment to post immediately after publishing (feed posts only, not stories or reels). Skipped when draft is true.
1670
1678
  pageId:
1671
1679
  type: string
1672
1680
  description: Target Facebook Page ID for multi-page posting. If omitted, uses the default page. Use GET /v1/accounts/{id}/facebook-page to list pages.
@@ -4342,6 +4350,222 @@ paths:
4342
4350
  properties:
4343
4351
  error: { type: string, example: "Post not found" }
4344
4352
 
4353
+ /v1/analytics/googlebusiness/performance:
4354
+ get:
4355
+ operationId: getGoogleBusinessPerformance
4356
+ tags: [Analytics]
4357
+ summary: Get Google Business Profile performance metrics
4358
+ description: |
4359
+ Returns daily performance metrics for a Google Business Profile location.
4360
+ Metrics include impressions (Maps/Search, desktop/mobile), website clicks,
4361
+ call clicks, direction requests, conversations, bookings, and food orders.
4362
+ Data may be delayed 2-3 days. Max 18 months of historical data.
4363
+ Requires the Analytics add-on.
4364
+ parameters:
4365
+ - name: accountId
4366
+ in: query
4367
+ required: true
4368
+ schema: { type: string }
4369
+ description: The Zernio SocialAccount ID for the Google Business Profile account.
4370
+ - name: metrics
4371
+ in: query
4372
+ schema: { type: string }
4373
+ description: |
4374
+ Comma-separated metric names. Defaults to all available metrics.
4375
+ Valid values: BUSINESS_IMPRESSIONS_DESKTOP_MAPS, BUSINESS_IMPRESSIONS_DESKTOP_SEARCH,
4376
+ BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH,
4377
+ BUSINESS_CONVERSATIONS, BUSINESS_DIRECTION_REQUESTS, CALL_CLICKS, WEBSITE_CLICKS,
4378
+ BUSINESS_BOOKINGS, BUSINESS_FOOD_ORDERS, BUSINESS_FOOD_MENU_CLICKS
4379
+ - name: startDate
4380
+ in: query
4381
+ schema: { type: string, format: date }
4382
+ description: Start date (YYYY-MM-DD). Defaults to 30 days ago. Max 18 months back.
4383
+ - name: endDate
4384
+ in: query
4385
+ schema: { type: string, format: date }
4386
+ description: End date (YYYY-MM-DD). Defaults to today.
4387
+ responses:
4388
+ '200':
4389
+ description: Performance metrics with daily time series
4390
+ content:
4391
+ application/json:
4392
+ schema:
4393
+ type: object
4394
+ properties:
4395
+ success: { type: boolean, example: true }
4396
+ accountId: { type: string }
4397
+ platform: { type: string, example: "googlebusiness" }
4398
+ dateRange:
4399
+ type: object
4400
+ properties:
4401
+ startDate: { type: string, format: date, example: "2026-03-01" }
4402
+ endDate: { type: string, format: date, example: "2026-03-31" }
4403
+ metrics:
4404
+ type: object
4405
+ description: Each key is a metric name containing total and daily values.
4406
+ additionalProperties:
4407
+ type: object
4408
+ properties:
4409
+ total: { type: integer, description: "Sum of all daily values in the range" }
4410
+ values:
4411
+ type: array
4412
+ items:
4413
+ type: object
4414
+ properties:
4415
+ date: { type: string, format: date }
4416
+ value: { type: integer }
4417
+ dataDelay: { type: string, example: "Data may be delayed 2-3 days" }
4418
+ examples:
4419
+ performance_data:
4420
+ summary: Performance metrics for a location
4421
+ value:
4422
+ success: true
4423
+ accountId: "69300690f43160a0bc999e07"
4424
+ platform: "googlebusiness"
4425
+ dateRange:
4426
+ startDate: "2026-03-01"
4427
+ endDate: "2026-03-31"
4428
+ metrics:
4429
+ WEBSITE_CLICKS:
4430
+ total: 42
4431
+ values:
4432
+ - date: "2026-03-01"
4433
+ value: 3
4434
+ - date: "2026-03-02"
4435
+ value: 1
4436
+ CALL_CLICKS:
4437
+ total: 7
4438
+ values:
4439
+ - date: "2026-03-01"
4440
+ value: 1
4441
+ BUSINESS_IMPRESSIONS_MOBILE_SEARCH:
4442
+ total: 156
4443
+ values:
4444
+ - date: "2026-03-01"
4445
+ value: 8
4446
+ dataDelay: "Data may be delayed 2-3 days"
4447
+ '400':
4448
+ description: Invalid parameters
4449
+ content:
4450
+ application/json:
4451
+ schema:
4452
+ type: object
4453
+ properties:
4454
+ error: { type: string, example: "Invalid metrics: INVALID_METRIC" }
4455
+ validMetrics:
4456
+ type: array
4457
+ items: { type: string }
4458
+ '401': { $ref: '#/components/responses/Unauthorized' }
4459
+ '402':
4460
+ description: Analytics add-on required
4461
+ content:
4462
+ application/json:
4463
+ schema:
4464
+ type: object
4465
+ properties:
4466
+ error: { type: string, example: "Analytics add-on required" }
4467
+ code: { type: string, example: "analytics_addon_required" }
4468
+ '403':
4469
+ description: Access denied
4470
+ content:
4471
+ application/json:
4472
+ schema:
4473
+ type: object
4474
+ properties:
4475
+ error: { type: string, example: "Access denied to this account" }
4476
+
4477
+ /v1/analytics/googlebusiness/search-keywords:
4478
+ get:
4479
+ operationId: getGoogleBusinessSearchKeywords
4480
+ tags: [Analytics]
4481
+ summary: Get Google Business Profile search keywords
4482
+ description: |
4483
+ Returns search keywords that triggered impressions for a Google Business Profile location.
4484
+ Data is aggregated monthly. Keywords below a minimum impression threshold set by Google are excluded.
4485
+ Max 18 months of historical data. Requires the Analytics add-on.
4486
+ parameters:
4487
+ - name: accountId
4488
+ in: query
4489
+ required: true
4490
+ schema: { type: string }
4491
+ description: The Zernio SocialAccount ID for the Google Business Profile account.
4492
+ - name: startMonth
4493
+ in: query
4494
+ schema: { type: string, pattern: "^\\d{4}-\\d{2}$" }
4495
+ description: Start month (YYYY-MM). Defaults to 3 months ago.
4496
+ - name: endMonth
4497
+ in: query
4498
+ schema: { type: string, pattern: "^\\d{4}-\\d{2}$" }
4499
+ description: End month (YYYY-MM). Defaults to current month.
4500
+ responses:
4501
+ '200':
4502
+ description: Search keywords with impression counts
4503
+ content:
4504
+ application/json:
4505
+ schema:
4506
+ type: object
4507
+ properties:
4508
+ success: { type: boolean, example: true }
4509
+ accountId: { type: string }
4510
+ platform: { type: string, example: "googlebusiness" }
4511
+ monthRange:
4512
+ type: object
4513
+ properties:
4514
+ startMonth: { type: string, example: "2026-01" }
4515
+ endMonth: { type: string, example: "2026-03" }
4516
+ keywords:
4517
+ type: array
4518
+ items:
4519
+ type: object
4520
+ properties:
4521
+ keyword: { type: string, example: "restaurant near me" }
4522
+ impressions: { type: integer, example: 245 }
4523
+ note: { type: string, example: "Keywords below a minimum impression threshold are excluded by Google" }
4524
+ examples:
4525
+ keywords_data:
4526
+ summary: Search keywords for a location
4527
+ value:
4528
+ success: true
4529
+ accountId: "69300690f43160a0bc999e07"
4530
+ platform: "googlebusiness"
4531
+ monthRange:
4532
+ startMonth: "2026-01"
4533
+ endMonth: "2026-03"
4534
+ keywords:
4535
+ - keyword: "restaurant near me"
4536
+ impressions: 245
4537
+ - keyword: "best tapas barcelona"
4538
+ impressions: 89
4539
+ - keyword: "arbichat"
4540
+ impressions: 34
4541
+ note: "Keywords below a minimum impression threshold are excluded by Google"
4542
+ '400':
4543
+ description: Invalid parameters
4544
+ content:
4545
+ application/json:
4546
+ schema:
4547
+ type: object
4548
+ properties:
4549
+ error: { type: string, example: "Invalid startMonth format. Use YYYY-MM." }
4550
+ '401': { $ref: '#/components/responses/Unauthorized' }
4551
+ '402':
4552
+ description: Analytics add-on required
4553
+ content:
4554
+ application/json:
4555
+ schema:
4556
+ type: object
4557
+ properties:
4558
+ error: { type: string, example: "Analytics add-on required" }
4559
+ code: { type: string, example: "analytics_addon_required" }
4560
+ '403':
4561
+ description: Access denied
4562
+ content:
4563
+ application/json:
4564
+ schema:
4565
+ type: object
4566
+ properties:
4567
+ error: { type: string, example: "Access denied to this account" }
4568
+
4345
4569
  /v1/account-groups:
4346
4570
  get:
4347
4571
  operationId: listAccountGroups
@@ -4948,6 +5172,9 @@ paths:
4948
5172
  tiktokSettings:
4949
5173
  $ref: '#/components/schemas/TikTokPlatformData'
4950
5174
  description: Root-level TikTok settings applied to all TikTok platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.
5175
+ facebookSettings:
5176
+ $ref: '#/components/schemas/FacebookPlatformData'
5177
+ description: Root-level Facebook settings applied to all Facebook platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.
4951
5178
  recycling:
4952
5179
  $ref: '#/components/schemas/RecyclingConfig'
4953
5180
  queuedFromProfile:
@@ -4960,6 +5187,16 @@ paths:
4960
5187
  Only used when queuedFromProfile is also provided.
4961
5188
  If omitted, uses the profile's default queue.
4962
5189
  examples:
5190
+ facebookDraft:
5191
+ summary: Facebook draft post (visible in Publishing Tools)
5192
+ value:
5193
+ content: "Draft post for review before publishing"
5194
+ platforms:
5195
+ - platform: facebook
5196
+ accountId: "64e1f0a9e2b5af0012ab34cd"
5197
+ publishNow: true
5198
+ facebookSettings:
5199
+ draft: true
4963
5200
  recyclingPost:
4964
5201
  summary: Post with weekly recycling and content variations
4965
5202
  value:
@@ -5305,6 +5542,9 @@ paths:
5305
5542
  tiktokSettings:
5306
5543
  $ref: '#/components/schemas/TikTokPlatformData'
5307
5544
  description: Root-level TikTok settings applied to all TikTok platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.
5545
+ facebookSettings:
5546
+ $ref: '#/components/schemas/FacebookPlatformData'
5547
+ description: Root-level Facebook settings applied to all Facebook platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.
5308
5548
  recycling:
5309
5549
  $ref: '#/components/schemas/RecyclingConfig'
5310
5550
  additionalProperties: true
@@ -5546,6 +5786,69 @@ paths:
5546
5786
  '404': { $ref: '#/components/responses/NotFound' }
5547
5787
  '500':
5548
5788
  description: Platform API deletion failed
5789
+ /v1/posts/{postId}/edit:
5790
+ post:
5791
+ operationId: editPost
5792
+ tags: [Posts]
5793
+ summary: Edit published post
5794
+ description: |
5795
+ Edit a published post on a social media platform. Currently only supported for X (Twitter).
5796
+
5797
+ **Requirements:**
5798
+ - Connected X account must have an active X Premium subscription
5799
+ - Must be within 1 hour of original publish time
5800
+ - Maximum 5 edits per tweet (enforced by X)
5801
+ - Text-only edits (media changes are not supported)
5802
+
5803
+ The post record in Zernio is updated with the new content and edit history.
5804
+ parameters:
5805
+ - name: postId
5806
+ in: path
5807
+ required: true
5808
+ schema: { type: string }
5809
+ requestBody:
5810
+ required: true
5811
+ content:
5812
+ application/json:
5813
+ schema:
5814
+ type: object
5815
+ required: [platform, content]
5816
+ properties:
5817
+ platform:
5818
+ type: string
5819
+ description: The platform to edit the post on. Currently only twitter is supported.
5820
+ enum: [twitter]
5821
+ content:
5822
+ type: string
5823
+ description: The new tweet text content
5824
+ example:
5825
+ platform: "twitter"
5826
+ content: "Updated tweet text with corrected information"
5827
+ responses:
5828
+ '200':
5829
+ description: Post edited successfully
5830
+ content:
5831
+ application/json:
5832
+ schema:
5833
+ type: object
5834
+ properties:
5835
+ success: { type: boolean }
5836
+ id: { type: string, description: New tweet ID assigned by X after edit }
5837
+ url: { type: string, format: uri, description: URL of the edited tweet }
5838
+ message: { type: string }
5839
+ example:
5840
+ success: true
5841
+ id: "1234567890123456790"
5842
+ url: "https://twitter.com/i/web/status/1234567890123456790"
5843
+ message: "Tweet edited successfully"
5844
+ '400':
5845
+ description: "Invalid request: platform not supported, post not published, edit window expired, not Premium, or missing content."
5846
+ '401': { $ref: '#/components/responses/Unauthorized' }
5847
+ '403':
5848
+ description: Forbidden
5849
+ '404': { $ref: '#/components/responses/NotFound' }
5850
+ '500':
5851
+ description: Platform API edit failed
5549
5852
  /v1/posts/{postId}/update-metadata:
5550
5853
  post:
5551
5854
  operationId: updatePostMetadata
@@ -11276,6 +11579,125 @@ paths:
11276
11579
  '401': { $ref: '#/components/responses/Unauthorized' }
11277
11580
  '403':
11278
11581
  description: Inbox addon required
11582
+ post:
11583
+ operationId: createInboxConversation
11584
+ summary: Create conversation
11585
+ description: |
11586
+ Initiate a new direct message conversation with a specified user. If a conversation already exists with the recipient, the message is added to the existing thread.
11587
+
11588
+ **Currently supported platforms:** Twitter/X only. Other platforms will return `PLATFORM_NOT_SUPPORTED`.
11589
+
11590
+ **DM eligibility:** Before sending, the endpoint checks if the recipient accepts DMs from your account (via the `receives_your_dm` field). If not, a 422 error with code `DM_NOT_ALLOWED` is returned. You can skip this check with `skipDmCheck: true` if you have already verified eligibility.
11591
+
11592
+ **X API tier requirement:** DM write endpoints require X API Pro tier ($5,000/month) or Enterprise access. This applies to BYOK (Bring Your Own Key) users who provide their own X API credentials.
11593
+
11594
+ **Rate limits:** 200 requests per 15 minutes, 1,000 per 24 hours per user, 15,000 per 24 hours per app (shared across all DM endpoints).
11595
+ tags: [Messages]
11596
+ security: [{ bearerAuth: [] }]
11597
+ requestBody:
11598
+ required: true
11599
+ content:
11600
+ application/json:
11601
+ schema:
11602
+ type: object
11603
+ required: [accountId]
11604
+ properties:
11605
+ accountId:
11606
+ type: string
11607
+ description: The social account ID to send from
11608
+ participantId:
11609
+ type: string
11610
+ description: Twitter numeric user ID of the recipient. Provide either this or `participantUsername`.
11611
+ participantUsername:
11612
+ type: string
11613
+ description: Twitter username (with or without @) of the recipient. Resolved to a user ID via lookup. Provide either this or `participantId`.
11614
+ message:
11615
+ type: string
11616
+ description: Text content of the message. At least one of `message` or attachment is required.
11617
+ skipDmCheck:
11618
+ type: boolean
11619
+ default: false
11620
+ description: Skip the `receives_your_dm` eligibility check before sending. Use if you have already verified the recipient accepts DMs.
11621
+ multipart/form-data:
11622
+ schema:
11623
+ type: object
11624
+ required: [accountId]
11625
+ properties:
11626
+ accountId:
11627
+ type: string
11628
+ description: The social account ID to send from
11629
+ participantId:
11630
+ type: string
11631
+ description: Twitter numeric user ID of the recipient
11632
+ participantUsername:
11633
+ type: string
11634
+ description: Twitter username (with or without @) of the recipient
11635
+ message:
11636
+ type: string
11637
+ description: Text content of the message
11638
+ attachment:
11639
+ type: string
11640
+ format: binary
11641
+ description: Media attachment (image or video). One attachment per message.
11642
+ skipDmCheck:
11643
+ type: string
11644
+ enum: ['true', 'false']
11645
+ default: 'false'
11646
+ description: Skip the DM eligibility check
11647
+ responses:
11648
+ '201':
11649
+ description: Conversation created successfully
11650
+ content:
11651
+ application/json:
11652
+ schema:
11653
+ type: object
11654
+ properties:
11655
+ success: { type: boolean, example: true }
11656
+ data:
11657
+ type: object
11658
+ properties:
11659
+ messageId:
11660
+ type: string
11661
+ description: Platform message ID (dm_event_id)
11662
+ conversationId:
11663
+ type: string
11664
+ description: Platform conversation ID (dm_conversation_id)
11665
+ participantId:
11666
+ type: string
11667
+ description: Twitter numeric user ID of the recipient
11668
+ participantName:
11669
+ type: string
11670
+ nullable: true
11671
+ description: Display name of the recipient
11672
+ participantUsername:
11673
+ type: string
11674
+ nullable: true
11675
+ description: Twitter username of the recipient
11676
+ '400':
11677
+ description: Validation error or platform not supported
11678
+ content:
11679
+ application/json:
11680
+ schema:
11681
+ type: object
11682
+ properties:
11683
+ error: { type: string }
11684
+ code: { type: string, enum: [PLATFORM_NOT_SUPPORTED] }
11685
+ '401': { $ref: '#/components/responses/Unauthorized' }
11686
+ '403':
11687
+ description: Inbox addon required or profile limit reached
11688
+ '404':
11689
+ description: Account or recipient user not found
11690
+ '422':
11691
+ description: Recipient does not accept DMs from this account
11692
+ content:
11693
+ application/json:
11694
+ schema:
11695
+ type: object
11696
+ properties:
11697
+ error: { type: string }
11698
+ code: { type: string, enum: [DM_NOT_ALLOWED] }
11699
+ '429':
11700
+ description: X API rate limit exceeded
11279
11701
  /v1/inbox/conversations/{conversationId}:
11280
11702
  get:
11281
11703
  operationId: getInboxConversation
@@ -115,6 +115,35 @@ describe 'AnalyticsApi' do
115
115
  end
116
116
  end
117
117
 
118
+ # unit tests for get_google_business_performance
119
+ # Get Google Business Profile performance metrics
120
+ # Returns daily performance metrics for a Google Business Profile location. Metrics include impressions (Maps/Search, desktop/mobile), website clicks, call clicks, direction requests, conversations, bookings, and food orders. Data may be delayed 2-3 days. Max 18 months of historical data. Requires the Analytics add-on.
121
+ # @param account_id The Zernio SocialAccount ID for the Google Business Profile account.
122
+ # @param [Hash] opts the optional parameters
123
+ # @option opts [String] :metrics Comma-separated metric names. Defaults to all available metrics. Valid values: BUSINESS_IMPRESSIONS_DESKTOP_MAPS, BUSINESS_IMPRESSIONS_DESKTOP_SEARCH, BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH, BUSINESS_CONVERSATIONS, BUSINESS_DIRECTION_REQUESTS, CALL_CLICKS, WEBSITE_CLICKS, BUSINESS_BOOKINGS, BUSINESS_FOOD_ORDERS, BUSINESS_FOOD_MENU_CLICKS
124
+ # @option opts [Date] :start_date Start date (YYYY-MM-DD). Defaults to 30 days ago. Max 18 months back.
125
+ # @option opts [Date] :end_date End date (YYYY-MM-DD). Defaults to today.
126
+ # @return [GetGoogleBusinessPerformance200Response]
127
+ describe 'get_google_business_performance test' do
128
+ it 'should work' do
129
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
130
+ end
131
+ end
132
+
133
+ # unit tests for get_google_business_search_keywords
134
+ # Get Google Business Profile search keywords
135
+ # Returns search keywords that triggered impressions for a Google Business Profile location. Data is aggregated monthly. Keywords below a minimum impression threshold set by Google are excluded. Max 18 months of historical data. Requires the Analytics add-on.
136
+ # @param account_id The Zernio SocialAccount ID for the Google Business Profile account.
137
+ # @param [Hash] opts the optional parameters
138
+ # @option opts [String] :start_month Start month (YYYY-MM). Defaults to 3 months ago.
139
+ # @option opts [String] :end_month End month (YYYY-MM). Defaults to current month.
140
+ # @return [GetGoogleBusinessSearchKeywords200Response]
141
+ describe 'get_google_business_search_keywords test' do
142
+ it 'should work' do
143
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
144
+ end
145
+ end
146
+
118
147
  # unit tests for get_instagram_account_insights
119
148
  # Get Instagram account-level insights
120
149
  # Returns account-level Instagram insights such as reach, views, accounts engaged, and total interactions. These metrics reflect the entire account's performance across all content surfaces (feed, stories, explore, profile), and are fundamentally different from post-level metrics. Data may be delayed up to 48 hours. Max 90 days, defaults to last 30 days. Requires the Analytics add-on.
@@ -46,6 +46,18 @@ describe 'MessagesApi' do
46
46
  end
47
47
  end
48
48
 
49
+ # unit tests for create_inbox_conversation
50
+ # Create conversation
51
+ # Initiate a new direct message conversation with a specified user. If a conversation already exists with the recipient, the message is added to the existing thread. **Currently supported platforms:** Twitter/X only. Other platforms will return `PLATFORM_NOT_SUPPORTED`. **DM eligibility:** Before sending, the endpoint checks if the recipient accepts DMs from your account (via the `receives_your_dm` field). If not, a 422 error with code `DM_NOT_ALLOWED` is returned. You can skip this check with `skipDmCheck: true` if you have already verified eligibility. **X API tier requirement:** DM write endpoints require X API Pro tier ($5,000/month) or Enterprise access. This applies to BYOK (Bring Your Own Key) users who provide their own X API credentials. **Rate limits:** 200 requests per 15 minutes, 1,000 per 24 hours per user, 15,000 per 24 hours per app (shared across all DM endpoints).
52
+ # @param create_inbox_conversation_request
53
+ # @param [Hash] opts the optional parameters
54
+ # @return [CreateInboxConversation201Response]
55
+ describe 'create_inbox_conversation test' do
56
+ it 'should work' do
57
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
58
+ end
59
+ end
60
+
49
61
  # unit tests for delete_inbox_message
50
62
  # Delete message
51
63
  # Delete a message from a conversation. Platform support varies: - **Telegram**: Full delete (bot's own messages anytime, others if admin) - **X/Twitter**: Full delete (own DM events only) - **Bluesky**: Delete for self only (recipient still sees it) - **Reddit**: Delete from sender's view only - **Facebook, Instagram, WhatsApp**: Not supported (returns 400)
@@ -69,6 +69,19 @@ describe 'PostsApi' do
69
69
  end
70
70
  end
71
71
 
72
+ # unit tests for edit_post
73
+ # Edit published post
74
+ # Edit a published post on a social media platform. Currently only supported for X (Twitter). **Requirements:** - Connected X account must have an active X Premium subscription - Must be within 1 hour of original publish time - Maximum 5 edits per tweet (enforced by X) - Text-only edits (media changes are not supported) The post record in Zernio is updated with the new content and edit history.
75
+ # @param post_id
76
+ # @param edit_post_request
77
+ # @param [Hash] opts the optional parameters
78
+ # @return [EditPost200Response]
79
+ describe 'edit_post test' do
80
+ it 'should work' do
81
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
82
+ end
83
+ end
84
+
72
85
  # unit tests for get_post
73
86
  # Get post
74
87
  # Fetch a single post by ID. For published posts, this returns platformPostUrl for each platform.
@@ -0,0 +1,60 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Late::CreateInboxConversation201ResponseData
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Late::CreateInboxConversation201ResponseData do
21
+ #let(:instance) { Late::CreateInboxConversation201ResponseData.new }
22
+
23
+ describe 'test an instance of CreateInboxConversation201ResponseData' do
24
+ it 'should create an instance of CreateInboxConversation201ResponseData' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Late::CreateInboxConversation201ResponseData)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "message_id"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "conversation_id"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "participant_id"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ describe 'test attribute "participant_name"' do
49
+ it 'should work' do
50
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
+ end
52
+ end
53
+
54
+ describe 'test attribute "participant_username"' do
55
+ it 'should work' do
56
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
57
+ end
58
+ end
59
+
60
+ end
@@ -0,0 +1,42 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Late::CreateInboxConversation201Response
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Late::CreateInboxConversation201Response do
21
+ #let(:instance) { Late::CreateInboxConversation201Response.new }
22
+
23
+ describe 'test an instance of CreateInboxConversation201Response' do
24
+ it 'should create an instance of CreateInboxConversation201Response' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Late::CreateInboxConversation201Response)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "success"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "data"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ end