norbelys 0.1.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.
Files changed (624) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +9 -0
  3. data/README.md +429 -0
  4. data/Rakefile +10 -0
  5. data/docs/AddProgramSenderParams.md +18 -0
  6. data/docs/AiEmailVariantContent.md +28 -0
  7. data/docs/AnalyticsApi.md +81 -0
  8. data/docs/AnalyticsQuery.md +20 -0
  9. data/docs/AnalyticsQueryName.md +15 -0
  10. data/docs/AnalyticsQueryParams.md +50 -0
  11. data/docs/AnalyticsQueryResult.md +20 -0
  12. data/docs/ApiError.md +18 -0
  13. data/docs/ApiErrorDetail.md +26 -0
  14. data/docs/AudienceActivityAction.md +15 -0
  15. data/docs/AudienceActivityCondition.md +20 -0
  16. data/docs/AudienceActivityLinkFilter.md +20 -0
  17. data/docs/AudienceActivityLinkMatchOp.md +15 -0
  18. data/docs/AudienceActivityParams.md +32 -0
  19. data/docs/AudienceAttributeCondition.md +22 -0
  20. data/docs/AudienceConditionOp.md +15 -0
  21. data/docs/AudienceConditionValue.md +15 -0
  22. data/docs/AudienceFilter.md +20 -0
  23. data/docs/AudienceMatch.md +15 -0
  24. data/docs/AudienceRule.md +26 -0
  25. data/docs/AudienceSource.md +26 -0
  26. data/docs/AudienceStatusBreakdown.md +20 -0
  27. data/docs/AudienceSummary.md +26 -0
  28. data/docs/AudienceWeekPoint.md +20 -0
  29. data/docs/BulkUpdateSenderPatch.md +34 -0
  30. data/docs/BulkUpdateSendersInput.md +20 -0
  31. data/docs/BulkUpdateSendersResult.md +24 -0
  32. data/docs/CampaignReportShare.md +22 -0
  33. data/docs/CollectionAddress.md +28 -0
  34. data/docs/ConnectionSettings.md +22 -0
  35. data/docs/CreateSenderInput.md +42 -0
  36. data/docs/DetachResult.md +18 -0
  37. data/docs/DmarcRecordToPublish.md +22 -0
  38. data/docs/Domain.md +38 -0
  39. data/docs/DomainAge.md +30 -0
  40. data/docs/DomainCapacity.md +28 -0
  41. data/docs/DomainCreateParams.md +24 -0
  42. data/docs/DomainDetail.md +42 -0
  43. data/docs/DomainHealth.md +24 -0
  44. data/docs/DomainList.md +26 -0
  45. data/docs/DomainMonitoring.md +30 -0
  46. data/docs/DomainMonitoringParams.md +20 -0
  47. data/docs/DomainSending.md +26 -0
  48. data/docs/DomainSendingPolicy.md +36 -0
  49. data/docs/DomainSendingPolicyParams.md +32 -0
  50. data/docs/DomainSendingUpdateParams.md +20 -0
  51. data/docs/DomainTracking.md +50 -0
  52. data/docs/DomainTrackingParams.md +22 -0
  53. data/docs/DomainTrackingUpdateParams.md +24 -0
  54. data/docs/DomainUpdateParams.md +22 -0
  55. data/docs/DomainsApi.md +525 -0
  56. data/docs/EmailVariantContent.md +28 -0
  57. data/docs/EnrollProgramParams.md +28 -0
  58. data/docs/EnrollProgramResult.md +28 -0
  59. data/docs/Enrollment.md +42 -0
  60. data/docs/EnrollmentCounts.md +44 -0
  61. data/docs/EnrollmentList.md +28 -0
  62. data/docs/EnrollmentPersonRef.md +22 -0
  63. data/docs/EnrollmentProgramRef.md +20 -0
  64. data/docs/Features.md +18 -0
  65. data/docs/Field.md +38 -0
  66. data/docs/FieldCreateParams.md +26 -0
  67. data/docs/FieldList.md +20 -0
  68. data/docs/FieldType.md +15 -0
  69. data/docs/FieldUpdateParams.md +24 -0
  70. data/docs/FieldsApi.md +297 -0
  71. data/docs/FileObject.md +28 -0
  72. data/docs/FileUpload.md +22 -0
  73. data/docs/FilesApi.md +81 -0
  74. data/docs/Group.md +34 -0
  75. data/docs/GroupAddMembersParams.md +20 -0
  76. data/docs/GroupAddMembersResult.md +22 -0
  77. data/docs/GroupCreateParams.md +22 -0
  78. data/docs/GroupList.md +26 -0
  79. data/docs/GroupUpdateParams.md +22 -0
  80. data/docs/GroupsApi.md +521 -0
  81. data/docs/ImapConnectionUpdate.md +22 -0
  82. data/docs/InboundMessage.md +48 -0
  83. data/docs/Integration.md +34 -0
  84. data/docs/IntegrationConfig.md +26 -0
  85. data/docs/IntegrationConnectParams.md +18 -0
  86. data/docs/IntegrationConnectResult.md +18 -0
  87. data/docs/IntegrationList.md +26 -0
  88. data/docs/IntegrationNotifyConfig.md +24 -0
  89. data/docs/IntegrationOptions.md +18 -0
  90. data/docs/IntegrationProvider.md +15 -0
  91. data/docs/IntegrationStatus.md +15 -0
  92. data/docs/IntegrationSyncResult.md +18 -0
  93. data/docs/IntegrationUpdateParams.md +18 -0
  94. data/docs/IntegrationsApi.md +513 -0
  95. data/docs/LaunchProgramParams.md +18 -0
  96. data/docs/LaunchProgramResult.md +22 -0
  97. data/docs/Message.md +58 -0
  98. data/docs/MessageAddress.md +20 -0
  99. data/docs/MessageAttachment.md +28 -0
  100. data/docs/MessageAttachmentDownload.md +32 -0
  101. data/docs/MessageAttachmentInput.md +22 -0
  102. data/docs/MessageAttachmentList.md +22 -0
  103. data/docs/MessageCreateParams.md +44 -0
  104. data/docs/MessageEnrollParams.md +26 -0
  105. data/docs/MessageList.md +26 -0
  106. data/docs/MessageReplyParams.md +40 -0
  107. data/docs/MessageSource.md +36 -0
  108. data/docs/MessageSourceAttachment.md +22 -0
  109. data/docs/MessageTestParams.md +40 -0
  110. data/docs/MessageUpdateParams.md +22 -0
  111. data/docs/MessagesApi.md +543 -0
  112. data/docs/MonthlyEmailUsageMeter.md +24 -0
  113. data/docs/Organization.md +30 -0
  114. data/docs/OrganizationAlerts.md +18 -0
  115. data/docs/OrganizationAlertsParams.md +18 -0
  116. data/docs/OrganizationApi.md +350 -0
  117. data/docs/OrganizationBouncePolicy.md +20 -0
  118. data/docs/OrganizationBouncePolicyParams.md +20 -0
  119. data/docs/OrganizationOnboarding.md +20 -0
  120. data/docs/OrganizationProfile.md +22 -0
  121. data/docs/OrganizationProfileParams.md +22 -0
  122. data/docs/OrganizationPulse.md +28 -0
  123. data/docs/OrganizationUpdateParams.md +24 -0
  124. data/docs/OrganizationUsage.md +26 -0
  125. data/docs/OutboundMessage.md +46 -0
  126. data/docs/PeopleApi.md +681 -0
  127. data/docs/PeopleBulkCreateParams.md +28 -0
  128. data/docs/PeopleBulkCreateResult.md +34 -0
  129. data/docs/Person.md +52 -0
  130. data/docs/PersonCreateParams.md +30 -0
  131. data/docs/PersonDetail.md +60 -0
  132. data/docs/PersonErased.md +20 -0
  133. data/docs/PersonGroupRef.md +22 -0
  134. data/docs/PersonImportItem.md +30 -0
  135. data/docs/PersonImportReason.md +22 -0
  136. data/docs/PersonImportStats.md +36 -0
  137. data/docs/PersonList.md +26 -0
  138. data/docs/PersonListItem.md +50 -0
  139. data/docs/PersonSegmentRef.md +22 -0
  140. data/docs/PersonUpdateParams.md +30 -0
  141. data/docs/Program.md +78 -0
  142. data/docs/ProgramCreateParams.md +62 -0
  143. data/docs/ProgramDetail.md +84 -0
  144. data/docs/ProgramList.md +26 -0
  145. data/docs/ProgramListItem.md +80 -0
  146. data/docs/ProgramPauseMeta.md +20 -0
  147. data/docs/ProgramSenderRef.md +26 -0
  148. data/docs/ProgramStats.md +22 -0
  149. data/docs/ProgramStepInput.md +38 -0
  150. data/docs/ProgramUpdateParams.md +62 -0
  151. data/docs/ProgramVariantInput.md +26 -0
  152. data/docs/ProgramsApi.md +1283 -0
  153. data/docs/ProgramsAudienceList.md +26 -0
  154. data/docs/ProgramsSendersList.md +26 -0
  155. data/docs/ProviderApiSenderInput.md +38 -0
  156. data/docs/PulseDeliverability.md +30 -0
  157. data/docs/PulseProgram.md +42 -0
  158. data/docs/PulseSenderFleet.md +30 -0
  159. data/docs/PulseValue.md +26 -0
  160. data/docs/ReportShare.md +22 -0
  161. data/docs/Segment.md +32 -0
  162. data/docs/SegmentCreateParams.md +22 -0
  163. data/docs/SegmentList.md +26 -0
  164. data/docs/SegmentUpdateParams.md +22 -0
  165. data/docs/SegmentsApi.md +373 -0
  166. data/docs/SelfHostedSenderInput.md +36 -0
  167. data/docs/Sender.md +66 -0
  168. data/docs/SenderBulkError.md +20 -0
  169. data/docs/SenderDetail.md +70 -0
  170. data/docs/SenderList.md +26 -0
  171. data/docs/SenderRemoveResult.md +20 -0
  172. data/docs/SenderUsage.md +24 -0
  173. data/docs/SenderWarmupStatus.md +20 -0
  174. data/docs/SendersApi.md +531 -0
  175. data/docs/SlackChannel.md +20 -0
  176. data/docs/SmtpConnectionSettings.md +26 -0
  177. data/docs/SmtpConnectionUpdate.md +26 -0
  178. data/docs/SmtpSenderInput.md +40 -0
  179. data/docs/StaticEmailVariantContent.md +28 -0
  180. data/docs/StepWithVariants.md +46 -0
  181. data/docs/Suppression.md +32 -0
  182. data/docs/SuppressionBulkParams.md +20 -0
  183. data/docs/SuppressionBulkResult.md +18 -0
  184. data/docs/SuppressionCreateParams.md +24 -0
  185. data/docs/SuppressionList.md +26 -0
  186. data/docs/SuppressionScope.md +15 -0
  187. data/docs/SuppressionsApi.md +369 -0
  188. data/docs/SyncModel.md +15 -0
  189. data/docs/TeamSize.md +15 -0
  190. data/docs/TrackingDnsRecord.md +22 -0
  191. data/docs/UpdateSenderInput.md +48 -0
  192. data/docs/UsageMeter.md +22 -0
  193. data/docs/UsagePlan.md +22 -0
  194. data/docs/Variant.md +34 -0
  195. data/docs/VariantAi.md +22 -0
  196. data/docs/VerifyApi.md +81 -0
  197. data/docs/VerifyEmailInput.md +18 -0
  198. data/docs/VerifyMx.md +22 -0
  199. data/docs/VerifyReachability.md +15 -0
  200. data/docs/VerifyReasonCode.md +15 -0
  201. data/docs/VerifyResult.md +38 -0
  202. data/docs/VerifySignals.md +28 -0
  203. data/docs/VerifySyntax.md +22 -0
  204. data/docs/VoiceSenderInput.md +38 -0
  205. data/docs/WarmupRuntimeStatus.md +32 -0
  206. data/docs/WarmupSettings.md +44 -0
  207. data/docs/WarmupTemplate.md +20 -0
  208. data/docs/WarmupTodayTally.md +22 -0
  209. data/lib/norbelys/api/analytics_api.rb +97 -0
  210. data/lib/norbelys/api/domains_api.rb +528 -0
  211. data/lib/norbelys/api/fields_api.rb +290 -0
  212. data/lib/norbelys/api/files_api.rb +97 -0
  213. data/lib/norbelys/api/groups_api.rb +516 -0
  214. data/lib/norbelys/api/integrations_api.rb +509 -0
  215. data/lib/norbelys/api/messages_api.rb +572 -0
  216. data/lib/norbelys/api/organization_api.rb +329 -0
  217. data/lib/norbelys/api/people_api.rb +689 -0
  218. data/lib/norbelys/api/programs_api.rb +1299 -0
  219. data/lib/norbelys/api/segments_api.rb +370 -0
  220. data/lib/norbelys/api/senders_api.rb +539 -0
  221. data/lib/norbelys/api/suppressions_api.rb +370 -0
  222. data/lib/norbelys/api/verify_api.rb +97 -0
  223. data/lib/norbelys/api_client.rb +394 -0
  224. data/lib/norbelys/api_error.rb +58 -0
  225. data/lib/norbelys/configuration.rb +308 -0
  226. data/lib/norbelys/models/add_program_sender_params.rb +222 -0
  227. data/lib/norbelys/models/ai_email_variant_content.rb +318 -0
  228. data/lib/norbelys/models/analytics_query.rb +252 -0
  229. data/lib/norbelys/models/analytics_query_name.rb +63 -0
  230. data/lib/norbelys/models/analytics_query_params.rb +485 -0
  231. data/lib/norbelys/models/analytics_query_result.rb +260 -0
  232. data/lib/norbelys/models/api_error.rb +221 -0
  233. data/lib/norbelys/models/api_error_detail.rb +310 -0
  234. data/lib/norbelys/models/audience_activity_action.rb +45 -0
  235. data/lib/norbelys/models/audience_activity_condition.rb +233 -0
  236. data/lib/norbelys/models/audience_activity_link_filter.rb +289 -0
  237. data/lib/norbelys/models/audience_activity_link_match_op.rb +40 -0
  238. data/lib/norbelys/models/audience_activity_params.rb +395 -0
  239. data/lib/norbelys/models/audience_attribute_condition.rb +289 -0
  240. data/lib/norbelys/models/audience_condition_op.rb +59 -0
  241. data/lib/norbelys/models/audience_condition_value.rb +107 -0
  242. data/lib/norbelys/models/audience_filter.rb +270 -0
  243. data/lib/norbelys/models/audience_match.rb +40 -0
  244. data/lib/norbelys/models/audience_rule.rb +104 -0
  245. data/lib/norbelys/models/audience_source.rb +343 -0
  246. data/lib/norbelys/models/audience_status_breakdown.rb +292 -0
  247. data/lib/norbelys/models/audience_summary.rb +351 -0
  248. data/lib/norbelys/models/audience_week_point.rb +258 -0
  249. data/lib/norbelys/models/bulk_update_sender_patch.rb +368 -0
  250. data/lib/norbelys/models/bulk_update_senders_input.rb +268 -0
  251. data/lib/norbelys/models/bulk_update_senders_result.rb +291 -0
  252. data/lib/norbelys/models/campaign_report_share.rb +244 -0
  253. data/lib/norbelys/models/collection_address.rb +321 -0
  254. data/lib/norbelys/models/connection_settings.rb +331 -0
  255. data/lib/norbelys/models/create_sender_input.rb +106 -0
  256. data/lib/norbelys/models/detach_result.rb +223 -0
  257. data/lib/norbelys/models/dmarc_record_to_publish.rb +252 -0
  258. data/lib/norbelys/models/domain.rb +421 -0
  259. data/lib/norbelys/models/domain_age.rb +351 -0
  260. data/lib/norbelys/models/domain_capacity.rb +397 -0
  261. data/lib/norbelys/models/domain_create_params.rb +307 -0
  262. data/lib/norbelys/models/domain_detail.rb +445 -0
  263. data/lib/norbelys/models/domain_health.rb +310 -0
  264. data/lib/norbelys/models/domain_list.rb +292 -0
  265. data/lib/norbelys/models/domain_monitoring.rb +380 -0
  266. data/lib/norbelys/models/domain_monitoring_params.rb +262 -0
  267. data/lib/norbelys/models/domain_sending.rb +302 -0
  268. data/lib/norbelys/models/domain_sending_policy.rb +479 -0
  269. data/lib/norbelys/models/domain_sending_policy_params.rb +389 -0
  270. data/lib/norbelys/models/domain_sending_update_params.rb +225 -0
  271. data/lib/norbelys/models/domain_tracking.rb +570 -0
  272. data/lib/norbelys/models/domain_tracking_params.rb +268 -0
  273. data/lib/norbelys/models/domain_tracking_update_params.rb +306 -0
  274. data/lib/norbelys/models/domain_update_params.rb +259 -0
  275. data/lib/norbelys/models/email_variant_content.rb +104 -0
  276. data/lib/norbelys/models/enroll_program_params.rb +308 -0
  277. data/lib/norbelys/models/enroll_program_result.rb +366 -0
  278. data/lib/norbelys/models/enrollment.rb +405 -0
  279. data/lib/norbelys/models/enrollment_counts.rb +660 -0
  280. data/lib/norbelys/models/enrollment_list.rb +308 -0
  281. data/lib/norbelys/models/enrollment_person_ref.rb +246 -0
  282. data/lib/norbelys/models/enrollment_program_ref.rb +239 -0
  283. data/lib/norbelys/models/features.rb +223 -0
  284. data/lib/norbelys/models/field.rb +401 -0
  285. data/lib/norbelys/models/field_create_params.rb +386 -0
  286. data/lib/norbelys/models/field_list.rb +234 -0
  287. data/lib/norbelys/models/field_type.rb +45 -0
  288. data/lib/norbelys/models/field_update_params.rb +324 -0
  289. data/lib/norbelys/models/file_object.rb +321 -0
  290. data/lib/norbelys/models/file_upload.rb +324 -0
  291. data/lib/norbelys/models/group.rb +339 -0
  292. data/lib/norbelys/models/group_add_members_params.rb +227 -0
  293. data/lib/norbelys/models/group_add_members_result.rb +313 -0
  294. data/lib/norbelys/models/group_create_params.rb +308 -0
  295. data/lib/norbelys/models/group_list.rb +299 -0
  296. data/lib/norbelys/models/group_update_params.rb +293 -0
  297. data/lib/norbelys/models/imap_connection_update.rb +317 -0
  298. data/lib/norbelys/models/inbound_message.rb +442 -0
  299. data/lib/norbelys/models/integration.rb +340 -0
  300. data/lib/norbelys/models/integration_config.rb +254 -0
  301. data/lib/norbelys/models/integration_connect_params.rb +244 -0
  302. data/lib/norbelys/models/integration_connect_result.rb +222 -0
  303. data/lib/norbelys/models/integration_list.rb +292 -0
  304. data/lib/norbelys/models/integration_notify_config.rb +246 -0
  305. data/lib/norbelys/models/integration_options.rb +224 -0
  306. data/lib/norbelys/models/integration_provider.rb +52 -0
  307. data/lib/norbelys/models/integration_status.rb +41 -0
  308. data/lib/norbelys/models/integration_sync_result.rb +224 -0
  309. data/lib/norbelys/models/integration_update_params.rb +222 -0
  310. data/lib/norbelys/models/launch_program_params.rb +230 -0
  311. data/lib/norbelys/models/launch_program_result.rb +292 -0
  312. data/lib/norbelys/models/message.rb +104 -0
  313. data/lib/norbelys/models/message_address.rb +232 -0
  314. data/lib/norbelys/models/message_attachment.rb +312 -0
  315. data/lib/norbelys/models/message_attachment_download.rb +341 -0
  316. data/lib/norbelys/models/message_attachment_input.rb +296 -0
  317. data/lib/norbelys/models/message_attachment_list.rb +253 -0
  318. data/lib/norbelys/models/message_create_params.rb +105 -0
  319. data/lib/norbelys/models/message_enroll_params.rb +278 -0
  320. data/lib/norbelys/models/message_list.rb +299 -0
  321. data/lib/norbelys/models/message_reply_params.rb +369 -0
  322. data/lib/norbelys/models/message_source.rb +348 -0
  323. data/lib/norbelys/models/message_source_attachment.rb +242 -0
  324. data/lib/norbelys/models/message_test_params.rb +364 -0
  325. data/lib/norbelys/models/message_update_params.rb +269 -0
  326. data/lib/norbelys/models/monthly_email_usage_meter.rb +303 -0
  327. data/lib/norbelys/models/organization.rb +321 -0
  328. data/lib/norbelys/models/organization_alerts.rb +223 -0
  329. data/lib/norbelys/models/organization_alerts_params.rb +216 -0
  330. data/lib/norbelys/models/organization_bounce_policy.rb +240 -0
  331. data/lib/norbelys/models/organization_bounce_policy_params.rb +226 -0
  332. data/lib/norbelys/models/organization_onboarding.rb +250 -0
  333. data/lib/norbelys/models/organization_profile.rb +264 -0
  334. data/lib/norbelys/models/organization_profile_params.rb +270 -0
  335. data/lib/norbelys/models/organization_pulse.rb +301 -0
  336. data/lib/norbelys/models/organization_update_params.rb +242 -0
  337. data/lib/norbelys/models/organization_usage.rb +282 -0
  338. data/lib/norbelys/models/outbound_message.rb +447 -0
  339. data/lib/norbelys/models/people_bulk_create_params.rb +401 -0
  340. data/lib/norbelys/models/people_bulk_create_result.rb +493 -0
  341. data/lib/norbelys/models/person.rb +500 -0
  342. data/lib/norbelys/models/person_create_params.rb +320 -0
  343. data/lib/norbelys/models/person_detail.rb +548 -0
  344. data/lib/norbelys/models/person_erased.rb +234 -0
  345. data/lib/norbelys/models/person_group_ref.rb +251 -0
  346. data/lib/norbelys/models/person_import_item.rb +339 -0
  347. data/lib/norbelys/models/person_import_reason.rb +309 -0
  348. data/lib/norbelys/models/person_import_stats.rb +518 -0
  349. data/lib/norbelys/models/person_list.rb +299 -0
  350. data/lib/norbelys/models/person_list_item.rb +488 -0
  351. data/lib/norbelys/models/person_segment_ref.rb +251 -0
  352. data/lib/norbelys/models/person_update_params.rb +313 -0
  353. data/lib/norbelys/models/program.rb +871 -0
  354. data/lib/norbelys/models/program_create_params.rb +704 -0
  355. data/lib/norbelys/models/program_detail.rb +911 -0
  356. data/lib/norbelys/models/program_list.rb +292 -0
  357. data/lib/norbelys/models/program_list_item.rb +887 -0
  358. data/lib/norbelys/models/program_pause_meta.rb +295 -0
  359. data/lib/norbelys/models/program_sender_ref.rb +295 -0
  360. data/lib/norbelys/models/program_stats.rb +297 -0
  361. data/lib/norbelys/models/program_step_input.rb +469 -0
  362. data/lib/norbelys/models/program_update_params.rb +697 -0
  363. data/lib/norbelys/models/program_variant_input.rb +274 -0
  364. data/lib/norbelys/models/programs_audience_list.rb +293 -0
  365. data/lib/norbelys/models/programs_senders_list.rb +293 -0
  366. data/lib/norbelys/models/provider_api_sender_input.rb +395 -0
  367. data/lib/norbelys/models/pulse_deliverability.rb +325 -0
  368. data/lib/norbelys/models/pulse_program.rb +453 -0
  369. data/lib/norbelys/models/pulse_sender_fleet.rb +325 -0
  370. data/lib/norbelys/models/pulse_value.rb +291 -0
  371. data/lib/norbelys/models/report_share.rb +244 -0
  372. data/lib/norbelys/models/segment.rb +307 -0
  373. data/lib/norbelys/models/segment_create_params.rb +296 -0
  374. data/lib/norbelys/models/segment_list.rb +299 -0
  375. data/lib/norbelys/models/segment_update_params.rb +278 -0
  376. data/lib/norbelys/models/self_hosted_sender_input.rb +378 -0
  377. data/lib/norbelys/models/sender.rb +708 -0
  378. data/lib/norbelys/models/sender_bulk_error.rb +239 -0
  379. data/lib/norbelys/models/sender_detail.rb +726 -0
  380. data/lib/norbelys/models/sender_list.rb +299 -0
  381. data/lib/norbelys/models/sender_remove_result.rb +268 -0
  382. data/lib/norbelys/models/sender_usage.rb +331 -0
  383. data/lib/norbelys/models/sender_warmup_status.rb +230 -0
  384. data/lib/norbelys/models/slack_channel.rb +239 -0
  385. data/lib/norbelys/models/smtp_connection_settings.rb +351 -0
  386. data/lib/norbelys/models/smtp_connection_update.rb +337 -0
  387. data/lib/norbelys/models/smtp_sender_input.rb +403 -0
  388. data/lib/norbelys/models/static_email_variant_content.rb +312 -0
  389. data/lib/norbelys/models/step_with_variants.rb +591 -0
  390. data/lib/norbelys/models/suppression.rb +331 -0
  391. data/lib/norbelys/models/suppression_bulk_params.rb +262 -0
  392. data/lib/norbelys/models/suppression_bulk_result.rb +241 -0
  393. data/lib/norbelys/models/suppression_create_params.rb +305 -0
  394. data/lib/norbelys/models/suppression_list.rb +293 -0
  395. data/lib/norbelys/models/suppression_scope.rb +40 -0
  396. data/lib/norbelys/models/sync_model.rb +41 -0
  397. data/lib/norbelys/models/team_size.rb +43 -0
  398. data/lib/norbelys/models/tracking_dns_record.rb +252 -0
  399. data/lib/norbelys/models/update_sender_input.rb +481 -0
  400. data/lib/norbelys/models/usage_meter.rb +286 -0
  401. data/lib/norbelys/models/usage_plan.rb +257 -0
  402. data/lib/norbelys/models/variant.rb +385 -0
  403. data/lib/norbelys/models/variant_ai.rb +314 -0
  404. data/lib/norbelys/models/verify_email_input.rb +251 -0
  405. data/lib/norbelys/models/verify_mx.rb +254 -0
  406. data/lib/norbelys/models/verify_reachability.rb +42 -0
  407. data/lib/norbelys/models/verify_reason_code.rb +52 -0
  408. data/lib/norbelys/models/verify_result.rb +426 -0
  409. data/lib/norbelys/models/verify_signals.rb +308 -0
  410. data/lib/norbelys/models/verify_syntax.rb +257 -0
  411. data/lib/norbelys/models/voice_sender_input.rb +388 -0
  412. data/lib/norbelys/models/warmup_runtime_status.rb +440 -0
  413. data/lib/norbelys/models/warmup_settings.rb +562 -0
  414. data/lib/norbelys/models/warmup_template.rb +295 -0
  415. data/lib/norbelys/models/warmup_today_tally.rb +314 -0
  416. data/lib/norbelys/version.rb +15 -0
  417. data/lib/norbelys.rb +243 -0
  418. data/norbelys.gemspec +39 -0
  419. data/spec/api/analytics_api_spec.rb +48 -0
  420. data/spec/api/domains_api_spec.rb +128 -0
  421. data/spec/api/fields_api_spec.rb +85 -0
  422. data/spec/api/files_api_spec.rb +48 -0
  423. data/spec/api/groups_api_spec.rb +127 -0
  424. data/spec/api/integrations_api_spec.rb +124 -0
  425. data/spec/api/messages_api_spec.rb +139 -0
  426. data/spec/api/organization_api_spec.rb +92 -0
  427. data/spec/api/people_api_spec.rb +158 -0
  428. data/spec/api/programs_api_spec.rb +270 -0
  429. data/spec/api/segments_api_spec.rb +100 -0
  430. data/spec/api/senders_api_spec.rb +130 -0
  431. data/spec/api/suppressions_api_spec.rb +98 -0
  432. data/spec/api/verify_api_spec.rb +48 -0
  433. data/spec/models/add_program_sender_params_spec.rb +36 -0
  434. data/spec/models/ai_email_variant_content_spec.rb +66 -0
  435. data/spec/models/analytics_query_name_spec.rb +30 -0
  436. data/spec/models/analytics_query_params_spec.rb +136 -0
  437. data/spec/models/analytics_query_result_spec.rb +42 -0
  438. data/spec/models/analytics_query_spec.rb +42 -0
  439. data/spec/models/api_error_detail_spec.rb +64 -0
  440. data/spec/models/api_error_spec.rb +36 -0
  441. data/spec/models/audience_activity_action_spec.rb +30 -0
  442. data/spec/models/audience_activity_condition_spec.rb +42 -0
  443. data/spec/models/audience_activity_link_filter_spec.rb +42 -0
  444. data/spec/models/audience_activity_link_match_op_spec.rb +30 -0
  445. data/spec/models/audience_activity_params_spec.rb +78 -0
  446. data/spec/models/audience_attribute_condition_spec.rb +48 -0
  447. data/spec/models/audience_condition_op_spec.rb +30 -0
  448. data/spec/models/audience_condition_value_spec.rb +21 -0
  449. data/spec/models/audience_filter_spec.rb +42 -0
  450. data/spec/models/audience_match_spec.rb +30 -0
  451. data/spec/models/audience_rule_spec.rb +21 -0
  452. data/spec/models/audience_source_spec.rb +64 -0
  453. data/spec/models/audience_status_breakdown_spec.rb +46 -0
  454. data/spec/models/audience_summary_spec.rb +60 -0
  455. data/spec/models/audience_week_point_spec.rb +42 -0
  456. data/spec/models/bulk_update_sender_patch_spec.rb +88 -0
  457. data/spec/models/bulk_update_senders_input_spec.rb +42 -0
  458. data/spec/models/bulk_update_senders_result_spec.rb +54 -0
  459. data/spec/models/campaign_report_share_spec.rb +48 -0
  460. data/spec/models/collection_address_spec.rb +70 -0
  461. data/spec/models/connection_settings_spec.rb +52 -0
  462. data/spec/models/create_sender_input_spec.rb +21 -0
  463. data/spec/models/detach_result_spec.rb +36 -0
  464. data/spec/models/dmarc_record_to_publish_spec.rb +48 -0
  465. data/spec/models/domain_age_spec.rb +76 -0
  466. data/spec/models/domain_capacity_spec.rb +70 -0
  467. data/spec/models/domain_create_params_spec.rb +58 -0
  468. data/spec/models/domain_detail_spec.rb +112 -0
  469. data/spec/models/domain_health_spec.rb +62 -0
  470. data/spec/models/domain_list_spec.rb +60 -0
  471. data/spec/models/domain_monitoring_params_spec.rb +46 -0
  472. data/spec/models/domain_monitoring_spec.rb +84 -0
  473. data/spec/models/domain_sending_policy_params_spec.rb +82 -0
  474. data/spec/models/domain_sending_policy_spec.rb +94 -0
  475. data/spec/models/domain_sending_spec.rb +60 -0
  476. data/spec/models/domain_sending_update_params_spec.rb +42 -0
  477. data/spec/models/domain_spec.rb +100 -0
  478. data/spec/models/domain_tracking_params_spec.rb +48 -0
  479. data/spec/models/domain_tracking_spec.rb +160 -0
  480. data/spec/models/domain_tracking_update_params_spec.rb +58 -0
  481. data/spec/models/domain_update_params_spec.rb +48 -0
  482. data/spec/models/email_variant_content_spec.rb +21 -0
  483. data/spec/models/enroll_program_params_spec.rb +70 -0
  484. data/spec/models/enroll_program_result_spec.rb +66 -0
  485. data/spec/models/enrollment_counts_spec.rb +114 -0
  486. data/spec/models/enrollment_list_spec.rb +66 -0
  487. data/spec/models/enrollment_person_ref_spec.rb +48 -0
  488. data/spec/models/enrollment_program_ref_spec.rb +42 -0
  489. data/spec/models/enrollment_spec.rb +112 -0
  490. data/spec/models/features_spec.rb +36 -0
  491. data/spec/models/field_create_params_spec.rb +64 -0
  492. data/spec/models/field_list_spec.rb +42 -0
  493. data/spec/models/field_spec.rb +96 -0
  494. data/spec/models/field_type_spec.rb +30 -0
  495. data/spec/models/field_update_params_spec.rb +58 -0
  496. data/spec/models/file_object_spec.rb +66 -0
  497. data/spec/models/file_upload_spec.rb +48 -0
  498. data/spec/models/group_add_members_params_spec.rb +42 -0
  499. data/spec/models/group_add_members_result_spec.rb +48 -0
  500. data/spec/models/group_create_params_spec.rb +48 -0
  501. data/spec/models/group_list_spec.rb +60 -0
  502. data/spec/models/group_spec.rb +84 -0
  503. data/spec/models/group_update_params_spec.rb +48 -0
  504. data/spec/models/imap_connection_update_spec.rb +52 -0
  505. data/spec/models/inbound_message_spec.rb +130 -0
  506. data/spec/models/integration_config_spec.rb +60 -0
  507. data/spec/models/integration_connect_params_spec.rb +36 -0
  508. data/spec/models/integration_connect_result_spec.rb +36 -0
  509. data/spec/models/integration_list_spec.rb +60 -0
  510. data/spec/models/integration_notify_config_spec.rb +54 -0
  511. data/spec/models/integration_options_spec.rb +36 -0
  512. data/spec/models/integration_provider_spec.rb +30 -0
  513. data/spec/models/integration_spec.rb +84 -0
  514. data/spec/models/integration_status_spec.rb +30 -0
  515. data/spec/models/integration_sync_result_spec.rb +36 -0
  516. data/spec/models/integration_update_params_spec.rb +36 -0
  517. data/spec/models/launch_program_params_spec.rb +36 -0
  518. data/spec/models/launch_program_result_spec.rb +52 -0
  519. data/spec/models/message_address_spec.rb +42 -0
  520. data/spec/models/message_attachment_download_spec.rb +78 -0
  521. data/spec/models/message_attachment_input_spec.rb +48 -0
  522. data/spec/models/message_attachment_list_spec.rb +48 -0
  523. data/spec/models/message_attachment_spec.rb +66 -0
  524. data/spec/models/message_create_params_spec.rb +21 -0
  525. data/spec/models/message_enroll_params_spec.rb +60 -0
  526. data/spec/models/message_list_spec.rb +60 -0
  527. data/spec/models/message_reply_params_spec.rb +102 -0
  528. data/spec/models/message_source_attachment_spec.rb +48 -0
  529. data/spec/models/message_source_spec.rb +90 -0
  530. data/spec/models/message_spec.rb +21 -0
  531. data/spec/models/message_test_params_spec.rb +102 -0
  532. data/spec/models/message_update_params_spec.rb +52 -0
  533. data/spec/models/monthly_email_usage_meter_spec.rb +58 -0
  534. data/spec/models/organization_alerts_params_spec.rb +36 -0
  535. data/spec/models/organization_alerts_spec.rb +36 -0
  536. data/spec/models/organization_bounce_policy_params_spec.rb +42 -0
  537. data/spec/models/organization_bounce_policy_spec.rb +42 -0
  538. data/spec/models/organization_onboarding_spec.rb +42 -0
  539. data/spec/models/organization_profile_params_spec.rb +52 -0
  540. data/spec/models/organization_profile_spec.rb +48 -0
  541. data/spec/models/organization_pulse_spec.rb +66 -0
  542. data/spec/models/organization_spec.rb +72 -0
  543. data/spec/models/organization_update_params_spec.rb +54 -0
  544. data/spec/models/organization_usage_spec.rb +60 -0
  545. data/spec/models/outbound_message_spec.rb +128 -0
  546. data/spec/models/people_bulk_create_params_spec.rb +70 -0
  547. data/spec/models/people_bulk_create_result_spec.rb +84 -0
  548. data/spec/models/person_create_params_spec.rb +76 -0
  549. data/spec/models/person_detail_spec.rb +170 -0
  550. data/spec/models/person_erased_spec.rb +42 -0
  551. data/spec/models/person_group_ref_spec.rb +48 -0
  552. data/spec/models/person_import_item_spec.rb +76 -0
  553. data/spec/models/person_import_reason_spec.rb +52 -0
  554. data/spec/models/person_import_stats_spec.rb +94 -0
  555. data/spec/models/person_list_item_spec.rb +140 -0
  556. data/spec/models/person_list_spec.rb +60 -0
  557. data/spec/models/person_segment_ref_spec.rb +48 -0
  558. data/spec/models/person_spec.rb +146 -0
  559. data/spec/models/person_update_params_spec.rb +76 -0
  560. data/spec/models/program_create_params_spec.rb +180 -0
  561. data/spec/models/program_detail_spec.rb +254 -0
  562. data/spec/models/program_list_item_spec.rb +242 -0
  563. data/spec/models/program_list_spec.rb +60 -0
  564. data/spec/models/program_pause_meta_spec.rb +42 -0
  565. data/spec/models/program_sender_ref_spec.rb +60 -0
  566. data/spec/models/program_spec.rb +236 -0
  567. data/spec/models/program_stats_spec.rb +48 -0
  568. data/spec/models/program_step_input_spec.rb +108 -0
  569. data/spec/models/program_update_params_spec.rb +180 -0
  570. data/spec/models/program_variant_input_spec.rb +60 -0
  571. data/spec/models/programs_audience_list_spec.rb +60 -0
  572. data/spec/models/programs_senders_list_spec.rb +60 -0
  573. data/spec/models/provider_api_sender_input_spec.rb +96 -0
  574. data/spec/models/pulse_deliverability_spec.rb +72 -0
  575. data/spec/models/pulse_program_spec.rb +112 -0
  576. data/spec/models/pulse_sender_fleet_spec.rb +72 -0
  577. data/spec/models/pulse_value_spec.rb +60 -0
  578. data/spec/models/report_share_spec.rb +48 -0
  579. data/spec/models/segment_create_params_spec.rb +48 -0
  580. data/spec/models/segment_list_spec.rb +60 -0
  581. data/spec/models/segment_spec.rb +78 -0
  582. data/spec/models/segment_update_params_spec.rb +48 -0
  583. data/spec/models/self_hosted_sender_input_spec.rb +90 -0
  584. data/spec/models/sender_bulk_error_spec.rb +42 -0
  585. data/spec/models/sender_detail_spec.rb +212 -0
  586. data/spec/models/sender_list_spec.rb +60 -0
  587. data/spec/models/sender_remove_result_spec.rb +46 -0
  588. data/spec/models/sender_spec.rb +200 -0
  589. data/spec/models/sender_usage_spec.rb +54 -0
  590. data/spec/models/sender_warmup_status_spec.rb +42 -0
  591. data/spec/models/slack_channel_spec.rb +42 -0
  592. data/spec/models/smtp_connection_settings_spec.rb +64 -0
  593. data/spec/models/smtp_connection_update_spec.rb +64 -0
  594. data/spec/models/smtp_sender_input_spec.rb +102 -0
  595. data/spec/models/static_email_variant_content_spec.rb +66 -0
  596. data/spec/models/step_with_variants_spec.rb +136 -0
  597. data/spec/models/suppression_bulk_params_spec.rb +42 -0
  598. data/spec/models/suppression_bulk_result_spec.rb +36 -0
  599. data/spec/models/suppression_create_params_spec.rb +58 -0
  600. data/spec/models/suppression_list_spec.rb +60 -0
  601. data/spec/models/suppression_scope_spec.rb +30 -0
  602. data/spec/models/suppression_spec.rb +78 -0
  603. data/spec/models/sync_model_spec.rb +30 -0
  604. data/spec/models/team_size_spec.rb +30 -0
  605. data/spec/models/tracking_dns_record_spec.rb +48 -0
  606. data/spec/models/update_sender_input_spec.rb +134 -0
  607. data/spec/models/usage_meter_spec.rb +52 -0
  608. data/spec/models/usage_plan_spec.rb +48 -0
  609. data/spec/models/variant_ai_spec.rb +52 -0
  610. data/spec/models/variant_spec.rb +88 -0
  611. data/spec/models/verify_email_input_spec.rb +36 -0
  612. data/spec/models/verify_mx_spec.rb +48 -0
  613. data/spec/models/verify_reachability_spec.rb +30 -0
  614. data/spec/models/verify_reason_code_spec.rb +30 -0
  615. data/spec/models/verify_result_spec.rb +96 -0
  616. data/spec/models/verify_signals_spec.rb +66 -0
  617. data/spec/models/verify_syntax_spec.rb +48 -0
  618. data/spec/models/voice_sender_input_spec.rb +96 -0
  619. data/spec/models/warmup_runtime_status_spec.rb +86 -0
  620. data/spec/models/warmup_settings_spec.rb +118 -0
  621. data/spec/models/warmup_template_spec.rb +42 -0
  622. data/spec/models/warmup_today_tally_spec.rb +48 -0
  623. data/spec/spec_helper.rb +111 -0
  624. metadata +935 -0
