rcs 2.0.15 → 2.0.16.pre.rc.2

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 (109) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +4 -3
  3. data/.rubocop.yml +14 -1
  4. data/lib/pinnacle/brands/client.rb +3 -3
  5. data/lib/pinnacle/campaigns/dlc/client.rb +2 -2
  6. data/lib/pinnacle/campaigns/rcs/client.rb +2 -2
  7. data/lib/pinnacle/campaigns/toll_free/client.rb +2 -2
  8. data/lib/pinnacle/client.rb +6 -1
  9. data/lib/pinnacle/conversations/client.rb +1 -1
  10. data/lib/pinnacle/forms/client.rb +217 -0
  11. data/lib/pinnacle/forms/submissions/client.rb +56 -0
  12. data/lib/pinnacle/forms/submissions/types/list_form_submissions_params.rb +15 -0
  13. data/lib/pinnacle/forms/types/forms_send_response.rb +14 -0
  14. data/lib/pinnacle/forms/types/list_forms_params.rb +12 -0
  15. data/lib/pinnacle/forms/types/update_form_params.rb +18 -0
  16. data/lib/pinnacle/internal/http/base_request.rb +14 -0
  17. data/lib/pinnacle/internal/http/raw_client.rb +21 -3
  18. data/lib/pinnacle/internal/json/request.rb +6 -4
  19. data/lib/pinnacle/internal/multipart/multipart_request.rb +6 -4
  20. data/lib/pinnacle/internal/types/union.rb +1 -1
  21. data/lib/pinnacle/internal/types/utils.rb +2 -2
  22. data/lib/pinnacle/messages/client.rb +1 -1
  23. data/lib/pinnacle/messages/schedule/client.rb +1 -1
  24. data/lib/pinnacle/rcs/client.rb +1 -1
  25. data/lib/pinnacle/rcs/test/client.rb +3 -3
  26. data/lib/pinnacle/status/get/client.rb +5 -5
  27. data/lib/pinnacle/tools/url/client.rb +2 -2
  28. data/lib/pinnacle/types/address_field.rb +14 -0
  29. data/lib/pinnacle/types/attach_webhook_response_webhook.rb +1 -0
  30. data/lib/pinnacle/types/checkbox_field.rb +13 -0
  31. data/lib/pinnacle/types/color_field.rb +8 -0
  32. data/lib/pinnacle/types/create_form_request.rb +23 -0
  33. data/lib/pinnacle/types/date_field.rb +12 -0
  34. data/lib/pinnacle/types/datetime_field.rb +12 -0
  35. data/lib/pinnacle/types/email_field.rb +10 -0
  36. data/lib/pinnacle/types/extended_brand_with_vetting.rb +2 -2
  37. data/lib/pinnacle/types/field_base.rb +14 -0
  38. data/lib/pinnacle/types/form.rb +22 -0
  39. data/lib/pinnacle/types/form_background.rb +17 -0
  40. data/lib/pinnacle/types/form_background_gradient.rb +12 -0
  41. data/lib/pinnacle/types/form_background_image.rb +13 -0
  42. data/lib/pinnacle/types/form_background_pattern.rb +10 -0
  43. data/lib/pinnacle/types/form_background_pattern_preset.rb +16 -0
  44. data/lib/pinnacle/types/form_background_solid.rb +34 -0
  45. data/lib/pinnacle/types/form_color_palette.rb +12 -0
  46. data/lib/pinnacle/types/form_definition.rb +15 -0
  47. data/lib/pinnacle/types/form_field.rb +29 -0
  48. data/lib/pinnacle/types/form_field_option.rb +11 -0
  49. data/lib/pinnacle/types/form_gradient.rb +12 -0
  50. data/lib/pinnacle/types/form_gradient_angle.rb +12 -0
  51. data/lib/pinnacle/types/form_id_reference.rb +23 -0
  52. data/lib/pinnacle/types/form_submission.rb +19 -0
  53. data/lib/pinnacle/types/form_submission_answer.rb +20 -0
  54. data/lib/pinnacle/types/form_submission_event.rb +15 -0
  55. data/lib/pinnacle/types/form_submission_event_conversation.rb +20 -0
  56. data/lib/pinnacle/types/form_submission_event_form.rb +12 -0
  57. data/lib/pinnacle/types/form_submission_event_submission.rb +17 -0
  58. data/lib/pinnacle/types/form_submitted_field.rb +13 -0
  59. data/lib/pinnacle/types/form_theme_override.rb +25 -0
  60. data/lib/pinnacle/types/form_theme_override_colors.rb +12 -0
  61. data/lib/pinnacle/types/form_theme_override_content_alignment.rb +13 -0
  62. data/lib/pinnacle/types/form_theme_override_corner_radius.rb +13 -0
  63. data/lib/pinnacle/types/form_theme_override_font_family.rb +15 -0
  64. data/lib/pinnacle/types/form_theme_override_theme_mode.rb +13 -0
  65. data/lib/pinnacle/types/list_form_submissions_response.rb +12 -0
  66. data/lib/pinnacle/types/list_forms_response.rb +12 -0
  67. data/lib/pinnacle/types/number_field.rb +13 -0
  68. data/lib/pinnacle/types/phone_field.rb +11 -0
  69. data/lib/pinnacle/types/radio_field.rb +10 -0
  70. data/lib/pinnacle/types/range_field.rb +12 -0
  71. data/lib/pinnacle/types/rating_field.rb +11 -0
  72. data/lib/pinnacle/types/rcs_cards_content.rb +1 -1
  73. data/lib/pinnacle/types/rcs_cards_content_cards_item.rb +1 -1
  74. data/lib/pinnacle/types/rcs_media_content.rb +1 -1
  75. data/lib/pinnacle/types/rcs_validate_content_media.rb +1 -1
  76. data/lib/pinnacle/types/rich_card.rb +1 -1
  77. data/lib/pinnacle/types/rich_cards.rb +1 -1
  78. data/lib/pinnacle/types/rich_media_message.rb +1 -1
  79. data/lib/pinnacle/types/rich_text.rb +1 -1
  80. data/lib/pinnacle/types/scheduled_form_send_response_form.rb +10 -0
  81. data/lib/pinnacle/types/scheduled_form_send_response_submission.rb +10 -0
  82. data/lib/pinnacle/types/scheduled_form_send_result.rb +13 -0
  83. data/lib/pinnacle/types/select_field.rb +11 -0
  84. data/lib/pinnacle/types/send_form_options.rb +11 -0
  85. data/lib/pinnacle/types/send_form_options_webview_mode.rb +13 -0
  86. data/lib/pinnacle/types/send_form_params.rb +20 -0
  87. data/lib/pinnacle/types/send_form_result.rb +17 -0
  88. data/lib/pinnacle/types/send_form_via_rcs_params.rb +14 -0
  89. data/lib/pinnacle/types/send_form_via_rcs_request_fallback.rb +10 -0
  90. data/lib/pinnacle/types/send_form_via_rcs_request_form.rb +13 -0
  91. data/lib/pinnacle/types/send_form_via_sms_params.rb +13 -0
  92. data/lib/pinnacle/types/send_form_via_sms_request_form.rb +12 -0
  93. data/lib/pinnacle/types/send_rich_cards_options.rb +5 -0
  94. data/lib/pinnacle/types/send_rich_message_options_4.rb +13 -0
  95. data/lib/pinnacle/types/text_field.rb +13 -0
  96. data/lib/pinnacle/types/textarea_field.rb +13 -0
  97. data/lib/pinnacle/types/time_field.rb +12 -0
  98. data/lib/pinnacle/types/url_field.rb +10 -0
  99. data/lib/pinnacle/types/vcard_content.rb +1 -1
  100. data/lib/pinnacle/types/webhook_event_enum.rb +1 -0
  101. data/lib/pinnacle/types/webhook_summary.rb +1 -0
  102. data/lib/pinnacle/types/webhooks.rb +1 -0
  103. data/lib/pinnacle/version.rb +1 -1
  104. data/lib/pinnacle/webhooks/client.rb +7 -1
  105. data/lib/pinnacle/webhooks/types/attach_webhook_params.rb +1 -0
  106. data/lib/pinnacle/wrapper/messages/client.rb +5 -2
  107. data/lib/pinnacle.rb +67 -1
  108. data/reference.md +826 -301
  109. metadata +68 -2
data/reference.md CHANGED
@@ -28,13 +28,13 @@ Automatically populate brand information based on partial input data you provide
28
28
 
29
29
  ```ruby
30
30
  client.brands.autofill(
31
- additional_info: 'A developer-friendly, compliant API for SMS, MMS, and RCS, built to scale real conversations.',
32
- name: 'Pinnacle',
31
+ additional_info: "A developer-friendly, compliant API for SMS, MMS, and RCS, built to scale real conversations.",
32
+ name: "Pinnacle",
33
33
  options: {
34
34
  force_reload: true
35
35
  },
36
- website: 'https://www.pinnacle.sh'
37
- );
36
+ website: "https://www.pinnacle.sh"
37
+ )
38
38
  ```
39
39
  </dd>
40
40
  </dl>
@@ -127,24 +127,24 @@ All fields are **required** except `description` and `dba`, and will be validate
127
127
 
128
128
  ```ruby
129
129
  client.brands.upsert(
130
- address: '500 Folsom St, San Francisco, CA 94105',
130
+ address: "500 Folsom St, San Francisco, CA 94105",
131
131
  contact: {
132
- email: 'michael.chen@trypinnacle.app',
133
- name: 'Michael Chen',
134
- phone: '+14155551234',
135
- title: 'Customer Support Representative'
132
+ email: "michael.chen@trypinnacle.app",
133
+ name: "Michael Chen",
134
+ phone: "+14155551234",
135
+ title: "Customer Support Representative"
136
136
  },
137
- dba: 'Pinnacle RCS',
138
- description: 'A developer-friendly, compliant API for SMS, MMS, and RCS, built to scale real conversations.',
139
- ein: '88-1234567',
140
- email: 'founders@trypinnacle.app',
141
- id: 'b_1234567890',
142
- name: 'Pinnacle',
143
- sector: 'TECHNOLOGY',
144
- type: 'PRIVATE_PROFIT',
145
- entity_type: 'LLC',
146
- website: 'https://www.pinnacle.sh'
147
- );
137
+ dba: "Pinnacle RCS",
138
+ description: "A developer-friendly, compliant API for SMS, MMS, and RCS, built to scale real conversations.",
139
+ ein: "88-1234567",
140
+ email: "founders@trypinnacle.app",
141
+ id: "b_1234567890",
142
+ name: "Pinnacle",
143
+ sector: "TECHNOLOGY",
144
+ type: "PRIVATE_PROFIT",
145
+ entity_type: "LLC",
146
+ website: "https://www.pinnacle.sh"
147
+ )
148
148
  ```
149
149
  </dd>
150
150
  </dl>
@@ -297,7 +297,7 @@ Retrieve detailed information for a specific brand in your account by ID.
297
297
  <dd>
298
298
 
299
299
  ```ruby
300
- client.brands.get(id: 'b_1234567890');
300
+ client.brands.get(id: "b_1234567890")
301
301
  ```
302
302
  </dd>
303
303
  </dl>
@@ -374,7 +374,7 @@ Submit your brand for review and approval by the compliance team.
374
374
  <dd>
375
375
 
376
376
  ```ruby
377
- client.brands.submit(brand_id: 'b_1234567890');
377
+ client.brands.submit(brand_id: "b_1234567890")
378
378
  ```
