rcs 2.0.16 → 2.0.17

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 +6 -5
  3. data/.rubocop.yml +5 -15
  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/boolean.rb +1 -1
  21. data/lib/pinnacle/internal/types/union.rb +1 -1
  22. data/lib/pinnacle/internal/types/utils.rb +2 -2
  23. data/lib/pinnacle/messages/client.rb +1 -1
  24. data/lib/pinnacle/messages/schedule/client.rb +1 -1
  25. data/lib/pinnacle/rcs/client.rb +1 -1
  26. data/lib/pinnacle/rcs/test/client.rb +3 -3
  27. data/lib/pinnacle/status/get/client.rb +5 -5
  28. data/lib/pinnacle/tools/url/client.rb +2 -2
  29. data/lib/pinnacle/types/address_field.rb +14 -0
  30. data/lib/pinnacle/types/agent_summary_carrier_launches.rb +7 -1
  31. data/lib/pinnacle/types/campaign_status_event.rb +21 -0
  32. data/lib/pinnacle/types/campaign_status_event_agent.rb +11 -0
  33. data/lib/pinnacle/types/campaign_status_event_brand.rb +11 -0
  34. data/lib/pinnacle/types/campaign_status_event_campaign.rb +11 -0
  35. data/lib/pinnacle/types/campaign_status_event_campaign_type.rb +13 -0
  36. data/lib/pinnacle/types/campaign_status_event_carrier_launches.rb +13 -0
  37. data/lib/pinnacle/types/campaign_status_event_carrier_launches_carriers.rb +16 -0
  38. data/lib/pinnacle/types/campaign_status_event_carrier_launches_verification.rb +15 -0
  39. data/lib/pinnacle/types/carrier_launches.rb +5 -5
  40. data/lib/pinnacle/types/carrier_launches_carriers.rb +16 -0
  41. data/lib/pinnacle/types/carrier_launches_verification.rb +15 -0
  42. data/lib/pinnacle/types/checkbox_field.rb +13 -0
  43. data/lib/pinnacle/types/color_field.rb +8 -0
  44. data/lib/pinnacle/types/create_form_request.rb +23 -0
  45. data/lib/pinnacle/types/date_field.rb +12 -0
  46. data/lib/pinnacle/types/datetime_field.rb +12 -0
  47. data/lib/pinnacle/types/email_field.rb +10 -0
  48. data/lib/pinnacle/types/field_base.rb +14 -0
  49. data/lib/pinnacle/types/form.rb +22 -0
  50. data/lib/pinnacle/types/form_background.rb +17 -0
  51. data/lib/pinnacle/types/form_background_gradient.rb +12 -0
  52. data/lib/pinnacle/types/form_background_image.rb +13 -0
  53. data/lib/pinnacle/types/form_background_pattern.rb +10 -0
  54. data/lib/pinnacle/types/form_background_pattern_preset.rb +16 -0
  55. data/lib/pinnacle/types/form_background_solid.rb +34 -0
  56. data/lib/pinnacle/types/form_color_palette.rb +12 -0
  57. data/lib/pinnacle/types/form_definition.rb +15 -0
  58. data/lib/pinnacle/types/form_field.rb +29 -0
  59. data/lib/pinnacle/types/form_field_option.rb +11 -0
  60. data/lib/pinnacle/types/form_gradient.rb +12 -0
  61. data/lib/pinnacle/types/form_gradient_angle.rb +12 -0
  62. data/lib/pinnacle/types/form_id_reference.rb +23 -0
  63. data/lib/pinnacle/types/form_submission.rb +19 -0
  64. data/lib/pinnacle/types/form_submission_answer.rb +20 -0
  65. data/lib/pinnacle/types/form_submission_event.rb +15 -0
  66. data/lib/pinnacle/types/form_submission_event_conversation.rb +20 -0
  67. data/lib/pinnacle/types/form_submission_event_form.rb +12 -0
  68. data/lib/pinnacle/types/form_submission_event_submission.rb +17 -0
  69. data/lib/pinnacle/types/form_submitted_field.rb +13 -0
  70. data/lib/pinnacle/types/form_theme_override.rb +25 -0
  71. data/lib/pinnacle/types/form_theme_override_colors.rb +12 -0
  72. data/lib/pinnacle/types/form_theme_override_content_alignment.rb +13 -0
  73. data/lib/pinnacle/types/form_theme_override_corner_radius.rb +13 -0
  74. data/lib/pinnacle/types/form_theme_override_font_family.rb +15 -0
  75. data/lib/pinnacle/types/form_theme_override_theme_mode.rb +13 -0
  76. data/lib/pinnacle/types/list_form_submissions_response.rb +12 -0
  77. data/lib/pinnacle/types/list_forms_response.rb +12 -0
  78. data/lib/pinnacle/types/message_event.rb +1 -1
  79. data/lib/pinnacle/types/message_event_type.rb +12 -0
  80. data/lib/pinnacle/types/number_field.rb +13 -0
  81. data/lib/pinnacle/types/phone_field.rb +11 -0
  82. data/lib/pinnacle/types/radio_field.rb +10 -0
  83. data/lib/pinnacle/types/range_field.rb +12 -0
  84. data/lib/pinnacle/types/rating_field.rb +11 -0
  85. data/lib/pinnacle/types/scheduled_form_send_response_form.rb +10 -0
  86. data/lib/pinnacle/types/scheduled_form_send_response_submission.rb +10 -0
  87. data/lib/pinnacle/types/scheduled_form_send_result.rb +13 -0
  88. data/lib/pinnacle/types/select_field.rb +11 -0
  89. data/lib/pinnacle/types/send_form_options.rb +11 -0
  90. data/lib/pinnacle/types/send_form_options_webview_mode.rb +13 -0
  91. data/lib/pinnacle/types/send_form_params.rb +20 -0
  92. data/lib/pinnacle/types/send_form_result.rb +17 -0
  93. data/lib/pinnacle/types/send_form_via_rcs_params.rb +14 -0
  94. data/lib/pinnacle/types/send_form_via_rcs_request_fallback.rb +10 -0
  95. data/lib/pinnacle/types/send_form_via_rcs_request_form.rb +13 -0
  96. data/lib/pinnacle/types/send_form_via_sms_params.rb +13 -0
  97. data/lib/pinnacle/types/send_form_via_sms_request_form.rb +12 -0
  98. data/lib/pinnacle/types/text_field.rb +13 -0
  99. data/lib/pinnacle/types/textarea_field.rb +13 -0
  100. data/lib/pinnacle/types/time_field.rb +12 -0
  101. data/lib/pinnacle/types/url_field.rb +10 -0
  102. data/lib/pinnacle/types/verification_status.rb +13 -0
  103. data/lib/pinnacle/types/webhook_event_enum.rb +2 -0
  104. data/lib/pinnacle/version.rb +1 -1
  105. data/lib/pinnacle/wrapper/messages/client.rb +11 -2
  106. data/lib/pinnacle.rb +79 -2
  107. data/lib/rcs.rb +206 -15
  108. data/reference.md +807 -300
  109. metadata +79 -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>