@@ -0,0 +1,1299 @@
1
+ =begin
2
+ #Norbelys API
3
+
4
+ #The **Norbelys API** is a single, predictable REST surface for cold email and outreach — people, senders, programs, and sending all live behind the five patterns below. Developer-first and AI-first: every name is either already invented (Schema.org) or obvious. ## Authentication Every request authenticates with an **org-scoped API key**. Create one in **Settings → API keys** and send it as a bearer token: ```http GET https://api.norbelys.com/v1/people Authorization: Bearer ak_live_… ``` Interactive agents may instead use OAuth 2.1 (see `/auth.md` and the `/.well-known/oauth-protected-resource` metadata). ## Conventions - **Base URL** — `https://api.norbelys.com/v1`. - **JSON in, JSON out.** Timestamps are ISO-8601 in UTC. - **Cursor pagination.** List endpoints take `limit` + `cursor` and return `{ data, hasMore, nextCursor }` (offset-paged tables add `page` + `total`). - **Expansions.** Detail GETs take an `expand[]` query param to inline related data (e.g. `GET /people/{id}?expand[]=timeline`) instead of extra calls. - **Soft deletes.** Anything that has been used is archived, never hard-deleted — `DELETE` archives the resource and returns it. ## Errors Failures return the same envelope on every 4xx/5xx, with the matching HTTP status: ```json { \"error\": { \"type\": \"invalid_request\", \"code\": \"invalid_param\", \"message\": \"…\", \"hint\": \"…\", \"doc_url\": \"…\" } } ``` `type` is a broad, machine-routable category derived from the status; `code` is the stable machine contract you branch on (never the human `message`). See the `ApiError` schema. ## Idempotency Every `POST` accepts an optional **`Idempotency-Key`** header. Reuse the same key to replay the original result for 24h instead of re-executing — so a retried create can never double-charge or duplicate a record. ## Rate limits & versioning Abuse control is enforced at the edge; responses advertise the policy via the `RateLimit-Policy` header, and a `429` carries `Retry-After`. The API is versioned in the URL path (`/v1`). Breaking changes ship under a new version; a retiring surface is announced with `Deprecation` + `Sunset` response headers at least 90 days ahead.
5
+
6
+ The version of the OpenAPI document: 0.0.1
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module Norbelys
16
+ class ProgramsApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Archive a program
23
+ # Soft-delete the campaign and cancel its in-flight runs. Reversible with programs.restore.
24
+ # @param id [String]
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [Program]
27
+ def programs_archive(id, opts = {})
28
+ data, _status_code, _headers = programs_archive_with_http_info(id, opts)
29
+ data
30
+ end
31
+
32
+ # Archive a program
33
+ # Soft-delete the campaign and cancel its in-flight runs. Reversible with programs.restore.
34
+ # @param id [String]
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(Program, Integer, Hash)>] Program data, response status code and response headers
37
+ def programs_archive_with_http_info(id, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_archive ...'
40
+ end
41
+ # verify the required parameter 'id' is set
42
+ if @api_client.config.client_side_validation && id.nil?
43
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_archive"
44
+ end
45
+ # resource path
46
+ local_var_path = '/programs/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
47
+
48
+ # query parameters
49
+ query_params = opts[:query_params] || {}
50
+
51
+ # header parameters
52
+ header_params = opts[:header_params] || {}
53
+ # HTTP header 'Accept' (if needed)
54
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
55
+
56
+ # form parameters
57
+ form_params = opts[:form_params] || {}
58
+
59
+ # http body (model)
60
+ post_body = opts[:debug_body]
61
+
62
+ # return_type
63
+ return_type = opts[:debug_return_type] || 'Program'
64
+
65
+ # auth_names
66
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
67
+
68
+ new_options = opts.merge(
69
+ :operation => :"ProgramsApi.programs_archive",
70
+ :header_params => header_params,
71
+ :query_params => query_params,
72
+ :form_params => form_params,
73
+ :body => post_body,
74
+ :auth_names => auth_names,
75
+ :return_type => return_type
76
+ )
77
+
78
+ data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
79
+ if @api_client.config.debugging
80
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_archive\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
81
+ end
82
+ return data, status_code, headers
83
+ end
84
+
85
+ # List a program's audience sources
86
+ # Where this campaign's people came from — one entry per source (segment, group, CSV import, manual), with the people count enrolled from each and whether a segment is kept in continuous sync (dynamic audience).
87
+ # @param id [String]
88
+ # @param [Hash] opts the optional parameters
89
+ # @return [ProgramsAudienceList]
90
+ def programs_audience_list(id, opts = {})
91
+ data, _status_code, _headers = programs_audience_list_with_http_info(id, opts)
92
+ data
93
+ end
94
+
95
+ # List a program&#39;s audience sources
96
+ # Where this campaign&#39;s people came from — one entry per source (segment, group, CSV import, manual), with the people count enrolled from each and whether a segment is kept in continuous sync (dynamic audience).
97
+ # @param id [String]
98
+ # @param [Hash] opts the optional parameters
99
+ # @return [Array<(ProgramsAudienceList, Integer, Hash)>] ProgramsAudienceList data, response status code and response headers
100
+ def programs_audience_list_with_http_info(id, opts = {})
101
+ if @api_client.config.debugging
102
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_audience_list ...'
103
+ end
104
+ # verify the required parameter 'id' is set
105
+ if @api_client.config.client_side_validation && id.nil?
106
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_audience_list"
107
+ end
108
+ # resource path
109
+ local_var_path = '/programs/{id}/audience'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
110
+
111
+ # query parameters
112
+ query_params = opts[:query_params] || {}
113
+
114
+ # header parameters
115
+ header_params = opts[:header_params] || {}
116
+ # HTTP header 'Accept' (if needed)
117
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
118
+
119
+ # form parameters
120
+ form_params = opts[:form_params] || {}
121
+
122
+ # http body (model)
123
+ post_body = opts[:debug_body]
124
+
125
+ # return_type
126
+ return_type = opts[:debug_return_type] || 'ProgramsAudienceList'
127
+
128
+ # auth_names
129
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
130
+
131
+ new_options = opts.merge(
132
+ :operation => :"ProgramsApi.programs_audience_list",
133
+ :header_params => header_params,
134
+ :query_params => query_params,
135
+ :form_params => form_params,
136
+ :body => post_body,
137
+ :auth_names => auth_names,
138
+ :return_type => return_type
139
+ )
140
+
141
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
142
+ if @api_client.config.debugging
143
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_audience_list\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
144
+ end
145
+ return data, status_code, headers
146
+ end
147
+
148
+ # Create a program
149
+ # Create a cold-email sequence. Optionally build the WHOLE cadence in one call by passing steps[] (each with inline variants[]); the response returns the program with its steps expanded. Then attach senders, enroll people, and launch.
150
+ # @param program_create_params [ProgramCreateParams]
151
+ # @param [Hash] opts the optional parameters
152
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
153
+ # @return [ProgramDetail]
154
+ def programs_create(program_create_params, opts = {})
155
+ data, _status_code, _headers = programs_create_with_http_info(program_create_params, opts)
156
+ data
157
+ end
158
+
159
+ # Create a program
160
+ # Create a cold-email sequence. Optionally build the WHOLE cadence in one call by passing steps[] (each with inline variants[]); the response returns the program with its steps expanded. Then attach senders, enroll people, and launch.
161
+ # @param program_create_params [ProgramCreateParams]
162
+ # @param [Hash] opts the optional parameters
163
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
164
+ # @return [Array<(ProgramDetail, Integer, Hash)>] ProgramDetail data, response status code and response headers
165
+ def programs_create_with_http_info(program_create_params, opts = {})
166
+ if @api_client.config.debugging
167
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_create ...'
168
+ end
169
+ # verify the required parameter 'program_create_params' is set
170
+ if @api_client.config.client_side_validation && program_create_params.nil?
171
+ fail ArgumentError, "Missing the required parameter 'program_create_params' when calling ProgramsApi.programs_create"
172
+ end
173
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
174
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_create, the character length must be smaller than or equal to 255.'
175
+ end
176
+
177
+ # resource path
178
+ local_var_path = '/programs'
179
+
180
+ # query parameters
181
+ query_params = opts[:query_params] || {}
182
+
183
+ # header parameters
184
+ header_params = opts[:header_params] || {}
185
+ # HTTP header 'Accept' (if needed)
186
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
187
+ # HTTP header 'Content-Type'
188
+ content_type = @api_client.select_header_content_type(['application/json'])
189
+ if !content_type.nil?
190
+ header_params['Content-Type'] = content_type
191
+ end
192
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
193
+
194
+ # form parameters
195
+ form_params = opts[:form_params] || {}
196
+
197
+ # http body (model)
198
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(program_create_params)
199
+
200
+ # return_type
201
+ return_type = opts[:debug_return_type] || 'ProgramDetail'
202
+
203
+ # auth_names
204
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
205
+
206
+ new_options = opts.merge(
207
+ :operation => :"ProgramsApi.programs_create",
208
+ :header_params => header_params,
209
+ :query_params => query_params,
210
+ :form_params => form_params,
211
+ :body => post_body,
212
+ :auth_names => auth_names,
213
+ :return_type => return_type
214
+ )
215
+
216
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
217
+ if @api_client.config.debugging
218
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_create\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
219
+ end
220
+ return data, status_code, headers
221
+ end
222
+
223
+ # Enroll people into a program
224
+ # Add an audience as leads — the union of personIds, a groupId's members, and a segmentId's current matches (omit all to enroll every active person). Never starts sending on its own; call programs.launch to go live.
225
+ # @param id [String]
226
+ # @param [Hash] opts the optional parameters
227
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
228
+ # @option opts [EnrollProgramParams] :enroll_program_params
229
+ # @return [EnrollProgramResult]
230
+ def programs_enroll(id, opts = {})
231
+ data, _status_code, _headers = programs_enroll_with_http_info(id, opts)
232
+ data
233
+ end
234
+
235
+ # Enroll people into a program
236
+ # Add an audience as leads — the union of personIds, a groupId&#39;s members, and a segmentId&#39;s current matches (omit all to enroll every active person). Never starts sending on its own; call programs.launch to go live.
237
+ # @param id [String]
238
+ # @param [Hash] opts the optional parameters
239
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
240
+ # @option opts [EnrollProgramParams] :enroll_program_params
241
+ # @return [Array<(EnrollProgramResult, Integer, Hash)>] EnrollProgramResult data, response status code and response headers
242
+ def programs_enroll_with_http_info(id, opts = {})
243
+ if @api_client.config.debugging
244
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_enroll ...'
245
+ end
246
+ # verify the required parameter 'id' is set
247
+ if @api_client.config.client_side_validation && id.nil?
248
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_enroll"
249
+ end
250
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
251
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_enroll, the character length must be smaller than or equal to 255.'
252
+ end
253
+
254
+ # resource path
255
+ local_var_path = '/programs/{id}/enroll'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
256
+
257
+ # query parameters
258
+ query_params = opts[:query_params] || {}
259
+
260
+ # header parameters
261
+ header_params = opts[:header_params] || {}
262
+ # HTTP header 'Accept' (if needed)
263
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
264
+ # HTTP header 'Content-Type'
265
+ content_type = @api_client.select_header_content_type(['application/json'])
266
+ if !content_type.nil?
267
+ header_params['Content-Type'] = content_type
268
+ end
269
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
270
+
271
+ # form parameters
272
+ form_params = opts[:form_params] || {}
273
+
274
+ # http body (model)
275
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'enroll_program_params'])
276
+
277
+ # return_type
278
+ return_type = opts[:debug_return_type] || 'EnrollProgramResult'
279
+
280
+ # auth_names
281
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
282
+
283
+ new_options = opts.merge(
284
+ :operation => :"ProgramsApi.programs_enroll",
285
+ :header_params => header_params,
286
+ :query_params => query_params,
287
+ :form_params => form_params,
288
+ :body => post_body,
289
+ :auth_names => auth_names,
290
+ :return_type => return_type
291
+ )
292
+
293
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
294
+ if @api_client.config.debugging
295
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_enroll\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
296
+ end
297
+ return data, status_code, headers
298
+ end
299
+
300
+ # Get an enrollment
301
+ # @param program_id [String]
302
+ # @param id [String]
303
+ # @param [Hash] opts the optional parameters
304
+ # @return [Enrollment]
305
+ def programs_enrollments_find(program_id, id, opts = {})
306
+ data, _status_code, _headers = programs_enrollments_find_with_http_info(program_id, id, opts)
307
+ data
308
+ end
309
+
310
+ # Get an enrollment
311
+ # @param program_id [String]
312
+ # @param id [String]
313
+ # @param [Hash] opts the optional parameters
314
+ # @return [Array<(Enrollment, Integer, Hash)>] Enrollment data, response status code and response headers
315
+ def programs_enrollments_find_with_http_info(program_id, id, opts = {})
316
+ if @api_client.config.debugging
317
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_enrollments_find ...'
318
+ end
319
+ # verify the required parameter 'program_id' is set
320
+ if @api_client.config.client_side_validation && program_id.nil?
321
+ fail ArgumentError, "Missing the required parameter 'program_id' when calling ProgramsApi.programs_enrollments_find"
322
+ end
323
+ # verify the required parameter 'id' is set
324
+ if @api_client.config.client_side_validation && id.nil?
325
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_enrollments_find"
326
+ end
327
+ # resource path
328
+ local_var_path = '/programs/{programId}/enrollments/{id}'.sub('{' + 'programId' + '}', CGI.escape(program_id.to_s)).sub('{' + 'id' + '}', CGI.escape(id.to_s))
329
+
330
+ # query parameters
331
+ query_params = opts[:query_params] || {}
332
+
333
+ # header parameters
334
+ header_params = opts[:header_params] || {}
335
+ # HTTP header 'Accept' (if needed)
336
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
337
+
338
+ # form parameters
339
+ form_params = opts[:form_params] || {}
340
+
341
+ # http body (model)
342
+ post_body = opts[:debug_body]
343
+
344
+ # return_type
345
+ return_type = opts[:debug_return_type] || 'Enrollment'
346
+
347
+ # auth_names
348
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
349
+
350
+ new_options = opts.merge(
351
+ :operation => :"ProgramsApi.programs_enrollments_find",
352
+ :header_params => header_params,
353
+ :query_params => query_params,
354
+ :form_params => form_params,
355
+ :body => post_body,
356
+ :auth_names => auth_names,
357
+ :return_type => return_type
358
+ )
359
+
360
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
361
+ if @api_client.config.debugging
362
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_enrollments_find\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
363
+ end
364
+ return data, status_code, headers
365
+ end
366
+
367
+ # List a program's leads
368
+ # The people enrolled in the program and where each sits in the cadence, with per-status counts for the Leads view.
369
+ # @param program_id [String]
370
+ # @param [Hash] opts the optional parameters
371
+ # @option opts [String] :cursor
372
+ # @option opts [Boolean] :include_archived
373
+ # @option opts [Integer] :limit
374
+ # @option opts [String] :dir
375
+ # @option opts [Integer] :page
376
+ # @option opts [String] :q
377
+ # @option opts [String] :sort
378
+ # @option opts [Array<String>] :status
379
+ # @return [EnrollmentList]
380
+ def programs_enrollments_list(program_id, opts = {})
381
+ data, _status_code, _headers = programs_enrollments_list_with_http_info(program_id, opts)
382
+ data
383
+ end
384
+
385
+ # List a program&#39;s leads
386
+ # The people enrolled in the program and where each sits in the cadence, with per-status counts for the Leads view.
387
+ # @param program_id [String]
388
+ # @param [Hash] opts the optional parameters
389
+ # @option opts [String] :cursor
390
+ # @option opts [Boolean] :include_archived
391
+ # @option opts [Integer] :limit
392
+ # @option opts [String] :dir
393
+ # @option opts [Integer] :page
394
+ # @option opts [String] :q
395
+ # @option opts [String] :sort
396
+ # @option opts [Array<String>] :status
397
+ # @return [Array<(EnrollmentList, Integer, Hash)>] EnrollmentList data, response status code and response headers
398
+ def programs_enrollments_list_with_http_info(program_id, opts = {})
399
+ if @api_client.config.debugging
400
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_enrollments_list ...'
401
+ end
402
+ # verify the required parameter 'program_id' is set
403
+ if @api_client.config.client_side_validation && program_id.nil?
404
+ fail ArgumentError, "Missing the required parameter 'program_id' when calling ProgramsApi.programs_enrollments_list"
405
+ end
406
+ if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
407
+ fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ProgramsApi.programs_enrollments_list, must be smaller than or equal to 100.'
408
+ end
409
+
410
+ if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 1
411
+ fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ProgramsApi.programs_enrollments_list, must be greater than or equal to 1.'
412
+ end
413
+
414
+ allowable_values = ["asc", "desc"]
415
+ if @api_client.config.client_side_validation && opts[:'dir'] && !allowable_values.include?(opts[:'dir'])
416
+ fail ArgumentError, "invalid value for \"dir\", must be one of #{allowable_values}"
417
+ end
418
+ if @api_client.config.client_side_validation && !opts[:'page'].nil? && opts[:'page'] < 1
419
+ fail ArgumentError, 'invalid value for "opts[:"page"]" when calling ProgramsApi.programs_enrollments_list, must be greater than or equal to 1.'
420
+ end
421
+
422
+ allowable_values = ["created", "updated", "status"]
423
+ if @api_client.config.client_side_validation && opts[:'sort'] && !allowable_values.include?(opts[:'sort'])
424
+ fail ArgumentError, "invalid value for \"sort\", must be one of #{allowable_values}"
425
+ end
426
+ allowable_values = ["active", "replied", "bounced", "unsubscribed", "finished", "skipped", "stopped", "cancelled", "paused"]
427
+ if @api_client.config.client_side_validation && opts[:'status'] && !opts[:'status'].all? { |item| allowable_values.include?(item) }
428
+ fail ArgumentError, "invalid value for \"status\", must include one of #{allowable_values}"
429
+ end
430
+ # resource path
431
+ local_var_path = '/programs/{programId}/enrollments'.sub('{' + 'programId' + '}', CGI.escape(program_id.to_s))
432
+
433
+ # query parameters
434
+ query_params = opts[:query_params] || {}
435
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
436
+ query_params[:'includeArchived'] = opts[:'include_archived'] if !opts[:'include_archived'].nil?
437
+ query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
438
+ query_params[:'dir'] = opts[:'dir'] if !opts[:'dir'].nil?
439
+ query_params[:'page'] = opts[:'page'] if !opts[:'page'].nil?
440
+ query_params[:'q'] = opts[:'q'] if !opts[:'q'].nil?
441
+ query_params[:'sort'] = opts[:'sort'] if !opts[:'sort'].nil?
442
+ query_params[:'status'] = @api_client.build_collection_param(opts[:'status'], :csv) if !opts[:'status'].nil?
443
+
444
+ # header parameters
445
+ header_params = opts[:header_params] || {}
446
+ # HTTP header 'Accept' (if needed)
447
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
448
+
449
+ # form parameters
450
+ form_params = opts[:form_params] || {}
451
+
452
+ # http body (model)
453
+ post_body = opts[:debug_body]
454
+
455
+ # return_type
456
+ return_type = opts[:debug_return_type] || 'EnrollmentList'
457
+
458
+ # auth_names
459
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
460
+
461
+ new_options = opts.merge(
462
+ :operation => :"ProgramsApi.programs_enrollments_list",
463
+ :header_params => header_params,
464
+ :query_params => query_params,
465
+ :form_params => form_params,
466
+ :body => post_body,
467
+ :auth_names => auth_names,
468
+ :return_type => return_type
469
+ )
470
+
471
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
472
+ if @api_client.config.debugging
473
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_enrollments_list\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
474
+ end
475
+ return data, status_code, headers
476
+ end
477
+
478
+ # Get a program
479
+ # Read one program. Pass expand[]=steps to inline the cadence (each step with its arms) and expand[]=senders for the attached mailboxes.
480
+ # @param id [String]
481
+ # @param [Hash] opts the optional parameters
482
+ # @option opts [Array<String>] :expand
483
+ # @return [ProgramDetail]
484
+ def programs_find(id, opts = {})
485
+ data, _status_code, _headers = programs_find_with_http_info(id, opts)
486
+ data
487
+ end
488
+
489
+ # Get a program
490
+ # Read one program. Pass expand[]&#x3D;steps to inline the cadence (each step with its arms) and expand[]&#x3D;senders for the attached mailboxes.
491
+ # @param id [String]
492
+ # @param [Hash] opts the optional parameters
493
+ # @option opts [Array<String>] :expand
494
+ # @return [Array<(ProgramDetail, Integer, Hash)>] ProgramDetail data, response status code and response headers
495
+ def programs_find_with_http_info(id, opts = {})
496
+ if @api_client.config.debugging
497
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_find ...'
498
+ end
499
+ # verify the required parameter 'id' is set
500
+ if @api_client.config.client_side_validation && id.nil?
501
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_find"
502
+ end
503
+ allowable_values = ["steps", "senders"]
504
+ if @api_client.config.client_side_validation && opts[:'expand'] && !opts[:'expand'].all? { |item| allowable_values.include?(item) }
505
+ fail ArgumentError, "invalid value for \"expand\", must include one of #{allowable_values}"
506
+ end
507
+ # resource path
508
+ local_var_path = '/programs/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
509
+
510
+ # query parameters
511
+ query_params = opts[:query_params] || {}
512
+ query_params[:'expand'] = @api_client.build_collection_param(opts[:'expand'], :csv) if !opts[:'expand'].nil?
513
+
514
+ # header parameters
515
+ header_params = opts[:header_params] || {}
516
+ # HTTP header 'Accept' (if needed)
517
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
518
+
519
+ # form parameters
520
+ form_params = opts[:form_params] || {}
521
+
522
+ # http body (model)
523
+ post_body = opts[:debug_body]
524
+
525
+ # return_type
526
+ return_type = opts[:debug_return_type] || 'ProgramDetail'
527
+
528
+ # auth_names
529
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
530
+
531
+ new_options = opts.merge(
532
+ :operation => :"ProgramsApi.programs_find",
533
+ :header_params => header_params,
534
+ :query_params => query_params,
535
+ :form_params => form_params,
536
+ :body => post_body,
537
+ :auth_names => auth_names,
538
+ :return_type => return_type
539
+ )
540
+
541
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
542
+ if @api_client.config.debugging
543
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_find\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
544
+ end
545
+ return data, status_code, headers
546
+ end
547
+
548
+ # Launch a program
549
+ # The go-live gate — the only path a draft becomes active. Requires at least one live sender, one step, and one enrolled lead. Returns any non-blocking compliance warnings.
550
+ # @param id [String]
551
+ # @param [Hash] opts the optional parameters
552
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
553
+ # @option opts [LaunchProgramParams] :launch_program_params
554
+ # @return [LaunchProgramResult]
555
+ def programs_launch(id, opts = {})
556
+ data, _status_code, _headers = programs_launch_with_http_info(id, opts)
557
+ data
558
+ end
559
+
560
+ # Launch a program
561
+ # The go-live gate — the only path a draft becomes active. Requires at least one live sender, one step, and one enrolled lead. Returns any non-blocking compliance warnings.
562
+ # @param id [String]
563
+ # @param [Hash] opts the optional parameters
564
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
565
+ # @option opts [LaunchProgramParams] :launch_program_params
566
+ # @return [Array<(LaunchProgramResult, Integer, Hash)>] LaunchProgramResult data, response status code and response headers
567
+ def programs_launch_with_http_info(id, opts = {})
568
+ if @api_client.config.debugging
569
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_launch ...'
570
+ end
571
+ # verify the required parameter 'id' is set
572
+ if @api_client.config.client_side_validation && id.nil?
573
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_launch"
574
+ end
575
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
576
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_launch, the character length must be smaller than or equal to 255.'
577
+ end
578
+
579
+ # resource path
580
+ local_var_path = '/programs/{id}/launch'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
581
+
582
+ # query parameters
583
+ query_params = opts[:query_params] || {}
584
+
585
+ # header parameters
586
+ header_params = opts[:header_params] || {}
587
+ # HTTP header 'Accept' (if needed)
588
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
589
+ # HTTP header 'Content-Type'
590
+ content_type = @api_client.select_header_content_type(['application/json'])
591
+ if !content_type.nil?
592
+ header_params['Content-Type'] = content_type
593
+ end
594
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
595
+
596
+ # form parameters
597
+ form_params = opts[:form_params] || {}
598
+
599
+ # http body (model)
600
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'launch_program_params'])
601
+
602
+ # return_type
603
+ return_type = opts[:debug_return_type] || 'LaunchProgramResult'
604
+
605
+ # auth_names
606
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
607
+
608
+ new_options = opts.merge(
609
+ :operation => :"ProgramsApi.programs_launch",
610
+ :header_params => header_params,
611
+ :query_params => query_params,
612
+ :form_params => form_params,
613
+ :body => post_body,
614
+ :auth_names => auth_names,
615
+ :return_type => return_type
616
+ )
617
+
618
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
619
+ if @api_client.config.debugging
620
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_launch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
621
+ end
622
+ return data, status_code, headers
623
+ end
624
+
625
+ # List programs
626
+ # List the org's campaigns (cold-email sequences), newest first, with per-campaign stats (leads, completion, next send).
627
+ # @param [Hash] opts the optional parameters
628
+ # @option opts [String] :cursor
629
+ # @option opts [Boolean] :include_archived
630
+ # @option opts [Integer] :limit
631
+ # @option opts [String] :dir
632
+ # @option opts [Integer] :page
633
+ # @option opts [Boolean] :archived
634
+ # @option opts [String] :q
635
+ # @option opts [String] :sender_id
636
+ # @option opts [String] :sort
637
+ # @option opts [Array<String>] :status
638
+ # @return [ProgramList]
639
+ def programs_list(opts = {})
640
+ data, _status_code, _headers = programs_list_with_http_info(opts)
641
+ data
642
+ end
643
+
644
+ # List programs
645
+ # List the org&#39;s campaigns (cold-email sequences), newest first, with per-campaign stats (leads, completion, next send).
646
+ # @param [Hash] opts the optional parameters
647
+ # @option opts [String] :cursor
648
+ # @option opts [Boolean] :include_archived
649
+ # @option opts [Integer] :limit
650
+ # @option opts [String] :dir
651
+ # @option opts [Integer] :page
652
+ # @option opts [Boolean] :archived
653
+ # @option opts [String] :q
654
+ # @option opts [String] :sender_id
655
+ # @option opts [String] :sort
656
+ # @option opts [Array<String>] :status
657
+ # @return [Array<(ProgramList, Integer, Hash)>] ProgramList data, response status code and response headers
658
+ def programs_list_with_http_info(opts = {})
659
+ if @api_client.config.debugging
660
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_list ...'
661
+ end
662
+ if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
663
+ fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ProgramsApi.programs_list, must be smaller than or equal to 100.'
664
+ end
665
+
666
+ if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 1
667
+ fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ProgramsApi.programs_list, must be greater than or equal to 1.'
668
+ end
669
+
670
+ allowable_values = ["asc", "desc"]
671
+ if @api_client.config.client_side_validation && opts[:'dir'] && !allowable_values.include?(opts[:'dir'])
672
+ fail ArgumentError, "invalid value for \"dir\", must be one of #{allowable_values}"
673
+ end
674
+ if @api_client.config.client_side_validation && !opts[:'page'].nil? && opts[:'page'] < 1
675
+ fail ArgumentError, 'invalid value for "opts[:"page"]" when calling ProgramsApi.programs_list, must be greater than or equal to 1.'
676
+ end
677
+
678
+ allowable_values = ["created", "name", "status"]
679
+ if @api_client.config.client_side_validation && opts[:'sort'] && !allowable_values.include?(opts[:'sort'])
680
+ fail ArgumentError, "invalid value for \"sort\", must be one of #{allowable_values}"
681
+ end
682
+ allowable_values = ["draft", "active", "paused", "done"]
683
+ if @api_client.config.client_side_validation && opts[:'status'] && !opts[:'status'].all? { |item| allowable_values.include?(item) }
684
+ fail ArgumentError, "invalid value for \"status\", must include one of #{allowable_values}"
685
+ end
686
+ # resource path
687
+ local_var_path = '/programs'
688
+
689
+ # query parameters
690
+ query_params = opts[:query_params] || {}
691
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
692
+ query_params[:'includeArchived'] = opts[:'include_archived'] if !opts[:'include_archived'].nil?
693
+ query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
694
+ query_params[:'dir'] = opts[:'dir'] if !opts[:'dir'].nil?
695
+ query_params[:'page'] = opts[:'page'] if !opts[:'page'].nil?
696
+ query_params[:'archived'] = opts[:'archived'] if !opts[:'archived'].nil?
697
+ query_params[:'q'] = opts[:'q'] if !opts[:'q'].nil?
698
+ query_params[:'senderId'] = opts[:'sender_id'] if !opts[:'sender_id'].nil?
699
+ query_params[:'sort'] = opts[:'sort'] if !opts[:'sort'].nil?
700
+ query_params[:'status'] = @api_client.build_collection_param(opts[:'status'], :csv) if !opts[:'status'].nil?
701
+
702
+ # header parameters
703
+ header_params = opts[:header_params] || {}
704
+ # HTTP header 'Accept' (if needed)
705
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
706
+
707
+ # form parameters
708
+ form_params = opts[:form_params] || {}
709
+
710
+ # http body (model)
711
+ post_body = opts[:debug_body]
712
+
713
+ # return_type
714
+ return_type = opts[:debug_return_type] || 'ProgramList'
715
+
716
+ # auth_names
717
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
718
+
719
+ new_options = opts.merge(
720
+ :operation => :"ProgramsApi.programs_list",
721
+ :header_params => header_params,
722
+ :query_params => query_params,
723
+ :form_params => form_params,
724
+ :body => post_body,
725
+ :auth_names => auth_names,
726
+ :return_type => return_type
727
+ )
728
+
729
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
730
+ if @api_client.config.debugging
731
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_list\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
732
+ end
733
+ return data, status_code, headers
734
+ end
735
+
736
+ # Pause a program's sending
737
+ # Stop sending; messages already queued still complete. Resume with programs.resume.
738
+ # @param id [String]
739
+ # @param [Hash] opts the optional parameters
740
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
741
+ # @return [Program]
742
+ def programs_pause(id, opts = {})
743
+ data, _status_code, _headers = programs_pause_with_http_info(id, opts)
744
+ data
745
+ end
746
+
747
+ # Pause a program&#39;s sending
748
+ # Stop sending; messages already queued still complete. Resume with programs.resume.
749
+ # @param id [String]
750
+ # @param [Hash] opts the optional parameters
751
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
752
+ # @return [Array<(Program, Integer, Hash)>] Program data, response status code and response headers
753
+ def programs_pause_with_http_info(id, opts = {})
754
+ if @api_client.config.debugging
755
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_pause ...'
756
+ end
757
+ # verify the required parameter 'id' is set
758
+ if @api_client.config.client_side_validation && id.nil?
759
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_pause"
760
+ end
761
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
762
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_pause, the character length must be smaller than or equal to 255.'
763
+ end
764
+
765
+ # resource path
766
+ local_var_path = '/programs/{id}/pause'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
767
+
768
+ # query parameters
769
+ query_params = opts[:query_params] || {}
770
+
771
+ # header parameters
772
+ header_params = opts[:header_params] || {}
773
+ # HTTP header 'Accept' (if needed)
774
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
775
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
776
+
777
+ # form parameters
778
+ form_params = opts[:form_params] || {}
779
+
780
+ # http body (model)
781
+ post_body = opts[:debug_body]
782
+
783
+ # return_type
784
+ return_type = opts[:debug_return_type] || 'Program'
785
+
786
+ # auth_names
787
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
788
+
789
+ new_options = opts.merge(
790
+ :operation => :"ProgramsApi.programs_pause",
791
+ :header_params => header_params,
792
+ :query_params => query_params,
793
+ :form_params => form_params,
794
+ :body => post_body,
795
+ :auth_names => auth_names,
796
+ :return_type => return_type
797
+ )
798
+
799
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
800
+ if @api_client.config.debugging
801
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_pause\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
802
+ end
803
+ return data, status_code, headers
804
+ end
805
+
806
+ # Restore an archived program
807
+ # Un-archive the campaign and revive the runs the archive cancelled, resuming what's left of the cadence.
808
+ # @param id [String]
809
+ # @param [Hash] opts the optional parameters
810
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
811
+ # @return [Program]
812
+ def programs_restore(id, opts = {})
813
+ data, _status_code, _headers = programs_restore_with_http_info(id, opts)
814
+ data
815
+ end
816
+
817
+ # Restore an archived program
818
+ # Un-archive the campaign and revive the runs the archive cancelled, resuming what&#39;s left of the cadence.
819
+ # @param id [String]
820
+ # @param [Hash] opts the optional parameters
821
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
822
+ # @return [Array<(Program, Integer, Hash)>] Program data, response status code and response headers
823
+ def programs_restore_with_http_info(id, opts = {})
824
+ if @api_client.config.debugging
825
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_restore ...'
826
+ end
827
+ # verify the required parameter 'id' is set
828
+ if @api_client.config.client_side_validation && id.nil?
829
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_restore"
830
+ end
831
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
832
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_restore, the character length must be smaller than or equal to 255.'
833
+ end
834
+
835
+ # resource path
836
+ local_var_path = '/programs/{id}/restore'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
837
+
838
+ # query parameters
839
+ query_params = opts[:query_params] || {}
840
+
841
+ # header parameters
842
+ header_params = opts[:header_params] || {}
843
+ # HTTP header 'Accept' (if needed)
844
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
845
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
846
+
847
+ # form parameters
848
+ form_params = opts[:form_params] || {}
849
+
850
+ # http body (model)
851
+ post_body = opts[:debug_body]
852
+
853
+ # return_type
854
+ return_type = opts[:debug_return_type] || 'Program'
855
+
856
+ # auth_names
857
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
858
+
859
+ new_options = opts.merge(
860
+ :operation => :"ProgramsApi.programs_restore",
861
+ :header_params => header_params,
862
+ :query_params => query_params,
863
+ :form_params => form_params,
864
+ :body => post_body,
865
+ :auth_names => auth_names,
866
+ :return_type => return_type
867
+ )
868
+
869
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
870
+ if @api_client.config.debugging
871
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_restore\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
872
+ end
873
+ return data, status_code, headers
874
+ end
875
+
876
+ # Resume a paused program
877
+ # Resume sending from where it stopped — each lead keeps its place in the cadence.
878
+ # @param id [String]
879
+ # @param [Hash] opts the optional parameters
880
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
881
+ # @return [Program]
882
+ def programs_resume(id, opts = {})
883
+ data, _status_code, _headers = programs_resume_with_http_info(id, opts)
884
+ data
885
+ end
886
+
887
+ # Resume a paused program
888
+ # Resume sending from where it stopped — each lead keeps its place in the cadence.
889
+ # @param id [String]
890
+ # @param [Hash] opts the optional parameters
891
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
892
+ # @return [Array<(Program, Integer, Hash)>] Program data, response status code and response headers
893
+ def programs_resume_with_http_info(id, opts = {})
894
+ if @api_client.config.debugging
895
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_resume ...'
896
+ end
897
+ # verify the required parameter 'id' is set
898
+ if @api_client.config.client_side_validation && id.nil?
899
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_resume"
900
+ end
901
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
902
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_resume, the character length must be smaller than or equal to 255.'
903
+ end
904
+
905
+ # resource path
906
+ local_var_path = '/programs/{id}/resume'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
907
+
908
+ # query parameters
909
+ query_params = opts[:query_params] || {}
910
+
911
+ # header parameters
912
+ header_params = opts[:header_params] || {}
913
+ # HTTP header 'Accept' (if needed)
914
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
915
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
916
+
917
+ # form parameters
918
+ form_params = opts[:form_params] || {}
919
+
920
+ # http body (model)
921
+ post_body = opts[:debug_body]
922
+
923
+ # return_type
924
+ return_type = opts[:debug_return_type] || 'Program'
925
+
926
+ # auth_names
927
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
928
+
929
+ new_options = opts.merge(
930
+ :operation => :"ProgramsApi.programs_resume",
931
+ :header_params => header_params,
932
+ :query_params => query_params,
933
+ :form_params => form_params,
934
+ :body => post_body,
935
+ :auth_names => auth_names,
936
+ :return_type => return_type
937
+ )
938
+
939
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
940
+ if @api_client.config.debugging
941
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_resume\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
942
+ end
943
+ return data, status_code, headers
944
+ end
945
+
946
+ # Attach a sender to a program
947
+ # Assign a mailbox the program can send from (a program needs at least one to launch).
948
+ # @param id [String]
949
+ # @param add_program_sender_params [AddProgramSenderParams]
950
+ # @param [Hash] opts the optional parameters
951
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
952
+ # @return [ProgramSenderRef]
953
+ def programs_senders_add(id, add_program_sender_params, opts = {})
954
+ data, _status_code, _headers = programs_senders_add_with_http_info(id, add_program_sender_params, opts)
955
+ data
956
+ end
957
+
958
+ # Attach a sender to a program
959
+ # Assign a mailbox the program can send from (a program needs at least one to launch).
960
+ # @param id [String]
961
+ # @param add_program_sender_params [AddProgramSenderParams]
962
+ # @param [Hash] opts the optional parameters
963
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
964
+ # @return [Array<(ProgramSenderRef, Integer, Hash)>] ProgramSenderRef data, response status code and response headers
965
+ def programs_senders_add_with_http_info(id, add_program_sender_params, opts = {})
966
+ if @api_client.config.debugging
967
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_senders_add ...'
968
+ end
969
+ # verify the required parameter 'id' is set
970
+ if @api_client.config.client_side_validation && id.nil?
971
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_senders_add"
972
+ end
973
+ # verify the required parameter 'add_program_sender_params' is set
974
+ if @api_client.config.client_side_validation && add_program_sender_params.nil?
975
+ fail ArgumentError, "Missing the required parameter 'add_program_sender_params' when calling ProgramsApi.programs_senders_add"
976
+ end
977
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
978
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_senders_add, the character length must be smaller than or equal to 255.'
979
+ end
980
+
981
+ # resource path
982
+ local_var_path = '/programs/{id}/senders'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
983
+
984
+ # query parameters
985
+ query_params = opts[:query_params] || {}
986
+
987
+ # header parameters
988
+ header_params = opts[:header_params] || {}
989
+ # HTTP header 'Accept' (if needed)
990
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
991
+ # HTTP header 'Content-Type'
992
+ content_type = @api_client.select_header_content_type(['application/json'])
993
+ if !content_type.nil?
994
+ header_params['Content-Type'] = content_type
995
+ end
996
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
997
+
998
+ # form parameters
999
+ form_params = opts[:form_params] || {}
1000
+
1001
+ # http body (model)
1002
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(add_program_sender_params)
1003
+
1004
+ # return_type
1005
+ return_type = opts[:debug_return_type] || 'ProgramSenderRef'
1006
+
1007
+ # auth_names
1008
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1009
+
1010
+ new_options = opts.merge(
1011
+ :operation => :"ProgramsApi.programs_senders_add",
1012
+ :header_params => header_params,
1013
+ :query_params => query_params,
1014
+ :form_params => form_params,
1015
+ :body => post_body,
1016
+ :auth_names => auth_names,
1017
+ :return_type => return_type
1018
+ )
1019
+
1020
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1021
+ if @api_client.config.debugging
1022
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_senders_add\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1023
+ end
1024
+ return data, status_code, headers
1025
+ end
1026
+
1027
+ # List a program's senders
1028
+ # The mailboxes assigned to this program, each with its pending queue in the program.
1029
+ # @param id [String]
1030
+ # @param [Hash] opts the optional parameters
1031
+ # @return [ProgramsSendersList]
1032
+ def programs_senders_list(id, opts = {})
1033
+ data, _status_code, _headers = programs_senders_list_with_http_info(id, opts)
1034
+ data
1035
+ end
1036
+
1037
+ # List a program&#39;s senders
1038
+ # The mailboxes assigned to this program, each with its pending queue in the program.
1039
+ # @param id [String]
1040
+ # @param [Hash] opts the optional parameters
1041
+ # @return [Array<(ProgramsSendersList, Integer, Hash)>] ProgramsSendersList data, response status code and response headers
1042
+ def programs_senders_list_with_http_info(id, opts = {})
1043
+ if @api_client.config.debugging
1044
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_senders_list ...'
1045
+ end
1046
+ # verify the required parameter 'id' is set
1047
+ if @api_client.config.client_side_validation && id.nil?
1048
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_senders_list"
1049
+ end
1050
+ # resource path
1051
+ local_var_path = '/programs/{id}/senders'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
1052
+
1053
+ # query parameters
1054
+ query_params = opts[:query_params] || {}
1055
+
1056
+ # header parameters
1057
+ header_params = opts[:header_params] || {}
1058
+ # HTTP header 'Accept' (if needed)
1059
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1060
+
1061
+ # form parameters
1062
+ form_params = opts[:form_params] || {}
1063
+
1064
+ # http body (model)
1065
+ post_body = opts[:debug_body]
1066
+
1067
+ # return_type
1068
+ return_type = opts[:debug_return_type] || 'ProgramsSendersList'
1069
+
1070
+ # auth_names
1071
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1072
+
1073
+ new_options = opts.merge(
1074
+ :operation => :"ProgramsApi.programs_senders_list",
1075
+ :header_params => header_params,
1076
+ :query_params => query_params,
1077
+ :form_params => form_params,
1078
+ :body => post_body,
1079
+ :auth_names => auth_names,
1080
+ :return_type => return_type
1081
+ )
1082
+
1083
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
1084
+ if @api_client.config.debugging
1085
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_senders_list\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1086
+ end
1087
+ return data, status_code, headers
1088
+ end
1089
+
1090
+ # Detach a sender from a program
1091
+ # Unassign a mailbox. A running campaign refuses to drop its last live sender — pause it first.
1092
+ # @param id [String]
1093
+ # @param rel_id [String]
1094
+ # @param [Hash] opts the optional parameters
1095
+ # @return [DetachResult]
1096
+ def programs_senders_remove(id, rel_id, opts = {})
1097
+ data, _status_code, _headers = programs_senders_remove_with_http_info(id, rel_id, opts)
1098
+ data
1099
+ end
1100
+
1101
+ # Detach a sender from a program
1102
+ # Unassign a mailbox. A running campaign refuses to drop its last live sender — pause it first.
1103
+ # @param id [String]
1104
+ # @param rel_id [String]
1105
+ # @param [Hash] opts the optional parameters
1106
+ # @return [Array<(DetachResult, Integer, Hash)>] DetachResult data, response status code and response headers
1107
+ def programs_senders_remove_with_http_info(id, rel_id, opts = {})
1108
+ if @api_client.config.debugging
1109
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_senders_remove ...'
1110
+ end
1111
+ # verify the required parameter 'id' is set
1112
+ if @api_client.config.client_side_validation && id.nil?
1113
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_senders_remove"
1114
+ end
1115
+ # verify the required parameter 'rel_id' is set
1116
+ if @api_client.config.client_side_validation && rel_id.nil?
1117
+ fail ArgumentError, "Missing the required parameter 'rel_id' when calling ProgramsApi.programs_senders_remove"
1118
+ end
1119
+ # resource path
1120
+ local_var_path = '/programs/{id}/senders/{relId}'.sub('{' + 'id' + '}', CGI.escape(id.to_s)).sub('{' + 'relId' + '}', CGI.escape(rel_id.to_s))
1121
+
1122
+ # query parameters
1123
+ query_params = opts[:query_params] || {}
1124
+
1125
+ # header parameters
1126
+ header_params = opts[:header_params] || {}
1127
+ # HTTP header 'Accept' (if needed)
1128
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1129
+
1130
+ # form parameters
1131
+ form_params = opts[:form_params] || {}
1132
+
1133
+ # http body (model)
1134
+ post_body = opts[:debug_body]
1135
+
1136
+ # return_type
1137
+ return_type = opts[:debug_return_type] || 'DetachResult'
1138
+
1139
+ # auth_names
1140
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1141
+
1142
+ new_options = opts.merge(
1143
+ :operation => :"ProgramsApi.programs_senders_remove",
1144
+ :header_params => header_params,
1145
+ :query_params => query_params,
1146
+ :form_params => form_params,
1147
+ :body => post_body,
1148
+ :auth_names => auth_names,
1149
+ :return_type => return_type
1150
+ )
1151
+
1152
+ data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
1153
+ if @api_client.config.debugging
1154
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_senders_remove\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1155
+ end
1156
+ return data, status_code, headers
1157
+ end
1158
+
1159
+ # Share the campaign report
1160
+ # Mint a public, read-only link to this campaign's report (send it to a client — no account needed). The link is signed and expires after 30 days; archiving the campaign kills it immediately. Mint again for a fresh link.
1161
+ # @param id [String]
1162
+ # @param [Hash] opts the optional parameters
1163
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
1164
+ # @return [CampaignReportShare]
1165
+ def programs_share(id, opts = {})
1166
+ data, _status_code, _headers = programs_share_with_http_info(id, opts)
1167
+ data
1168
+ end
1169
+
1170
+ # Share the campaign report
1171
+ # Mint a public, read-only link to this campaign&#39;s report (send it to a client — no account needed). The link is signed and expires after 30 days; archiving the campaign kills it immediately. Mint again for a fresh link.
1172
+ # @param id [String]
1173
+ # @param [Hash] opts the optional parameters
1174
+ # @option opts [String] :idempotency_key Opt-in idempotency for a safely retried write: reuse the same key to replay the original result for 24h instead of re-executing. Recommended on every POST.
1175
+ # @return [Array<(CampaignReportShare, Integer, Hash)>] CampaignReportShare data, response status code and response headers
1176
+ def programs_share_with_http_info(id, opts = {})
1177
+ if @api_client.config.debugging
1178
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_share ...'
1179
+ end
1180
+ # verify the required parameter 'id' is set
1181
+ if @api_client.config.client_side_validation && id.nil?
1182
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_share"
1183
+ end
1184
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
1185
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ProgramsApi.programs_share, the character length must be smaller than or equal to 255.'
1186
+ end
1187
+
1188
+ # resource path
1189
+ local_var_path = '/programs/{id}/share'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
1190
+
1191
+ # query parameters
1192
+ query_params = opts[:query_params] || {}
1193
+
1194
+ # header parameters
1195
+ header_params = opts[:header_params] || {}
1196
+ # HTTP header 'Accept' (if needed)
1197
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1198
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
1199
+
1200
+ # form parameters
1201
+ form_params = opts[:form_params] || {}
1202
+
1203
+ # http body (model)
1204
+ post_body = opts[:debug_body]
1205
+
1206
+ # return_type
1207
+ return_type = opts[:debug_return_type] || 'CampaignReportShare'
1208
+
1209
+ # auth_names
1210
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1211
+
1212
+ new_options = opts.merge(
1213
+ :operation => :"ProgramsApi.programs_share",
1214
+ :header_params => header_params,
1215
+ :query_params => query_params,
1216
+ :form_params => form_params,
1217
+ :body => post_body,
1218
+ :auth_names => auth_names,
1219
+ :return_type => return_type
1220
+ )
1221
+
1222
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1223
+ if @api_client.config.debugging
1224
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_share\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1225
+ end
1226
+ return data, status_code, headers
1227
+ end
1228
+
1229
+ # Update a program
1230
+ # Patch program settings and/or edit the cadence in one call. steps[] is a sparse upsert: an item WITH id edits that step, WITHOUT id creates one, archived:true removes it — same for each step's variants[]. Returns the program with its steps expanded.
1231
+ # @param id [String]
1232
+ # @param [Hash] opts the optional parameters
1233
+ # @option opts [ProgramUpdateParams] :program_update_params
1234
+ # @return [ProgramDetail]
1235
+ def programs_update(id, opts = {})
1236
+ data, _status_code, _headers = programs_update_with_http_info(id, opts)
1237
+ data
1238
+ end
1239
+
1240
+ # Update a program
1241
+ # Patch program settings and/or edit the cadence in one call. steps[] is a sparse upsert: an item WITH id edits that step, WITHOUT id creates one, archived:true removes it — same for each step&#39;s variants[]. Returns the program with its steps expanded.
1242
+ # @param id [String]
1243
+ # @param [Hash] opts the optional parameters
1244
+ # @option opts [ProgramUpdateParams] :program_update_params
1245
+ # @return [Array<(ProgramDetail, Integer, Hash)>] ProgramDetail data, response status code and response headers
1246
+ def programs_update_with_http_info(id, opts = {})
1247
+ if @api_client.config.debugging
1248
+ @api_client.config.logger.debug 'Calling API: ProgramsApi.programs_update ...'
1249
+ end
1250
+ # verify the required parameter 'id' is set
1251
+ if @api_client.config.client_side_validation && id.nil?
1252
+ fail ArgumentError, "Missing the required parameter 'id' when calling ProgramsApi.programs_update"
1253
+ end
1254
+ # resource path
1255
+ local_var_path = '/programs/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
1256
+
1257
+ # query parameters
1258
+ query_params = opts[:query_params] || {}
1259
+
1260
+ # header parameters
1261
+ header_params = opts[:header_params] || {}
1262
+ # HTTP header 'Accept' (if needed)
1263
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1264
+ # HTTP header 'Content-Type'
1265
+ content_type = @api_client.select_header_content_type(['application/json'])
1266
+ if !content_type.nil?
1267
+ header_params['Content-Type'] = content_type
1268
+ end
1269
+
1270
+ # form parameters
1271
+ form_params = opts[:form_params] || {}
1272
+
1273
+ # http body (model)
1274
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'program_update_params'])
1275
+
1276
+ # return_type
1277
+ return_type = opts[:debug_return_type] || 'ProgramDetail'
1278
+
1279
+ # auth_names
1280
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1281
+
1282
+ new_options = opts.merge(
1283
+ :operation => :"ProgramsApi.programs_update",
1284
+ :header_params => header_params,
1285
+ :query_params => query_params,
1286
+ :form_params => form_params,
1287
+ :body => post_body,
1288
+ :auth_names => auth_names,
1289
+ :return_type => return_type
1290
+ )
1291
+
1292
+ data, status_code, headers = @api_client.call_api(:PATCH, local_var_path, new_options)
1293
+ if @api_client.config.debugging
1294
+ @api_client.config.logger.debug "API called: ProgramsApi#programs_update\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1295
+ end
1296
+ return data, status_code, headers
1297
+ end
1298
+ end
1299
+ end