379
379
  </dd>
380
380
  </dl>
@@ -439,7 +439,7 @@ Validate your brand information for compliance and correctness before submission
439
439
  <dd>
440
440
 
441
441
  ```ruby
442
- client.brands.validate();
442
+ client.brands.validate
443
443
  ```
444
444
  </dd>
445
445
  </dl>
@@ -502,11 +502,11 @@ Submit a brand for external vetting verification to enhance your brand's trust s
502
502
 
503
503
  ```ruby
504
504
  client.brands.vet(
505
- brand_id: 'b_1234567890',
506
- type: 'EXTERNAL',
507
- provider: 'AEGIS',
508
- vetting_class: 'STANDARD'
509
- );
505
+ brand_id: "b_1234567890",
506
+ type: "EXTERNAL",
507
+ provider: "AEGIS",
508
+ vetting_class: "STANDARD"
509
+ )
510
510
  ```
511
511
  </dd>
512
512
  </dl>
@@ -596,7 +596,7 @@ List all brands with optional filtering and pagination. Results are sorted by cr
596
596
  <dd>
597
597
 
598
598
  ```ruby
599
- client.brands.list();
599
+ client.brands.list
600
600
  ```
601
601
  </dd>
602
602
  </dl>
@@ -691,7 +691,7 @@ Retrieve an audience by ID with optional pagination.
691
691
  <dd>
692
692
 
693
693
  ```ruby
694
- client.audiences.get(id: 'aud_abc123');
694
+ client.audiences.get(id: "aud_abc123")
695
695
  ```
696
696
  </dd>
697
697
  </dl>
@@ -770,9 +770,9 @@ Create a new audience with optional initial contacts. Phone numbers that don't e
770
770
 
771
771
  ```ruby
772
772
  client.audiences.create(
773
- name: 'Marketing Campaign Q1',
774
- description: 'Contacts for Q1 marketing push'
775
- );
773
+ name: "Marketing Campaign Q1",
774
+ description: "Contacts for Q1 marketing push"
775
+ )
776
776
  ```
777
777
  </dd>
778
778
  </dl>
@@ -852,7 +852,7 @@ Note: This will NOT delete the contacts themselves, only the audience and its me
852
852
  <dd>
853
853
 
854
854
  ```ruby
855
- client.audiences.delete(id: 'aud_abc123');
855
+ client.audiences.delete(id: "aud_abc123")
856
856
  ```
857
857
  </dd>
858
858
  </dl>