@@ -2800,7 +2800,7 @@ Subscriptions are additive — attaching new senders does not remove existing on
2800
2800
  <dd>
2801
2801
 
2802
2802
  ```ruby
2803
- client.webhooks.attach(senders: ['+14155551234', 'agent_abc123']);
2803
+ client.webhooks.attach(senders: %w[+14155551234 agent_abc123])
2804
2804
  ```
2805
2805
  </dd>
2806
2806
  </dl>
@@ -2855,7 +2855,7 @@ Supplying `headers` alongside `webhookId` **overwrites** the stored headers on t
2855
2855
 
2856
2856
  Event type filter for the subscription. Set to `null` to receive all events. <br>
2857
2857
 
2858
- `USER.TYPING` is only supported for RCS agent senders, not phone numbers.
2858
+ `USER.TYPING` and `CAMPAIGN.STATUS` are only supported for RCS agent senders, not phone numbers — attempting to attach either of these events to a phone number returns `400 Bad Request`.
2859
2859
 
2860
2860
  </dd>
2861
2861
  </dl>
@@ -2921,9 +2921,9 @@ The webhook itself is not deleted and remains available for use with other sende
2921
2921
 
2922
2922
  ```ruby
2923
2923
  client.webhooks.detach(
2924
- webhook_id: 'webhookId',
2925
- senders: ['+14155551234', 'agent_abc123']
2926
- );
2924
+ webhook_id: "webhookId",
2925
+ senders: %w[+14155551234 agent_abc123]
2926
+ )
2927
2927
  ```
2928
2928
  </dd>
2929
2929
  </dl>