@@ -917,10 +917,10 @@ To add or remove contacts, use the [Add Contacts](/api-reference/audiences/add-c
917
917
 
918
918
  ```ruby
919
919
  client.audiences.update(
920
- id: 'aud_abc123',
921
- name: 'Updated Audience Name',
922
- description: 'New description'
923
- );
920
+ id: "aud_abc123",
921
+ name: "Updated Audience Name",
922
+ description: "New description"
923
+ )
924
924
  ```
925
925
  </dd>
926
926
  </dl>
@@ -998,7 +998,7 @@ List all audiences with optional filtering and pagination. Results are sorted by
998
998
  <dd>
999
999
 
1000
1000
  ```ruby
1001
- client.audiences.list();
1001
+ client.audiences.list
1002
1002
  ```
1003
1003
  </dd>
1004
1004
  </dl>
@@ -1077,7 +1077,7 @@ Retrieve contact information for a given number.
1077
1077
  <dd>
1078
1078
 
1079
1079
  ```ruby
1080
- client.contacts.get(id: 'co_1234567890');
1080
+ client.contacts.get(id: "co_1234567890")
1081
1081
  ```
1082
1082
  </dd>
1083
1083
  </dl>
@@ -1151,7 +1151,7 @@ Create a new contact for a given phone number.
1151
1151
  <dd>
1152
1152
 
1153
1153
  ```ruby
1154
- client.contacts.create(phone_number: 'phoneNumber');
1154
+ client.contacts.create(phone_number: "phoneNumber")
1155
1155
  ```
1156
1156
  </dd>
1157
1157
  </dl>
@@ -1214,12 +1214,12 @@ Update an existing contact.
1214
1214
 
1215
1215
  ```ruby
1216
1216
  client.contacts.update(
1217
- description: 'Retired',
1218
- email: 'alvaroopedtech@pinnacle.sh',
1219
- name: 'Retired Bestie',
1220
- tags: ['friend'],
1221
- id: 'co_1234567890'
1222
- );
1217
+ description: "Retired",
1218
+ email: "alvaroopedtech@pinnacle.sh",
1219
+ name: "Retired Bestie",
1220
+ tags: ["friend"],
1221
+ id: "co_1234567890"
1222
+ )
1223
1223
  ```
1224
1224
  </dd>
1225
1225
  </dl>
@@ -1281,7 +1281,7 @@ List all contacts with optional filtering and pagination. Results are sorted by
1281
1281
  <dd>
1282
1282
 
1283
1283
  ```ruby
1284
- client.contacts.list();
1284
+ client.contacts.list
1285
1285
  ```
1286
1286
  </dd>
1287
1287
  </dl>
@@ -1384,7 +1384,7 @@ Fetch a specific conversation using either its unique identifier or by matching
1384
1384
  <dd>
1385
1385
 
1386
1386
  ```ruby
1387
- client.conversations.get(id: 'conv_1234567890');
1387
+ client.conversations.get(id: "conv_1234567890")
1388
1388
  ```
1389
1389
  </dd>
1390
1390
  </dl>
@@ -1447,14 +1447,14 @@ Retrieves conversations by page with optional filtering based off provided param
1447
1447
 
1448
1448
  ```ruby
1449
1449
  client.conversations.list(
1450
- brand_id: 'b_1234567890',
1451
- campaign_id: 'tf_1234567890',
1452
- campaign_type: 'TOLL_FREE',
1450
+ brand_id: "b_1234567890",
1451
+ campaign_id: "tf_1234567890",
1452
+ campaign_type: "TOLL_FREE",
1453
1453
  page_index: 0,
1454
1454
  page_size: 20,
1455
- receiver: '+16509231662',
1456
- sender: '+18445551234'
1457
- );
1455
+ receiver: "+16509231662",
1456
+ sender: "+18445551234"
1457
+ )
1458
1458
  ```
1459
1459
  </dd>
1460
1460
  </dl>
@@ -1570,9 +1570,9 @@ Update the notes associated with a specific conversation.
1570
1570
 
1571
1571
  ```ruby
1572
1572
  client.conversations.update(
1573
- id: 'conv_1234567890',
1574
- notes: 'Follow-up completed. Customer satisfied with resolution.'
1575
- );
1573
+ id: "conv_1234567890",
1574
+ notes: "Follow-up completed. Customer satisfied with resolution."
1575
+ )
1576
1576
  ```
1577
1577
  </dd>
1578
1578
  </dl>
@@ -1642,7 +1642,7 @@ Retrieve a paginated and filtered list of messages for a specific conversation.
1642
1642
  <dd>
1643
1643
 
1644
1644
  ```ruby
1645
- client.conversations.list_messages(id: 'id');
1645
+ client.conversations.list_messages(id: "id")
1646
1646
  ```
1647
1647
  </dd>
1648
1648
  </dl>
@@ -1779,7 +1779,7 @@ Retrieve a previously sent message.
1779
1779
  <dd>
1780
1780
 
1781
1781
  ```ruby
1782
- client.messages.get(id: 'msg_1234567890');
1782
+ client.messages.get(id: "msg_1234567890")
1783
1783
  ```
1784
1784
  </dd>
1785
1785
  </dl>
@@ -1842,12 +1842,12 @@ Add or remove an emoji reaction to a previously sent message.
1842
1842
 
1843
1843
  ```ruby
1844
1844
  client.messages.react(
1845
- message_id: 'msg_1234567890',
1845
+ message_id: "msg_1234567890",
1846
1846
  options: {
1847
1847
  force: true
1848
1848
  },
1849
- reaction: '👍'
1850
- );
1849
+ reaction: "👍"
1850
+ )
1851
1851
  ```
1852
1852
  </dd>
1853
1853
  </dl>
@@ -1929,7 +1929,7 @@ List all messages with optional filtering and pagination. Results are sorted by
1929
1929
  <dd>
1930
1930
 
1931
1931
  ```ruby
1932
- client.messages.list();
1932
+ client.messages.list
1933
1933
  ```
1934
1934
  </dd>
1935
1935
  </dl>
@@ -2073,20 +2073,20 @@ Search for available phone numbers that match your exact criteria.
2073
2073
 
2074
2074
  ```ruby
2075
2075
  client.phone_numbers.search(
2076
- features: ['SMS', 'MMS'],
2076
+ features: %w[SMS MMS],
2077
2077
  location: {
2078
- city: 'New York',
2079
- national_destination_code: '212'
2078
+ city: "New York",
2079
+ national_destination_code: "212"
2080
2080
  },
2081
2081
  number: {
2082
- contains: '514',
2083
- starts_with: '45'
2082
+ contains: "514",
2083
+ starts_with: "45"
2084
2084
  },
2085
2085
  options: {
2086
2086
  limit: 4
2087
2087
  },
2088
- type: ['LOCAL']
2089
- );
2088
+ type: ["LOCAL"]
2089
+ )
2090
2090
  ```
2091
2091
  </dd>
2092
2092
  </dl>
@@ -2186,7 +2186,7 @@ Billing uses your account credits and the numbers are ready for immediate use.
2186
2186
  <dd>
2187
2187
 
2188
2188
  ```ruby
2189
- client.phone_numbers.buy(numbers: ['+18559491727']);
2189
+ client.phone_numbers.buy(numbers: ["+18559491727"])
2190
2190
  ```
2191
2191
  </dd>
2192
2192
  </dl>
@@ -2255,15 +2255,15 @@ Retrieve information about any phone number.
2255
2255
 
2256
2256
  ```ruby
2257
2257
  client.phone_numbers.get(
2258
- phone: '+11234567890',
2259
- level: 'advanced',
2258
+ phone: "+11234567890",
2259
+ level: "advanced",
2260
2260
  options: {
2261
2261
  risk: true,
2262
2262
  enhanced_contact_info: {
2263
- context: 'This is my friend from JZ. He has done a lot in the crypto space.'
2263
+ context: "This is my friend from JZ. He has done a lot in the crypto space."
2264
2264
  }
2265
2265
  }
2266
- );
2266
+ )
2267
2267
  ```
2268
2268
  </dd>
2269
2269
  </dl>
@@ -2345,7 +2345,7 @@ List all owned phone numbers with pagination. Results are sorted by creation dat
2345
2345
  <dd>
2346
2346
 
2347
2347
  ```ruby
2348
- client.phone_numbers.list();
2348
+ client.phone_numbers.list
2349
2349
  ```
2350
2350
  </dd>
2351
2351
  </dl>
@@ -2419,7 +2419,7 @@ contact information, and other settings.
2419
2419
  <dd>
2420
2420
 
2421
2421
  ```ruby
2422
- client.rcs.get_agent(agent_id: 'agent_abc123def456');
2422
+ client.rcs.get_agent(agent_id: "agent_abc123def456")
2423
2423
  ```
2424
2424
  </dd>
2425
2425
  </dl>
@@ -2484,7 +2484,7 @@ on specific phone numbers before sending RCS messages to them.
2484
2484
  <dd>
2485
2485
 
2486
2486
  ```ruby
2487
- client.rcs.get_capabilities(phone_numbers: ['+12345678901', '+19876543210']);
2487
+ client.rcs.get_capabilities(phone_numbers: %w[+12345678901 +19876543210])
2488
2488
  ```
2489
2489
  </dd>
2490
2490
  </dl>
@@ -2561,10 +2561,10 @@ from websites, emails, or other applications.
2561
2561
 
2562
2562
  ```ruby
2563
2563
  client.rcs.get_link(
2564
- agent_id: 'agent_XXXXXXXXXXXX',
2565
- phone_number: '+12345678901',
2566
- body: 'Hello, I need help with my order'
2567
- );
2564
+ agent_id: "agent_XXXXXXXXXXXX",
2565
+ phone_number: "+12345678901",
2566
+ body: "Hello, I need help with my order"
2567
+ )
2568
2568
  ```
2569
2569
  </dd>
2570
2570
  </dl>
@@ -2643,7 +2643,7 @@ Retrieve all webhook that are set up to receive events for specific URLs or phon
2643
2643
  <dd>
2644
2644
 
2645
2645
  ```ruby
2646
- client.webhooks.get(identifiers: ['https://www.pinnacle.sh/payment', '+14155678901', 'https://www.pinnacle.sh/sms-callback', '+14153456659']);
2646
+ client.webhooks.get(identifiers: %w[https://www.pinnacle.sh/payment +14155678901 https://www.pinnacle.sh/sms-callback +14153456659])
2647
2647
  ```
2648
2648
  </dd>
2649
2649
  </dl>
@@ -2708,7 +2708,7 @@ List all webhooks with optional filtering and pagination. Results are sorted by
2708
2708
  <dd>
2709
2709
 
2710
2710
  ```ruby
2711
- client.webhooks.list();
2711
+ client.webhooks.list
2712
2712
  ```
2713
2713
  </dd>
2714
2714
  </dl>
@@ -2783,7 +2783,9 @@ Attach a webhook to one or more senders (phone numbers or RCS agent IDs) to rece
2783
2783
 
2784
2784
  You can attach an existing webhook by providing its ID, or create a new webhook by specifying a name and URL. Supports bulk operations with up to 50 senders per request. <br>
2785
2785
 
2786
- Subscriptions are additive — attaching new senders does not remove existing ones. Re-attaching the same sender updates the event type filter without creating duplicates.
2786
+ Subscriptions are additive — attaching new senders does not remove existing ones. Re-attaching the same sender updates the event type filter without creating duplicates. <br>
2787
+
2788
+ **Custom headers** may be provided in either case via the optional `headers` field. When attaching a new webhook, the headers are stored on the webhook and sent on every delivery. When attaching an existing `webhookId`, supplying `headers` **overwrites** the stored headers on that webhook — omit the field to leave them unchanged, or pass an empty object `{}` to clear them. The reserved `PINNACLE-SIGNING-SECRET` header is always set by Pinnacle and cannot be overridden.
2787
2789
  </dd>
2788
2790
  </dl>
2789
2791
  </dd>
@@ -2798,7 +2800,7 @@ Subscriptions are additive — attaching new senders does not remove existing on
2798
2800
  <dd>
2799
2801
 
2800
2802
  ```ruby
2801
- client.webhooks.attach(senders: ['+14155551234', 'agent_abc123']);
2803
+ client.webhooks.attach(senders: %w[+14155551234 agent_abc123])
2802
2804
  ```
2803
2805
  </dd>
2804
2806
  </dl>
@@ -2821,7 +2823,11 @@ client.webhooks.attach(senders: ['+14155551234', 'agent_abc123']);
2821
2823
  <dl>
2822
2824
  <dd>
2823
2825
 
2824
- **webhook_id:** `String` — Existing webhook ID (starts with `wh_`). Provide this OR `name` + `url` to create a new webhook. The webhook must be in ENABLED status. Disabled webhooks can be re-enabled from the [dashboard](https://app.pinnacle.sh/dashboard/development/webhooks).
2826
+ **webhook_id:** `String`
2827
+
2828
+ Existing webhook ID (starts with `wh_`). Provide this OR `name` + `url` to create a new webhook. The webhook must be in ENABLED status. Disabled webhooks can be re-enabled from the [dashboard](https://app.pinnacle.sh/dashboard/development/webhooks).
2829
+
2830
+ Supplying `headers` alongside `webhookId` **overwrites** the stored headers on the webhook. Omit `headers` to leave them unchanged.
2825
2831
 
2826
2832
  </dd>
2827
2833
  </dl>
@@ -2857,6 +2863,22 @@ Event type filter for the subscription. Set to `null` to receive all events. <br
2857
2863
  <dl>
2858
2864
  <dd>
2859
2865
 
2866
+ **headers:** `Internal::Types::Hash[String, String]`
2867
+
2868
+ Optional custom HTTP headers (key-value map) to include when dispatching webhook events to the endpoint.
2869
+
2870
+ Header names must start with a letter or digit and contain only letters, digits, `-`, or `_` (matching the pattern `^[A-Za-z0-9][A-Za-z0-9_-]*$`). Names are case-insensitive per [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-field-names) and are normalized to uppercase before storage and sending.
2871
+
2872
+ When provided with an existing `webhookId`, these headers **overwrite** any headers currently stored on that webhook. Omit to leave existing headers unchanged.
2873
+
2874
+ The reserved `PINNACLE-SIGNING-SECRET` header is silently ignored and cannot be overridden.
2875
+
2876
+ </dd>
2877
+ </dl>
2878
+
2879
+ <dl>
2880
+ <dd>
2881
+
2860
2882
  **request_options:** `Pinnacle::Webhooks::RequestOptions`
2861
2883
 
2862
2884
  </dd>
@@ -2899,9 +2921,9 @@ The webhook itself is not deleted and remains available for use with other sende
2899
2921
 
2900
2922
  ```ruby
2901
2923
  client.webhooks.detach(
2902
- webhook_id: 'webhookId',
2903
- senders: ['+14155551234', 'agent_abc123']
2904
- );
2924
+ webhook_id: "webhookId",
2925
+ senders: %w[+14155551234 agent_abc123]
2926
+ )
2905
2927
  ```
2906
2928
  </dd>
2907
2929
  </dl>
@@ -2940,6 +2962,426 @@ client.webhooks.detach(
2940
2962
  </dl>
2941
2963
 
2942
2964
 
2965
+ </dd>
2966
+ </dl>
2967
+ </details>
2968
+
2969
+ ## Forms
2970
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">get</a>(id) -> Pinnacle::Types::Form</code></summary>
2971
+ <dl>
2972
+ <dd>
2973
+
2974
+ #### 📝 Description
2975
+
2976
+ <dl>
2977
+ <dd>
2978
+
2979
+ <dl>
2980
+ <dd>
2981
+
2982
+ Retrieve a form by id. Includes submission count, last submission timestamp, and archive state.
2983
+ </dd>
2984
+ </dl>
2985
+ </dd>
2986
+ </dl>
2987
+
2988
+ #### 🔌 Usage
2989
+
2990
+ <dl>
2991
+ <dd>
2992
+
2993
+ <dl>
2994
+ <dd>
2995
+
2996
+ ```ruby
2997
+ client.forms.get(id: "form_Oy2n7iUoi9CJwUU6")
2998
+ ```
2999
+ </dd>
3000
+ </dl>
3001
+ </dd>
3002
+ </dl>
3003
+
3004
+ #### ⚙️ Parameters
3005
+
3006
+ <dl>
3007
+ <dd>
3008
+
3009
+ <dl>
3010
+ <dd>
3011
+
3012
+ **id:** `String`
3013
+
3014
+ The unique identifier of the form you want to retrieve.
3015
+ <br><br> This identifier is a string that always begins with the prefix `form_`, for example: `form_Oy2n7iUoi9CJwUU6`. It's returned on every form response (`Form.id`) and by [`POST /forms/send`](/api-reference/forms/send-form) (`response.form.id`).
3016
+
3017
+ </dd>
3018
+ </dl>
3019
+
3020
+ <dl>
3021
+ <dd>
3022
+
3023
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3024
+
3025
+ </dd>
3026
+ </dl>
3027
+ </dd>
3028
+ </dl>
3029
+
3030
+
3031
+ </dd>
3032
+ </dl>
3033
+ </details>
3034
+
3035
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">update</a>(id, request) -> Pinnacle::Types::Form</code></summary>
3036
+ <dl>
3037
+ <dd>
3038
+
3039
+ #### 📝 Description
3040
+
3041
+ <dl>
3042
+ <dd>
3043
+
3044
+ <dl>
3045
+ <dd>
3046
+
3047
+ Partial update. Only keys present in the body are applied. Archived forms (non-null `archived_at`) cannot be updated — restore the form by setting `archived_at: null` in a PATCH first.
3048
+ </dd>
3049
+ </dl>
3050
+ </dd>
3051
+ </dl>
3052
+
3053
+ #### 🔌 Usage
3054
+
3055
+ <dl>
3056
+ <dd>
3057
+
3058
+ <dl>
3059
+ <dd>
3060
+
3061
+ ```ruby
3062
+ client.forms.update(
3063
+ id: "form_Oy2n7iUoi9CJwUU6",
3064
+ name: "Contact request (v2)",
3065
+ can_update: true,
3066
+ expires_at: "2026-12-31T23:59:59Z"
3067
+ )
3068
+ ```
3069
+ </dd>
3070
+ </dl>
3071
+ </dd>
3072
+ </dl>
3073
+
3074
+ #### ⚙️ Parameters
3075
+
3076
+ <dl>
3077
+ <dd>
3078
+
3079
+ <dl>
3080
+ <dd>
3081
+
3082
+ **id:** `String`
3083
+
3084
+ The unique identifier of the form you want to update.
3085
+ <br><br> This identifier is a string that always begins with the prefix `form_`, for example: `form_Oy2n7iUoi9CJwUU6`.
3086
+
3087
+ </dd>
3088
+ </dl>
3089
+
3090
+ <dl>
3091
+ <dd>
3092
+
3093
+ **name:** `String` — Replace the form's title. Pass `null` to clear.
3094
+
3095
+ </dd>
3096
+ </dl>
3097
+
3098
+ <dl>
3099
+ <dd>
3100
+
3101
+ **description:** `String` — Replace the form's description. Pass `null` to clear.
3102
+
3103
+ </dd>
3104
+ </dl>
3105
+
3106
+ <dl>
3107
+ <dd>
3108
+
3109
+ **fields:** `Internal::Types::Array[Pinnacle::Types::FormField]` — Replace the full set of fields on the form. Partial field updates aren't supported — send the complete new list.
3110
+
3111
+ </dd>
3112
+ </dl>
3113
+
3114
+ <dl>
3115
+ <dd>
3116
+
3117
+ **can_update:** `Internal::Types::Boolean` — Toggle whether the recipient can re-edit their submission.
3118
+
3119
+ </dd>
3120
+ </dl>
3121
+
3122
+ <dl>
3123
+ <dd>
3124
+
3125
+ **expires_at:** `String` — Set or clear the form's expiration timestamp.
3126
+
3127
+ </dd>
3128
+ </dl>
3129
+
3130
+ <dl>
3131
+ <dd>
3132
+
3133
+ **theme_override:** `Pinnacle::Types::FormThemeOverride` — Replace the per-form theme override. Pass `null` to revert to team defaults.
3134
+
3135
+ </dd>
3136
+ </dl>
3137
+
3138
+ <dl>
3139
+ <dd>
3140
+
3141
+ **archived_at:** `String` — Set to an ISO timestamp to archive the form (soft-delete), or `null` to restore an archived form.
3142
+
3143
+ </dd>
3144
+ </dl>
3145
+
3146
+ <dl>
3147
+ <dd>
3148
+
3149
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3150
+
3151
+ </dd>
3152
+ </dl>
3153
+ </dd>
3154
+ </dl>
3155
+
3156
+
3157
+ </dd>
3158
+ </dl>
3159
+ </details>
3160
+
3161
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">list</a>(request) -> Pinnacle::Types::ListFormsResponse</code></summary>
3162
+ <dl>
3163
+ <dd>
3164
+
3165
+ #### 📝 Description
3166
+
3167
+ <dl>
3168
+ <dd>
3169
+
3170
+ <dl>
3171
+ <dd>
3172
+
3173
+ Paginated list of forms on your team, sorted by creation date (newest first). Includes archived forms.
3174
+ </dd>
3175
+ </dl>
3176
+ </dd>
3177
+ </dl>
3178
+
3179
+ #### 🔌 Usage
3180
+
3181
+ <dl>
3182
+ <dd>
3183
+
3184
+ <dl>
3185
+ <dd>
3186
+
3187
+ ```ruby
3188
+ client.forms.list(
3189
+ page_index: 0,
3190
+ page_size: 20
3191
+ )
3192
+ ```
3193
+ </dd>
3194
+ </dl>
3195
+ </dd>
3196
+ </dl>
3197
+
3198
+ #### ⚙️ Parameters
3199
+
3200
+ <dl>
3201
+ <dd>
3202
+
3203
+ <dl>
3204
+ <dd>
3205
+
3206
+ **page_index:** `Integer` — Zero-based page index.
3207
+
3208
+ </dd>
3209
+ </dl>
3210
+
3211
+ <dl>
3212
+ <dd>
3213
+
3214
+ **page_size:** `Integer` — Number of forms to return in a single page. Max 100.
3215
+
3216
+ </dd>
3217
+ </dl>
3218
+
3219
+ <dl>
3220
+ <dd>
3221
+
3222
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3223
+
3224
+ </dd>
3225
+ </dl>
3226
+ </dd>
3227
+ </dl>
3228
+
3229
+
3230
+ </dd>
3231
+ </dl>
3232
+ </details>
3233
+
3234
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">create</a>(request) -> Pinnacle::Types::Form</code></summary>
3235
+ <dl>
3236
+ <dd>
3237
+
3238
+ #### 📝 Description
3239
+
3240
+ <dl>
3241
+ <dd>
3242
+
3243
+ <dl>
3244
+ <dd>
3245
+
3246
+ Create a hosted form without sending it. <br>
3247
+
3248
+ Returns the form object including its public URL — `https://forms.pinnacle.sh/{form_id}`. <br>
3249
+
3250
+ To also deliver the URL to a recipient over SMS or RCS in a single call, use [`POST /forms/send`](/api-reference/forms/send-form).
3251
+ </dd>
3252
+ </dl>
3253
+ </dd>
3254
+ </dl>
3255
+
3256
+ #### 🔌 Usage
3257
+
3258
+ <dl>
3259
+ <dd>
3260
+
3261
+ <dl>
3262
+ <dd>
3263
+
3264
+ ```ruby
3265
+ client.forms.create(
3266
+ name: "Contact request",
3267
+ description: "We'll follow up over SMS or RCS.",
3268
+ fields: [],
3269
+ can_update: false
3270
+ )
3271
+ ```
3272
+ </dd>
3273
+ </dl>
3274
+ </dd>
3275
+ </dl>
3276
+
3277
+ #### ⚙️ Parameters
3278
+
3279
+ <dl>
3280
+ <dd>
3281
+
3282
+ <dl>
3283
+ <dd>
3284
+
3285
+ **request:** `Pinnacle::Types::FormDefinition`
3286
+
3287
+ </dd>
3288
+ </dl>
3289
+
3290
+ <dl>
3291
+ <dd>
3292
+
3293
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3294
+
3295
+ </dd>
3296
+ </dl>
3297
+ </dd>
3298
+ </dl>
3299
+
3300
+
3301
+ </dd>
3302
+ </dl>
3303
+ </details>
3304
+
3305
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">send_</a>(request) -> Pinnacle::Forms::Types::FormsSendResponse</code></summary>
3306
+ <dl>
3307
+ <dd>
3308
+
3309
+ #### 📝 Description
3310
+
3311
+ <dl>
3312
+ <dd>
3313
+
3314
+ <dl>
3315
+ <dd>
3316
+
3317
+ Send a form to a recipient over SMS or RCS, or mint a standalone submission URL.
3318
+
3319
+ Pass `form` as either an existing form id (`form_*`) or an inline `{ fields, ... }` definition to mint a new form for this send.
3320
+
3321
+ The delivery channel is inferred from `from`:
3322
+ - `from: "agent_*"` → RCS (with optional SMS `fallback`)
3323
+ - `from: "+E.164"` → SMS
3324
+
3325
+ When `to` is provided, Pinnacle dispatches a message whose body contains the submission URL and the recipient is recorded on the response: `submission.to` echoes the same E.164 number and `message_id` is the id of the outbound SMS/RCS.
3326
+
3327
+ When `to` is omitted, no message is sent — `submission.to` and `message_id` are both `null` — which is useful for embedding the URL in your own outreach.
3328
+
3329
+ On completion, a `FORM.SUBMISSION` webhook event is delivered to webhooks subscribed to the sender. See [Receiving Messages and User Events](/guides/messages/receiving).
3330
+ </dd>
3331
+ </dl>
3332
+ </dd>
3333
+ </dl>
3334
+
3335
+ #### 🔌 Usage
3336
+
3337
+ <dl>
3338
+ <dd>
3339
+
3340
+ <dl>
3341
+ <dd>
3342
+
3343
+ ```ruby
3344
+ client.forms.send_(
3345
+ from: "agent_iM9wQcyBBjYn",
3346
+ to: "+14155551234",
3347
+ form: "form_Oy2n7iUoi9CJwUU6",
3348
+ fallback: {
3349
+ from: "+14155550000"
3350
+ },
3351
+ options: {
3352
+ webview_mode: "FULL"
3353
+ }
3354
+ )
3355
+ ```
3356
+ </dd>
3357
+ </dl>
3358
+ </dd>
3359
+ </dl>
3360
+
3361
+ #### ⚙️ Parameters
3362
+
3363
+ <dl>
3364
+ <dd>
3365
+
3366
+ <dl>
3367
+ <dd>
3368
+
3369
+ **request:** `Pinnacle::Types::SendFormParams`
3370
+
3371
+ </dd>
3372
+ </dl>
3373
+
3374
+ <dl>
3375
+ <dd>
3376
+
3377
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3378
+
3379
+ </dd>
3380
+ </dl>
3381
+ </dd>
3382
+ </dl>
3383
+
3384
+
2943
3385
  </dd>
2944
3386
  </dl>
2945
3387
  </details>
@@ -2976,9 +3418,9 @@ Remove contacts from an existing audience. This operation is idempotent.
2976
3418
 
2977
3419
  ```ruby
2978
3420
  client.audiences.contacts.remove(
2979
- id: 'aud_abc123',
2980
- contacts: ['+12125551234', 'co_def456']
2981
- );
3421
+ id: "aud_abc123",
3422
+ contacts: %w[+12125551234 co_def456]
3423
+ )
2982
3424
  ```
2983
3425
  </dd>
2984
3426
  </dl>
@@ -3056,9 +3498,9 @@ Add contacts to an existing audience. This operation is additive and idempotent.
3056
3498
 
3057
3499
  ```ruby
3058
3500
  client.audiences.contacts.add(
3059
- id: 'aud_abc123',
3060
- contacts: ['+12125551234', 'co_def456', '+13105551234']
3061
- );
3501
+ id: "aud_abc123",
3502
+ contacts: %w[+12125551234 co_def456 +13105551234]
3503
+ )
3062
3504
  ```
3063
3505
  </dd>
3064
3506
  </dl>
@@ -3133,9 +3575,9 @@ Generate campaign details based off existing campaign and the brand it's connect
3133
3575
 
3134
3576
  ```ruby
3135
3577
  client.campaigns.dlc.autofill(
3136
- additional_info: 'Please autofill missing campaign fields using my brand profile',
3137
- campaign_id: 'dlc_1234567890'
3138
- );
3578
+ additional_info: "Please autofill missing campaign fields using my brand profile",
3579
+ campaign_id: "dlc_1234567890"
3580
+ )
3139
3581
  ```
3140
3582
  </dd>
3141
3583
  </dl>
@@ -3197,7 +3639,7 @@ Retrieve 10DLC campaign.
3197
3639
  <dd>
3198
3640
 
3199
3641
  ```ruby
3200
- client.campaigns.dlc.get(campaign_id: 'dlc_1234567890');
3642
+ client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
3201
3643
  ```
3202
3644
  </dd>
3203
3645
  </dl>
@@ -3259,7 +3701,7 @@ Submit your 10DLC campaign for approval and activation with carriers.
3259
3701
  <dd>
3260
3702
 
3261
3703
  ```ruby
3262
- client.campaigns.dlc.submit(campaign_id: 'dlc_1234567890');
3704
+ client.campaigns.dlc.submit(campaign_id: "dlc_1234567890")
3263
3705
  ```
3264
3706
  </dd>
3265
3707
  </dl>
@@ -3336,25 +3778,25 @@ All fields are **required** unless specified otherwise, and will be validated wh
3336
3778
  ```ruby
3337
3779
  client.campaigns.dlc.upsert(
3338
3780
  auto_renew: true,
3339
- brand: 'b_1234567890',
3340
- description: 'This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.',
3781
+ brand: "b_1234567890",
3782
+ description: "This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.",
3341
3783
  keywords: {
3342
3784
  help: {
3343
- message: 'Pinnacle Software Development Inc.: For assistance, visit https://pinnacle.sh/support or email founders@trypinnacle.app. Msg&data rates may apply. Reply STOP to cancel.',
3344
- values: ['HELP', 'SUPPORT', 'INFO']
3785
+ message: "Pinnacle Software Development Inc.: For assistance, visit https://pinnacle.sh/support or email founders@trypinnacle.app. Msg&data rates may apply. Reply STOP to cancel.",
3786
+ values: %w[HELP SUPPORT INFO]
3345
3787
  },
3346
3788
  opt_in: {
3347
3789
  message: "Pinnacle Software Development Inc.: You're enrolled in account & security alerts. Msg&data rates may apply. Message frequency varies. Reply HELP for help, STOP to cancel. Terms: https://pinnacle.sh/terms Privacy: https://pinnacle.sh/privacy",
3348
- values: ['START', 'YES', 'SUBSCRIBE']
3790
+ values: %w[START YES SUBSCRIBE]
3349
3791
  },
3350
3792
  opt_out: {
3351
3793
  message: "Pinnacle Software Development Inc.: You're unsubscribed and will receive no further texts. For assistance, visit https://pinnacle.sh or call 877-389-0460. Reply START to resubscribe.",
3352
- values: ['STOP', 'CANCEL', 'UNSUBSCRIBE']
3794
+ values: %w[STOP CANCEL UNSUBSCRIBE]
3353
3795
  }
3354
3796
  },
3355
3797
  links: {
3356
- privacy_policy: 'https://www.pinnacle.sh/privacy',
3357
- terms_of_service: 'https://www.pinnacle.sh/terms'
3798
+ privacy_policy: "https://www.pinnacle.sh/privacy",
3799
+ terms_of_service: "https://www.pinnacle.sh/terms"
3358
3800
  },
3359
3801
  message_flow: 'The user fills out a paper form during onboarding at [Address] which they learn about at our website (https://pinnacle.sh) in which they provide their phone number and sign their consent. The form includes a disclaimer: "By signing this form and providing your phone number, you agree to receive SMS Mixed - Account Notification, Customer Care, Security Alert, Delivery Notification from Pinnacle Software Development Inc. Message frequency may vary. Standard Message and Data Rates may apply. Reply STOP to opt out. Reply HELP for help. Consent is not a condition of purchase. Your mobile information will not be sold or shared with third parties for promotional or marketing purposes." Once the information is entered into the system, the user receives a confirmation SMS: "Thank you for signing up for SMS updates from Pinnacle Software Development Inc. Msg freq may vary. Std msg & data rates apply. Reply STOP to opt out, HELP for help." Link to paper form: https://www.pinnacle.sh/opt-in',
3360
3802
  name: "Pinnacle's Account Notifications",
@@ -3362,16 +3804,16 @@ client.campaigns.dlc.upsert(
3362
3804
  affiliate_marketing: false,
3363
3805
  age_gated: false,
3364
3806
  direct_lending: false,
3365
- embedded_link: 'https://www.pinnacle.sh/example',
3807
+ embedded_link: "https://www.pinnacle.sh/example",
3366
3808
  embedded_phone: false,
3367
3809
  number_pooling: false
3368
3810
  },
3369
- sample_messages: ["Pinnacle Software Development Inc.: We're here to help. Visit https://pinnacle.sh or call 877-389-0460. Msg&data rates may apply. Reply STOP to cancel.", "Pinnacle Software Development Inc.: You're enrolled in account & security alerts. Msg&data rates may apply. Message frequency varies. Reply HELP for help, STOP to cancel. Terms: https://pinnacle.sh/terms/ Privacy: https://pinnacle.sh/privacy/", 'Pinnacle Software Development Inc.: An update has been made to your account. Read it in the portal.', 'Pinnacle Software Development Inc.: We received your message. A team member will reply shortly. For immediate help call 877-389-0460. Msg&data rates may apply. Reply STOP to cancel.'],
3811
+ sample_messages: ["Pinnacle Software Development Inc.: We're here to help. Visit https://pinnacle.sh or call 877-389-0460. Msg&data rates may apply. Reply STOP to cancel.", "Pinnacle Software Development Inc.: You're enrolled in account & security alerts. Msg&data rates may apply. Message frequency varies. Reply HELP for help, STOP to cancel. Terms: https://pinnacle.sh/terms/ Privacy: https://pinnacle.sh/privacy/", "Pinnacle Software Development Inc.: An update has been made to your account. Read it in the portal.", "Pinnacle Software Development Inc.: We received your message. A team member will reply shortly. For immediate help call 877-389-0460. Msg&data rates may apply. Reply STOP to cancel."],
3370
3812
  use_case: {
3371
- sub: ['ACCOUNT_NOTIFICATION', 'CUSTOMER_CARE', 'SECURITY_ALERT'],
3372
- value: 'MIXED'
3813
+ sub: %w[ACCOUNT_NOTIFICATION CUSTOMER_CARE SECURITY_ALERT],
3814
+ value: "MIXED"
3373
3815
  }
3374
- );
3816
+ )
3375
3817
  ```
3376
3818
  </dd>
3377
3819
  </dl>
@@ -3518,9 +3960,9 @@ Validate your 10DLC campaign configuration against carrier requirements and comp
3518
3960
 
3519
3961
  ```ruby
3520
3962
  client.campaigns.dlc.validate(
3521
- additional_info: 'Please validate this DLC campaign for 10DLC compliance',
3522
- campaign_id: 'dlc_1234567890'
3523
- );
3963
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
3964
+ campaign_id: "dlc_1234567890"
3965
+ )
3524
3966
  ```
3525
3967
  </dd>
3526
3968
  </dl>
@@ -3582,7 +4024,7 @@ List all 10DLC campaigns with optional filtering and pagination. Results are sor
3582
4024
  <dd>
3583
4025
 
3584
4026
  ```ruby
3585
- client.campaigns.dlc.list();
4027
+ client.campaigns.dlc.list
3586
4028
  ```
3587
4029
  </dd>
3588
4030
  </dl>
@@ -3678,9 +4120,9 @@ Generate campaign details based off existing campaign and the brand it's connect
3678
4120
 
3679
4121
  ```ruby
3680
4122
  client.campaigns.toll_free.autofill(
3681
- additional_info: 'Please autofill missing campaign fields using my brand profile',
3682
- campaign_id: 'dlc_1234567890'
3683
- );
4123
+ additional_info: "Please autofill missing campaign fields using my brand profile",
4124
+ campaign_id: "dlc_1234567890"
4125
+ )
3684
4126
  ```
3685
4127
  </dd>
3686
4128
  </dl>
@@ -3742,7 +4184,7 @@ Retrieve Toll-Free campaign.
3742
4184
  <dd>
3743
4185
 
3744
4186
  ```ruby
3745
- client.campaigns.toll_free.get(campaign_id: 'tf_1234567890');
4187
+ client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
3746
4188
  ```
3747
4189
  </dd>
3748
4190
  </dl>
@@ -3804,7 +4246,7 @@ Submit your toll-free campaign for approval and activation with carriers.
3804
4246
  <dd>
3805
4247
 
3806
4248
  ```ruby
3807
- client.campaigns.toll_free.submit(campaign_id: 'tf_1234567890');
4249
+ client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
3808
4250
  ```
3809
4251
  </dd>
3810
4252
  </dl>
@@ -3877,26 +4319,26 @@ All fields are **required** unless specified otherwise, and will be validated wh
3877
4319
 
3878
4320
  ```ruby
3879
4321
  client.campaigns.toll_free.upsert(
3880
- brand: 'b_1234567890',
3881
- campaign_id: 'tf_1234567890',
4322
+ brand: "b_1234567890",
4323
+ campaign_id: "tf_1234567890",
3882
4324
  keywords: {
3883
4325
  help: {
3884
- message: 'Pinnacle Software Development Inc.: For assistance, visit https://pinnacle.sh/support or email founders@trypinnacle.app. Msg&data rates may apply. Reply STOP to cancel.'
4326
+ message: "Pinnacle Software Development Inc.: For assistance, visit https://pinnacle.sh/support or email founders@trypinnacle.app. Msg&data rates may apply. Reply STOP to cancel."
3885
4327
  },
3886
4328
  opt_in: {
3887
4329
  message: "Pinnacle Software Development Inc.: You're enrolled in account & security alerts. Msg&data rates may apply. Message frequency varies. Reply HELP for help, STOP to cancel. Terms: https://pinnacle.sh/terms/ Privacy: https://pinnacle.sh/privacy/",
3888
- keywords: ['START', 'SUBSCRIBE']
4330
+ keywords: %w[START SUBSCRIBE]
3889
4331
  }
3890
4332
  },
3891
4333
  links: {
3892
- privacy_policy: 'https://www.pinnacle.sh/privacy',
3893
- terms_of_service: 'https://www.pinnacle.sh/terms'
4334
+ privacy_policy: "https://www.pinnacle.sh/privacy",
4335
+ terms_of_service: "https://www.pinnacle.sh/terms"
3894
4336
  },
3895
- monthly_volume: '10,000',
3896
- name: 'Pinnacle',
4337
+ monthly_volume: "10,000",
4338
+ name: "Pinnacle",
3897
4339
  opt_in: {
3898
- method_: 'PAPER',
3899
- url: 'https://www.pinnacle.sh/opt-in',
4340
+ method_: "PAPER",
4341
+ url: "https://www.pinnacle.sh/opt-in",
3900
4342
  workflow_description: "End users opt-in when filling out the in-person intake forms where they will write their phone numbers and check a box indicating that they've opted in to messages. Link to paper form: https://www.pinnacle.sh/opt-in"
3901
4343
  },
3902
4344
  options: {
@@ -3904,10 +4346,10 @@ client.campaigns.toll_free.upsert(
3904
4346
  },
3905
4347
  production_message_content: "Hi [First Name], your order #[Order ID] has shipped and will arrive [Date]. Track here: [URL]. Reply HELP for help or STOP to unsubscribe.",
3906
4348
  use_case: {
3907
- summary: 'Customers who have opted into text messages can interact with our automated SMS chatbot to receive transaction-driven notifications (order status, shipping updates, account alerts), ask support questions, share photos with friends, and manage their account details via simple, conversational text flows. All messages are transactional or interactive flows customers opt into. Users can send images (e.g., receipts) and get guided replies.',
3908
- value: 'CHATBOT'
4349
+ summary: "Customers who have opted into text messages can interact with our automated SMS chatbot to receive transaction-driven notifications (order status, shipping updates, account alerts), ask support questions, share photos with friends, and manage their account details via simple, conversational text flows. All messages are transactional or interactive flows customers opt into. Users can send images (e.g., receipts) and get guided replies.",
4350
+ value: "CHATBOT"
3909
4351
  }
3910
- );
4352
+ )
3911
4353
  ```
3912
4354
  </dd>
3913
4355
  </dl>
@@ -4042,9 +4484,9 @@ Validate your toll-free campaign configuration against carrier requirements and
4042
4484
 
4043
4485
  ```ruby
4044
4486
  client.campaigns.toll_free.validate(
4045
- additional_info: 'Please validate this DLC campaign for 10DLC compliance',
4046
- campaign_id: 'dlc_1234567890'
4047
- );
4487
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
4488
+ campaign_id: "dlc_1234567890"
4489
+ )
4048
4490
  ```
4049
4491
  </dd>
4050
4492
  </dl>
@@ -4106,7 +4548,7 @@ List all toll-free campaigns with optional filtering and pagination. Results are
4106
4548
  <dd>
4107
4549
 
4108
4550
  ```ruby
4109
- client.campaigns.toll_free.list();
4551
+ client.campaigns.toll_free.list
4110
4552
  ```
4111
4553
  </dd>
4112
4554
  </dl>
@@ -4202,9 +4644,9 @@ Generate campaign details based off existing campaign and the brand it's connect
4202
4644
 
4203
4645
  ```ruby
4204
4646
  client.campaigns.rcs.autofill(
4205
- additional_info: 'Please autofill missing campaign fields using my brand profile',
4206
- campaign_id: 'dlc_1234567890'
4207
- );
4647
+ additional_info: "Please autofill missing campaign fields using my brand profile",
4648
+ campaign_id: "dlc_1234567890"
4649
+ )
4208
4650
  ```
4209
4651
  </dd>
4210
4652
  </dl>
@@ -4266,7 +4708,7 @@ Retrieve RCS campaign.
4266
4708
  <dd>
4267
4709
 
4268
4710
  ```ruby
4269
- client.campaigns.rcs.get(campaign_id: 'rcs_1234567890');
4711
+ client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
4270
4712
  ```
4271
4713
  </dd>
4272
4714
  </dl>
@@ -4328,7 +4770,7 @@ Submit your RCS campaign for approval and activation with carriers.
4328
4770
  <dd>
4329
4771
 
4330
4772
  ```ruby
4331
- client.campaigns.rcs.submit(campaign_id: 'rcs_1234567890');
4773
+ client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
4332
4774
  ```
4333
4775
  </dd>
4334
4776
  </dl>
@@ -4401,42 +4843,42 @@ All fields are **required** unless specified otherwise, and will be validated wh
4401
4843
  client.campaigns.rcs.upsert(
4402
4844
  agent: {
4403
4845
  color: "#000000",
4404
- description: 'Experience the power of RCS messaging with interactive demos. Test rich features like carousels, suggested replies, and media sharing. Get started with our developer-friendly APIs.',
4846
+ description: "Experience the power of RCS messaging with interactive demos. Test rich features like carousels, suggested replies, and media sharing. Get started with our developer-friendly APIs.",
4405
4847
  emails: [{
4406
- email: 'founders@trypinnacle.app',
4407
- label: 'Email Us'
4848
+ email: "founders@trypinnacle.app",
4849
+ label: "Email Us"
4408
4850
  }],
4409
- hero_url: 'https://pncl.to/D6pDSqGxqgfbCfQmw4gXdnlHu4uSB4',
4410
- icon_url: 'https://pncl.to/mq_tdIDenRb5eYpJiM8-3THCaUBrZP',
4411
- name: 'Pinnacle - RCS Demo',
4851
+ hero_url: "https://pncl.to/D6pDSqGxqgfbCfQmw4gXdnlHu4uSB4",
4852
+ icon_url: "https://pncl.to/mq_tdIDenRb5eYpJiM8-3THCaUBrZP",
4853
+ name: "Pinnacle - RCS Demo",
4412
4854
  phones: [{
4413
- label: 'Contact us directly',
4414
- phone: '+14154467821'
4855
+ label: "Contact us directly",
4856
+ phone: "+14154467821"
4415
4857
  }],
4416
4858
  websites: [{
4417
- label: 'Get started with Pinnacle',
4418
- url: 'https://www.trypinnacle.app/'
4859
+ label: "Get started with Pinnacle",
4860
+ url: "https://www.trypinnacle.app/"
4419
4861
  }]
4420
4862
  },
4421
- brand: 'b_1234567890',
4422
- campaign_id: 'rcs_1234567890',
4423
- expected_agent_responses: ['Here are the things I can help you with.', 'I can assist you with booking an appointment, or you may choose to book manually.', 'Here are the available times to connect with a representative tomorrow.', 'Your appointment has been scheduled.'],
4863
+ brand: "b_1234567890",
4864
+ campaign_id: "rcs_1234567890",
4865
+ expected_agent_responses: ["Here are the things I can help you with.", "I can assist you with booking an appointment, or you may choose to book manually.", "Here are the available times to connect with a representative tomorrow.", "Your appointment has been scheduled."],
4424
4866
  links: {
4425
- privacy_policy: '“https://www.trypinnacle.app/privacy”',
4426
- terms_of_service: '“https://www.trypinnacle.app/terms”'
4867
+ privacy_policy: "“https://www.trypinnacle.app/privacy”",
4868
+ terms_of_service: "“https://www.trypinnacle.app/terms”"
4427
4869
  },
4428
- use_case_description: 'Pinnacle is a developer-focused RCS assistant that helps teams design, test, and optimize rich messaging experiences across SMS, MMS, and RCS. The agent acts as both an “onboarding guide” for new customers and a “best-practices coach” for existing teams exploring higher-value RCS workflows like rich cards, carousels, and suggested actions.<br>
4870
+ use_case_description: "Pinnacle is a developer-focused RCS assistant that helps teams design, test, and optimize rich messaging experiences across SMS, MMS, and RCS. The agent acts as both an “onboarding guide” for new customers and a “best-practices coach” for existing teams exploring higher-value RCS workflows like rich cards, carousels, and suggested actions.<br>
4429
4871
  The agent delivers a mix of operational updates and educational content (2–6 messages/month). Content includes important platform notices (e.g., deliverability or throughput changes), implementation tips with sample RCS templates, and personalized recommendations on how to upgrade existing SMS campaigns into richer, higher-converting RCS conversations.
4430
- ',
4431
- messaging_type: 'OTP',
4432
- cta_media: '“https://www.pinnacle.sh/send”',
4433
- opt_in_method: 'We ensure consent through an explicit opt-in process that follows 10DLC best practices.Users must agree to receive messages from Pinnacle before the agent sends them any messages.<br>
4872
+ ",
4873
+ messaging_type: "OTP",
4874
+ cta_media: "“https://www.pinnacle.sh/send”",
4875
+ opt_in_method: "We ensure consent through an explicit opt-in process that follows 10DLC best practices.Users must agree to receive messages from Pinnacle before the agent sends them any messages.<br>
4434
4876
  Users agree to these messages by signing an opt-in paper form that they can be found online at https://www.pinnacle.sh/opt-in. We only send messages once users have filled out the form and submitted it to us via email or through the dashboard.
4435
- ',
4877
+ ",
4436
4878
  keywords: {
4437
4879
  help: {
4438
- message: 'Email founders@trypinnacle.app for support.',
4439
- keywords: ['HELP', 'SUPPORT']
4880
+ message: "Email founders@trypinnacle.app for support.",
4881
+ keywords: %w[HELP SUPPORT]
4440
4882
  },
4441
4883
  opt_in: {
4442
4884
  message: "Welcome back to Pinnacle!<br>
@@ -4444,20 +4886,20 @@ client.campaigns.rcs.upsert(
4444
4886
 
4445
4887
  Reply STOP to opt out and HELP for support. Message & rates may apply.
4446
4888
  ",
4447
- keywords: ['START', 'SUBSCRIBE']
4889
+ keywords: %w[START SUBSCRIBE]
4448
4890
  },
4449
4891
  opt_out: {
4450
4892
  message: "You've been unsubscribed from Pinnacle - RCS Demo and will no longer receive notifications. If you ever change your mind, reply START or SUBSCRIBE to rejoin anytime.",
4451
- keywords: ['STOP', 'UNSUBSCRIBE', 'END']
4893
+ keywords: %w[STOP UNSUBSCRIBE END]
4452
4894
  }
4453
4895
  },
4454
4896
  traffic: {
4455
4897
  monthly_website: 10000,
4456
4898
  monthly_rcs_estimate: 10000
4457
4899
  },
4458
- cta_language: 'By checking this box and submitting this form, you consent to receive transactional text messages for support, appointment, and reminder messages from Pinnacle Software Development Inc. Reply STOP to opt out. Reply HELP for help. Standard message and data rates may apply. Message frequency may vary. View our Terms and Conditions at https://www.pinnacle.sh/terms. View our Privacy Policy at https://www.pinnacle.sh/privacy.',
4900
+ cta_language: "By checking this box and submitting this form, you consent to receive transactional text messages for support, appointment, and reminder messages from Pinnacle Software Development Inc. Reply STOP to opt out. Reply HELP for help. Standard message and data rates may apply. Message frequency may vary. View our Terms and Conditions at https://www.pinnacle.sh/terms. View our Privacy Policy at https://www.pinnacle.sh/privacy.",
4459
4901
  demo_trigger: 'Text "START" to trigger the flow.'
4460
- );
4902
+ )
4461
4903
  ```
4462
4904
  </dd>
4463
4905
  </dl>
@@ -4619,9 +5061,9 @@ Validate your RCS campaign configuration against carrier requirements and compli
4619
5061
 
4620
5062
  ```ruby
4621
5063
  client.campaigns.rcs.validate(
4622
- additional_info: 'Please validate this DLC campaign for 10DLC compliance',
4623
- campaign_id: 'dlc_1234567890'
4624
- );
5064
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
5065
+ campaign_id: "dlc_1234567890"
5066
+ )
4625
5067
  ```
4626
5068
  </dd>
4627
5069
  </dl>
@@ -4683,7 +5125,7 @@ List all RCS campaigns with optional filtering and pagination. Results are sorte
4683
5125
  <dd>
4684
5126
 
4685
5127
  ```ruby
4686
- client.campaigns.rcs.list();
5128
+ client.campaigns.rcs.list
4687
5129
  ```
4688
5130
  </dd>
4689
5131
  </dl>
@@ -4746,6 +5188,92 @@ client.campaigns.rcs.list();
4746
5188
  </dl>
4747
5189
 
4748
5190
 
5191
+ </dd>
5192
+ </dl>
5193
+ </details>
5194
+
5195
+ ## Forms Submissions
5196
+ <details><summary><code>client.forms.submissions.<a href="/lib/pinnacle/forms/submissions/client.rb">list</a>(id, request) -> Pinnacle::Types::ListFormSubmissionsResponse</code></summary>
5197
+ <dl>
5198
+ <dd>
5199
+
5200
+ #### 📝 Description
5201
+
5202
+ <dl>
5203
+ <dd>
5204
+
5205
+ <dl>
5206
+ <dd>
5207
+
5208
+ Paginated list of completed submissions for a form, newest first. Each row includes the submitted `data` keyed by field `key`, the sender/recipient, IP, user-agent, and timestamps.
5209
+ </dd>
5210
+ </dl>
5211
+ </dd>
5212
+ </dl>
5213
+
5214
+ #### 🔌 Usage
5215
+
5216
+ <dl>
5217
+ <dd>
5218
+
5219
+ <dl>
5220
+ <dd>
5221
+
5222
+ ```ruby
5223
+ client.forms.submissions.list(
5224
+ id: "form_Oy2n7iUoi9CJwUU6",
5225
+ page_index: 0,
5226
+ page_size: 20
5227
+ )
5228
+ ```
5229
+ </dd>
5230
+ </dl>
5231
+ </dd>
5232
+ </dl>
5233
+
5234
+ #### ⚙️ Parameters
5235
+
5236
+ <dl>
5237
+ <dd>
5238
+
5239
+ <dl>
5240
+ <dd>
5241
+
5242
+ **id:** `String`
5243
+
5244
+ The unique identifier of the form whose submissions you want to list.
5245
+ <br><br> This identifier is a string that always begins with the prefix `form_`, for example: `form_Oy2n7iUoi9CJwUU6`.
5246
+
5247
+ </dd>
5248
+ </dl>
5249
+
5250
+ <dl>
5251
+ <dd>
5252
+
5253
+ **page_index:** `Integer` — Zero-based page index.
5254
+
5255
+ </dd>
5256
+ </dl>
5257
+
5258
+ <dl>
5259
+ <dd>
5260
+
5261
+ **page_size:** `Integer` — Number of submissions to return in a single page. Max 100.
5262
+
5263
+ </dd>
5264
+ </dl>
5265
+
5266
+ <dl>
5267
+ <dd>
5268
+
5269
+ **request_options:** `Pinnacle::Forms::Submissions::RequestOptions`
5270
+
5271
+ </dd>
5272
+ </dl>
5273
+ </dd>
5274
+ </dl>
5275
+
5276
+
4749
5277
  </dd>
4750
5278
  </dl>
4751
5279
  </details>
@@ -4779,10 +5307,10 @@ Send a SMS message immediately or schedule it for future delivery.
4779
5307
 
4780
5308
  ```ruby
4781
5309
  client.messages.sms.send_(
4782
- from: '+14155164736',
4783
- text: 'Hey!',
4784
- to: '+14154746461'
4785
- );
5310
+ from: "+14155164736",
5311
+ text: "Hey!",
5312
+ to: "+14154746461"
5313
+ )
4786
5314
  ```
4787
5315
  </dd>
4788
5316
  </dl>
@@ -4868,7 +5396,7 @@ Validate SMS message content without sending it.
4868
5396
  <dd>
4869
5397
 
4870
5398
  ```ruby
4871
- client.messages.sms.validate(text: 'Hello from Pinnacle');
5399
+ client.messages.sms.validate(text: "Hello from Pinnacle")
4872
5400
  ```
4873
5401
  </dd>
4874
5402
  </dl>
@@ -4932,15 +5460,15 @@ Send a MMS immediately or schedule it for future delivery.
4932
5460
 
4933
5461
  ```ruby
4934
5462
  client.messages.mms.send_(
4935
- from: '+14155164736',
4936
- media_urls: ['https://fastly.picsum.photos/id/941/300/300.jpg?hmac=mDxM9PWSqRDjecwSCEpzU4bj35gqnG7yA25OL29uNv0'],
5463
+ from: "+14155164736",
5464
+ media_urls: ["https://fastly.picsum.photos/id/941/300/300.jpg?hmac=mDxM9PWSqRDjecwSCEpzU4bj35gqnG7yA25OL29uNv0"],
4937
5465
  options: {
4938
5466
  multiple_messages: true,
4939
5467
  validate: true
4940
5468
  },
4941
- text: 'Check out this image!',
4942
- to: '+14154746461'
4943
- );
5469
+ text: "Check out this image!",
5470
+ to: "+14154746461"
5471
+ )
4944
5472
  ```
4945
5473
  </dd>
4946
5474
  </dl>
@@ -5039,9 +5567,9 @@ Validate MMS message content without sending it.
5039
5567
 
5040
5568
  ```ruby
5041
5569
  client.messages.mms.validate(
5042
- media_urls: ['https://upload.wikimedia.org/wikipedia/commons/b/b9/Pizigani_1367_Chart_1MB.jpg', 'https://fastly.picsum.photos/id/528/1000/1000.jpg?hmac=aTG0xNif9KbNryFN0ZNZ_nFK6aEpZxqUGCZF1KjOT8w', 'https://file-examples.com/storage/fefdd7ab126835e7993bb1a/2017/10/file_example_JPG_500kB.jpg'],
5043
- text: 'Check out these images!'
5044
- );
5570
+ media_urls: %w[https://upload.wikimedia.org/wikipedia/commons/b/b9/Pizigani_1367_Chart_1MB.jpg https://fastly.picsum.photos/id/528/1000/1000.jpg?hmac=aTG0xNif9KbNryFN0ZNZ_nFK6aEpZxqUGCZF1KjOT8w https://file-examples.com/storage/fefdd7ab126835e7993bb1a/2017/10/file_example_JPG_500kB.jpg],
5571
+ text: "Check out these images!"
5572
+ )
5045
5573
  ```
5046
5574
  </dd>
5047
5575
  </dl>
@@ -5107,11 +5635,10 @@ Requires an active RCS agent and recipient devices that support RCS Business Mes
5107
5635
 
5108
5636
  ```ruby
5109
5637
  client.messages.rcs.send_(
5110
- from: 'from',
5111
- to: 'to',
5112
- quick_replies: [],
5113
- text: 'text'
5114
- );
5638
+ from: "from",
5639
+ to: "to",
5640
+ text: "text"
5641
+ )
5115
5642
  ```
5116
5643
  </dd>
5117
5644
  </dl>
@@ -5184,9 +5711,9 @@ This endpoint allows RCS agents to display a typing indicator to recipients. The
5184
5711
 
5185
5712
  ```ruby
5186
5713
  client.messages.rcs.send_typing(
5187
- agent_id: 'agent_pinnacle',
5188
- to: '+14154746461'
5189
- );
5714
+ agent_id: "agent_pinnacle",
5715
+ to: "+14154746461"
5716
+ )
5190
5717
  ```
5191
5718
  </dd>
5192
5719
  </dl>
@@ -5264,10 +5791,7 @@ Validate RCS message content without sending it.
5264
5791
  <dd>
5265
5792
 
5266
5793
  ```ruby
5267
- client.messages.rcs.validate(
5268
- quick_replies: [],
5269
- text: 'text'
5270
- );
5794
+ client.messages.rcs.validate(text: "text")
5271
5795
  ```
5272
5796
  </dd>
5273
5797
  </dl>
@@ -5335,12 +5859,12 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5335
5859
 
5336
5860
  ```ruby
5337
5861
  client.messages.blast.sms(
5338
- audience_id: 'aud_abc123',
5339
- senders: ['+14155164736', '+14155164737'],
5862
+ audience_id: "aud_abc123",
5863
+ senders: %w[+14155164736 +14155164737],
5340
5864
  message: {
5341
- text: 'Hello from Pinnacle!'
5865
+ text: "Hello from Pinnacle!"
5342
5866
  }
5343
- );
5867
+ )
5344
5868
  ```
5345
5869
  </dd>
5346
5870
  </dl>
@@ -5443,16 +5967,16 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5443
5967
 
5444
5968
  ```ruby