@@ -2962,6 +2962,426 @@ client.webhooks.detach(
2962
2962
  </dl>
2963
2963
 
2964
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
+
2965
3385
  </dd>
2966
3386
  </dl>
2967
3387
  </details>
@@ -2998,9 +3418,9 @@ Remove contacts from an existing audience. This operation is idempotent.
2998
3418
 
2999
3419
  ```ruby
3000
3420
  client.audiences.contacts.remove(
3001
- id: 'aud_abc123',
3002
- contacts: ['+12125551234', 'co_def456']
3003
- );
3421
+ id: "aud_abc123",
3422
+ contacts: %w[+12125551234 co_def456]
3423
+ )
3004
3424
  ```
3005
3425
  </dd>
3006
3426
  </dl>
@@ -3078,9 +3498,9 @@ Add contacts to an existing audience. This operation is additive and idempotent.
3078
3498
 
3079
3499
  ```ruby
3080
3500
  client.audiences.contacts.add(
3081
- id: 'aud_abc123',
3082
- contacts: ['+12125551234', 'co_def456', '+13105551234']
3083
- );
3501
+ id: "aud_abc123",
3502
+ contacts: %w[+12125551234 co_def456 +13105551234]
3503
+ )
3084
3504
  ```
3085
3505
  </dd>
3086
3506
  </dl>
@@ -3155,9 +3575,9 @@ Generate campaign details based off existing campaign and the brand it's connect
3155
3575
 
3156
3576
  ```ruby
3157
3577
  client.campaigns.dlc.autofill(
3158
- additional_info: 'Please autofill missing campaign fields using my brand profile',
3159
- campaign_id: 'dlc_1234567890'
3160
- );
3578
+ additional_info: "Please autofill missing campaign fields using my brand profile",
3579
+ campaign_id: "dlc_1234567890"
3580
+ )
3161
3581
  ```
3162
3582
  </dd>
3163
3583
  </dl>
@@ -3219,7 +3639,7 @@ Retrieve 10DLC campaign.
3219
3639
  <dd>
3220
3640
 
3221
3641
  ```ruby
3222
- client.campaigns.dlc.get(campaign_id: 'dlc_1234567890');
3642
+ client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
3223
3643
  ```
3224
3644
  </dd>
3225
3645
  </dl>
@@ -3281,7 +3701,7 @@ Submit your 10DLC campaign for approval and activation with carriers.
3281
3701
  <dd>
3282
3702
 
3283
3703
  ```ruby
3284
- client.campaigns.dlc.submit(campaign_id: 'dlc_1234567890');
3704
+ client.campaigns.dlc.submit(campaign_id: "dlc_1234567890")
3285
3705
  ```
3286
3706
  </dd>
3287
3707
  </dl>
@@ -3358,25 +3778,25 @@ All fields are **required** unless specified otherwise, and will be validated wh
3358
3778
  ```ruby
3359
3779
  client.campaigns.dlc.upsert(
3360
3780
  auto_renew: true,
3361
- brand: 'b_1234567890',
3362
- 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.",
3363
3783
  keywords: {
3364
3784
  help: {
3365
- 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.',
3366
- 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]
3367
3787
  },
3368
3788
  opt_in: {
3369
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",
3370
- values: ['START', 'YES', 'SUBSCRIBE']
3790
+ values: %w[START YES SUBSCRIBE]
3371
3791
  },
3372
3792
  opt_out: {
3373
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.",
3374
- values: ['STOP', 'CANCEL', 'UNSUBSCRIBE']
3794
+ values: %w[STOP CANCEL UNSUBSCRIBE]
3375
3795
  }
3376
3796
  },
3377
3797
  links: {
3378
- privacy_policy: 'https://www.pinnacle.sh/privacy',
3379
- 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"
3380
3800
  },
3381
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',
3382
3802
  name: "Pinnacle's Account Notifications",
@@ -3384,16 +3804,16 @@ client.campaigns.dlc.upsert(
3384
3804
  affiliate_marketing: false,
3385
3805
  age_gated: false,
3386
3806
  direct_lending: false,
3387
- embedded_link: 'https://www.pinnacle.sh/example',
3807
+ embedded_link: "https://www.pinnacle.sh/example",
3388
3808
  embedded_phone: false,
3389
3809
  number_pooling: false
3390
3810
  },
3391
- 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."],
3392
3812
  use_case: {
3393
- sub: ['ACCOUNT_NOTIFICATION', 'CUSTOMER_CARE', 'SECURITY_ALERT'],
3394
- value: 'MIXED'
3813
+ sub: %w[ACCOUNT_NOTIFICATION CUSTOMER_CARE SECURITY_ALERT],
3814
+ value: "MIXED"
3395
3815
  }
3396
- );
3816
+ )
3397
3817
  ```
3398
3818
  </dd>
3399
3819
  </dl>
@@ -3540,9 +3960,9 @@ Validate your 10DLC campaign configuration against carrier requirements and comp
3540
3960
 
3541
3961
  ```ruby
3542
3962
  client.campaigns.dlc.validate(
3543
- additional_info: 'Please validate this DLC campaign for 10DLC compliance',
3544
- campaign_id: 'dlc_1234567890'
3545
- );
3963
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
3964
+ campaign_id: "dlc_1234567890"
3965
+ )
3546
3966
  ```
3547
3967
  </dd>
3548
3968
  </dl>
@@ -3604,7 +4024,7 @@ List all 10DLC campaigns with optional filtering and pagination. Results are sor
3604
4024
  <dd>
3605
4025
 
3606
4026
  ```ruby
3607
- client.campaigns.dlc.list();
4027
+ client.campaigns.dlc.list
3608
4028
  ```
3609
4029
  </dd>
3610
4030
  </dl>
@@ -3700,9 +4120,9 @@ Generate campaign details based off existing campaign and the brand it's connect
3700
4120
 
3701
4121
  ```ruby
3702
4122
  client.campaigns.toll_free.autofill(
3703
- additional_info: 'Please autofill missing campaign fields using my brand profile',
3704
- campaign_id: 'dlc_1234567890'
3705
- );
4123
+ additional_info: "Please autofill missing campaign fields using my brand profile",
4124
+ campaign_id: "dlc_1234567890"
4125
+ )
3706
4126
  ```
3707
4127
  </dd>
3708
4128
  </dl>
@@ -3764,7 +4184,7 @@ Retrieve Toll-Free campaign.
3764
4184
  <dd>
3765
4185
 
3766
4186
  ```ruby
3767
- client.campaigns.toll_free.get(campaign_id: 'tf_1234567890');
4187
+ client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
3768
4188
  ```
3769
4189
  </dd>
3770
4190
  </dl>
@@ -3826,7 +4246,7 @@ Submit your toll-free campaign for approval and activation with carriers.
3826
4246
  <dd>
3827
4247
 
3828
4248
  ```ruby
3829
- client.campaigns.toll_free.submit(campaign_id: 'tf_1234567890');
4249
+ client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
3830
4250
  ```
3831
4251
  </dd>
3832
4252
  </dl>
@@ -3899,26 +4319,26 @@ All fields are **required** unless specified otherwise, and will be validated wh
3899
4319
 
3900
4320
  ```ruby
3901
4321
  client.campaigns.toll_free.upsert(
3902
- brand: 'b_1234567890',
3903
- campaign_id: 'tf_1234567890',
4322
+ brand: "b_1234567890",
4323
+ campaign_id: "tf_1234567890",
3904
4324
  keywords: {
3905
4325
  help: {
3906
- 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."
3907
4327
  },
3908
4328
  opt_in: {
3909
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/",
3910
- keywords: ['START', 'SUBSCRIBE']
4330
+ keywords: %w[START SUBSCRIBE]
3911
4331
  }
3912
4332
  },
3913
4333
  links: {
3914
- privacy_policy: 'https://www.pinnacle.sh/privacy',
3915
- 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"
3916
4336
  },
3917
- monthly_volume: '10,000',
3918
- name: 'Pinnacle',
4337
+ monthly_volume: "10,000",
4338
+ name: "Pinnacle",
3919
4339
  opt_in: {
3920
- method_: 'PAPER',
3921
- url: 'https://www.pinnacle.sh/opt-in',
4340
+ method_: "PAPER",
4341
+ url: "https://www.pinnacle.sh/opt-in",
3922
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"
3923
4343
  },
3924
4344
  options: {
@@ -3926,10 +4346,10 @@ client.campaigns.toll_free.upsert(
3926
4346
  },
3927
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.",
3928
4348
  use_case: {
3929
- 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.',
3930
- 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"
3931
4351
  }
3932
- );
4352
+ )
3933
4353
  ```
3934
4354
  </dd>
3935
4355
  </dl>
@@ -4064,9 +4484,9 @@ Validate your toll-free campaign configuration against carrier requirements and
4064
4484
 
4065
4485
  ```ruby
4066
4486
  client.campaigns.toll_free.validate(
4067
- additional_info: 'Please validate this DLC campaign for 10DLC compliance',
4068
- campaign_id: 'dlc_1234567890'
4069
- );
4487
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
4488
+ campaign_id: "dlc_1234567890"
4489
+ )
4070
4490
  ```
4071
4491
  </dd>
4072
4492
  </dl>
@@ -4128,7 +4548,7 @@ List all toll-free campaigns with optional filtering and pagination. Results are
4128
4548
  <dd>
4129
4549
 
4130
4550
  ```ruby
4131
- client.campaigns.toll_free.list();
4551
+ client.campaigns.toll_free.list
4132
4552
  ```
4133
4553
  </dd>
4134
4554
  </dl>
@@ -4224,9 +4644,9 @@ Generate campaign details based off existing campaign and the brand it's connect
4224
4644
 
4225
4645
  ```ruby
4226
4646
  client.campaigns.rcs.autofill(
4227
- additional_info: 'Please autofill missing campaign fields using my brand profile',
4228
- campaign_id: 'dlc_1234567890'
4229
- );
4647
+ additional_info: "Please autofill missing campaign fields using my brand profile",
4648
+ campaign_id: "dlc_1234567890"
4649
+ )
4230
4650
  ```
4231
4651
  </dd>
4232
4652
  </dl>
@@ -4288,7 +4708,7 @@ Retrieve RCS campaign.
4288
4708
  <dd>
4289
4709
 
4290
4710
  ```ruby
4291
- client.campaigns.rcs.get(campaign_id: 'rcs_1234567890');
4711
+ client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
4292
4712
  ```
4293
4713
  </dd>
4294
4714
  </dl>
@@ -4350,7 +4770,7 @@ Submit your RCS campaign for approval and activation with carriers.
4350
4770
  <dd>
4351
4771
 
4352
4772
  ```ruby
4353
- client.campaigns.rcs.submit(campaign_id: 'rcs_1234567890');
4773
+ client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
4354
4774
  ```
4355
4775
  </dd>
4356
4776
  </dl>
@@ -4423,42 +4843,42 @@ All fields are **required** unless specified otherwise, and will be validated wh
4423
4843
  client.campaigns.rcs.upsert(
4424
4844
  agent: {
4425
4845
  color: "#000000",
4426
- 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.",
4427
4847
  emails: [{
4428
- email: 'founders@trypinnacle.app',
4429
- label: 'Email Us'
4848
+ email: "founders@trypinnacle.app",
4849
+ label: "Email Us"
4430
4850
  }],
4431
- hero_url: 'https://pncl.to/D6pDSqGxqgfbCfQmw4gXdnlHu4uSB4',
4432
- icon_url: 'https://pncl.to/mq_tdIDenRb5eYpJiM8-3THCaUBrZP',
4433
- 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",
4434
4854
  phones: [{
4435
- label: 'Contact us directly',
4436
- phone: '+14154467821'
4855
+ label: "Contact us directly",
4856
+ phone: "+14154467821"
4437
4857
  }],
4438
4858
  websites: [{
4439
- label: 'Get started with Pinnacle',
4440
- url: 'https://www.trypinnacle.app/'
4859
+ label: "Get started with Pinnacle",
4860
+ url: "https://www.trypinnacle.app/"
4441
4861
  }]
4442
4862
  },
4443
- brand: 'b_1234567890',
4444
- campaign_id: 'rcs_1234567890',
4445
- 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."],
4446
4866
  links: {
4447
- privacy_policy: '“https://www.trypinnacle.app/privacy”',
4448
- 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”"
4449
4869
  },
4450
- 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>
4451
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.
4452
- ',
4453
- messaging_type: 'OTP',
4454
- cta_media: '“https://www.pinnacle.sh/send”',
4455
- 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>
4456
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.
4457
- ',
4877
+ ",
4458
4878
  keywords: {
4459
4879
  help: {
4460
- message: 'Email founders@trypinnacle.app for support.',
4461
- keywords: ['HELP', 'SUPPORT']
4880
+ message: "Email founders@trypinnacle.app for support.",
4881
+ keywords: %w[HELP SUPPORT]
4462
4882
  },
4463
4883
  opt_in: {
4464
4884
  message: "Welcome back to Pinnacle!<br>
@@ -4466,20 +4886,20 @@ client.campaigns.rcs.upsert(
4466
4886
 
4467
4887
  Reply STOP to opt out and HELP for support. Message & rates may apply.
4468
4888
  ",
4469
- keywords: ['START', 'SUBSCRIBE']
4889
+ keywords: %w[START SUBSCRIBE]
4470
4890
  },
4471
4891
  opt_out: {
4472
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.",
4473
- keywords: ['STOP', 'UNSUBSCRIBE', 'END']
4893
+ keywords: %w[STOP UNSUBSCRIBE END]
4474
4894
  }
4475
4895
  },
4476
4896
  traffic: {
4477
4897
  monthly_website: 10000,
4478
4898
  monthly_rcs_estimate: 10000
4479
4899
  },
4480
- 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.",
4481
4901
  demo_trigger: 'Text "START" to trigger the flow.'
4482
- );
4902
+ )
4483
4903
  ```
4484
4904
  </dd>
4485
4905
  </dl>
@@ -4641,9 +5061,9 @@ Validate your RCS campaign configuration against carrier requirements and compli
4641
5061
 
4642
5062
  ```ruby
4643
5063
  client.campaigns.rcs.validate(
4644
- additional_info: 'Please validate this DLC campaign for 10DLC compliance',
4645
- campaign_id: 'dlc_1234567890'
4646
- );
5064
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
5065
+ campaign_id: "dlc_1234567890"
5066
+ )
4647
5067
  ```
4648
5068
  </dd>
4649
5069
  </dl>
@@ -4705,7 +5125,7 @@ List all RCS campaigns with optional filtering and pagination. Results are sorte
4705
5125
  <dd>
4706
5126
 
4707
5127
  ```ruby