5445
5969
  client.messages.blast.mms(
5446
- audience_id: 'aud_abc123',
5447
- senders: ['+14155164736', '+14155164737'],
5970
+ audience_id: "aud_abc123",
5971
+ senders: %w[+14155164736 +14155164737],
5448
5972
  message: {
5449
- media_urls: ['https://fastly.picsum.photos/id/941/300/300.jpg'],
5450
- text: 'Check out this image!'
5973
+ media_urls: ["https://fastly.picsum.photos/id/941/300/300.jpg"],
5974
+ text: "Check out this image!"
5451
5975
  },
5452
5976
  options: {
5453
5977
  validate: true
5454
5978
  }
5455
- );
5979
+ )
5456
5980
  ```
5457
5981
  </dd>
5458
5982
  </dl>
@@ -5555,21 +6079,21 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5555
6079
 
5556
6080
  ```ruby
5557
6081
  client.messages.blast.rcs(
5558
- audience_id: 'aud_abc123',
5559
- senders: ['agent_pinnacle', 'agent_pinnacle2'],
6082
+ audience_id: "aud_abc123",
6083
+ senders: %w[agent_pinnacle agent_pinnacle2],
5560
6084
  message: {
5561
6085
  quick_replies: [],
5562
- text: 'Hello from Pinnacle RCS!'
6086
+ text: "Hello from Pinnacle RCS!"
5563
6087
  },
5564
6088
  fallback: {
5565
- from: '+14155164736',
5566
- text: 'Hello from Pinnacle! Reply LEARN to learn more.'
6089
+ from: "+14155164736",
6090
+ text: "Hello from Pinnacle! Reply LEARN to learn more."
5567
6091
  },
5568
6092
  options: {
5569
6093
  transcode: true,
5570
6094
  validate: true
5571
6095
  }
5572
- );
6096
+ )
5573
6097
  ```
5574
6098
  </dd>
5575
6099
  </dl>
@@ -5676,7 +6200,7 @@ Works for both individual scheduled messages and scheduled blasts. Use the `sche
5676
6200
  <dd>