4708
- client.campaigns.rcs.list();
5128
+ client.campaigns.rcs.list
4709
5129
  ```
4710
5130
  </dd>
4711
5131
  </dl>
@@ -4768,6 +5188,92 @@ client.campaigns.rcs.list();
4768
5188
  </dl>
4769
5189
 
4770
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
+
4771
5277
  </dd>
4772
5278
  </dl>
4773
5279
  </details>
@@ -4801,10 +5307,10 @@ Send a SMS message immediately or schedule it for future delivery.
4801
5307
 
4802
5308
  ```ruby
4803
5309
  client.messages.sms.send_(
4804
- from: '+14155164736',
4805
- text: 'Hey!',
4806
- to: '+14154746461'
4807
- );
5310
+ from: "+14155164736",
5311
+ text: "Hey!",
5312
+ to: "+14154746461"
5313
+ )
4808
5314
  ```
4809
5315
  </dd>
4810
5316
  </dl>
@@ -4890,7 +5396,7 @@ Validate SMS message content without sending it.
4890
5396
  <dd>
4891
5397
 
4892
5398
  ```ruby
4893
- client.messages.sms.validate(text: 'Hello from Pinnacle');
5399
+ client.messages.sms.validate(text: "Hello from Pinnacle")
4894
5400
  ```
4895
5401
  </dd>
4896
5402
  </dl>
@@ -4954,15 +5460,15 @@ Send a MMS immediately or schedule it for future delivery.
4954
5460
 
4955
5461
  ```ruby
4956
5462
  client.messages.mms.send_(
4957
- from: '+14155164736',
4958
- 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"],
4959
5465
  options: {
4960
5466
  multiple_messages: true,
4961
5467
  validate: true
4962
5468
  },
4963
- text: 'Check out this image!',
4964
- to: '+14154746461'
4965
- );
5469
+ text: "Check out this image!",
5470
+ to: "+14154746461"
5471
+ )
4966
5472
  ```
4967
5473
  </dd>
4968
5474
  </dl>
@@ -5061,9 +5567,9 @@ Validate MMS message content without sending it.
5061
5567
 
5062
5568
  ```ruby
5063
5569
  client.messages.mms.validate(
5064
- 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'],
5065
- text: 'Check out these images!'
5066
- );
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
+ )
5067
5573
  ```
5068
5574
  </dd>
5069
5575
  </dl>
@@ -5129,10 +5635,10 @@ Requires an active RCS agent and recipient devices that support RCS Business Mes
5129
5635
 
5130
5636
  ```ruby
5131
5637
  client.messages.rcs.send_(
5132
- from: 'from',
5133
- to: 'to',
5134
- text: 'text'
5135
- );
5638
+ from: "from",
5639
+ to: "to",
5640
+ text: "text"
5641
+ )
5136
5642
  ```
5137
5643
  </dd>
5138
5644
  </dl>
@@ -5205,9 +5711,9 @@ This endpoint allows RCS agents to display a typing indicator to recipients. The
5205
5711
 
5206
5712
  ```ruby
5207
5713
  client.messages.rcs.send_typing(
5208
- agent_id: 'agent_pinnacle',
5209
- to: '+14154746461'
5210
- );
5714
+ agent_id: "agent_pinnacle",
5715
+ to: "+14154746461"
5716
+ )
5211
5717
  ```
5212
5718
  </dd>
5213
5719
  </dl>
@@ -5285,7 +5791,7 @@ Validate RCS message content without sending it.
5285
5791
  <dd>
5286
5792
 
5287
5793
  ```ruby
5288
- client.messages.rcs.validate(text: 'text');
5794
+ client.messages.rcs.validate(text: "text")
5289
5795
  ```
5290
5796
  </dd>
5291
5797
  </dl>
@@ -5353,12 +5859,12 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5353
5859
 
5354
5860
  ```ruby
5355
5861
  client.messages.blast.sms(
5356
- audience_id: 'aud_abc123',
5357
- senders: ['+14155164736', '+14155164737'],
5862
+ audience_id: "aud_abc123",
5863
+ senders: %w[+14155164736 +14155164737],
5358
5864
  message: {
5359
- text: 'Hello from Pinnacle!'
5865
+ text: "Hello from Pinnacle!"
5360
5866
  }
5361
- );
5867
+ )
5362
5868
  ```
5363
5869
  </dd>
5364
5870
  </dl>
@@ -5461,16 +5967,16 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5461
5967
 
5462
5968
  ```ruby
5463
5969
  client.messages.blast.mms(
5464
- audience_id: 'aud_abc123',
5465
- senders: ['+14155164736', '+14155164737'],
5970
+ audience_id: "aud_abc123",
5971
+ senders: %w[+14155164736 +14155164737],
5466
5972
  message: {
5467
- media_urls: ['https://fastly.picsum.photos/id/941/300/300.jpg'],
5468
- text: 'Check out this image!'
5973
+ media_urls: ["https://fastly.picsum.photos/id/941/300/300.jpg"],
5974
+ text: "Check out this image!"
5469
5975
  },
5470
5976
  options: {
5471
5977
  validate: true
5472
5978
  }
5473
- );
5979
+ )
5474
5980
  ```
5475
5981
  </dd>
5476
5982
  </dl>
@@ -5573,21 +6079,21 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5573
6079
 
5574
6080
  ```ruby