5677
6201
 
5678
6202
  ```ruby
5679
- client.messages.schedule.cancel(id: 'id');
6203
+ client.messages.schedule.cancel(id: "id")
5680
6204
  ```
5681
6205
  </dd>
5682
6206
  </dl>
@@ -5739,7 +6263,7 @@ List all scheduled messages with optional filtering and pagination. Results are
5739
6263
  <dd>
5740
6264
 
5741
6265
  ```ruby
5742
- client.messages.schedules.list();
6266
+ client.messages.schedules.list
5743
6267
  ```
5744
6268
  </dd>
5745
6269
  </dl>
@@ -5834,7 +6358,7 @@ List all blasts with optional filtering and pagination. Results are sorted by cr
5834
6358
  <dd>
5835
6359
 
5836
6360
  ```ruby
5837
- client.messages.blasts.list();
6361
+ client.messages.blasts.list
5838
6362
  ```
5839
6363
  </dd>
5840
6364
  </dl>
@@ -5930,10 +6454,10 @@ Link a phone number to a specific campaign. Phone numbers must be linked to a ca
5930
6454
 
5931
6455
  ```ruby
5932
6456
  client.phone_numbers.campaign.attach(
5933
- phones: ['+14155550123', '+14155559876', '+14155550111'],
5934
- campaign_type: 'TOLL_FREE',
5935
- campaign_id: 'tf_1234567890'
5936
- );
6457
+ phones: %w[+14155550123 +14155559876 +14155550111],
6458
+ campaign_type: "TOLL_FREE",
6459
+ campaign_id: "tf_1234567890"
6460
+ )
5937
6461
  ```