5575
6081
  client.messages.blast.rcs(
5576
- audience_id: 'aud_abc123',
5577
- senders: ['agent_pinnacle', 'agent_pinnacle2'],
6082
+ audience_id: "aud_abc123",
6083
+ senders: %w[agent_pinnacle agent_pinnacle2],
5578
6084
  message: {
5579
6085
  quick_replies: [],
5580
- text: 'Hello from Pinnacle RCS!'
6086
+ text: "Hello from Pinnacle RCS!"
5581
6087
  },
5582
6088
  fallback: {
5583
- from: '+14155164736',
5584
- text: 'Hello from Pinnacle! Reply LEARN to learn more.'
6089
+ from: "+14155164736",
6090
+ text: "Hello from Pinnacle! Reply LEARN to learn more."
5585
6091
  },
5586
6092
  options: {
5587
6093
  transcode: true,
5588
6094
  validate: true
5589
6095
  }
5590
- );
6096
+ )
5591
6097
  ```
5592
6098
  </dd>
5593
6099
  </dl>
@@ -5694,7 +6200,7 @@ Works for both individual scheduled messages and scheduled blasts. Use the `sche
5694
6200
  <dd>
5695
6201
 
5696
6202
  ```ruby
5697
- client.messages.schedule.cancel(id: 'id');
6203
+ client.messages.schedule.cancel(id: "id")
5698
6204
  ```
5699
6205
  </dd>
5700
6206
  </dl>
@@ -5757,7 +6263,7 @@ List all scheduled messages with optional filtering and pagination. Results are
5757
6263
  <dd>
5758
6264
 
5759
6265
  ```ruby
5760
- client.messages.schedules.list();
6266
+ client.messages.schedules.list
5761
6267
  ```
5762
6268
  </dd>
5763
6269
  </dl>
@@ -5852,7 +6358,7 @@ List all blasts with optional filtering and pagination. Results are sorted by cr
5852
6358
  <dd>
5853
6359
 
5854
6360
  ```ruby
5855
- client.messages.blasts.list();
6361
+ client.messages.blasts.list
5856
6362
  ```
5857
6363
  </dd>
5858
6364
  </dl>
@@ -5948,12 +6454,12 @@ Simulate inbound messages and button presses from a user.
5948
6454
 
5949
6455
  ```ruby
5950
6456
  client.messages.simulate.user(
5951
- from: '+14155551234',
5952
- to: '+14155555678',
6457
+ from: "+14155551234",
6458
+ to: "+14155555678",
5953
6459
  message: {
5954
- text: 'Hello from the test user!'
6460
+ text: "Hello from the test user!"
5955
6461
  }
5956
- );
6462
+ )
5957
6463
  ```
5958
6464
  </dd>
5959
6465
  </dl>
@@ -6017,10 +6523,10 @@ Link a phone number to a specific campaign. Phone numbers must be linked to a ca
6017
6523
 
6018
6524
  ```ruby
6019
6525
  client.phone_numbers.campaign.attach(
6020
- phones: ['+14155550123', '+14155559876', '+14155550111'],
6021
- campaign_type: 'TOLL_FREE',
6022
- campaign_id: 'tf_1234567890'
6023
- );
6526
+ phones: %w[+14155550123 +14155559876 +14155550111],
6527
+ campaign_type: "TOLL_FREE",
6528
+ campaign_id: "tf_1234567890"
6529
+ )
6024
6530
  ```
6025
6531
  </dd>
6026
6532
  </dl>
@@ -6110,7 +6616,7 @@ Remove the association between a phone number and its attached campaign.
6110
6616
  <dd>
6111
6617
 
6112
6618
  ```ruby
6113
- client.phone_numbers.campaign.detach(phones: ['+14155559876', '14155550111']);
6619
+ client.phone_numbers.campaign.detach(phones: %w[+14155559876 14155550111])
6114
6620
  ```
6115
6621
  </dd>
6116
6622
  </dl>
@@ -6176,7 +6682,7 @@ List all RCS agents with pagination. Results are sorted by creation date, newest
6176
6682
  <dd>
6177
6683
 
6178
6684
  ```ruby
6179
- client.rcs.agents.list();
6685
+ client.rcs.agents.list
6180
6686
  ```
6181
6687
  </dd>
6182
6688
  </dl>
@@ -6263,7 +6769,7 @@ List all whitelisted test numbers with optional filtering and pagination. Result
6263
6769
  <dd>
6264
6770
 
6265
6771
  ```ruby
6266
- client.rcs.whitelisted_numbers.list();
6772
+ client.rcs.whitelisted_numbers.list
6267
6773
  ```
6268
6774
  </dd>
6269
6775
  </dl>
@@ -6389,28 +6895,28 @@ Once your test agent is created, you'll need to:
6389
6895
 
6390
6896
  ```ruby
6391
6897
  client.rcs.test.create_agent(
6392
- display_name: 'Acme Support',
6393
- description: 'Get help with your Acme orders and account',
6394
- logo_url: 'https://example.com/logo.png',
6395
- hero_url: 'https://example.com/hero.png',
6898
+ display_name: "Acme Support",
6899
+ description: "Get help with your Acme orders and account",
6900
+ logo_url: "https://example.com/logo.png",
6901
+ hero_url: "https://example.com/hero.png",
6396
6902
  phone_numbers: [{
6397
- number: '+14155550123',
6398
- label: 'Support'
6903
+ number: "+14155550123",
6904
+ label: "Support"
6399
6905
  }],
6400
6906
  emails: [{
6401
- address: 'support@example.com',
6402
- label: 'Support'
6907
+ address: "support@example.com",
6908
+ label: "Support"
6403
6909
  }],
6404
6910
  websites: [{
6405
- url: 'https://example.com',
6406
- label: 'Website'
6911
+ url: "https://example.com",
6912
+ label: "Website"
6407
6913
  }],
6408
- privacy_url: 'https://example.com/privacy',
6409
- terms_url: 'https://example.com/terms',
6914
+ privacy_url: "https://example.com/privacy",
6915
+ terms_url: "https://example.com/terms",
6410
6916
  color: "#FF6B00",
6411
6917
  is_conversational: true,
6412
- agent_use_case: 'MULTI_USE'
6413
- );
6918
+ agent_use_case: "MULTI_USE"
6919
+ )
6414
6920
  ```