5938
6462
  </dd>
5939
6463
  </dl>
@@ -6023,7 +6547,7 @@ Remove the association between a phone number and its attached campaign.
6023
6547
  <dd>
6024
6548
 
6025
6549
  ```ruby
6026
- client.phone_numbers.campaign.detach(phones: ['+14155559876', '14155550111']);
6550
+ client.phone_numbers.campaign.detach(phones: %w[+14155559876 14155550111])
6027
6551
  ```
6028
6552
  </dd>
6029
6553
  </dl>
@@ -6089,7 +6613,7 @@ List all RCS agents with pagination. Results are sorted by creation date, newest
6089
6613
  <dd>
6090
6614
 
6091
6615
  ```ruby
6092
- client.rcs.agents.list();
6616
+ client.rcs.agents.list
6093
6617
  ```
6094
6618
  </dd>
6095
6619
  </dl>
@@ -6176,7 +6700,7 @@ List all whitelisted test numbers with optional filtering and pagination. Result
6176
6700
  <dd>
6177
6701
 
6178
6702
  ```ruby
6179
- client.rcs.whitelisted_numbers.list();
6703
+ client.rcs.whitelisted_numbers.list
6180
6704
  ```
6181
6705
  </dd>
6182
6706
  </dl>
@@ -6302,28 +6826,28 @@ Once your test agent is created, you'll need to:
6302
6826
 
6303
6827
  ```ruby
6304
6828
  client.rcs.test.create_agent(
6305
- display_name: 'Acme Support',
6306
- description: 'Get help with your Acme orders and account',
6307
- logo_url: 'https://example.com/logo.png',
6308
- hero_url: 'https://example.com/hero.png',
6829
+ display_name: "Acme Support",
6830
+ description: "Get help with your Acme orders and account",
6831
+ logo_url: "https://example.com/logo.png",
6832
+ hero_url: "https://example.com/hero.png",
6309
6833
  phone_numbers: [{
6310
- number: '+14155550123',
6311
- label: 'Support'
6834
+ number: "+14155550123",
6835
+ label: "Support"
6312
6836
  }],
6313
6837
  emails: [{
6314
- address: 'support@example.com',
6315
- label: 'Support'
6838
+ address: "support@example.com",
6839
+ label: "Support"
6316
6840
  }],
6317
6841
  websites: [{
6318
- url: 'https://example.com',
6319
- label: 'Website'
6842
+ url: "https://example.com",
6843
+ label: "Website"
6320
6844
  }],
6321
- privacy_url: 'https://example.com/privacy',
6322
- terms_url: 'https://example.com/terms',
6845
+ privacy_url: "https://example.com/privacy",
6846
+ terms_url: "https://example.com/terms",
6323
6847
  color: "#FF6B00",
6324
6848
  is_conversational: true,
6325
- agent_use_case: 'MULTI_USE'
6326
- );
6849
+ agent_use_case: "MULTI_USE"
6850
+ )
6327
6851
  ```
6328
6852
  </dd>