6415
6921
  </dd>
6416
6922
  </dl>
@@ -6612,9 +7118,9 @@ If updating images, the same requirements apply as when creating an agent:
6612
7118
 
6613
7119
  ```ruby
6614
7120
  client.rcs.test.update_agent(
6615
- agent_id: 'agent_abc123def456',
6616
- display_name: 'Acme Premium Support'
6617
- );
7121
+ agent_id: "agent_abc123def456",
7122
+ display_name: "Acme Premium Support"
7123
+ )
6618
7124
  ```
6619
7125
  </dd>
6620
7126
  </dl>
@@ -6822,9 +7328,9 @@ Attempting to whitelist during the cooldown returns a `500` error with the remai
6822
7328
 
6823
7329
  ```ruby
6824
7330
  client.rcs.test.whitelist_number(
6825
- agent_id: 'agent_abc123def456',
6826
- phone_number: '+12345678901'
6827
- );
7331
+ agent_id: "agent_abc123def456",
7332
+ phone_number: "+12345678901"
7333
+ )
6828
7334
  ```
6829
7335
  </dd>
6830
7336
  </dl>
@@ -6915,9 +7421,9 @@ whether the recipient has accepted or rejected the tester invite.
6915
7421
 
6916
7422
  ```ruby
6917
7423
  client.rcs.test.get_whitelist_status(
6918
- agent_id: 'agent_abc123def456',
6919
- phone_number: '+12345678901'
6920
- );
7424
+ agent_id: "agent_abc123def456",
7425
+ phone_number: "+12345678901"
7426
+ )
6921
7427
  ```
6922
7428
  </dd>
6923
7429
  </dl>
@@ -6988,7 +7494,7 @@ Retrieve a brand's status.
6988
7494
  <dd>
6989
7495
 
6990
7496
  ```ruby
6991
- client.status.get.brand(brand_id: 'b_1234567890');
7497
+ client.status.get.brand(brand_id: "b_1234567890")
6992
7498
  ```
6993
7499
  </dd>
6994
7500
  </dl>
@@ -7050,7 +7556,7 @@ Retrieve a toll-free campaign's status.
7050
7556
  <dd>
7051
7557
 
7052
7558
  ```ruby
7053
- client.status.get.toll_free(campaign_id: 'tf_1234567890');
7559
+ client.status.get.toll_free(campaign_id: "tf_1234567890")
7054
7560
  ```
7055
7561
  </dd>
7056
7562
  </dl>
@@ -7112,7 +7618,7 @@ Retrieve a 10DLC campaign's status.
7112
7618
  <dd>
7113
7619
 
7114
7620
  ```ruby
7115
- client.status.get.dlc(campaign_id: 'dlc_1234567890');
7621
+ client.status.get.dlc(campaign_id: "dlc_1234567890")
7116
7622
  ```
7117
7623
  </dd>
7118
7624
  </dl>
@@ -7174,7 +7680,7 @@ Retrieve a RCS campaign's status.
7174
7680
  <dd>
7175
7681
 
7176
7682
  ```ruby
7177
- client.status.get.rcs(campaign_id: 'rcs_1234567890');
7683
+ client.status.get.rcs(campaign_id: "rcs_1234567890")
7178
7684
  ```
7179
7685
  </dd>
7180
7686
  </dl>
@@ -7238,7 +7744,7 @@ Check if a number is active and ready to send messages.
7238
7744
  <dd>
7239
7745
 
7240
7746
  ```ruby
7241
- client.status.get.phone_number(phone_number: '+14151234567');
7747
+ client.status.get.phone_number(phone_number: "+14151234567")
7242
7748
  ```
7243
7749
  </dd>
7244
7750
  </dl>
@@ -7302,11 +7808,11 @@ Create a shortened URL that redirects visitors to the provided destination URL.
7302
7808
 
7303
7809
  ```ruby
7304
7810
  client.tools.url.create(
7305
- url: 'https://www.pinnacle.sh/',
7811
+ url: "https://www.pinnacle.sh/",
7306
7812
  options: {
7307
- expires_at: '2025-06-23T16:18:25.000Z'
7813
+ expires_at: "2025-06-23T16:18:25.000Z"
7308
7814
  }
7309
- );
7815
+ )
7310
7816
  ```
7311
7817
  </dd>
7312
7818
  </dl>
@@ -7376,7 +7882,7 @@ Retrieve configuration and details for your shortened URL using its unique ident
7376
7882
  <dd>
7377
7883
 
7378
7884
  ```ruby
7379
- client.tools.url.get(link_id: 'ePzVxILF');
7885
+ client.tools.url.get(link_id: "ePzVxILF")
7380
7886
  ```
7381
7887
  </dd>
7382
7888
  </dl>
@@ -7443,9 +7949,9 @@ Update the destination or expiration date of an existing shortened URL. Expiring
7443
7949
 
7444
7950
  ```ruby
7445
7951
  client.tools.url.update(
7446
- link_id: 'ePzVxILF',
7447
- url: 'https://www.pinnacle.sh/'
7448
- );
7952
+ link_id: "ePzVxILF",
7953
+ url: "https://www.pinnacle.sh/"
7954
+ )
7449
7955
  ```
7450
7956
  </dd>
7451
7957
  </dl>
@@ -7527,7 +8033,7 @@ List all shortened URLs with pagination. Results are sorted by creation date, ne
7527
8033
  <dd>
7528
8034
 
7529
8035
  ```ruby
7530
- client.tools.url.list();
8036
+ client.tools.url.list
7531
8037
  ```
7532
8038
  </dd>
7533
8039
  </dl>
@@ -7607,16 +8113,16 @@ Generate presigned URLs that let you upload files directly to our storage and al
7607
8113
 
7608
8114
  ```ruby
7609
8115
  client.tools.file.upload(
7610
- content_type: 'image/jpeg',
8116
+ content_type: "image/jpeg",
7611
8117
  size: 1024,
7612
- name: 'test.jpg',
8118
+ name: "test.jpg",
7613
8119
  options: {
7614
- delete_at: '2025-12-31T23:59:59Z',
8120
+ delete_at: "2025-12-31T23:59:59Z",
7615
8121
  download: {
7616
- expires_at: '2025-06-30T12:00:00.000Z'
8122
+ expires_at: "2025-06-30T12:00:00.000Z"
7617
8123
  }
7618
8124
  }
7619
- );
8125
+ )
7620
8126
  ```
7621
8127
  </dd>
7622
8128
  </dl>
@@ -7714,7 +8220,7 @@ Refresh expiring presigned URLs for Pinnacle-hosted files to extend their access
7714
8220
  <dd>
7715
8221
 
7716
8222
  ```ruby
7717
- 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']);
8223
+ 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])
7718
8224
  ```
7719
8225
  </dd>
7720
8226
  </dl>
@@ -7777,7 +8283,7 @@ Retrieve contact information as a vCard and get a presigned URL to download the
7777
8283
  <dd>
7778
8284
 
7779
8285
  ```ruby
7780
- client.tools.contact_card.get(id: 'cc_1234567890');
8286
+ client.tools.contact_card.get(id: "cc_1234567890")
7781
8287
  ```
7782
8288
  </dd>
7783
8289
  </dl>
@@ -7848,51 +8354,51 @@ Create a new contact card or updates an existing one with full vCard data. Conta
7848
8354
 
7849
8355
  ```ruby
7850
8356
  client.tools.contact_card.upsert(
7851
- id: 'cc_1234567890',
7852
- formatted_name: 'Jane Smith',
8357
+ id: "cc_1234567890",
8358
+ formatted_name: "Jane Smith",
7853
8359
  name: {
7854
- family_name: 'Smith',
7855
- given_name: 'Jane',
7856
- additional_names: ['A.'],
7857
- honorific_prefixes: ['Dr.'],
7858
- honorific_suffixes: ['PhD']
8360
+ family_name: "Smith",
8361
+ given_name: "Jane",
8362
+ additional_names: ["A."],
8363
+ honorific_prefixes: ["Dr."],
8364
+ honorific_suffixes: ["PhD"]
7859
8365
  },
7860
- nickname: ['Janie'],
7861
- birthday: '1990-02-15',
8366
+ nickname: ["Janie"],
8367
+ birthday: "1990-02-15",
7862
8368
  addresses: [{
7863
- country_name: 'USA',
7864
- extended_address: 'Apt. 4B',
7865
- locality: 'Anytown',
7866
- postal_code: '90210',
7867
- post_office_box: 'PO Box 123',
7868
- region: 'CA',
7869
- street_address: '123 Main St',
7870
- type: ['HOME', 'PREF']
8369
+ country_name: "USA",
8370
+ extended_address: "Apt. 4B",
8371
+ locality: "Anytown",
8372
+ postal_code: "90210",
8373
+ post_office_box: "PO Box 123",
8374
+ region: "CA",
8375
+ street_address: "123 Main St",
8376
+ type: %w[HOME PREF]
7871
8377
  }],
7872
- url: 'https://app.pinnacle.sh',
8378
+ url: "https://app.pinnacle.sh",
7873
8379
  phones: [{
7874
- type: ['CELL'],
7875
- value: '+15551234567'
8380
+ type: ["CELL"],
8381
+ value: "+15551234567"
7876
8382
  }],
7877
8383
  emails: [{
7878
- type: ['INTERNET'],
7879
- value: 'jane.smith@example.com'
8384
+ type: ["INTERNET"],
8385
+ value: "jane.smith@example.com"
7880
8386
  }],
7881
- timezone: 'America/Los_Angeles',
8387
+ timezone: "America/Los_Angeles",
7882
8388
  geo: {
7883
8389
  latitude: 34.0522,
7884
8390
  longitude: -118.2437
7885
8391
  },
7886
- title: 'Engineer',
7887
- role: 'Developer',
8392
+ title: "Engineer",
8393
+ role: "Developer",
7888
8394
  organization: {
7889
- name: 'Acme Co',
7890
- units: ['Engineering', 'R&D']
8395
+ name: "Acme Co",
8396
+ units: %w[Engineering R&D]
7891
8397
  },
7892
- categories: ['Friend', 'Colleague'],
7893
- note: 'Test contact entry',
7894
- photo: 'https://fastly.picsum.photos/id/853/200/200.jpg?hmac=f4LF-tVBBnJb9PQAVEO8GCTGWgLUnxQLw44rUofE6mQ'
7895
- );
8398
+ categories: %w[Friend Colleague],
8399
+ note: "Test contact entry",
8400
+ photo: "https://fastly.picsum.photos/id/853/200/200.jpg?hmac=f4LF-tVBBnJb9PQAVEO8GCTGWgLUnxQLw44rUofE6mQ"
8401
+ )
7896
8402
  ```
7897
8403
  </dd>
7898
8404
  </dl>
@@ -7926,3 +8432,4 @@ client.tools.contact_card.upsert(
7926
8432
  </dd>
7927
8433
  </dl>
7928
8434
  </details>
8435
+