6329
6853
  </dl>
@@ -6525,9 +7049,9 @@ If updating images, the same requirements apply as when creating an agent:
6525
7049
 
6526
7050
  ```ruby
6527
7051
  client.rcs.test.update_agent(
6528
- agent_id: 'agent_abc123def456',
6529
- display_name: 'Acme Premium Support'
6530
- );
7052
+ agent_id: "agent_abc123def456",
7053
+ display_name: "Acme Premium Support"
7054
+ )
6531
7055
  ```
6532
7056
  </dd>
6533
7057
  </dl>
@@ -6735,9 +7259,9 @@ Attempting to whitelist during the cooldown returns a `500` error with the remai
6735
7259
 
6736
7260
  ```ruby
6737
7261
  client.rcs.test.whitelist_number(
6738
- agent_id: 'agent_abc123def456',
6739
- phone_number: '+12345678901'
6740
- );
7262
+ agent_id: "agent_abc123def456",
7263
+ phone_number: "+12345678901"
7264
+ )
6741
7265
  ```
6742
7266
  </dd>
6743
7267
  </dl>
@@ -6828,9 +7352,9 @@ whether the recipient has accepted or rejected the tester invite.
6828
7352
 
6829
7353
  ```ruby
6830
7354
  client.rcs.test.get_whitelist_status(
6831
- agent_id: 'agent_abc123def456',
6832
- phone_number: '+12345678901'
6833
- );
7355
+ agent_id: "agent_abc123def456",
7356
+ phone_number: "+12345678901"
7357
+ )
6834
7358
  ```
6835
7359
  </dd>
6836
7360
  </dl>
@@ -6901,7 +7425,7 @@ Retrieve a brand's status.
6901
7425
  <dd>
6902
7426
 
6903
7427
  ```ruby
6904
- client.status.get.brand(brand_id: 'b_1234567890');
7428
+ client.status.get.brand(brand_id: "b_1234567890")
6905
7429
  ```
6906
7430
  </dd>
6907
7431
  </dl>
@@ -6963,7 +7487,7 @@ Retrieve a toll-free campaign's status.
6963
7487
  <dd>
6964
7488
 
6965
7489
  ```ruby
6966
- client.status.get.toll_free(campaign_id: 'tf_1234567890');
7490
+ client.status.get.toll_free(campaign_id: "tf_1234567890")
6967
7491
  ```
6968
7492
  </dd>
6969
7493
  </dl>
@@ -7025,7 +7549,7 @@ Retrieve a 10DLC campaign's status.
7025
7549
  <dd>
7026
7550
 
7027
7551
  ```ruby
7028
- client.status.get.dlc(campaign_id: 'dlc_1234567890');
7552
+ client.status.get.dlc(campaign_id: "dlc_1234567890")
7029
7553
  ```
7030
7554
  </dd>
7031
7555
  </dl>
@@ -7087,7 +7611,7 @@ Retrieve a RCS campaign's status.
7087
7611
  <dd>
7088
7612
 
7089
7613
  ```ruby
7090
- client.status.get.rcs(campaign_id: 'rcs_1234567890');
7614
+ client.status.get.rcs(campaign_id: "rcs_1234567890")
7091
7615
  ```
7092
7616
  </dd>
7093
7617
  </dl>
@@ -7151,7 +7675,7 @@ Check if a number is active and ready to send messages.
7151
7675
  <dd>
7152
7676
 
7153
7677
  ```ruby
7154
- client.status.get.phone_number(phone_number: '+14151234567');
7678
+ client.status.get.phone_number(phone_number: "+14151234567")
7155
7679
  ```
7156
7680
  </dd>
7157
7681
  </dl>
@@ -7215,11 +7739,11 @@ Create a shortened URL that redirects visitors to the provided destination URL.
7215
7739
 
7216
7740
  ```ruby
7217
7741
  client.tools.url.create(
7218
- url: 'https://www.pinnacle.sh/',
7742
+ url: "https://www.pinnacle.sh/",
7219
7743
  options: {
7220
- expires_at: '2025-06-23T16:18:25.000Z'
7744
+ expires_at: "2025-06-23T16:18:25.000Z"
7221
7745
  }
7222
- );
7746
+ )
7223
7747
  ```
7224
7748
  </dd>
7225
7749
  </dl>
@@ -7289,7 +7813,7 @@ Retrieve configuration and details for your shortened URL using its unique ident
7289
7813
  <dd>
7290
7814
 
7291
7815
  ```ruby
7292
- client.tools.url.get(link_id: 'ePzVxILF');
7816
+ client.tools.url.get(link_id: "ePzVxILF")
7293
7817
  ```
7294
7818
  </dd>
7295
7819
  </dl>
@@ -7356,9 +7880,9 @@ Update the destination or expiration date of an existing shortened URL. Expiring
7356
7880
 
7357
7881
  ```ruby
7358
7882
  client.tools.url.update(
7359
- link_id: 'ePzVxILF',
7360
- url: 'https://www.pinnacle.sh/'
7361
- );
7883
+ link_id: "ePzVxILF",
7884
+ url: "https://www.pinnacle.sh/"
7885
+ )
7362
7886
  ```
7363
7887
  </dd>
7364
7888
  </dl>
@@ -7440,7 +7964,7 @@ List all shortened URLs with pagination. Results are sorted by creation date, ne
7440
7964
  <dd>
7441
7965
 
7442
7966
  ```ruby
7443
- client.tools.url.list();
7967
+ client.tools.url.list
7444
7968
  ```
7445
7969
  </dd>
7446
7970
  </dl>
@@ -7520,16 +8044,16 @@ Generate presigned URLs that let you upload files directly to our storage and al
7520
8044
 
7521
8045
  ```ruby
7522
8046
  client.tools.file.upload(
7523
- content_type: 'image/jpeg',
8047
+ content_type: "image/jpeg",
7524
8048
  size: 1024,
7525
- name: 'test.jpg',
8049
+ name: "test.jpg",
7526
8050
  options: {
7527
- delete_at: '2025-12-31T23:59:59Z',
8051
+ delete_at: "2025-12-31T23:59:59Z",
7528
8052
  download: {
7529
- expires_at: '2025-06-30T12:00:00.000Z'
8053
+ expires_at: "2025-06-30T12:00:00.000Z"
7530
8054
  }
7531
8055
  }
7532
- );
8056
+ )
7533
8057
  ```
7534
8058
  </dd>
7535
8059
  </dl>
@@ -7627,7 +8151,7 @@ Refresh expiring presigned URLs for Pinnacle-hosted files to extend their access
7627
8151
  <dd>
7628
8152
 
7629
8153
  ```ruby
7630
- client.tools.file.refresh(urls: ['https://server.trypinnacle.app/storage/v1/object/sign/vault/3/test.jpg?token=oldtoken', 'https://server.trypinnacle.app/storage/v1/object/sign/vault/3/document.pdf?token=oldtoken2', 'invalid/url', 'https://google.com']);
8154
+ client.tools.file.refresh(urls: %w[https://server.trypinnacle.app/storage/v1/object/sign/vault/3/test.jpg?token=oldtoken https://server.trypinnacle.app/storage/v1/object/sign/vault/3/document.pdf?token=oldtoken2 invalid/url https://google.com])
7631
8155
  ```
7632
8156
  </dd>
7633
8157
  </dl>
@@ -7690,7 +8214,7 @@ Retrieve contact information as a vCard and get a presigned URL to download the
7690
8214
  <dd>
7691
8215
 
7692
8216
  ```ruby
7693
- client.tools.contact_card.get(id: 'cc_1234567890');
8217
+ client.tools.contact_card.get(id: "cc_1234567890")
7694
8218
  ```
7695
8219
  </dd>
7696
8220
  </dl>
@@ -7761,51 +8285,51 @@ Create a new contact card or updates an existing one with full vCard data. Conta
7761
8285
 
7762
8286
  ```ruby
7763
8287
  client.tools.contact_card.upsert(
7764
- id: 'cc_1234567890',
7765
- formatted_name: 'Jane Smith',
8288
+ id: "cc_1234567890",
8289
+ formatted_name: "Jane Smith",
7766
8290
  name: {
7767
- family_name: 'Smith',
7768
- given_name: 'Jane',
7769
- additional_names: ['A.'],
7770
- honorific_prefixes: ['Dr.'],
7771
- honorific_suffixes: ['PhD']
8291
+ family_name: "Smith",
8292
+ given_name: "Jane",
8293
+ additional_names: ["A."],
8294
+ honorific_prefixes: ["Dr."],
8295
+ honorific_suffixes: ["PhD"]
7772
8296
  },
7773
- nickname: ['Janie'],
7774
- birthday: '1990-02-15',
8297
+ nickname: ["Janie"],
8298
+ birthday: "1990-02-15",
7775
8299
  addresses: [{
7776
- country_name: 'USA',
7777
- extended_address: 'Apt. 4B',
7778
- locality: 'Anytown',
7779
- postal_code: '90210',
7780
- post_office_box: 'PO Box 123',
7781
- region: 'CA',
7782
- street_address: '123 Main St',
7783
- type: ['HOME', 'PREF']
8300
+ country_name: "USA",
8301
+ extended_address: "Apt. 4B",
8302
+ locality: "Anytown",
8303
+ postal_code: "90210",
8304
+ post_office_box: "PO Box 123",
8305
+ region: "CA",
8306
+ street_address: "123 Main St",
8307
+ type: %w[HOME PREF]
7784
8308
  }],
7785
- url: 'https://app.pinnacle.sh',
8309
+ url: "https://app.pinnacle.sh",
7786
8310
  phones: [{
7787
- type: ['CELL'],
7788
- value: '+15551234567'
8311
+ type: ["CELL"],
8312
+ value: "+15551234567"
7789
8313
  }],
7790
8314
  emails: [{
7791
- type: ['INTERNET'],
7792
- value: 'jane.smith@example.com'
8315
+ type: ["INTERNET"],
8316
+ value: "jane.smith@example.com"
7793
8317
  }],
7794
- timezone: 'America/Los_Angeles',
8318
+ timezone: "America/Los_Angeles",
7795
8319
  geo: {
7796
8320
  latitude: 34.0522,
7797
8321
  longitude: -118.2437
7798
8322
  },
7799
- title: 'Engineer',
7800
- role: 'Developer',
8323
+ title: "Engineer",
8324
+ role: "Developer",
7801
8325
  organization: {
7802
- name: 'Acme Co',
7803
- units: ['Engineering', 'R&D']
8326
+ name: "Acme Co",
8327
+ units: %w[Engineering R&D]
7804
8328
  },
7805
- categories: ['Friend', 'Colleague'],
7806
- note: 'Test contact entry',
7807
- photo: 'https://fastly.picsum.photos/id/853/200/200.jpg?hmac=f4LF-tVBBnJb9PQAVEO8GCTGWgLUnxQLw44rUofE6mQ'
7808
- );
8329
+ categories: %w[Friend Colleague],
8330
+ note: "Test contact entry",
8331
+ photo: "https://fastly.picsum.photos/id/853/200/200.jpg?hmac=f4LF-tVBBnJb9PQAVEO8GCTGWgLUnxQLw44rUofE6mQ"
8332
+ )
7809
8333
  ```
7810
8334
  </dd>
7811
8335
  </dl>
@@ -7839,3 +8363,4 @@ client.tools.contact_card.upsert(
7839
8363
  </dd>
7840
8364
  </dl>
7841
8365
  </details>
8366
+