rcs 2.0.19 → 2.0.20.pre.rc.1

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +5 -6
  3. data/lib/pinnacle/calls/client.rb +359 -0
  4. data/lib/pinnacle/calls/types/calls_download_recording_request.rb +13 -0
  5. data/lib/pinnacle/calls/types/calls_list_events_request.rb +15 -0
  6. data/lib/pinnacle/calls/types/calls_list_request.rb +25 -0
  7. data/lib/pinnacle/calls/types/create_call_params.rb +17 -0
  8. data/lib/pinnacle/calls/types/create_stream_token_params.rb +17 -0
  9. data/lib/pinnacle/calls/types/update_call_params.rb +13 -0
  10. data/lib/pinnacle/client.rb +11 -1
  11. data/lib/pinnacle/forms/client.rb +1 -1
  12. data/lib/pinnacle/network/client.rb +34 -0
  13. data/lib/pinnacle/network/requests/client.rb +94 -0
  14. data/lib/pinnacle/network/requests/types/list_network_requests_params.rb +21 -0
  15. data/lib/pinnacle/network/silent_auth/client.rb +107 -0
  16. data/lib/pinnacle/network/silent_auth/types/silent_auth_check_request.rb +15 -0
  17. data/lib/pinnacle/network/silent_auth/types/silent_auth_request.rb +17 -0
  18. data/lib/pinnacle/network/sim_swap/client.rb +55 -0
  19. data/lib/pinnacle/network/sim_swap/types/sim_swap_request.rb +15 -0
  20. data/lib/pinnacle/network/subscriber_match/client.rb +55 -0
  21. data/lib/pinnacle/network/subscriber_match/types/subscriber_match_request.rb +15 -0
  22. data/lib/pinnacle/pinnacle_client.rb +8 -0
  23. data/lib/pinnacle/types/agent_summary_carrier_launches.rb +1 -1
  24. data/lib/pinnacle/types/call.rb +31 -0
  25. data/lib/pinnacle/types/call_direction.rb +12 -0
  26. data/lib/pinnacle/types/call_event.rb +27 -0
  27. data/lib/pinnacle/types/call_event_source.rb +14 -0
  28. data/lib/pinnacle/types/call_metadata.rb +23 -0
  29. data/lib/pinnacle/types/call_state.rb +19 -0
  30. data/lib/pinnacle/types/call_status_event.rb +14 -0
  31. data/lib/pinnacle/types/call_status_event_call.rb +17 -0
  32. data/lib/pinnacle/types/call_stream_token.rb +13 -0
  33. data/lib/pinnacle/types/created_call.rb +33 -0
  34. data/lib/pinnacle/types/e_164_phone_number.rb +23 -0
  35. data/lib/pinnacle/types/hosted_silent_auth_response.rb +13 -0
  36. data/lib/pinnacle/types/json_silent_auth_response.rb +13 -0
  37. data/lib/pinnacle/types/list_call_events_response.rb +11 -0
  38. data/lib/pinnacle/types/list_calls_response.rb +11 -0
  39. data/lib/pinnacle/types/list_network_requests_response.rb +13 -0
  40. data/lib/pinnacle/types/network_insight_status.rb +14 -0
  41. data/lib/pinnacle/types/network_request_id.rb +23 -0
  42. data/lib/pinnacle/types/network_request_result.rb +16 -0
  43. data/lib/pinnacle/types/network_request_status.rb +15 -0
  44. data/lib/pinnacle/types/network_request_summary.rb +27 -0
  45. data/lib/pinnacle/types/network_request_type.rb +13 -0
  46. data/lib/pinnacle/types/recording_download.rb +11 -0
  47. data/lib/pinnacle/types/recording_state.rb +14 -0
  48. data/lib/pinnacle/types/silent_auth_check_response.rb +11 -0
  49. data/lib/pinnacle/types/silent_auth_check_response_status.rb +12 -0
  50. data/lib/pinnacle/types/silent_auth_response.rb +15 -0
  51. data/lib/pinnacle/types/sim_swap_response.rb +15 -0
  52. data/lib/pinnacle/types/subscriber_match_attributes.rb +30 -0
  53. data/lib/pinnacle/types/subscriber_match_response.rb +13 -0
  54. data/lib/pinnacle/types/subscriber_match_response_matches.rb +41 -0
  55. data/lib/pinnacle/types/subscriber_match_result.rb +18 -0
  56. data/lib/pinnacle/types/webhook_event_enum.rb +1 -0
  57. data/lib/pinnacle/version.rb +1 -1
  58. data/lib/pinnacle/wrapper/messages/client.rb +4 -1
  59. data/lib/pinnacle/wrapper/voice/client.rb +125 -0
  60. data/lib/pinnacle/wrapper/voice/types.rb +38 -0
  61. data/lib/pinnacle/wrapper/voice/voice_socket.rb +354 -0
  62. data/lib/pinnacle.rb +49 -0
  63. data/reference.md +1903 -696
  64. metadata +75 -3
data/reference.md CHANGED
@@ -2966,8 +2966,8 @@ client.webhooks.detach(
2966
2966
  </dl>
2967
2967
  </details>
2968
2968
 
2969
- ## Forms
2970
- <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">get</a>(id) -> Pinnacle::Types::Form</code></summary>
2969
+ ## Calls
2970
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">list</a>() -> Pinnacle::Types::ListCallsResponse</code></summary>
2971
2971
  <dl>
2972
2972
  <dd>
2973
2973
 
@@ -2979,7 +2979,7 @@ client.webhooks.detach(
2979
2979
  <dl>
2980
2980
  <dd>
2981
2981
 
2982
- Retrieve a form by id. Includes submission count, last submission timestamp, and archive state.
2982
+ List voice calls for your team. Results are sorted newest first.
2983
2983
  </dd>
2984
2984
  </dl>
2985
2985
  </dd>
@@ -2994,7 +2994,7 @@ Retrieve a form by id. Includes submission count, last submission timestamp, and
2994
2994
  <dd>
2995
2995
 
2996
2996
  ```ruby
2997
- client.forms.get(id: "form_Oy2n7iUoi9CJwUU6")
2997
+ client.calls.list
2998
2998
  ```
2999
2999
  </dd>
3000
3000
  </dl>
@@ -3009,10 +3009,7 @@ client.forms.get(id: "form_Oy2n7iUoi9CJwUU6")
3009
3009
  <dl>
3010
3010
  <dd>
3011
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`).
3012
+ **limit:** `Integer` — Maximum calls to return.
3016
3013
 
3017
3014
  </dd>
3018
3015
  </dl>
@@ -3020,101 +3017,120 @@ The unique identifier of the form you want to retrieve.
3020
3017
  <dl>
3021
3018
  <dd>
3022
3019
 
3023
- **request_options:** `Pinnacle::Forms::RequestOptions`
3020
+ **cursor:** `String` — Opaque cursor returned by the previous page.
3024
3021
 
3025
3022
  </dd>
3026
3023
  </dl>
3027
- </dd>
3028
- </dl>
3029
3024
 
3025
+ <dl>
3026
+ <dd>
3030
3027
 
3028
+ **state:** `Pinnacle::Types::CallState`
3029
+
3031
3030
  </dd>
3032
3031
  </dl>
3033
- </details>
3034
3032
 
3035
- <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">update</a>(id, request) -> Pinnacle::Types::Form</code></summary>
3036
3033
  <dl>
3037
3034
  <dd>
3038
3035
 
3039
- #### 📝 Description
3036
+ **direction:** `Pinnacle::Types::CallDirection`
3037
+
3038
+ </dd>
3039
+ </dl>
3040
3040
 
3041
3041
  <dl>
3042
3042
  <dd>
3043
3043
 
3044
+ **from:** `String`
3045
+
3046
+ </dd>
3047
+ </dl>
3048
+
3044
3049
  <dl>
3045
3050
  <dd>
3046
3051
 
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.
3052
+ **to:** `String`
3053
+
3048
3054
  </dd>
3049
3055
  </dl>
3056
+
3057
+ <dl>
3058
+ <dd>
3059
+
3060
+ **created_after:** `String`
3061
+
3050
3062
  </dd>
3051
3063
  </dl>
3052
3064
 
3053
- #### 🔌 Usage
3054
-
3055
3065
  <dl>
3056
3066
  <dd>
3057
3067
 
3068
+ **created_before:** `String`
3069
+
3070
+ </dd>
3071
+ </dl>
3072
+
3058
3073
  <dl>
3059
3074
  <dd>
3060
3075
 
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
- ```
3076
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3077
+
3069
3078
  </dd>
3070
3079
  </dl>
3071
3080
  </dd>
3072
3081
  </dl>
3073
3082
 
3074
- #### ⚙️ Parameters
3075
3083
 
3084
+ </dd>
3085
+ </dl>
3086
+ </details>
3087
+
3088
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">create</a>(request) -> Pinnacle::Types::CreatedCall</code></summary>
3076
3089
  <dl>
3077
3090
  <dd>
3078
3091
 
3092
+ #### 📝 Description
3093
+
3079
3094
  <dl>
3080
3095
  <dd>
3081
3096
 
3082
- **id:** `String`
3097
+ <dl>
3098
+ <dd>
3083
3099
 
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
-
3100
+ Start an outbound voice call from a voice-enabled phone number owned by your team.
3087
3101
  </dd>
3088
3102
  </dl>
3103
+ </dd>
3104
+ </dl>
3105
+
3106
+ #### 🔌 Usage
3089
3107
 
3090
3108
  <dl>
3091
3109
  <dd>
3092
3110
 
3093
- **name:** `String` — Replace the form's title. Pass `null` to clear.
3094
-
3095
- </dd>
3096
- </dl>
3097
-
3098
3111
  <dl>
3099
3112
  <dd>
3100
3113
 
3101
- **description:** `String` — Replace the form's description. Pass `null` to clear.
3102
-
3114
+ ```ruby
3115
+ client.calls.create(
3116
+ to: "to",
3117
+ from: "from"
3118
+ )
3119
+ ```
3120
+ </dd>
3121
+ </dl>
3103
3122
  </dd>
3104
3123
  </dl>
3105
3124
 
3125
+ #### ⚙️ Parameters
3126
+
3106
3127
  <dl>
3107
3128
  <dd>
3108
3129
 
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
3130
  <dl>
3115
3131
  <dd>
3116
3132
 
3117
- **can_update:** `Internal::Types::Boolean` — Toggle whether the recipient can re-edit their submission.
3133
+ **to:** `String` — Destination phone number in E.164 format.
3118
3134
 
3119
3135
  </dd>
3120
3136
  </dl>
@@ -3122,7 +3138,7 @@ The unique identifier of the form you want to update.
3122
3138
  <dl>
3123
3139
  <dd>
3124
3140
 
3125
- **expires_at:** `String` — Set or clear the form's expiration timestamp.
3141
+ **from:** `String` — Voice-enabled phone number owned by your team.
3126
3142
 
3127
3143
  </dd>
3128
3144
  </dl>
@@ -3130,7 +3146,7 @@ The unique identifier of the form you want to update.
3130
3146
  <dl>
3131
3147
  <dd>
3132
3148
 
3133
- **theme_override:** `Pinnacle::Types::FormThemeOverride` — Replace the per-form theme override. Pass `null` to revert to team defaults.
3149
+ **record:** `Internal::Types::Boolean` — Start recording as soon as the call stream connects.
3134
3150
 
3135
3151
  </dd>
3136
3152
  </dl>
@@ -3138,7 +3154,7 @@ The unique identifier of the form you want to update.
3138
3154
  <dl>
3139
3155
  <dd>
3140
3156
 
3141
- **archived_at:** `String` — Set to an ISO timestamp to archive the form (soft-delete), or `null` to restore an archived form.
3157
+ **metadata:** `Internal::Types::Hash[String, String]`
3142
3158
 
3143
3159
  </dd>
3144
3160
  </dl>
@@ -3146,7 +3162,7 @@ The unique identifier of the form you want to update.
3146
3162
  <dl>
3147
3163
  <dd>
3148
3164
 
3149
- **request_options:** `Pinnacle::Forms::RequestOptions`
3165
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3150
3166
 
3151
3167
  </dd>
3152
3168
  </dl>
@@ -3158,7 +3174,7 @@ The unique identifier of the form you want to update.
3158
3174
  </dl>
3159
3175
  </details>
3160
3176
 
3161
- <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">list</a>(request) -> Pinnacle::Types::ListFormsResponse</code></summary>
3177
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">get</a>(id) -> Pinnacle::Types::Call</code></summary>
3162
3178
  <dl>
3163
3179
  <dd>
3164
3180
 
@@ -3170,7 +3186,7 @@ The unique identifier of the form you want to update.
3170
3186
  <dl>
3171
3187
  <dd>
3172
3188
 
3173
- Paginated list of forms on your team, sorted by creation date (newest first). Includes archived forms.
3189
+ Retrieve one voice call by its Pinnacle call ID.
3174
3190
  </dd>
3175
3191
  </dl>
3176
3192
  </dd>
@@ -3185,10 +3201,7 @@ Paginated list of forms on your team, sorted by creation date (newest first). In
3185
3201
  <dd>
3186
3202
 
3187
3203
  ```ruby
3188
- client.forms.list(
3189
- page_index: 0,
3190
- page_size: 20
3191
- )
3204
+ client.calls.get(id: "call_7cQe4F8xT1yB2mN9pK3L")
3192
3205
  ```
3193
3206
  </dd>
3194
3207
  </dl>
@@ -3203,15 +3216,7 @@ client.forms.list(
3203
3216
  <dl>
3204
3217
  <dd>
3205
3218
 
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.
3219
+ **id:** `String` — Pinnacle call ID.
3215
3220
 
3216
3221
  </dd>
3217
3222
  </dl>
@@ -3219,7 +3224,7 @@ client.forms.list(
3219
3224
  <dl>
3220
3225
  <dd>
3221
3226
 
3222
- **request_options:** `Pinnacle::Forms::RequestOptions`
3227
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3223
3228
 
3224
3229
  </dd>
3225
3230
  </dl>
@@ -3231,7 +3236,7 @@ client.forms.list(
3231
3236
  </dl>
3232
3237
  </details>
3233
3238
 
3234
- <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">create</a>(request) -> Pinnacle::Types::Form</code></summary>
3239
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">cancel</a>(id) -> Pinnacle::Types::Call</code></summary>
3235
3240
  <dl>
3236
3241
  <dd>
3237
3242
 
@@ -3243,11 +3248,7 @@ client.forms.list(
3243
3248
  <dl>
3244
3249
  <dd>
3245
3250
 
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
+ End a live call. Terminal calls are returned unchanged.
3251
3252
  </dd>
3252
3253
  </dl>
3253
3254
  </dd>
@@ -3262,12 +3263,7 @@ To also deliver the URL to a recipient over SMS or RCS in a single call, use [`P
3262
3263
  <dd>
3263
3264
 
3264
3265
  ```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
- )
3266
+ client.calls.cancel(id: "call_7cQe4F8xT1yB2mN9pK3L")
3271
3267
  ```
3272
3268
  </dd>
3273
3269
  </dl>
@@ -3282,7 +3278,7 @@ client.forms.create(
3282
3278
  <dl>
3283
3279
  <dd>
3284
3280
 
3285
- **request:** `Pinnacle::Types::FormDefinition`
3281
+ **id:** `String` — Pinnacle call ID.
3286
3282
 
3287
3283
  </dd>
3288
3284
  </dl>
@@ -3290,7 +3286,7 @@ client.forms.create(
3290
3286
  <dl>
3291
3287
  <dd>
3292
3288
 
3293
- **request_options:** `Pinnacle::Forms::RequestOptions`
3289
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3294
3290
 
3295
3291
  </dd>
3296
3292
  </dl>
@@ -3302,7 +3298,7 @@ client.forms.create(
3302
3298
  </dl>
3303
3299
  </details>
3304
3300
 
3305
- <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">send_</a>(request) -> Pinnacle::Forms::Types::FormsSendResponse</code></summary>
3301
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">update</a>(id, request) -> Pinnacle::Types::Call</code></summary>
3306
3302
  <dl>
3307
3303
  <dd>
3308
3304
 
@@ -3314,19 +3310,7 @@ client.forms.create(
3314
3310
  <dl>
3315
3311
  <dd>
3316
3312
 
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).
3313
+ Replace a call's metadata. For live calls, future call events carry the updated metadata.
3330
3314
  </dd>
3331
3315
  </dl>
3332
3316
  </dd>
@@ -3341,15 +3325,10 @@ On completion, a `FORM.SUBMISSION` webhook event is delivered to webhooks subscr
3341
3325
  <dd>
3342
3326
 
3343
3327
  ```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"
3328
+ client.calls.update(
3329
+ id: "call_7cQe4F8xT1yB2mN9pK3L",
3330
+ metadata: {
3331
+ key: "value"
3353
3332
  }
3354
3333
  )
3355
3334
  ```
@@ -3366,7 +3345,7 @@ client.forms.send_(
3366
3345
  <dl>
3367
3346
  <dd>
3368
3347
 
3369
- **request:** `Pinnacle::Types::SendFormParams`
3348
+ **id:** `String` — Pinnacle call ID.
3370
3349
 
3371
3350
  </dd>
3372
3351
  </dl>
@@ -3374,7 +3353,15 @@ client.forms.send_(
3374
3353
  <dl>
3375
3354
  <dd>
3376
3355
 
3377
- **request_options:** `Pinnacle::Forms::RequestOptions`
3356
+ **metadata:** `Internal::Types::Hash[String, String]`
3357
+
3358
+ </dd>
3359
+ </dl>
3360
+
3361
+ <dl>
3362
+ <dd>
3363
+
3364
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3378
3365
 
3379
3366
  </dd>
3380
3367
  </dl>
@@ -3386,8 +3373,7 @@ client.forms.send_(
3386
3373
  </dl>
3387
3374
  </details>
3388
3375
 
3389
- ## Audiences Contacts
3390
- <details><summary><code>client.audiences.contacts.<a href="/lib/pinnacle/audiences/contacts/client.rb">remove</a>(request) -> Pinnacle::Types::AudienceCountOnly</code></summary>
3376
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">list_events</a>(id) -> Pinnacle::Types::ListCallEventsResponse</code></summary>
3391
3377
  <dl>
3392
3378
  <dd>
3393
3379
 
@@ -3399,10 +3385,7 @@ client.forms.send_(
3399
3385
  <dl>
3400
3386
  <dd>
3401
3387
 
3402
- Remove contacts from an existing audience. This operation is idempotent.
3403
-
3404
- - Only removes contacts that exist in the audience
3405
- - Contacts not in the audience are ignored
3388
+ List the event timeline for a call.
3406
3389
  </dd>
3407
3390
  </dl>
3408
3391
  </dd>
@@ -3417,10 +3400,7 @@ Remove contacts from an existing audience. This operation is idempotent.
3417
3400
  <dd>
3418
3401
 
3419
3402
  ```ruby
3420
- client.audiences.contacts.remove(
3421
- id: "aud_abc123",
3422
- contacts: %w[+12125551234 co_def456]
3423
- )
3403
+ client.calls.list_events(id: "call_7cQe4F8xT1yB2mN9pK3L")
3424
3404
  ```
3425
3405
  </dd>
3426
3406
  </dl>
@@ -3435,7 +3415,7 @@ client.audiences.contacts.remove(
3435
3415
  <dl>
3436
3416
  <dd>
3437
3417
 
3438
- **id:** `String` — Audience ID. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`.
3418
+ **id:** `String` — Pinnacle call ID.
3439
3419
 
3440
3420
  </dd>
3441
3421
  </dl>
@@ -3443,10 +3423,15 @@ client.audiences.contacts.remove(
3443
3423
  <dl>
3444
3424
  <dd>
3445
3425
 
3446
- **contacts:** `Internal::Types::Array[String]`
3426
+ **limit:** `Integer` — Maximum call events to return.
3427
+
3428
+ </dd>
3429
+ </dl>
3447
3430
 
3448
- Array of phone numbers (E.164 format) or contact IDs. <br><br>
3449
- **Limit:** 1 min
3431
+ <dl>
3432
+ <dd>
3433
+
3434
+ **cursor:** `String` — Opaque cursor returned by the previous page.
3450
3435
 
3451
3436
  </dd>
3452
3437
  </dl>
@@ -3454,7 +3439,7 @@ Array of phone numbers (E.164 format) or contact IDs. <br><br>
3454
3439
  <dl>
3455
3440
  <dd>
3456
3441
 
3457
- **request_options:** `Pinnacle::Audiences::Contacts::RequestOptions`
3442
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3458
3443
 
3459
3444
  </dd>
3460
3445
  </dl>
@@ -3466,7 +3451,7 @@ Array of phone numbers (E.164 format) or contact IDs. <br><br>
3466
3451
  </dl>
3467
3452
  </details>
3468
3453
 
3469
- <details><summary><code>client.audiences.contacts.<a href="/lib/pinnacle/audiences/contacts/client.rb">add</a>(request) -> Pinnacle::Types::AudienceCountOnly</code></summary>
3454
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">create_stream_token</a>(id, request) -> Pinnacle::Types::CallStreamToken</code></summary>
3470
3455
  <dl>
3471
3456
  <dd>
3472
3457
 
@@ -3478,11 +3463,7 @@ Array of phone numbers (E.164 format) or contact IDs. <br><br>
3478
3463
  <dl>
3479
3464
  <dd>
3480
3465
 
3481
- Add contacts to an existing audience. This operation is additive and idempotent.
3482
-
3483
- - Phone numbers that don't exist will be auto-created as contacts
3484
- - Duplicate adds are ignored
3485
- - Contacts already in the audience are ignored
3466
+ Mint a short-lived WebSocket token for a call. Use the returned `stream_url` to connect to Pinnacle's bidirectional voice stream.
3486
3467
  </dd>
3487
3468
  </dl>
3488
3469
  </dd>
@@ -3497,10 +3478,7 @@ Add contacts to an existing audience. This operation is additive and idempotent.
3497
3478
  <dd>
3498
3479
 
3499
3480
  ```ruby
3500
- client.audiences.contacts.add(
3501
- id: "aud_abc123",
3502
- contacts: %w[+12125551234 co_def456 +13105551234]
3503
- )
3481
+ client.calls.create_stream_token(id: "call_7cQe4F8xT1yB2mN9pK3L")
3504
3482
  ```
3505
3483
  </dd>
3506
3484
  </dl>
@@ -3515,7 +3493,7 @@ client.audiences.contacts.add(
3515
3493
  <dl>
3516
3494
  <dd>
3517
3495
 
3518
- **id:** `String` — Audience ID. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`.
3496
+ **id:** `String` — Pinnacle call ID.
3519
3497
 
3520
3498
  </dd>
3521
3499
  </dl>
@@ -3523,10 +3501,15 @@ client.audiences.contacts.add(
3523
3501
  <dl>
3524
3502
  <dd>
3525
3503
 
3526
- **contacts:** `Internal::Types::Array[String]`
3504
+ **commands_enabled:** `Internal::Types::Boolean` — Whether this WebSocket may send call commands. Defaults to true.
3505
+
3506
+ </dd>
3507
+ </dl>
3527
3508
 
3528
- Array of phone numbers (E.164 format) or contact IDs. <br><br>
3529
- **Limit:** 1 min
3509
+ <dl>
3510
+ <dd>
3511
+
3512
+ **stream_id:** `String` — Customer-chosen stream ID for reconnects and multiple subscribers.
3530
3513
 
3531
3514
  </dd>
3532
3515
  </dl>
@@ -3534,7 +3517,15 @@ Array of phone numbers (E.164 format) or contact IDs. <br><br>
3534
3517
  <dl>
3535
3518
  <dd>
3536
3519
 
3537
- **request_options:** `Pinnacle::Audiences::Contacts::RequestOptions`
3520
+ **record:** `Internal::Types::Boolean` — Enable recording for this WebSocket stream.
3521
+
3522
+ </dd>
3523
+ </dl>
3524
+
3525
+ <dl>
3526
+ <dd>
3527
+
3528
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3538
3529
 
3539
3530
  </dd>
3540
3531
  </dl>
@@ -3546,8 +3537,7 @@ Array of phone numbers (E.164 format) or contact IDs. <br><br>
3546
3537
  </dl>
3547
3538
  </details>
3548
3539
 
3549
- ## Campaigns Dlc
3550
- <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">autofill</a>(request) -> Pinnacle::Types::AutofillDlcCampaignResponse</code></summary>
3540
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">download_recording</a>(id) -> Pinnacle::Types::RecordingDownload</code></summary>
3551
3541
  <dl>
3552
3542
  <dd>
3553
3543
 
@@ -3559,7 +3549,7 @@ Array of phone numbers (E.164 format) or contact IDs. <br><br>
3559
3549
  <dl>
3560
3550
  <dd>
3561
3551
 
3562
- Generate campaign details based off existing campaign and the brand it's connected to.
3552
+ Return a short-lived signed URL for the call recording.
3563
3553
  </dd>
3564
3554
  </dl>
3565
3555
  </dd>
@@ -3574,10 +3564,7 @@ Generate campaign details based off existing campaign and the brand it's connect
3574
3564
  <dd>
3575
3565
 
3576
3566
  ```ruby
3577
- client.campaigns.dlc.autofill(
3578
- additional_info: "Please autofill missing campaign fields using my brand profile",
3579
- campaign_id: "dlc_1234567890"
3580
- )
3567
+ client.calls.download_recording(id: "call_7cQe4F8xT1yB2mN9pK3L")
3581
3568
  ```
3582
3569
  </dd>
3583
3570
  </dl>
@@ -3592,7 +3579,7 @@ client.campaigns.dlc.autofill(
3592
3579
  <dl>
3593
3580
  <dd>
3594
3581
 
3595
- **request:** `Pinnacle::Types::AutofillCampaignParams`
3582
+ **id:** `String` — Pinnacle call ID.
3596
3583
 
3597
3584
  </dd>
3598
3585
  </dl>
@@ -3600,7 +3587,15 @@ client.campaigns.dlc.autofill(
3600
3587
  <dl>
3601
3588
  <dd>
3602
3589
 
3603
- **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
3590
+ **expires_in:** `Integer` — Signed URL lifetime in seconds. Defaults to 300 and may be at most 86400.
3591
+
3592
+ </dd>
3593
+ </dl>
3594
+
3595
+ <dl>
3596
+ <dd>
3597
+
3598
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3604
3599
 
3605
3600
  </dd>
3606
3601
  </dl>
@@ -3612,7 +3607,7 @@ client.campaigns.dlc.autofill(
3612
3607
  </dl>
3613
3608
  </details>
3614
3609
 
3615
- <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">get</a>(campaign_id) -> Pinnacle::Types::DlcCampaignWithExtendedBrandAndStatus</code></summary>
3610
+ <details><summary><code>client.calls.<a href="/lib/pinnacle/calls/client.rb">delete_recording</a>(id) -> </code></summary>
3616
3611
  <dl>
3617
3612
  <dd>
3618
3613
 
@@ -3624,7 +3619,7 @@ client.campaigns.dlc.autofill(
3624
3619
  <dl>
3625
3620
  <dd>
3626
3621
 
3627
- Retrieve 10DLC campaign.
3622
+ Delete the canonical recording and queued fragments for a terminal call.
3628
3623
  </dd>
3629
3624
  </dl>
3630
3625
  </dd>
@@ -3639,7 +3634,7 @@ Retrieve 10DLC campaign.
3639
3634
  <dd>
3640
3635
 
3641
3636
  ```ruby
3642
- client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
3637
+ client.calls.delete_recording(id: "call_7cQe4F8xT1yB2mN9pK3L")
3643
3638
  ```
3644
3639
  </dd>
3645
3640
  </dl>
@@ -3654,7 +3649,7 @@ client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
3654
3649
  <dl>
3655
3650
  <dd>
3656
3651
 
3657
- **campaign_id:** `String` — Unique identifier of the 10DLC campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.
3652
+ **id:** `String` — Pinnacle call ID.
3658
3653
 
3659
3654
  </dd>
3660
3655
  </dl>
@@ -3662,7 +3657,7 @@ client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
3662
3657
  <dl>
3663
3658
  <dd>
3664
3659
 
3665
- **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
3660
+ **request_options:** `Pinnacle::Calls::RequestOptions`
3666
3661
 
3667
3662
  </dd>
3668
3663
  </dl>
@@ -3674,7 +3669,8 @@ client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
3674
3669
  </dl>
3675
3670
  </details>
3676
3671
 
3677
- <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">submit</a>(campaign_id) -> Pinnacle::Types::CampaignSubmissionResult</code></summary>
3672
+ ## Forms
3673
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">get</a>(id) -> Pinnacle::Types::Form</code></summary>
3678
3674
  <dl>
3679
3675
  <dd>
3680
3676
 
@@ -3686,7 +3682,7 @@ client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
3686
3682
  <dl>
3687
3683
  <dd>
3688
3684
 
3689
- Submit your 10DLC campaign for approval and activation with carriers.
3685
+ Retrieve a form by id. Includes submission count, last submission timestamp, and archive state.
3690
3686
  </dd>
3691
3687
  </dl>
3692
3688
  </dd>
@@ -3701,7 +3697,7 @@ Submit your 10DLC campaign for approval and activation with carriers.
3701
3697
  <dd>
3702
3698
 
3703
3699
  ```ruby
3704
- client.campaigns.dlc.submit(campaign_id: "dlc_1234567890")
3700
+ client.forms.get(id: "form_Oy2n7iUoi9CJwUU6")
3705
3701
  ```
3706
3702
  </dd>
3707
3703
  </dl>
@@ -3716,10 +3712,10 @@ client.campaigns.dlc.submit(campaign_id: "dlc_1234567890")
3716
3712
  <dl>
3717
3713
  <dd>
3718
3714
 
3719
- **campaign_id:** `String`
3715
+ **id:** `String`
3720
3716
 
3721
- Unique identifier of the 10DLC campaign to submit.
3722
- <br><br> This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.
3717
+ The unique identifier of the form you want to retrieve.
3718
+ <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`).
3723
3719
 
3724
3720
  </dd>
3725
3721
  </dl>
@@ -3727,7 +3723,7 @@ Unique identifier of the 10DLC campaign to submit.
3727
3723
  <dl>
3728
3724
  <dd>
3729
3725
 
3730
- **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
3726
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3731
3727
 
3732
3728
  </dd>
3733
3729
  </dl>
@@ -3739,7 +3735,7 @@ Unique identifier of the 10DLC campaign to submit.
3739
3735
  </dl>
3740
3736
  </details>
3741
3737
 
3742
- <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">upsert</a>(request) -> Pinnacle::Types::DlcCampaignWithExtendedBrandAndStatus</code></summary>
3738
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">update</a>(id, request) -> Pinnacle::Types::Form</code></summary>
3743
3739
  <dl>
3744
3740
  <dd>
3745
3741
 
@@ -3751,17 +3747,7 @@ Unique identifier of the 10DLC campaign to submit.
3751
3747
  <dl>
3752
3748
  <dd>
3753
3749
 
3754
- Create a new 10DLC campaign or update an existing one.
3755
-
3756
- <Note>
3757
- **To create a new campaign:** Omit `campaignId` — one will be generated automatically.
3758
-
3759
- **Before you start:** Create a [brand](/api-reference/brands/upsert) first — you'll need its `id` for the [`brand`](#request.body.brand) field.
3760
-
3761
- All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/10-dlc/submit).
3762
-
3763
- **See the response for example values for each field.**
3764
- </Note>
3750
+ 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.
3765
3751
  </dd>
3766
3752
  </dl>
3767
3753
  </dd>
@@ -3776,43 +3762,11 @@ All fields are **required** unless specified otherwise, and will be validated wh
3776
3762
  <dd>
3777
3763
 
3778
3764
  ```ruby
3779
- client.campaigns.dlc.upsert(
3780
- auto_renew: true,
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.",
3783
- keywords: {
3784
- help: {
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]
3787
- },
3788
- opt_in: {
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",
3790
- values: %w[START YES SUBSCRIBE]
3791
- },
3792
- opt_out: {
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.",
3794
- values: %w[STOP CANCEL UNSUBSCRIBE]
3795
- }
3796
- },
3797
- links: {
3798
- privacy_policy: "https://www.pinnacle.sh/privacy",
3799
- terms_of_service: "https://www.pinnacle.sh/terms"
3800
- },
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",
3802
- name: "Pinnacle's Account Notifications",
3803
- options: {
3804
- affiliate_marketing: false,
3805
- age_gated: false,
3806
- direct_lending: false,
3807
- embedded_link: "https://www.pinnacle.sh/example",
3808
- embedded_phone: false,
3809
- number_pooling: false
3810
- },
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."],
3812
- use_case: {
3813
- sub: %w[ACCOUNT_NOTIFICATION CUSTOMER_CARE SECURITY_ALERT],
3814
- value: "MIXED"
3815
- }
3765
+ client.forms.update(
3766
+ id: "form_Oy2n7iUoi9CJwUU6",
3767
+ name: "Contact request (v2)",
3768
+ can_update: true,
3769
+ expires_at: "2026-12-31T23:59:59Z"
3816
3770
  )
3817
3771
  ```
3818
3772
  </dd>
@@ -3828,35 +3782,10 @@ client.campaigns.dlc.upsert(
3828
3782
  <dl>
3829
3783
  <dd>
3830
3784
 
3831
- **auto_renew:** `Internal::Types::Boolean` — Whether the campaign renews automatically.
3832
-
3833
- </dd>
3834
- </dl>
3835
-
3836
- <dl>
3837
- <dd>
3838
-
3839
- **brand:** `String` — Brand id. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`.
3840
-
3841
- </dd>
3842
- </dl>
3843
-
3844
- <dl>
3845
- <dd>
3846
-
3847
- **campaign_id:** `String` — Unique identifier for the campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.
3848
-
3849
- </dd>
3850
- </dl>
3851
-
3852
- <dl>
3853
- <dd>
3854
-
3855
- **description:** `String`
3856
-
3857
- Description of the campaign. Explain the purpose, use case, and types of messages your campaign will send.
3785
+ **id:** `String`
3858
3786
 
3859
- **Example:** `This campaign allows users who have specifically opted in to interact with our chatbot for a range of automated services, including order status notifications, shipping updates, security alerts, and help desk support. Users can manage their account, receive transactional SMS prompts, and access interactive support. They may also share images, such as receipts, and receive immediate responses for support or account updates. All messages are strictly transactional or support-related, never unsolicited, and initiated only after clear user consent.`
3787
+ The unique identifier of the form you want to update.
3788
+ <br><br> This identifier is a string that always begins with the prefix `form_`, for example: `form_Oy2n7iUoi9CJwUU6`.
3860
3789
 
3861
3790
  </dd>
3862
3791
  </dl>
@@ -3864,7 +3793,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3864
3793
  <dl>
3865
3794
  <dd>
3866
3795
 
3867
- **keywords:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignKeywords` — Keyword response configuration.
3796
+ **name:** `String` — Replace the form's title. Pass `null` to clear.
3868
3797
 
3869
3798
  </dd>
3870
3799
  </dl>
@@ -3872,7 +3801,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3872
3801
  <dl>
3873
3802
  <dd>
3874
3803
 
3875
- **links:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignLinks` — Legal documentation links.
3804
+ **description:** `String` — Replace the form's description. Pass `null` to clear.
3876
3805
 
3877
3806
  </dd>
3878
3807
  </dl>
@@ -3880,7 +3809,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3880
3809
  <dl>
3881
3810
  <dd>
3882
3811
 
3883
- **message_flow:** `String` — Describe your opt-in workflow. See the [Opt-In Methods and Workflow](/guides/campaigns/opt-in-compliance#opt-in-methods-and-workflow) section for requirements and examples.
3812
+ **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.
3884
3813
 
3885
3814
  </dd>
3886
3815
  </dl>
@@ -3888,7 +3817,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3888
3817
  <dl>
3889
3818
  <dd>
3890
3819
 
3891
- **name:** `String` — Display name of the campaign.
3820
+ **can_update:** `Internal::Types::Boolean` — Toggle whether the recipient can re-edit their submission.
3892
3821
 
3893
3822
  </dd>
3894
3823
  </dl>
@@ -3896,7 +3825,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3896
3825
  <dl>
3897
3826
  <dd>
3898
3827
 
3899
- **options:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignOptions` — Campaign configuration options.
3828
+ **expires_at:** `String` — Set or clear the form's expiration timestamp.
3900
3829
 
3901
3830
  </dd>
3902
3831
  </dl>
@@ -3904,7 +3833,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3904
3833
  <dl>
3905
3834
  <dd>
3906
3835
 
3907
- **sample_messages:** `Internal::Types::Array[String]` — Example messages for the campaign. Include 1-5 messages that represent the types of messages you will send. See the [Sample Messages](/guides/campaigns/opt-in-compliance#sample-messages) section for requirements and examples.
3836
+ **theme_override:** `Pinnacle::Types::FormThemeOverride` — Replace the per-form theme override. Pass `null` to revert to team defaults.
3908
3837
 
3909
3838
  </dd>
3910
3839
  </dl>
@@ -3912,7 +3841,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3912
3841
  <dl>
3913
3842
  <dd>
3914
3843
 
3915
- **use_case:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignUseCase` — Use case for the campaign.
3844
+ **archived_at:** `String` — Set to an ISO timestamp to archive the form (soft-delete), or `null` to restore an archived form.
3916
3845
 
3917
3846
  </dd>
3918
3847
  </dl>
@@ -3920,7 +3849,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3920
3849
  <dl>
3921
3850
  <dd>
3922
3851
 
3923
- **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
3852
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3924
3853
 
3925
3854
  </dd>
3926
3855
  </dl>
@@ -3932,7 +3861,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3932
3861
  </dl>
3933
3862
  </details>
3934
3863
 
3935
- <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">validate</a>(request) -> Pinnacle::Types::CampaignValidationResult</code></summary>
3864
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">list</a>(request) -> Pinnacle::Types::ListFormsResponse</code></summary>
3936
3865
  <dl>
3937
3866
  <dd>
3938
3867
 
@@ -3944,7 +3873,7 @@ Description of the campaign. Explain the purpose, use case, and types of message
3944
3873
  <dl>
3945
3874
  <dd>
3946
3875
 
3947
- Validate your 10DLC campaign configuration against carrier requirements and compliance rules.
3876
+ Paginated list of forms on your team, sorted by creation date (newest first). Includes archived forms.
3948
3877
  </dd>
3949
3878
  </dl>
3950
3879
  </dd>
@@ -3959,9 +3888,9 @@ Validate your 10DLC campaign configuration against carrier requirements and comp
3959
3888
  <dd>
3960
3889
 
3961
3890
  ```ruby
3962
- client.campaigns.dlc.validate(
3963
- additional_info: "Please validate this DLC campaign for 10DLC compliance",
3964
- campaign_id: "dlc_1234567890"
3891
+ client.forms.list(
3892
+ page_index: 0,
3893
+ page_size: 20
3965
3894
  )
3966
3895
  ```
3967
3896
  </dd>
@@ -3977,7 +3906,7 @@ client.campaigns.dlc.validate(
3977
3906
  <dl>
3978
3907
  <dd>
3979
3908
 
3980
- **request:** `Pinnacle::Types::ValidateCampaignParams`
3909
+ **page_index:** `Integer` — Zero-based page index.
3981
3910
 
3982
3911
  </dd>
3983
3912
  </dl>
@@ -3985,7 +3914,15 @@ client.campaigns.dlc.validate(
3985
3914
  <dl>
3986
3915
  <dd>
3987
3916
 
3988
- **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
3917
+ **page_size:** `Integer` — Number of forms to return in a single page. Max 100.
3918
+
3919
+ </dd>
3920
+ </dl>
3921
+
3922
+ <dl>
3923
+ <dd>
3924
+
3925
+ **request_options:** `Pinnacle::Forms::RequestOptions`
3989
3926
 
3990
3927
  </dd>
3991
3928
  </dl>
@@ -3997,7 +3934,7 @@ client.campaigns.dlc.validate(
3997
3934
  </dl>
3998
3935
  </details>
3999
3936
 
4000
- <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">list</a>(request) -> Pinnacle::Types::ListDlcCampaignsResponse</code></summary>
3937
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">create</a>(request) -> Pinnacle::Types::Form</code></summary>
4001
3938
  <dl>
4002
3939
  <dd>
4003
3940
 
@@ -4009,7 +3946,11 @@ client.campaigns.dlc.validate(
4009
3946
  <dl>
4010
3947
  <dd>
4011
3948
 
4012
- List all 10DLC campaigns with optional filtering and pagination. Results are sorted by creation date, newest first.
3949
+ Create a hosted form without sending it. <br>
3950
+
3951
+ Returns the form object including its public URL — `https://forms.pinnacle.sh/{form_id}`. <br>
3952
+
3953
+ 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).
4013
3954
  </dd>
4014
3955
  </dl>
4015
3956
  </dd>
@@ -4024,7 +3965,12 @@ List all 10DLC campaigns with optional filtering and pagination. Results are sor
4024
3965
  <dd>
4025
3966
 
4026
3967
  ```ruby
4027
- client.campaigns.dlc.list
3968
+ client.forms.create(
3969
+ name: "Contact request",
3970
+ description: "We'll follow up over SMS or RCS.",
3971
+ fields: [],
3972
+ can_update: false
3973
+ )
4028
3974
  ```
4029
3975
  </dd>
4030
3976
  </dl>
@@ -4039,7 +3985,7 @@ client.campaigns.dlc.list
4039
3985
  <dl>
4040
3986
  <dd>
4041
3987
 
4042
- **page_index:** `Integer`
3988
+ **request:** `Pinnacle::Types::FormDefinition`
4043
3989
 
4044
3990
  </dd>
4045
3991
  </dl>
@@ -4047,31 +3993,83 @@ client.campaigns.dlc.list
4047
3993
  <dl>
4048
3994
  <dd>
4049
3995
 
4050
- **page_size:** `Integer`
3996
+ **request_options:** `Pinnacle::Forms::RequestOptions`
4051
3997
 
4052
3998
  </dd>
4053
3999
  </dl>
4000
+ </dd>
4001
+ </dl>
4002
+
4003
+
4004
+ </dd>
4005
+ </dl>
4006
+ </details>
4054
4007
 
4008
+ <details><summary><code>client.forms.<a href="/lib/pinnacle/forms/client.rb">send_</a>(request) -> Pinnacle::Forms::Types::FormsSendResponse</code></summary>
4055
4009
  <dl>
4056
4010
  <dd>
4057
4011
 
4058
- **status:** `Pinnacle::Campaigns::Dlc::Types::ListDlcCampaignsRequestStatus`
4059
-
4012
+ #### 📝 Description
4013
+
4014
+ <dl>
4015
+ <dd>
4016
+
4017
+ <dl>
4018
+ <dd>
4019
+
4020
+ Send a form to a recipient over SMS or RCS, or mint a standalone submission URL.
4021
+
4022
+ Pass `form` as either an existing form id (`form_*`) or an inline `{ fields, ... }` definition to mint a new form for this send.
4023
+
4024
+ The delivery channel is inferred from `from`:
4025
+ - `from: "agent_*"` → RCS (with optional SMS `fallback`)
4026
+ - `from: "+E.164"` → SMS
4027
+
4028
+ 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.
4029
+
4030
+ 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.
4031
+
4032
+ On completion, a `FORM.SUBMISSION` webhook event is delivered to webhooks subscribed to the sender. See [Receiving Message, Call, and User Events](/guides/messages/receiving).
4033
+ </dd>
4034
+ </dl>
4060
4035
  </dd>
4061
4036
  </dl>
4062
4037
 
4038
+ #### 🔌 Usage
4039
+
4063
4040
  <dl>
4064
4041
  <dd>
4065
4042
 
4066
- **brand_id:** `String`
4067
-
4043
+ <dl>
4044
+ <dd>
4045
+
4046
+ ```ruby
4047
+ client.forms.send_(
4048
+ from: "agent_iM9wQcyBBjYn",
4049
+ to: "+14155551234",
4050
+ form: "form_Oy2n7iUoi9CJwUU6",
4051
+ fallback: {
4052
+ from: "+14155550000"
4053
+ },
4054
+ options: {
4055
+ webview_mode: "FULL"
4056
+ }
4057
+ )
4058
+ ```
4059
+ </dd>
4060
+ </dl>
4068
4061
  </dd>
4069
4062
  </dl>
4070
4063
 
4064
+ #### ⚙️ Parameters
4065
+
4071
4066
  <dl>
4072
4067
  <dd>
4073
4068
 
4074
- **name:** `String` — Filter by campaign name (partial match, case-insensitive).
4069
+ <dl>
4070
+ <dd>
4071
+
4072
+ **request:** `Pinnacle::Types::SendFormParams`
4075
4073
 
4076
4074
  </dd>
4077
4075
  </dl>
@@ -4079,7 +4077,7 @@ client.campaigns.dlc.list
4079
4077
  <dl>
4080
4078
  <dd>
4081
4079
 
4082
- **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
4080
+ **request_options:** `Pinnacle::Forms::RequestOptions`
4083
4081
 
4084
4082
  </dd>
4085
4083
  </dl>
@@ -4091,8 +4089,8 @@ client.campaigns.dlc.list
4091
4089
  </dl>
4092
4090
  </details>
4093
4091
 
4094
- ## Campaigns TollFree
4095
- <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">autofill</a>(request) -> Pinnacle::Campaigns::TollFree::Types::TollFreeAutofillResponse</code></summary>
4092
+ ## Audiences Contacts
4093
+ <details><summary><code>client.audiences.contacts.<a href="/lib/pinnacle/audiences/contacts/client.rb">remove</a>(request) -> Pinnacle::Types::AudienceCountOnly</code></summary>
4096
4094
  <dl>
4097
4095
  <dd>
4098
4096
 
@@ -4104,7 +4102,10 @@ client.campaigns.dlc.list
4104
4102
  <dl>
4105
4103
  <dd>
4106
4104
 
4107
- Generate campaign details based off existing campaign and the brand it's connected to.
4105
+ Remove contacts from an existing audience. This operation is idempotent.
4106
+
4107
+ - Only removes contacts that exist in the audience
4108
+ - Contacts not in the audience are ignored
4108
4109
  </dd>
4109
4110
  </dl>
4110
4111
  </dd>
@@ -4119,9 +4120,9 @@ Generate campaign details based off existing campaign and the brand it's connect
4119
4120
  <dd>
4120
4121
 
4121
4122
  ```ruby
4122
- client.campaigns.toll_free.autofill(
4123
- additional_info: "Please autofill missing campaign fields using my brand profile",
4124
- campaign_id: "dlc_1234567890"
4123
+ client.audiences.contacts.remove(
4124
+ id: "aud_abc123",
4125
+ contacts: %w[+12125551234 co_def456]
4125
4126
  )
4126
4127
  ```
4127
4128
  </dd>
@@ -4137,7 +4138,7 @@ client.campaigns.toll_free.autofill(
4137
4138
  <dl>
4138
4139
  <dd>
4139
4140
 
4140
- **request:** `Pinnacle::Types::AutofillCampaignParams`
4141
+ **id:** `String` — Audience ID. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`.
4141
4142
 
4142
4143
  </dd>
4143
4144
  </dl>
@@ -4145,7 +4146,18 @@ client.campaigns.toll_free.autofill(
4145
4146
  <dl>
4146
4147
  <dd>
4147
4148
 
4148
- **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4149
+ **contacts:** `Internal::Types::Array[String]`
4150
+
4151
+ Array of phone numbers (E.164 format) or contact IDs. <br><br>
4152
+ **Limit:** 1 min
4153
+
4154
+ </dd>
4155
+ </dl>
4156
+
4157
+ <dl>
4158
+ <dd>
4159
+
4160
+ **request_options:** `Pinnacle::Audiences::Contacts::RequestOptions`
4149
4161
 
4150
4162
  </dd>
4151
4163
  </dl>
@@ -4157,7 +4169,7 @@ client.campaigns.toll_free.autofill(
4157
4169
  </dl>
4158
4170
  </details>
4159
4171
 
4160
- <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">get</a>(campaign_id) -> Pinnacle::Types::TollFreeCampaignWithExtendedBrandAndStatus</code></summary>
4172
+ <details><summary><code>client.audiences.contacts.<a href="/lib/pinnacle/audiences/contacts/client.rb">add</a>(request) -> Pinnacle::Types::AudienceCountOnly</code></summary>
4161
4173
  <dl>
4162
4174
  <dd>
4163
4175
 
@@ -4169,7 +4181,11 @@ client.campaigns.toll_free.autofill(
4169
4181
  <dl>
4170
4182
  <dd>
4171
4183
 
4172
- Retrieve Toll-Free campaign.
4184
+ Add contacts to an existing audience. This operation is additive and idempotent.
4185
+
4186
+ - Phone numbers that don't exist will be auto-created as contacts
4187
+ - Duplicate adds are ignored
4188
+ - Contacts already in the audience are ignored
4173
4189
  </dd>
4174
4190
  </dl>
4175
4191
  </dd>
@@ -4184,7 +4200,10 @@ Retrieve Toll-Free campaign.
4184
4200
  <dd>
4185
4201
 
4186
4202
  ```ruby
4187
- client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
4203
+ client.audiences.contacts.add(
4204
+ id: "aud_abc123",
4205
+ contacts: %w[+12125551234 co_def456 +13105551234]
4206
+ )
4188
4207
  ```
4189
4208
  </dd>
4190
4209
  </dl>
@@ -4199,7 +4218,7 @@ client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
4199
4218
  <dl>
4200
4219
  <dd>
4201
4220
 
4202
- **campaign_id:** `String` — Unique identifier of toll-free campaign. Must begin with the prefix `tf_`.
4221
+ **id:** `String` — Audience ID. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`.
4203
4222
 
4204
4223
  </dd>
4205
4224
  </dl>
@@ -4207,7 +4226,18 @@ client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
4207
4226
  <dl>
4208
4227
  <dd>
4209
4228
 
4210
- **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4229
+ **contacts:** `Internal::Types::Array[String]`
4230
+
4231
+ Array of phone numbers (E.164 format) or contact IDs. <br><br>
4232
+ **Limit:** 1 min
4233
+
4234
+ </dd>
4235
+ </dl>
4236
+
4237
+ <dl>
4238
+ <dd>
4239
+
4240
+ **request_options:** `Pinnacle::Audiences::Contacts::RequestOptions`
4211
4241
 
4212
4242
  </dd>
4213
4243
  </dl>
@@ -4219,7 +4249,8 @@ client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
4219
4249
  </dl>
4220
4250
  </details>
4221
4251
 
4222
- <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">submit</a>(campaign_id) -> Pinnacle::Types::CampaignSubmissionResult</code></summary>
4252
+ ## Campaigns Dlc
4253
+ <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">autofill</a>(request) -> Pinnacle::Types::AutofillDlcCampaignResponse</code></summary>
4223
4254
  <dl>
4224
4255
  <dd>
4225
4256
 
@@ -4231,7 +4262,7 @@ client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
4231
4262
  <dl>
4232
4263
  <dd>
4233
4264
 
4234
- Submit your toll-free campaign for approval and activation with carriers.
4265
+ Generate campaign details based off existing campaign and the brand it's connected to.
4235
4266
  </dd>
4236
4267
  </dl>
4237
4268
  </dd>
@@ -4246,7 +4277,10 @@ Submit your toll-free campaign for approval and activation with carriers.
4246
4277
  <dd>
4247
4278
 
4248
4279
  ```ruby
4249
- client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
4280
+ client.campaigns.dlc.autofill(
4281
+ additional_info: "Please autofill missing campaign fields using my brand profile",
4282
+ campaign_id: "dlc_1234567890"
4283
+ )
4250
4284
  ```
4251
4285
  </dd>
4252
4286
  </dl>
@@ -4261,7 +4295,7 @@ client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
4261
4295
  <dl>
4262
4296
  <dd>
4263
4297
 
4264
- **campaign_id:** `String` — Unique identifier of the toll-free campaign to submit. Must begin with the prefix `tf_`.
4298
+ **request:** `Pinnacle::Types::AutofillCampaignParams`
4265
4299
 
4266
4300
  </dd>
4267
4301
  </dl>
@@ -4269,7 +4303,7 @@ client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
4269
4303
  <dl>
4270
4304
  <dd>
4271
4305
 
4272
- **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4306
+ **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
4273
4307
 
4274
4308
  </dd>
4275
4309
  </dl>
@@ -4281,7 +4315,7 @@ client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
4281
4315
  </dl>
4282
4316
  </details>
4283
4317
 
4284
- <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">upsert</a>(request) -> Pinnacle::Types::TollFreeCampaignWithExtendedBrandAndStatus</code></summary>
4318
+ <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">get</a>(campaign_id) -> Pinnacle::Types::DlcCampaignWithExtendedBrandAndStatus</code></summary>
4285
4319
  <dl>
4286
4320
  <dd>
4287
4321
 
@@ -4293,14 +4327,141 @@ client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
4293
4327
  <dl>
4294
4328
  <dd>
4295
4329
 
4296
- Create a new toll-free campaign or update an existing one.
4330
+ Retrieve 10DLC campaign.
4331
+ </dd>
4332
+ </dl>
4333
+ </dd>
4334
+ </dl>
4335
+
4336
+ #### 🔌 Usage
4337
+
4338
+ <dl>
4339
+ <dd>
4340
+
4341
+ <dl>
4342
+ <dd>
4343
+
4344
+ ```ruby
4345
+ client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
4346
+ ```
4347
+ </dd>
4348
+ </dl>
4349
+ </dd>
4350
+ </dl>
4351
+
4352
+ #### ⚙️ Parameters
4353
+
4354
+ <dl>
4355
+ <dd>
4356
+
4357
+ <dl>
4358
+ <dd>
4359
+
4360
+ **campaign_id:** `String` — Unique identifier of the 10DLC campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.
4361
+
4362
+ </dd>
4363
+ </dl>
4364
+
4365
+ <dl>
4366
+ <dd>
4367
+
4368
+ **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
4369
+
4370
+ </dd>
4371
+ </dl>
4372
+ </dd>
4373
+ </dl>
4374
+
4375
+
4376
+ </dd>
4377
+ </dl>
4378
+ </details>
4379
+
4380
+ <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">submit</a>(campaign_id) -> Pinnacle::Types::CampaignSubmissionResult</code></summary>
4381
+ <dl>
4382
+ <dd>
4383
+
4384
+ #### 📝 Description
4385
+
4386
+ <dl>
4387
+ <dd>
4388
+
4389
+ <dl>
4390
+ <dd>
4391
+
4392
+ Submit your 10DLC campaign for approval and activation with carriers.
4393
+ </dd>
4394
+ </dl>
4395
+ </dd>
4396
+ </dl>
4397
+
4398
+ #### 🔌 Usage
4399
+
4400
+ <dl>
4401
+ <dd>
4402
+
4403
+ <dl>
4404
+ <dd>
4405
+
4406
+ ```ruby
4407
+ client.campaigns.dlc.submit(campaign_id: "dlc_1234567890")
4408
+ ```
4409
+ </dd>
4410
+ </dl>
4411
+ </dd>
4412
+ </dl>
4413
+
4414
+ #### ⚙️ Parameters
4415
+
4416
+ <dl>
4417
+ <dd>
4418
+
4419
+ <dl>
4420
+ <dd>
4421
+
4422
+ **campaign_id:** `String`
4423
+
4424
+ Unique identifier of the 10DLC campaign to submit.
4425
+ <br><br> This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.
4426
+
4427
+ </dd>
4428
+ </dl>
4429
+
4430
+ <dl>
4431
+ <dd>
4432
+
4433
+ **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
4434
+
4435
+ </dd>
4436
+ </dl>
4437
+ </dd>
4438
+ </dl>
4439
+
4440
+
4441
+ </dd>
4442
+ </dl>
4443
+ </details>
4444
+
4445
+ <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">upsert</a>(request) -> Pinnacle::Types::DlcCampaignWithExtendedBrandAndStatus</code></summary>
4446
+ <dl>
4447
+ <dd>
4448
+
4449
+ #### 📝 Description
4450
+
4451
+ <dl>
4452
+ <dd>
4453
+
4454
+ <dl>
4455
+ <dd>
4456
+
4457
+ Create a new 10DLC campaign or update an existing one.
4297
4458
 
4298
4459
  <Note>
4299
4460
  **To create a new campaign:** Omit `campaignId` — one will be generated automatically.
4300
4461
 
4301
4462
  **Before you start:** Create a [brand](/api-reference/brands/upsert) first — you'll need its `id` for the [`brand`](#request.body.brand) field.
4302
4463
 
4303
- All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/toll-free/submit).
4464
+ All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/10-dlc/submit).
4304
4465
 
4305
4466
  **See the response for example values for each field.**
4306
4467
  </Note>
@@ -4318,36 +4479,42 @@ All fields are **required** unless specified otherwise, and will be validated wh
4318
4479
  <dd>
4319
4480
 
4320
4481
  ```ruby
4321
- client.campaigns.toll_free.upsert(
4482
+ client.campaigns.dlc.upsert(
4483
+ auto_renew: true,
4322
4484
  brand: "b_1234567890",
4323
- campaign_id: "tf_1234567890",
4485
+ 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.",
4324
4486
  keywords: {
4325
4487
  help: {
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."
4488
+ 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.",
4489
+ values: %w[HELP SUPPORT INFO]
4327
4490
  },
4328
4491
  opt_in: {
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/",
4330
- keywords: %w[START SUBSCRIBE]
4492
+ 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",
4493
+ values: %w[START YES SUBSCRIBE]
4494
+ },
4495
+ opt_out: {
4496
+ 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.",
4497
+ values: %w[STOP CANCEL UNSUBSCRIBE]
4331
4498
  }
4332
4499
  },
4333
4500
  links: {
4334
4501
  privacy_policy: "https://www.pinnacle.sh/privacy",
4335
4502
  terms_of_service: "https://www.pinnacle.sh/terms"
4336
4503
  },
4337
- monthly_volume: "10,000",
4338
- name: "Pinnacle",
4339
- opt_in: {
4340
- method_: "PAPER",
4341
- url: "https://www.pinnacle.sh/opt-in",
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"
4343
- },
4504
+ 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",
4505
+ name: "Pinnacle's Account Notifications",
4344
4506
  options: {
4345
- age_gated: false
4507
+ affiliate_marketing: false,
4508
+ age_gated: false,
4509
+ direct_lending: false,
4510
+ embedded_link: "https://www.pinnacle.sh/example",
4511
+ embedded_phone: false,
4512
+ number_pooling: false
4346
4513
  },
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.",
4514
+ 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."],
4348
4515
  use_case: {
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"
4516
+ sub: %w[ACCOUNT_NOTIFICATION CUSTOMER_CARE SECURITY_ALERT],
4517
+ value: "MIXED"
4351
4518
  }
4352
4519
  )
4353
4520
  ```
@@ -4364,6 +4531,14 @@ client.campaigns.toll_free.upsert(
4364
4531
  <dl>
4365
4532
  <dd>
4366
4533
 
4534
+ **auto_renew:** `Internal::Types::Boolean` — Whether the campaign renews automatically.
4535
+
4536
+ </dd>
4537
+ </dl>
4538
+
4539
+ <dl>
4540
+ <dd>
4541
+
4367
4542
  **brand:** `String` — Brand id. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`.
4368
4543
 
4369
4544
  </dd>
@@ -4372,7 +4547,7 @@ client.campaigns.toll_free.upsert(
4372
4547
  <dl>
4373
4548
  <dd>
4374
4549
 
4375
- **campaign_id:** `String` — Unique identifier for the campaign. This identifier is a string that always begins with the prefix `tf_`, for example: `tf_1234567890`.
4550
+ **campaign_id:** `String` — Unique identifier for the campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.
4376
4551
 
4377
4552
  </dd>
4378
4553
  </dl>
@@ -4380,7 +4555,11 @@ client.campaigns.toll_free.upsert(
4380
4555
  <dl>
4381
4556
  <dd>
4382
4557
 
4383
- **keywords:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignKeywords` — Keyword response configuration.
4558
+ **description:** `String`
4559
+
4560
+ Description of the campaign. Explain the purpose, use case, and types of messages your campaign will send.
4561
+
4562
+ **Example:** `This campaign allows users who have specifically opted in to interact with our chatbot for a range of automated services, including order status notifications, shipping updates, security alerts, and help desk support. Users can manage their account, receive transactional SMS prompts, and access interactive support. They may also share images, such as receipts, and receive immediate responses for support or account updates. All messages are strictly transactional or support-related, never unsolicited, and initiated only after clear user consent.`
4384
4563
 
4385
4564
  </dd>
4386
4565
  </dl>
@@ -4388,7 +4567,7 @@ client.campaigns.toll_free.upsert(
4388
4567
  <dl>
4389
4568
  <dd>
4390
4569
 
4391
- **links:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignLinks` — Legal documentation links.
4570
+ **keywords:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignKeywords` — Keyword response configuration.
4392
4571
 
4393
4572
  </dd>
4394
4573
  </dl>
@@ -4396,7 +4575,7 @@ client.campaigns.toll_free.upsert(
4396
4575
  <dl>
4397
4576
  <dd>
4398
4577
 
4399
- **monthly_volume:** `Pinnacle::Types::MessageVolumeEnum`
4578
+ **links:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignLinks` — Legal documentation links.
4400
4579
 
4401
4580
  </dd>
4402
4581
  </dl>
@@ -4404,7 +4583,7 @@ client.campaigns.toll_free.upsert(
4404
4583
  <dl>
4405
4584
  <dd>
4406
4585
 
4407
- **name:** `String` — Display name of the campaign. This is not sent to carriers for approval and is only used for your reference on the Pinnacle dashboard.
4586
+ **message_flow:** `String` — Describe your opt-in workflow. See the [Opt-In Methods and Workflow](/guides/campaigns/opt-in-compliance#opt-in-methods-and-workflow) section for requirements and examples.
4408
4587
 
4409
4588
  </dd>
4410
4589
  </dl>
@@ -4412,7 +4591,7 @@ client.campaigns.toll_free.upsert(
4412
4591
  <dl>
4413
4592
  <dd>
4414
4593
 
4415
- **opt_in:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignOptIn` — Opt-in method and workflow.
4594
+ **name:** `String` — Display name of the campaign.
4416
4595
 
4417
4596
  </dd>
4418
4597
  </dl>
@@ -4420,7 +4599,7 @@ client.campaigns.toll_free.upsert(
4420
4599
  <dl>
4421
4600
  <dd>
4422
4601
 
4423
- **options:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignOptions` — Campaign configuration options.
4602
+ **options:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignOptions` — Campaign configuration options.
4424
4603
 
4425
4604
  </dd>
4426
4605
  </dl>
@@ -4428,7 +4607,7 @@ client.campaigns.toll_free.upsert(
4428
4607
  <dl>
4429
4608
  <dd>
4430
4609
 
4431
- **production_message_content:** `String` — Example message(s) that would be sent in production. Should reflect the actual content users will receive, including HELP/STOP disclosures. See the [Production Message Content](/guides/campaigns/opt-in-compliance#production-message-content) section for requirements.
4610
+ **sample_messages:** `Internal::Types::Array[String]` — Example messages for the campaign. Include 1-5 messages that represent the types of messages you will send. See the [Sample Messages](/guides/campaigns/opt-in-compliance#sample-messages) section for requirements and examples.
4432
4611
 
4433
4612
  </dd>
4434
4613
  </dl>
@@ -4436,7 +4615,7 @@ client.campaigns.toll_free.upsert(
4436
4615
  <dl>
4437
4616
  <dd>
4438
4617
 
4439
- **use_case:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignUseCase` — Use case classification for the campaign.
4618
+ **use_case:** `Pinnacle::Campaigns::Dlc::Types::DlcCampaignUseCase` — Use case for the campaign.
4440
4619
 
4441
4620
  </dd>
4442
4621
  </dl>
@@ -4444,7 +4623,7 @@ client.campaigns.toll_free.upsert(
4444
4623
  <dl>
4445
4624
  <dd>
4446
4625
 
4447
- **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4626
+ **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
4448
4627
 
4449
4628
  </dd>
4450
4629
  </dl>
@@ -4456,7 +4635,7 @@ client.campaigns.toll_free.upsert(
4456
4635
  </dl>
4457
4636
  </details>
4458
4637
 
4459
- <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">validate</a>(request) -> Pinnacle::Types::CampaignValidationResult</code></summary>
4638
+ <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">validate</a>(request) -> Pinnacle::Types::CampaignValidationResult</code></summary>
4460
4639
  <dl>
4461
4640
  <dd>
4462
4641
 
@@ -4468,7 +4647,7 @@ client.campaigns.toll_free.upsert(
4468
4647
  <dl>
4469
4648
  <dd>
4470
4649
 
4471
- Validate your toll-free campaign configuration against carrier requirements and compliance rules.
4650
+ Validate your 10DLC campaign configuration against carrier requirements and compliance rules.
4472
4651
  </dd>
4473
4652
  </dl>
4474
4653
  </dd>
@@ -4483,7 +4662,7 @@ Validate your toll-free campaign configuration against carrier requirements and
4483
4662
  <dd>
4484
4663
 
4485
4664
  ```ruby
4486
- client.campaigns.toll_free.validate(
4665
+ client.campaigns.dlc.validate(
4487
4666
  additional_info: "Please validate this DLC campaign for 10DLC compliance",
4488
4667
  campaign_id: "dlc_1234567890"
4489
4668
  )
@@ -4509,7 +4688,7 @@ client.campaigns.toll_free.validate(
4509
4688
  <dl>
4510
4689
  <dd>
4511
4690
 
4512
- **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4691
+ **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
4513
4692
 
4514
4693
  </dd>
4515
4694
  </dl>
@@ -4521,7 +4700,7 @@ client.campaigns.toll_free.validate(
4521
4700
  </dl>
4522
4701
  </details>
4523
4702
 
4524
- <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">list</a>(request) -> Pinnacle::Types::ListTollFreeCampaignsResponse</code></summary>
4703
+ <details><summary><code>client.campaigns.dlc.<a href="/lib/pinnacle/campaigns/dlc/client.rb">list</a>(request) -> Pinnacle::Types::ListDlcCampaignsResponse</code></summary>
4525
4704
  <dl>
4526
4705
  <dd>
4527
4706
 
@@ -4533,7 +4712,7 @@ client.campaigns.toll_free.validate(
4533
4712
  <dl>
4534
4713
  <dd>
4535
4714
 
4536
- List all toll-free campaigns with optional filtering and pagination. Results are sorted by creation date, newest first.
4715
+ List all 10DLC campaigns with optional filtering and pagination. Results are sorted by creation date, newest first.
4537
4716
  </dd>
4538
4717
  </dl>
4539
4718
  </dd>
@@ -4548,7 +4727,7 @@ List all toll-free campaigns with optional filtering and pagination. Results are
4548
4727
  <dd>
4549
4728
 
4550
4729
  ```ruby
4551
- client.campaigns.toll_free.list
4730
+ client.campaigns.dlc.list
4552
4731
  ```
4553
4732
  </dd>
4554
4733
  </dl>
@@ -4579,7 +4758,7 @@ client.campaigns.toll_free.list
4579
4758
  <dl>
4580
4759
  <dd>
4581
4760
 
4582
- **status:** `Pinnacle::Campaigns::TollFree::Types::ListTollFreeCampaignsRequestStatus`
4761
+ **status:** `Pinnacle::Campaigns::Dlc::Types::ListDlcCampaignsRequestStatus`
4583
4762
 
4584
4763
  </dd>
4585
4764
  </dl>
@@ -4603,7 +4782,7 @@ client.campaigns.toll_free.list
4603
4782
  <dl>
4604
4783
  <dd>
4605
4784
 
4606
- **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4785
+ **request_options:** `Pinnacle::Campaigns::Dlc::RequestOptions`
4607
4786
 
4608
4787
  </dd>
4609
4788
  </dl>
@@ -4615,8 +4794,8 @@ client.campaigns.toll_free.list
4615
4794
  </dl>
4616
4795
  </details>
4617
4796
 
4618
- ## Campaigns Rcs
4619
- <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">autofill</a>(request) -> Pinnacle::Campaigns::Rcs::Types::RcsAutofillResponse</code></summary>
4797
+ ## Campaigns TollFree
4798
+ <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">autofill</a>(request) -> Pinnacle::Campaigns::TollFree::Types::TollFreeAutofillResponse</code></summary>
4620
4799
  <dl>
4621
4800
  <dd>
4622
4801
 
@@ -4643,7 +4822,7 @@ Generate campaign details based off existing campaign and the brand it's connect
4643
4822
  <dd>
4644
4823
 
4645
4824
  ```ruby
4646
- client.campaigns.rcs.autofill(
4825
+ client.campaigns.toll_free.autofill(
4647
4826
  additional_info: "Please autofill missing campaign fields using my brand profile",
4648
4827
  campaign_id: "dlc_1234567890"
4649
4828
  )
@@ -4669,7 +4848,7 @@ client.campaigns.rcs.autofill(
4669
4848
  <dl>
4670
4849
  <dd>
4671
4850
 
4672
- **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
4851
+ **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4673
4852
 
4674
4853
  </dd>
4675
4854
  </dl>
@@ -4681,7 +4860,7 @@ client.campaigns.rcs.autofill(
4681
4860
  </dl>
4682
4861
  </details>
4683
4862
 
4684
- <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">get</a>(campaign_id) -> Pinnacle::Types::ExtendedRcsCampaign</code></summary>
4863
+ <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">get</a>(campaign_id) -> Pinnacle::Types::TollFreeCampaignWithExtendedBrandAndStatus</code></summary>
4685
4864
  <dl>
4686
4865
  <dd>
4687
4866
 
@@ -4693,7 +4872,7 @@ client.campaigns.rcs.autofill(
4693
4872
  <dl>
4694
4873
  <dd>
4695
4874
 
4696
- Retrieve RCS campaign.
4875
+ Retrieve Toll-Free campaign.
4697
4876
  </dd>
4698
4877
  </dl>
4699
4878
  </dd>
@@ -4708,7 +4887,7 @@ Retrieve RCS campaign.
4708
4887
  <dd>
4709
4888
 
4710
4889
  ```ruby
4711
- client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
4890
+ client.campaigns.toll_free.get(campaign_id: "tf_1234567890")
4712
4891
  ```
4713
4892
  </dd>
4714
4893
  </dl>
@@ -4723,7 +4902,7 @@ client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
4723
4902
  <dl>
4724
4903
  <dd>
4725
4904
 
4726
- **campaign_id:** `String` — Unique identifier of the RCS campaign. Must begin with the prefix `rcs_`.
4905
+ **campaign_id:** `String` — Unique identifier of toll-free campaign. Must begin with the prefix `tf_`.
4727
4906
 
4728
4907
  </dd>
4729
4908
  </dl>
@@ -4731,7 +4910,7 @@ client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
4731
4910
  <dl>
4732
4911
  <dd>
4733
4912
 
4734
- **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
4913
+ **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4735
4914
 
4736
4915
  </dd>
4737
4916
  </dl>
@@ -4743,7 +4922,7 @@ client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
4743
4922
  </dl>
4744
4923
  </details>
4745
4924
 
4746
- <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">submit</a>(campaign_id) -> Pinnacle::Types::CampaignSubmissionResult</code></summary>
4925
+ <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">submit</a>(campaign_id) -> Pinnacle::Types::CampaignSubmissionResult</code></summary>
4747
4926
  <dl>
4748
4927
  <dd>
4749
4928
 
@@ -4755,7 +4934,7 @@ client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
4755
4934
  <dl>
4756
4935
  <dd>
4757
4936
 
4758
- Submit your RCS campaign for approval and activation with carriers.
4937
+ Submit your toll-free campaign for approval and activation with carriers.
4759
4938
  </dd>
4760
4939
  </dl>
4761
4940
  </dd>
@@ -4770,7 +4949,7 @@ Submit your RCS campaign for approval and activation with carriers.
4770
4949
  <dd>
4771
4950
 
4772
4951
  ```ruby
4773
- client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
4952
+ client.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
4774
4953
  ```
4775
4954
  </dd>
4776
4955
  </dl>
@@ -4785,7 +4964,7 @@ client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
4785
4964
  <dl>
4786
4965
  <dd>
4787
4966
 
4788
- **campaign_id:** `String` — Unique identifier of the RCS campaign to retrieve. Must begin with the prefix `rcs_`.
4967
+ **campaign_id:** `String` — Unique identifier of the toll-free campaign to submit. Must begin with the prefix `tf_`.
4789
4968
 
4790
4969
  </dd>
4791
4970
  </dl>
@@ -4793,7 +4972,7 @@ client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
4793
4972
  <dl>
4794
4973
  <dd>
4795
4974
 
4796
- **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
4975
+ **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
4797
4976
 
4798
4977
  </dd>
4799
4978
  </dl>
@@ -4805,7 +4984,7 @@ client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
4805
4984
  </dl>
4806
4985
  </details>
4807
4986
 
4808
- <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">upsert</a>(request) -> Pinnacle::Types::ExtendedRcsCampaign</code></summary>
4987
+ <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">upsert</a>(request) -> Pinnacle::Types::TollFreeCampaignWithExtendedBrandAndStatus</code></summary>
4809
4988
  <dl>
4810
4989
  <dd>
4811
4990
 
@@ -4817,14 +4996,16 @@ client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
4817
4996
  <dl>
4818
4997
  <dd>
4819
4998
 
4820
- Create a new RCS campaign or update an existing one.
4999
+ Create a new toll-free campaign or update an existing one.
4821
5000
 
4822
5001
  <Note>
4823
5002
  **To create a new campaign:** Omit `campaignId` — one will be generated automatically.
4824
5003
 
4825
5004
  **Before you start:** Create a [brand](/api-reference/brands/upsert) first — you'll need its `id` for the [`brand`](#request.body.brand) field.
4826
5005
 
4827
- All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/rcs/submit).
5006
+ All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/toll-free/submit).
5007
+
5008
+ **See the response for example values for each field.**
4828
5009
  </Note>
4829
5010
  </dd>
4830
5011
  </dl>
@@ -4840,65 +5021,174 @@ All fields are **required** unless specified otherwise, and will be validated wh
4840
5021
  <dd>
4841
5022
 
4842
5023
  ```ruby
4843
- client.campaigns.rcs.upsert(
4844
- agent: {
4845
- color: "#000000",
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.",
4847
- emails: [{
4848
- email: "founders@trypinnacle.app",
4849
- label: "Email Us"
4850
- }],
4851
- hero_url: "https://pncl.to/D6pDSqGxqgfbCfQmw4gXdnlHu4uSB4",
4852
- icon_url: "https://pncl.to/mq_tdIDenRb5eYpJiM8-3THCaUBrZP",
4853
- name: "Pinnacle - RCS Demo",
4854
- phones: [{
4855
- label: "Contact us directly",
4856
- phone: "+14154467821"
4857
- }],
4858
- websites: [{
4859
- label: "Get started with Pinnacle",
4860
- url: "https://www.trypinnacle.app/"
4861
- }]
4862
- },
5024
+ client.campaigns.toll_free.upsert(
4863
5025
  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."],
4866
- links: {
4867
- privacy_policy: "“https://www.trypinnacle.app/privacy”",
4868
- terms_of_service: "“https://www.trypinnacle.app/terms”"
4869
- },
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>
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.
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>
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.
4877
- ",
5026
+ campaign_id: "tf_1234567890",
4878
5027
  keywords: {
4879
5028
  help: {
4880
- message: "Email founders@trypinnacle.app for support.",
4881
- keywords: %w[HELP SUPPORT]
5029
+ 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."
4882
5030
  },
4883
5031
  opt_in: {
4884
- message: "Welcome back to Pinnacle!<br>
4885
- 🔔 You're now subscribed to Pinnacle - RCS Demo and will continue receiving important updates and news. Feel free to contact this us at any time for help.<br>
4886
-
4887
- Reply STOP to opt out and HELP for support. Message & rates may apply.
4888
- ",
5032
+ 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/",
4889
5033
  keywords: %w[START SUBSCRIBE]
4890
- },
4891
- opt_out: {
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.",
4893
- keywords: %w[STOP UNSUBSCRIBE END]
4894
5034
  }
4895
5035
  },
4896
- traffic: {
4897
- monthly_website: 10000,
4898
- monthly_rcs_estimate: 10000
5036
+ links: {
5037
+ privacy_policy: "https://www.pinnacle.sh/privacy",
5038
+ terms_of_service: "https://www.pinnacle.sh/terms"
4899
5039
  },
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.",
4901
- demo_trigger: "Text \"START\" to trigger the flow."
5040
+ monthly_volume: "10,000",
5041
+ name: "Pinnacle",
5042
+ opt_in: {
5043
+ method_: "PAPER",
5044
+ url: "https://www.pinnacle.sh/opt-in",
5045
+ 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"
5046
+ },
5047
+ options: {
5048
+ age_gated: false
5049
+ },
5050
+ 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.",
5051
+ use_case: {
5052
+ 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.",
5053
+ value: "CHATBOT"
5054
+ }
5055
+ )
5056
+ ```
5057
+ </dd>
5058
+ </dl>
5059
+ </dd>
5060
+ </dl>
5061
+
5062
+ #### ⚙️ Parameters
5063
+
5064
+ <dl>
5065
+ <dd>
5066
+
5067
+ <dl>
5068
+ <dd>
5069
+
5070
+ **brand:** `String` — Brand id. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`.
5071
+
5072
+ </dd>
5073
+ </dl>
5074
+
5075
+ <dl>
5076
+ <dd>
5077
+
5078
+ **campaign_id:** `String` — Unique identifier for the campaign. This identifier is a string that always begins with the prefix `tf_`, for example: `tf_1234567890`.
5079
+
5080
+ </dd>
5081
+ </dl>
5082
+
5083
+ <dl>
5084
+ <dd>
5085
+
5086
+ **keywords:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignKeywords` — Keyword response configuration.
5087
+
5088
+ </dd>
5089
+ </dl>
5090
+
5091
+ <dl>
5092
+ <dd>
5093
+
5094
+ **links:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignLinks` — Legal documentation links.
5095
+
5096
+ </dd>
5097
+ </dl>
5098
+
5099
+ <dl>
5100
+ <dd>
5101
+
5102
+ **monthly_volume:** `Pinnacle::Types::MessageVolumeEnum`
5103
+
5104
+ </dd>
5105
+ </dl>
5106
+
5107
+ <dl>
5108
+ <dd>
5109
+
5110
+ **name:** `String` — Display name of the campaign. This is not sent to carriers for approval and is only used for your reference on the Pinnacle dashboard.
5111
+
5112
+ </dd>
5113
+ </dl>
5114
+
5115
+ <dl>
5116
+ <dd>
5117
+
5118
+ **opt_in:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignOptIn` — Opt-in method and workflow.
5119
+
5120
+ </dd>
5121
+ </dl>
5122
+
5123
+ <dl>
5124
+ <dd>
5125
+
5126
+ **options:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignOptions` — Campaign configuration options.
5127
+
5128
+ </dd>
5129
+ </dl>
5130
+
5131
+ <dl>
5132
+ <dd>
5133
+
5134
+ **production_message_content:** `String` — Example message(s) that would be sent in production. Should reflect the actual content users will receive, including HELP/STOP disclosures. See the [Production Message Content](/guides/campaigns/opt-in-compliance#production-message-content) section for requirements.
5135
+
5136
+ </dd>
5137
+ </dl>
5138
+
5139
+ <dl>
5140
+ <dd>
5141
+
5142
+ **use_case:** `Pinnacle::Campaigns::TollFree::Types::TollFreeCampaignUseCase` — Use case classification for the campaign.
5143
+
5144
+ </dd>
5145
+ </dl>
5146
+
5147
+ <dl>
5148
+ <dd>
5149
+
5150
+ **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
5151
+
5152
+ </dd>
5153
+ </dl>
5154
+ </dd>
5155
+ </dl>
5156
+
5157
+
5158
+ </dd>
5159
+ </dl>
5160
+ </details>
5161
+
5162
+ <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">validate</a>(request) -> Pinnacle::Types::CampaignValidationResult</code></summary>
5163
+ <dl>
5164
+ <dd>
5165
+
5166
+ #### 📝 Description
5167
+
5168
+ <dl>
5169
+ <dd>
5170
+
5171
+ <dl>
5172
+ <dd>
5173
+
5174
+ Validate your toll-free campaign configuration against carrier requirements and compliance rules.
5175
+ </dd>
5176
+ </dl>
5177
+ </dd>
5178
+ </dl>
5179
+
5180
+ #### 🔌 Usage
5181
+
5182
+ <dl>
5183
+ <dd>
5184
+
5185
+ <dl>
5186
+ <dd>
5187
+
5188
+ ```ruby
5189
+ client.campaigns.toll_free.validate(
5190
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
5191
+ campaign_id: "dlc_1234567890"
4902
5192
  )
4903
5193
  ```
4904
5194
  </dd>
@@ -4906,7 +5196,725 @@ client.campaigns.rcs.upsert(
4906
5196
  </dd>
4907
5197
  </dl>
4908
5198
 
4909
- #### ⚙️ Parameters
5199
+ #### ⚙️ Parameters
5200
+
5201
+ <dl>
5202
+ <dd>
5203
+
5204
+ <dl>
5205
+ <dd>
5206
+
5207
+ **request:** `Pinnacle::Types::ValidateCampaignParams`
5208
+
5209
+ </dd>
5210
+ </dl>
5211
+
5212
+ <dl>
5213
+ <dd>
5214
+
5215
+ **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
5216
+
5217
+ </dd>
5218
+ </dl>
5219
+ </dd>
5220
+ </dl>
5221
+
5222
+
5223
+ </dd>
5224
+ </dl>
5225
+ </details>
5226
+
5227
+ <details><summary><code>client.campaigns.toll_free.<a href="/lib/pinnacle/campaigns/toll_free/client.rb">list</a>(request) -> Pinnacle::Types::ListTollFreeCampaignsResponse</code></summary>
5228
+ <dl>
5229
+ <dd>
5230
+
5231
+ #### 📝 Description
5232
+
5233
+ <dl>
5234
+ <dd>
5235
+
5236
+ <dl>
5237
+ <dd>
5238
+
5239
+ List all toll-free campaigns with optional filtering and pagination. Results are sorted by creation date, newest first.
5240
+ </dd>
5241
+ </dl>
5242
+ </dd>
5243
+ </dl>
5244
+
5245
+ #### 🔌 Usage
5246
+
5247
+ <dl>
5248
+ <dd>
5249
+
5250
+ <dl>
5251
+ <dd>
5252
+
5253
+ ```ruby
5254
+ client.campaigns.toll_free.list
5255
+ ```
5256
+ </dd>
5257
+ </dl>
5258
+ </dd>
5259
+ </dl>
5260
+
5261
+ #### ⚙️ Parameters
5262
+
5263
+ <dl>
5264
+ <dd>
5265
+
5266
+ <dl>
5267
+ <dd>
5268
+
5269
+ **page_index:** `Integer`
5270
+
5271
+ </dd>
5272
+ </dl>
5273
+
5274
+ <dl>
5275
+ <dd>
5276
+
5277
+ **page_size:** `Integer`
5278
+
5279
+ </dd>
5280
+ </dl>
5281
+
5282
+ <dl>
5283
+ <dd>
5284
+
5285
+ **status:** `Pinnacle::Campaigns::TollFree::Types::ListTollFreeCampaignsRequestStatus`
5286
+
5287
+ </dd>
5288
+ </dl>
5289
+
5290
+ <dl>
5291
+ <dd>
5292
+
5293
+ **brand_id:** `String`
5294
+
5295
+ </dd>
5296
+ </dl>
5297
+
5298
+ <dl>
5299
+ <dd>
5300
+
5301
+ **name:** `String` — Filter by campaign name (partial match, case-insensitive).
5302
+
5303
+ </dd>
5304
+ </dl>
5305
+
5306
+ <dl>
5307
+ <dd>
5308
+
5309
+ **request_options:** `Pinnacle::Campaigns::TollFree::RequestOptions`
5310
+
5311
+ </dd>
5312
+ </dl>
5313
+ </dd>
5314
+ </dl>
5315
+
5316
+
5317
+ </dd>
5318
+ </dl>
5319
+ </details>
5320
+
5321
+ ## Campaigns Rcs
5322
+ <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">autofill</a>(request) -> Pinnacle::Campaigns::Rcs::Types::RcsAutofillResponse</code></summary>
5323
+ <dl>
5324
+ <dd>
5325
+
5326
+ #### 📝 Description
5327
+
5328
+ <dl>
5329
+ <dd>
5330
+
5331
+ <dl>
5332
+ <dd>
5333
+
5334
+ Generate campaign details based off existing campaign and the brand it's connected to.
5335
+ </dd>
5336
+ </dl>
5337
+ </dd>
5338
+ </dl>
5339
+
5340
+ #### 🔌 Usage
5341
+
5342
+ <dl>
5343
+ <dd>
5344
+
5345
+ <dl>
5346
+ <dd>
5347
+
5348
+ ```ruby
5349
+ client.campaigns.rcs.autofill(
5350
+ additional_info: "Please autofill missing campaign fields using my brand profile",
5351
+ campaign_id: "dlc_1234567890"
5352
+ )
5353
+ ```
5354
+ </dd>
5355
+ </dl>
5356
+ </dd>
5357
+ </dl>
5358
+
5359
+ #### ⚙️ Parameters
5360
+
5361
+ <dl>
5362
+ <dd>
5363
+
5364
+ <dl>
5365
+ <dd>
5366
+
5367
+ **request:** `Pinnacle::Types::AutofillCampaignParams`
5368
+
5369
+ </dd>
5370
+ </dl>
5371
+
5372
+ <dl>
5373
+ <dd>
5374
+
5375
+ **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
5376
+
5377
+ </dd>
5378
+ </dl>
5379
+ </dd>
5380
+ </dl>
5381
+
5382
+
5383
+ </dd>
5384
+ </dl>
5385
+ </details>
5386
+
5387
+ <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">get</a>(campaign_id) -> Pinnacle::Types::ExtendedRcsCampaign</code></summary>
5388
+ <dl>
5389
+ <dd>
5390
+
5391
+ #### 📝 Description
5392
+
5393
+ <dl>
5394
+ <dd>
5395
+
5396
+ <dl>
5397
+ <dd>
5398
+
5399
+ Retrieve RCS campaign.
5400
+ </dd>
5401
+ </dl>
5402
+ </dd>
5403
+ </dl>
5404
+
5405
+ #### 🔌 Usage
5406
+
5407
+ <dl>
5408
+ <dd>
5409
+
5410
+ <dl>
5411
+ <dd>
5412
+
5413
+ ```ruby
5414
+ client.campaigns.rcs.get(campaign_id: "rcs_1234567890")
5415
+ ```
5416
+ </dd>
5417
+ </dl>
5418
+ </dd>
5419
+ </dl>
5420
+
5421
+ #### ⚙️ Parameters
5422
+
5423
+ <dl>
5424
+ <dd>
5425
+
5426
+ <dl>
5427
+ <dd>
5428
+
5429
+ **campaign_id:** `String` — Unique identifier of the RCS campaign. Must begin with the prefix `rcs_`.
5430
+
5431
+ </dd>
5432
+ </dl>
5433
+
5434
+ <dl>
5435
+ <dd>
5436
+
5437
+ **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
5438
+
5439
+ </dd>
5440
+ </dl>
5441
+ </dd>
5442
+ </dl>
5443
+
5444
+
5445
+ </dd>
5446
+ </dl>
5447
+ </details>
5448
+
5449
+ <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">submit</a>(campaign_id) -> Pinnacle::Types::CampaignSubmissionResult</code></summary>
5450
+ <dl>
5451
+ <dd>
5452
+
5453
+ #### 📝 Description
5454
+
5455
+ <dl>
5456
+ <dd>
5457
+
5458
+ <dl>
5459
+ <dd>
5460
+
5461
+ Submit your RCS campaign for approval and activation with carriers.
5462
+ </dd>
5463
+ </dl>
5464
+ </dd>
5465
+ </dl>
5466
+
5467
+ #### 🔌 Usage
5468
+
5469
+ <dl>
5470
+ <dd>
5471
+
5472
+ <dl>
5473
+ <dd>
5474
+
5475
+ ```ruby
5476
+ client.campaigns.rcs.submit(campaign_id: "rcs_1234567890")
5477
+ ```
5478
+ </dd>
5479
+ </dl>
5480
+ </dd>
5481
+ </dl>
5482
+
5483
+ #### ⚙️ Parameters
5484
+
5485
+ <dl>
5486
+ <dd>
5487
+
5488
+ <dl>
5489
+ <dd>
5490
+
5491
+ **campaign_id:** `String` — Unique identifier of the RCS campaign to retrieve. Must begin with the prefix `rcs_`.
5492
+
5493
+ </dd>
5494
+ </dl>
5495
+
5496
+ <dl>
5497
+ <dd>
5498
+
5499
+ **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
5500
+
5501
+ </dd>
5502
+ </dl>
5503
+ </dd>
5504
+ </dl>
5505
+
5506
+
5507
+ </dd>
5508
+ </dl>
5509
+ </details>
5510
+
5511
+ <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">upsert</a>(request) -> Pinnacle::Types::ExtendedRcsCampaign</code></summary>
5512
+ <dl>
5513
+ <dd>
5514
+
5515
+ #### 📝 Description
5516
+
5517
+ <dl>
5518
+ <dd>
5519
+
5520
+ <dl>
5521
+ <dd>
5522
+
5523
+ Create a new RCS campaign or update an existing one.
5524
+
5525
+ <Note>
5526
+ **To create a new campaign:** Omit `campaignId` — one will be generated automatically.
5527
+
5528
+ **Before you start:** Create a [brand](/api-reference/brands/upsert) first — you'll need its `id` for the [`brand`](#request.body.brand) field.
5529
+
5530
+ All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/rcs/submit).
5531
+ </Note>
5532
+ </dd>
5533
+ </dl>
5534
+ </dd>
5535
+ </dl>
5536
+
5537
+ #### 🔌 Usage
5538
+
5539
+ <dl>
5540
+ <dd>
5541
+
5542
+ <dl>
5543
+ <dd>
5544
+
5545
+ ```ruby
5546
+ client.campaigns.rcs.upsert(
5547
+ agent: {
5548
+ color: "#000000",
5549
+ 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.",
5550
+ emails: [{
5551
+ email: "founders@trypinnacle.app",
5552
+ label: "Email Us"
5553
+ }],
5554
+ hero_url: "https://pncl.to/D6pDSqGxqgfbCfQmw4gXdnlHu4uSB4",
5555
+ icon_url: "https://pncl.to/mq_tdIDenRb5eYpJiM8-3THCaUBrZP",
5556
+ name: "Pinnacle - RCS Demo",
5557
+ phones: [{
5558
+ label: "Contact us directly",
5559
+ phone: "+14154467821"
5560
+ }],
5561
+ websites: [{
5562
+ label: "Get started with Pinnacle",
5563
+ url: "https://www.trypinnacle.app/"
5564
+ }]
5565
+ },
5566
+ brand: "b_1234567890",
5567
+ campaign_id: "rcs_1234567890",
5568
+ 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."],
5569
+ links: {
5570
+ privacy_policy: "“https://www.trypinnacle.app/privacy”",
5571
+ terms_of_service: "“https://www.trypinnacle.app/terms”"
5572
+ },
5573
+ 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>
5574
+ 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.
5575
+ ",
5576
+ messaging_type: "OTP",
5577
+ cta_media: "“https://www.pinnacle.sh/send”",
5578
+ 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>
5579
+ 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.
5580
+ ",
5581
+ keywords: {
5582
+ help: {
5583
+ message: "Email founders@trypinnacle.app for support.",
5584
+ keywords: %w[HELP SUPPORT]
5585
+ },
5586
+ opt_in: {
5587
+ message: "Welcome back to Pinnacle!<br>
5588
+ 🔔 You're now subscribed to Pinnacle - RCS Demo and will continue receiving important updates and news. Feel free to contact this us at any time for help.<br>
5589
+
5590
+ Reply STOP to opt out and HELP for support. Message & rates may apply.
5591
+ ",
5592
+ keywords: %w[START SUBSCRIBE]
5593
+ },
5594
+ opt_out: {
5595
+ 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.",
5596
+ keywords: %w[STOP UNSUBSCRIBE END]
5597
+ }
5598
+ },
5599
+ traffic: {
5600
+ monthly_website: 10000,
5601
+ monthly_rcs_estimate: 10000
5602
+ },
5603
+ 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.",
5604
+ demo_trigger: "Text \"START\" to trigger the flow."
5605
+ )
5606
+ ```
5607
+ </dd>
5608
+ </dl>
5609
+ </dd>
5610
+ </dl>
5611
+
5612
+ #### ⚙️ Parameters
5613
+
5614
+ <dl>
5615
+ <dd>
5616
+
5617
+ <dl>
5618
+ <dd>
5619
+
5620
+ **agent:** `Pinnacle::Campaigns::Rcs::Types::RcsAgent` — Create an agent for the campaign.
5621
+
5622
+ </dd>
5623
+ </dl>
5624
+
5625
+ <dl>
5626
+ <dd>
5627
+
5628
+ **brand:** `String` — Unique identifier for the brand.
5629
+
5630
+ </dd>
5631
+ </dl>
5632
+
5633
+ <dl>
5634
+ <dd>
5635
+
5636
+ **campaign_id:** `String` — Unique identifier for the campaign.
5637
+
5638
+ </dd>
5639
+ </dl>
5640
+
5641
+ <dl>
5642
+ <dd>
5643
+
5644
+ **expected_agent_responses:** `Internal::Types::Array[String]`
5645
+
5646
+ List of what the agent might say to users. See the [Expected Agent Responses](/guides/campaigns/rcs-compliance#expected-agent-responses) section for requirements. <br><br>
5647
+ **Limit:** 1 to 5
5648
+
5649
+ </dd>
5650
+ </dl>
5651
+
5652
+ <dl>
5653
+ <dd>
5654
+
5655
+ **links:** `Pinnacle::Campaigns::Rcs::Types::RcsLinks` — Legal documentation links.
5656
+
5657
+ </dd>
5658
+ </dl>
5659
+
5660
+ <dl>
5661
+ <dd>
5662
+
5663
+ **use_case_description:** `String` — Detailed summary of what the brand is and how this agent will be used. See the [Use Case Behavior](/guides/campaigns/rcs-compliance#use-case-behavior) section for requirements.
5664
+
5665
+ </dd>
5666
+ </dl>
5667
+
5668
+ <dl>
5669
+ <dd>
5670
+
5671
+ **messaging_type:** `Pinnacle::Types::RcsMessagingTypeEnum`
5672
+
5673
+ </dd>
5674
+ </dl>
5675
+
5676
+ <dl>
5677
+ <dd>
5678
+
5679
+ **cta_media:** `String` — URL to the opt-in form or a URL to a screenshot of the opt-in CTA.
5680
+
5681
+ </dd>
5682
+ </dl>
5683
+
5684
+ <dl>
5685
+ <dd>
5686
+
5687
+ **opt_in_method:** `String` — Details on how opt-in is acquired. If it is done through a website or app, provide the link. See the [Opt-In Method](/guides/campaigns/rcs-compliance#opt-in-method) section for requirements.
5688
+
5689
+ </dd>
5690
+ </dl>
5691
+
5692
+ <dl>
5693
+ <dd>
5694
+
5695
+ **keywords:** `Pinnacle::Campaigns::Rcs::Types::RcsCampaignKeywords`
5696
+
5697
+ </dd>
5698
+ </dl>
5699
+
5700
+ <dl>
5701
+ <dd>
5702
+
5703
+ **traffic:** `Pinnacle::Campaigns::Rcs::Types::RcsCampaignTraffic`
5704
+
5705
+ </dd>
5706
+ </dl>
5707
+
5708
+ <dl>
5709
+ <dd>
5710
+
5711
+ **cta_language:** `String` — Required text that appears next to the opt-in checkbox for your opt-in form. This checkbox has to be unchecked by default. See the [CTA Language](/guides/campaigns/rcs-compliance#cta-language-opt-in-disclosure) section for requirements.
5712
+
5713
+ </dd>
5714
+ </dl>
5715
+
5716
+ <dl>
5717
+ <dd>
5718
+
5719
+ **demo_trigger:** `String` — Instructions on how an external reviewer can trigger messages and an example flow from the agent. This is usually an inbound text message to the agent that will start a flow of messages between the agent and the user. See the [Demo Trigger](/guides/campaigns/rcs-compliance#demo-trigger) section for requirements.
5720
+
5721
+ </dd>
5722
+ </dl>
5723
+
5724
+ <dl>
5725
+ <dd>
5726
+
5727
+ **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
5728
+
5729
+ </dd>
5730
+ </dl>
5731
+ </dd>
5732
+ </dl>
5733
+
5734
+
5735
+ </dd>
5736
+ </dl>
5737
+ </details>
5738
+
5739
+ <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">validate</a>(request) -> Pinnacle::Types::CampaignValidationResult</code></summary>
5740
+ <dl>
5741
+ <dd>
5742
+
5743
+ #### 📝 Description
5744
+
5745
+ <dl>
5746
+ <dd>
5747
+
5748
+ <dl>
5749
+ <dd>
5750
+
5751
+ Validate your RCS campaign configuration against carrier requirements and compliance rules.
5752
+ </dd>
5753
+ </dl>
5754
+ </dd>
5755
+ </dl>
5756
+
5757
+ #### 🔌 Usage
5758
+
5759
+ <dl>
5760
+ <dd>
5761
+
5762
+ <dl>
5763
+ <dd>
5764
+
5765
+ ```ruby
5766
+ client.campaigns.rcs.validate(
5767
+ additional_info: "Please validate this DLC campaign for 10DLC compliance",
5768
+ campaign_id: "dlc_1234567890"
5769
+ )
5770
+ ```
5771
+ </dd>
5772
+ </dl>
5773
+ </dd>
5774
+ </dl>
5775
+
5776
+ #### ⚙️ Parameters
5777
+
5778
+ <dl>
5779
+ <dd>
5780
+
5781
+ <dl>
5782
+ <dd>
5783
+
5784
+ **request:** `Pinnacle::Types::ValidateCampaignParams`
5785
+
5786
+ </dd>
5787
+ </dl>
5788
+
5789
+ <dl>
5790
+ <dd>
5791
+
5792
+ **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
5793
+
5794
+ </dd>
5795
+ </dl>
5796
+ </dd>
5797
+ </dl>
5798
+
5799
+
5800
+ </dd>
5801
+ </dl>
5802
+ </details>
5803
+
5804
+ <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">list</a>(request) -> Pinnacle::Types::ListRcsCampaignsResponse</code></summary>
5805
+ <dl>
5806
+ <dd>
5807
+
5808
+ #### 📝 Description
5809
+
5810
+ <dl>
5811
+ <dd>
5812
+
5813
+ <dl>
5814
+ <dd>
5815
+
5816
+ List all RCS campaigns with optional filtering and pagination. Results are sorted by creation date, newest first.
5817
+ </dd>
5818
+ </dl>
5819
+ </dd>
5820
+ </dl>
5821
+
5822
+ #### 🔌 Usage
5823
+
5824
+ <dl>
5825
+ <dd>
5826
+
5827
+ <dl>
5828
+ <dd>
5829
+
5830
+ ```ruby
5831
+ client.campaigns.rcs.list
5832
+ ```
5833
+ </dd>
5834
+ </dl>
5835
+ </dd>
5836
+ </dl>
5837
+
5838
+ #### ⚙️ Parameters
5839
+
5840
+ <dl>
5841
+ <dd>
5842
+
5843
+ <dl>
5844
+ <dd>
5845
+
5846
+ **page_index:** `Integer`
5847
+
5848
+ </dd>
5849
+ </dl>
5850
+
5851
+ <dl>
5852
+ <dd>
5853
+
5854
+ **page_size:** `Integer`
5855
+
5856
+ </dd>
5857
+ </dl>
5858
+
5859
+ <dl>
5860
+ <dd>
5861
+
5862
+ **status:** `Pinnacle::Campaigns::Rcs::Types::ListRcsCampaignsRequestStatus`
5863
+
5864
+ </dd>
5865
+ </dl>
5866
+
5867
+ <dl>
5868
+ <dd>
5869
+
5870
+ **brand_id:** `String`
5871
+
5872
+ </dd>
5873
+ </dl>
5874
+
5875
+ <dl>
5876
+ <dd>
5877
+
5878
+ **name:** `String` — Filter by campaign name (partial match, case-insensitive).
5879
+
5880
+ </dd>
5881
+ </dl>
5882
+
5883
+ <dl>
5884
+ <dd>
5885
+
5886
+ **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
5887
+
5888
+ </dd>
5889
+ </dl>
5890
+ </dd>
5891
+ </dl>
5892
+
5893
+
5894
+ </dd>
5895
+ </dl>
5896
+ </details>
5897
+
5898
+ ## Forms Submissions
5899
+ <details><summary><code>client.forms.submissions.<a href="/lib/pinnacle/forms/submissions/client.rb">list</a>(id, request) -> Pinnacle::Types::ListFormSubmissionsResponse</code></summary>
5900
+ <dl>
5901
+ <dd>
5902
+
5903
+ #### 📝 Description
5904
+
5905
+ <dl>
5906
+ <dd>
5907
+
5908
+ <dl>
5909
+ <dd>
5910
+
5911
+ 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.
5912
+ </dd>
5913
+ </dl>
5914
+ </dd>
5915
+ </dl>
5916
+
5917
+ #### 🔌 Usage
4910
5918
 
4911
5919
  <dl>
4912
5920
  <dd>
@@ -4914,15 +5922,30 @@ client.campaigns.rcs.upsert(
4914
5922
  <dl>
4915
5923
  <dd>
4916
5924
 
4917
- **agent:** `Pinnacle::Campaigns::Rcs::Types::RcsAgent` — Create an agent for the campaign.
4918
-
5925
+ ```ruby
5926
+ client.forms.submissions.list(
5927
+ id: "form_Oy2n7iUoi9CJwUU6",
5928
+ page_index: 0,
5929
+ page_size: 20
5930
+ )
5931
+ ```
5932
+ </dd>
5933
+ </dl>
4919
5934
  </dd>
4920
5935
  </dl>
4921
5936
 
5937
+ #### ⚙️ Parameters
5938
+
4922
5939
  <dl>
4923
5940
  <dd>
4924
5941
 
4925
- **brand:** `String` — Unique identifier for the brand.
5942
+ <dl>
5943
+ <dd>
5944
+
5945
+ **id:** `String`
5946
+
5947
+ The unique identifier of the form whose submissions you want to list.
5948
+ <br><br> This identifier is a string that always begins with the prefix `form_`, for example: `form_Oy2n7iUoi9CJwUU6`.
4926
5949
 
4927
5950
  </dd>
4928
5951
  </dl>
@@ -4930,7 +5953,7 @@ client.campaigns.rcs.upsert(
4930
5953
  <dl>
4931
5954
  <dd>
4932
5955
 
4933
- **campaign_id:** `String` — Unique identifier for the campaign.
5956
+ **page_index:** `Integer` — Zero-based page index.
4934
5957
 
4935
5958
  </dd>
4936
5959
  </dl>
@@ -4938,10 +5961,7 @@ client.campaigns.rcs.upsert(
4938
5961
  <dl>
4939
5962
  <dd>
4940
5963
 
4941
- **expected_agent_responses:** `Internal::Types::Array[String]`
4942
-
4943
- List of what the agent might say to users. See the [Expected Agent Responses](/guides/campaigns/rcs-compliance#expected-agent-responses) section for requirements. <br><br>
4944
- **Limit:** 1 to 5
5964
+ **page_size:** `Integer` — Number of submissions to return in a single page. Max 100.
4945
5965
 
4946
5966
  </dd>
4947
5967
  </dl>
@@ -4949,47 +5969,66 @@ List of what the agent might say to users. See the [Expected Agent Responses](/g
4949
5969
  <dl>
4950
5970
  <dd>
4951
5971
 
4952
- **links:** `Pinnacle::Campaigns::Rcs::Types::RcsLinks` — Legal documentation links.
5972
+ **request_options:** `Pinnacle::Forms::Submissions::RequestOptions`
4953
5973
 
4954
5974
  </dd>
4955
5975
  </dl>
5976
+ </dd>
5977
+ </dl>
4956
5978
 
4957
- <dl>
4958
- <dd>
4959
5979
 
4960
- **use_case_description:** `String` — Detailed summary of what the brand is and how this agent will be used. See the [Use Case Behavior](/guides/campaigns/rcs-compliance#use-case-behavior) section for requirements.
4961
-
4962
5980
  </dd>
4963
5981
  </dl>
5982
+ </details>
4964
5983
 
5984
+ ## Messages Sms
5985
+ <details><summary><code>client.messages.sms.<a href="/lib/pinnacle/messages/sms/client.rb">send_</a>(request) -> Pinnacle::Messages::Sms::Types::SmsSendResponse</code></summary>
4965
5986
  <dl>
4966
5987
  <dd>
4967
5988
 
4968
- **messaging_type:** `Pinnacle::Types::RcsMessagingTypeEnum`
4969
-
4970
- </dd>
4971
- </dl>
5989
+ #### 📝 Description
4972
5990
 
4973
5991
  <dl>
4974
5992
  <dd>
4975
5993
 
4976
- **cta_media:** `String` — URL to the opt-in form or a URL to a screenshot of the opt-in CTA.
4977
-
5994
+ <dl>
5995
+ <dd>
5996
+
5997
+ Send a SMS message immediately or schedule it for future delivery.
4978
5998
  </dd>
4979
5999
  </dl>
6000
+ </dd>
6001
+ </dl>
6002
+
6003
+ #### 🔌 Usage
4980
6004
 
4981
6005
  <dl>
4982
6006
  <dd>
4983
6007
 
4984
- **opt_in_method:** `String` — Details on how opt-in is acquired. If it is done through a website or app, provide the link. See the [Opt-In Method](/guides/campaigns/rcs-compliance#opt-in-method) section for requirements.
4985
-
6008
+ <dl>
6009
+ <dd>
6010
+
6011
+ ```ruby
6012
+ client.messages.sms.send_(
6013
+ from: "+14155164736",
6014
+ text: "Hey!",
6015
+ to: "+14154746461"
6016
+ )
6017
+ ```
4986
6018
  </dd>
4987
6019
  </dl>
6020
+ </dd>
6021
+ </dl>
6022
+
6023
+ #### ⚙️ Parameters
4988
6024
 
4989
6025
  <dl>
4990
6026
  <dd>
4991
6027
 
4992
- **keywords:** `Pinnacle::Campaigns::Rcs::Types::RcsCampaignKeywords`
6028
+ <dl>
6029
+ <dd>
6030
+
6031
+ **from:** `String` — Phone number that sends the message in E.164 format.
4993
6032
 
4994
6033
  </dd>
4995
6034
  </dl>
@@ -4997,7 +6036,7 @@ List of what the agent might say to users. See the [Expected Agent Responses](/g
4997
6036
  <dl>
4998
6037
  <dd>
4999
6038
 
5000
- **traffic:** `Pinnacle::Campaigns::Rcs::Types::RcsCampaignTraffic`
6039
+ **options:** `Pinnacle::Messages::Sms::Types::SendSmsOptions` — Additional settings to customize SMS delivery.
5001
6040
 
5002
6041
  </dd>
5003
6042
  </dl>
@@ -5005,7 +6044,7 @@ List of what the agent might say to users. See the [Expected Agent Responses](/g
5005
6044
  <dl>
5006
6045
  <dd>
5007
6046
 
5008
- **cta_language:** `String` — Required text that appears next to the opt-in checkbox for your opt-in form. This checkbox has to be unchecked by default. See the [CTA Language](/guides/campaigns/rcs-compliance#cta-language-opt-in-disclosure) section for requirements.
6047
+ **text:** `String` — Message content.
5009
6048
 
5010
6049
  </dd>
5011
6050
  </dl>
@@ -5013,7 +6052,7 @@ List of what the agent might say to users. See the [Expected Agent Responses](/g
5013
6052
  <dl>
5014
6053
  <dd>
5015
6054
 
5016
- **demo_trigger:** `String` — Instructions on how an external reviewer can trigger messages and an example flow from the agent. This is usually an inbound text message to the agent that will start a flow of messages between the agent and the user. See the [Demo Trigger](/guides/campaigns/rcs-compliance#demo-trigger) section for requirements.
6055
+ **to:** `String` — Recipient's phone number in E.164 format.
5017
6056
 
5018
6057
  </dd>
5019
6058
  </dl>
@@ -5021,7 +6060,7 @@ List of what the agent might say to users. See the [Expected Agent Responses](/g
5021
6060
  <dl>
5022
6061
  <dd>
5023
6062
 
5024
- **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
6063
+ **request_options:** `Pinnacle::Messages::Sms::RequestOptions`
5025
6064
 
5026
6065
  </dd>
5027
6066
  </dl>
@@ -5033,7 +6072,7 @@ List of what the agent might say to users. See the [Expected Agent Responses](/g
5033
6072
  </dl>
5034
6073
  </details>
5035
6074
 
5036
- <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">validate</a>(request) -> Pinnacle::Types::CampaignValidationResult</code></summary>
6075
+ <details><summary><code>client.messages.sms.<a href="/lib/pinnacle/messages/sms/client.rb">validate</a>(request) -> Pinnacle::Types::SmsValidationResult</code></summary>
5037
6076
  <dl>
5038
6077
  <dd>
5039
6078
 
@@ -5045,7 +6084,7 @@ List of what the agent might say to users. See the [Expected Agent Responses](/g
5045
6084
  <dl>
5046
6085
  <dd>
5047
6086
 
5048
- Validate your RCS campaign configuration against carrier requirements and compliance rules.
6087
+ Validate SMS message content without sending it.
5049
6088
  </dd>
5050
6089
  </dl>
5051
6090
  </dd>
@@ -5060,10 +6099,7 @@ Validate your RCS campaign configuration against carrier requirements and compli
5060
6099
  <dd>
5061
6100
 
5062
6101
  ```ruby
5063
- client.campaigns.rcs.validate(
5064
- additional_info: "Please validate this DLC campaign for 10DLC compliance",
5065
- campaign_id: "dlc_1234567890"
5066
- )
6102
+ client.messages.sms.validate(text: "Hello from Pinnacle")
5067
6103
  ```
5068
6104
  </dd>
5069
6105
  </dl>
@@ -5078,7 +6114,7 @@ client.campaigns.rcs.validate(
5078
6114
  <dl>
5079
6115
  <dd>
5080
6116
 
5081
- **request:** `Pinnacle::Types::ValidateCampaignParams`
6117
+ **request:** `Pinnacle::Types::SmsContent`
5082
6118
 
5083
6119
  </dd>
5084
6120
  </dl>
@@ -5086,7 +6122,7 @@ client.campaigns.rcs.validate(
5086
6122
  <dl>
5087
6123
  <dd>
5088
6124
 
5089
- **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
6125
+ **request_options:** `Pinnacle::Messages::Sms::RequestOptions`
5090
6126
 
5091
6127
  </dd>
5092
6128
  </dl>
@@ -5098,7 +6134,8 @@ client.campaigns.rcs.validate(
5098
6134
  </dl>
5099
6135
  </details>
5100
6136
 
5101
- <details><summary><code>client.campaigns.rcs.<a href="/lib/pinnacle/campaigns/rcs/client.rb">list</a>(request) -> Pinnacle::Types::ListRcsCampaignsResponse</code></summary>
6137
+ ## Messages Mms
6138
+ <details><summary><code>client.messages.mms.<a href="/lib/pinnacle/messages/mms/client.rb">send_</a>(request) -> Pinnacle::Messages::Mms::Types::MmsSendResponse</code></summary>
5102
6139
  <dl>
5103
6140
  <dd>
5104
6141
 
@@ -5110,7 +6147,7 @@ client.campaigns.rcs.validate(
5110
6147
  <dl>
5111
6148
  <dd>
5112
6149
 
5113
- List all RCS campaigns with optional filtering and pagination. Results are sorted by creation date, newest first.
6150
+ Send a MMS immediately or schedule it for future delivery.
5114
6151
  </dd>
5115
6152
  </dl>
5116
6153
  </dd>
@@ -5125,7 +6162,16 @@ List all RCS campaigns with optional filtering and pagination. Results are sorte
5125
6162
  <dd>
5126
6163
 
5127
6164
  ```ruby
5128
- client.campaigns.rcs.list
6165
+ client.messages.mms.send_(
6166
+ from: "+14155164736",
6167
+ media_urls: ["https://fastly.picsum.photos/id/941/300/300.jpg?hmac=mDxM9PWSqRDjecwSCEpzU4bj35gqnG7yA25OL29uNv0"],
6168
+ options: {
6169
+ multiple_messages: true,
6170
+ validate: true
6171
+ },
6172
+ text: "Check out this image!",
6173
+ to: "+14154746461"
6174
+ )
5129
6175
  ```
5130
6176
  </dd>
5131
6177
  </dl>
@@ -5140,7 +6186,7 @@ client.campaigns.rcs.list
5140
6186
  <dl>
5141
6187
  <dd>
5142
6188
 
5143
- **page_index:** `Integer`
6189
+ **from:** `String` — Phone number you want to send the message from in E.164 format.
5144
6190
 
5145
6191
  </dd>
5146
6192
  </dl>
@@ -5148,7 +6194,11 @@ client.campaigns.rcs.list
5148
6194
  <dl>
5149
6195
  <dd>
5150
6196
 
5151
- **page_size:** `Integer`
6197
+ **media_urls:** `Internal::Types::Array[String]`
6198
+
6199
+ Media file URLs to send.<br>
6200
+
6201
+ See [supported media types](https://app.pinnacle.sh/supported-file-types?type=MMS).
5152
6202
 
5153
6203
  </dd>
5154
6204
  </dl>
@@ -5156,7 +6206,7 @@ client.campaigns.rcs.list
5156
6206
  <dl>
5157
6207
  <dd>
5158
6208
 
5159
- **status:** `Pinnacle::Campaigns::Rcs::Types::ListRcsCampaignsRequestStatus`
6209
+ **options:** `Pinnacle::Messages::Mms::Types::SendMmsOptions` — Control how your MMS is processed and delivered.
5160
6210
 
5161
6211
  </dd>
5162
6212
  </dl>
@@ -5164,7 +6214,7 @@ client.campaigns.rcs.list
5164
6214
  <dl>
5165
6215
  <dd>
5166
6216
 
5167
- **brand_id:** `String`
6217
+ **text:** `String` — Message text to accompany the media.
5168
6218
 
5169
6219
  </dd>
5170
6220
  </dl>
@@ -5172,7 +6222,7 @@ client.campaigns.rcs.list
5172
6222
  <dl>
5173
6223
  <dd>
5174
6224
 
5175
- **name:** `String` — Filter by campaign name (partial match, case-insensitive).
6225
+ **to:** `String` — Recipient's phone number in E.164 format.
5176
6226
 
5177
6227
  </dd>
5178
6228
  </dl>
@@ -5180,7 +6230,7 @@ client.campaigns.rcs.list
5180
6230
  <dl>
5181
6231
  <dd>
5182
6232
 
5183
- **request_options:** `Pinnacle::Campaigns::Rcs::RequestOptions`
6233
+ **request_options:** `Pinnacle::Messages::Mms::RequestOptions`
5184
6234
 
5185
6235
  </dd>
5186
6236
  </dl>
@@ -5192,8 +6242,7 @@ client.campaigns.rcs.list
5192
6242
  </dl>
5193
6243
  </details>
5194
6244
 
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>
6245
+ <details><summary><code>client.messages.mms.<a href="/lib/pinnacle/messages/mms/client.rb">validate</a>(request) -> Pinnacle::Types::MmsValidationResult</code></summary>
5197
6246
  <dl>
5198
6247
  <dd>
5199
6248
 
@@ -5205,7 +6254,7 @@ client.campaigns.rcs.list
5205
6254
  <dl>
5206
6255
  <dd>
5207
6256
 
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.
6257
+ Validate MMS message content without sending it.
5209
6258
  </dd>
5210
6259
  </dl>
5211
6260
  </dd>
@@ -5220,10 +6269,9 @@ Paginated list of completed submissions for a form, newest first. Each row inclu
5220
6269
  <dd>
5221
6270
 
5222
6271
  ```ruby
5223
- client.forms.submissions.list(
5224
- id: "form_Oy2n7iUoi9CJwUU6",
5225
- page_index: 0,
5226
- page_size: 20
6272
+ client.messages.mms.validate(
6273
+ 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],
6274
+ text: "Check out these images!"
5227
6275
  )
5228
6276
  ```
5229
6277
  </dd>
@@ -5239,10 +6287,7 @@ client.forms.submissions.list(
5239
6287
  <dl>
5240
6288
  <dd>
5241
6289
 
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`.
6290
+ **request:** `Pinnacle::Types::MmsContent`
5246
6291
 
5247
6292
  </dd>
5248
6293
  </dl>
@@ -5250,15 +6295,68 @@ The unique identifier of the form whose submissions you want to list.
5250
6295
  <dl>
5251
6296
  <dd>
5252
6297
 
5253
- **page_index:** `Integer` — Zero-based page index.
6298
+ **request_options:** `Pinnacle::Messages::Mms::RequestOptions`
5254
6299
 
5255
6300
  </dd>
5256
6301
  </dl>
6302
+ </dd>
6303
+ </dl>
6304
+
6305
+
6306
+ </dd>
6307
+ </dl>
6308
+ </details>
6309
+
6310
+ ## Messages Rcs
6311
+ <details><summary><code>client.messages.rcs.<a href="/lib/pinnacle/messages/rcs/client.rb">send_</a>(request) -> Pinnacle::Messages::Rcs::Types::SendRichMessageResponse</code></summary>
6312
+ <dl>
6313
+ <dd>
6314
+
6315
+ #### 📝 Description
6316
+
6317
+ <dl>
6318
+ <dd>
6319
+
6320
+ <dl>
6321
+ <dd>
6322
+
6323
+ Send a RCS message immediately or schedule it for future delivery. <br>
6324
+
6325
+ Requires an active RCS agent and recipient devices that support RCS Business Messaging.
6326
+ </dd>
6327
+ </dl>
6328
+ </dd>
6329
+ </dl>
6330
+
6331
+ #### 🔌 Usage
5257
6332
 
5258
6333
  <dl>
5259
6334
  <dd>
5260
6335
 
5261
- **page_size:** `Integer` — Number of submissions to return in a single page. Max 100.
6336
+ <dl>
6337
+ <dd>
6338
+
6339
+ ```ruby
6340
+ client.messages.rcs.send_(
6341
+ from: "from",
6342
+ to: "to",
6343
+ text: "text"
6344
+ )
6345
+ ```
6346
+ </dd>
6347
+ </dl>
6348
+ </dd>
6349
+ </dl>
6350
+
6351
+ #### ⚙️ Parameters
6352
+
6353
+ <dl>
6354
+ <dd>
6355
+
6356
+ <dl>
6357
+ <dd>
6358
+
6359
+ **request:** `Pinnacle::Types::RichMessage`
5262
6360
 
5263
6361
  </dd>
5264
6362
  </dl>
@@ -5266,7 +6364,7 @@ The unique identifier of the form whose submissions you want to list.
5266
6364
  <dl>
5267
6365
  <dd>
5268
6366
 
5269
- **request_options:** `Pinnacle::Forms::Submissions::RequestOptions`
6367
+ **request_options:** `Pinnacle::Messages::Rcs::RequestOptions`
5270
6368
 
5271
6369
  </dd>
5272
6370
  </dl>
@@ -5278,8 +6376,7 @@ The unique identifier of the form whose submissions you want to list.
5278
6376
  </dl>
5279
6377
  </details>
5280
6378
 
5281
- ## Messages Sms
5282
- <details><summary><code>client.messages.sms.<a href="/lib/pinnacle/messages/sms/client.rb">send_</a>(request) -> Pinnacle::Messages::Sms::Types::SmsSendResponse</code></summary>
6379
+ <details><summary><code>client.messages.rcs.<a href="/lib/pinnacle/messages/rcs/client.rb">send_typing</a>(request) -> Pinnacle::Types::SendTypingIndicatorResponse</code></summary>
5283
6380
  <dl>
5284
6381
  <dd>
5285
6382
 
@@ -5291,7 +6388,17 @@ The unique identifier of the form whose submissions you want to list.
5291
6388
  <dl>
5292
6389
  <dd>
5293
6390
 
5294
- Send a SMS message immediately or schedule it for future delivery.
6391
+ Send a typing indicator from an RCS agent to a recipient.
6392
+
6393
+ This endpoint allows RCS agents to display a typing indicator to recipients. The indicator is a message bubble with animated typing dots like this: <img src="https://server.trypinnacle.app/storage/v1/object/public/pinnacle-public-assets/ios-typing-indicator.png" alt="Typing Indicator" style="display: inline; height: 1.5em; vertical-align: middle; margin: 0 4px;" />
6394
+
6395
+ **Use Case:** Typing indicators are especially useful for providing feedback to users while the agent is thinking or generating a response that may take some time, creating a more engaging conversational experience.
6396
+
6397
+ **Expiration:** Typing indicators automatically expire after around 20 seconds or when the agent sends a message, whichever comes first.
6398
+
6399
+ **Frequency:** You can send typing indicators as many times as needed, though only one will be displayed at a time. Sending multiple typing indicators will extend the duration of the current indicator.
6400
+
6401
+ > **Note:** Typing indicators are best-effort hints, not delivery-guaranteed state. The platform is allowed to coalesce or drop them, and the client UI decides when to show/hide.
5295
6402
  </dd>
5296
6403
  </dl>
5297
6404
  </dd>
@@ -5306,9 +6413,8 @@ Send a SMS message immediately or schedule it for future delivery.
5306
6413
  <dd>
5307
6414
 
5308
6415
  ```ruby
5309
- client.messages.sms.send_(
5310
- from: "+14155164736",
5311
- text: "Hey!",
6416
+ client.messages.rcs.send_typing(
6417
+ agent_id: "agent_pinnacle",
5312
6418
  to: "+14154746461"
5313
6419
  )
5314
6420
  ```
@@ -5325,15 +6431,11 @@ client.messages.sms.send_(
5325
6431
  <dl>
5326
6432
  <dd>
5327
6433
 
5328
- **from:** `String` — Phone number that sends the message in E.164 format.
5329
-
5330
- </dd>
5331
- </dl>
6434
+ **agent_id:** `String`
5332
6435
 
5333
- <dl>
5334
- <dd>
6436
+ The unique identifier of the RCS agent sending the typing indicator. <br>
5335
6437
 
5336
- **options:** `Pinnacle::Messages::Sms::Types::SendSmsOptions` Additional settings to customize SMS delivery.
6438
+ Format: `agent_` followed by alphanumeric characters (e.g., `agent_pinnacle`).
5337
6439
 
5338
6440
  </dd>
5339
6441
  </dl>
@@ -5341,15 +6443,11 @@ client.messages.sms.send_(
5341
6443
  <dl>
5342
6444
  <dd>
5343
6445
 
5344
- **text:** `String` — Message content.
5345
-
5346
- </dd>
5347
- </dl>
6446
+ **to:** `String`
5348
6447
 
5349
- <dl>
5350
- <dd>
6448
+ The recipient's phone number in E.164 format. <br>
5351
6449
 
5352
- **to:** `String` Recipient's phone number in E.164 format.
6450
+ Must include country code with a leading plus sign (e.g., `+14155551234`).
5353
6451
 
5354
6452
  </dd>
5355
6453
  </dl>
@@ -5357,7 +6455,7 @@ client.messages.sms.send_(
5357
6455
  <dl>
5358
6456
  <dd>
5359
6457
 
5360
- **request_options:** `Pinnacle::Messages::Sms::RequestOptions`
6458
+ **request_options:** `Pinnacle::Messages::Rcs::RequestOptions`
5361
6459
 
5362
6460
  </dd>
5363
6461
  </dl>
@@ -5369,7 +6467,7 @@ client.messages.sms.send_(
5369
6467
  </dl>
5370
6468
  </details>
5371
6469
 
5372
- <details><summary><code>client.messages.sms.<a href="/lib/pinnacle/messages/sms/client.rb">validate</a>(request) -> Pinnacle::Types::SmsValidationResult</code></summary>
6470
+ <details><summary><code>client.messages.rcs.<a href="/lib/pinnacle/messages/rcs/client.rb">validate</a>(request) -> Pinnacle::Types::RcsValidationResult</code></summary>
5373
6471
  <dl>
5374
6472
  <dd>
5375
6473
 
@@ -5381,7 +6479,7 @@ client.messages.sms.send_(
5381
6479
  <dl>
5382
6480
  <dd>
5383
6481
 
5384
- Validate SMS message content without sending it.
6482
+ Validate RCS message content without sending it.
5385
6483
  </dd>
5386
6484
  </dl>
5387
6485
  </dd>
@@ -5396,7 +6494,7 @@ Validate SMS message content without sending it.
5396
6494
  <dd>
5397
6495
 
5398
6496
  ```ruby
5399
- client.messages.sms.validate(text: "Hello from Pinnacle")
6497
+ client.messages.rcs.validate(text: "text")
5400
6498
  ```
5401
6499
  </dd>
5402
6500
  </dl>
@@ -5411,7 +6509,7 @@ client.messages.sms.validate(text: "Hello from Pinnacle")
5411
6509
  <dl>
5412
6510
  <dd>
5413
6511
 
5414
- **request:** `Pinnacle::Types::SmsContent`
6512
+ **request:** `Pinnacle::Types::RcsValidateContent`
5415
6513
 
5416
6514
  </dd>
5417
6515
  </dl>
@@ -5419,7 +6517,7 @@ client.messages.sms.validate(text: "Hello from Pinnacle")
5419
6517
  <dl>
5420
6518
  <dd>
5421
6519
 
5422
- **request_options:** `Pinnacle::Messages::Sms::RequestOptions`
6520
+ **request_options:** `Pinnacle::Messages::Rcs::RequestOptions`
5423
6521
 
5424
6522
  </dd>
5425
6523
  </dl>
@@ -5431,8 +6529,8 @@ client.messages.sms.validate(text: "Hello from Pinnacle")
5431
6529
  </dl>
5432
6530
  </details>
5433
6531
 
5434
- ## Messages Mms
5435
- <details><summary><code>client.messages.mms.<a href="/lib/pinnacle/messages/mms/client.rb">send_</a>(request) -> Pinnacle::Messages::Mms::Types::MmsSendResponse</code></summary>
6532
+ ## Messages Blast
6533
+ <details><summary><code>client.messages.blast.<a href="/lib/pinnacle/messages/blast/client.rb">sms</a>(request) -> Pinnacle::Messages::Blast::Types::BlastSmsResponse</code></summary>
5436
6534
  <dl>
5437
6535
  <dd>
5438
6536
 
@@ -5444,7 +6542,11 @@ client.messages.sms.validate(text: "Hello from Pinnacle")
5444
6542
  <dl>
5445
6543
  <dd>
5446
6544
 
5447
- Send a MMS immediately or schedule it for future delivery.
6545
+ Send an SMS message to all contacts in an audience. <br>
6546
+
6547
+ Messages are distributed evenly across the provided sender phone numbers. <br>
6548
+
6549
+ Use the optional `schedule` parameter in `options` to schedule the blast for future delivery. When scheduled, the response will contain a `scheduleId` instead of blast details.
5448
6550
  </dd>
5449
6551
  </dl>
5450
6552
  </dd>
@@ -5459,15 +6561,12 @@ Send a MMS immediately or schedule it for future delivery.
5459
6561
  <dd>
5460
6562
 
5461
6563
  ```ruby
5462
- client.messages.mms.send_(
5463
- from: "+14155164736",
5464
- media_urls: ["https://fastly.picsum.photos/id/941/300/300.jpg?hmac=mDxM9PWSqRDjecwSCEpzU4bj35gqnG7yA25OL29uNv0"],
5465
- options: {
5466
- multiple_messages: true,
5467
- validate: true
5468
- },
5469
- text: "Check out this image!",
5470
- to: "+14154746461"
6564
+ client.messages.blast.sms(
6565
+ audience_id: "aud_abc123",
6566
+ senders: %w[+14155164736 +14155164737],
6567
+ message: {
6568
+ text: "Hello from Pinnacle!"
6569
+ }
5471
6570
  )
5472
6571
  ```
5473
6572
  </dd>
@@ -5483,7 +6582,11 @@ client.messages.mms.send_(
5483
6582
  <dl>
5484
6583
  <dd>
5485
6584
 
5486
- **from:** `String` — Phone number you want to send the message from in E.164 format.
6585
+ **audience_id:** `String`
6586
+
6587
+ The audience ID to send the blast to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. <br>
6588
+
6589
+ You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard/audiences) or [API](/api-reference/audiences/create).
5487
6590
 
5488
6591
  </dd>
5489
6592
  </dl>
@@ -5491,19 +6594,15 @@ client.messages.mms.send_(
5491
6594
  <dl>
5492
6595
  <dd>
5493
6596
 
5494
- **media_urls:** `Internal::Types::Array[String]`
6597
+ **senders:** `Internal::Types::Array[String]`
5495
6598
 
5496
- Media file URLs to send.<br>
6599
+ Array of phone numbers to send from in E.164 format. <br>
5497
6600
 
5498
- See [supported media types](https://app.pinnacle.sh/supported-file-types?type=MMS).
5499
-
5500
- </dd>
5501
- </dl>
6601
+ Messages will be distributed evenly across these senders.
5502
6602
 
5503
- <dl>
5504
- <dd>
6603
+ > **Note:** Sandbox numbers cannot be used for blasts.
5505
6604
 
5506
- **options:** `Pinnacle::Messages::Mms::Types::SendMmsOptions` — Control how your MMS is processed and delivered.
6605
+ **Limit:** 1 min
5507
6606
 
5508
6607
  </dd>
5509
6608
  </dl>
@@ -5511,7 +6610,7 @@ Media file URLs to send.<br>
5511
6610
  <dl>
5512
6611
  <dd>
5513
6612
 
5514
- **text:** `String` — Message text to accompany the media.
6613
+ **message:** `Pinnacle::Types::SmsContent`
5515
6614
 
5516
6615
  </dd>
5517
6616
  </dl>
@@ -5519,7 +6618,7 @@ Media file URLs to send.<br>
5519
6618
  <dl>
5520
6619
  <dd>
5521
6620
 
5522
- **to:** `String` — Recipient's phone number in E.164 format.
6621
+ **options:** `Pinnacle::Messages::Blast::Types::BlastSmsOptions` — Additional settings to customize SMS blast delivery.
5523
6622
 
5524
6623
  </dd>
5525
6624
  </dl>
@@ -5527,7 +6626,7 @@ Media file URLs to send.<br>
5527
6626
  <dl>
5528
6627
  <dd>
5529
6628
 
5530
- **request_options:** `Pinnacle::Messages::Mms::RequestOptions`
6629
+ **request_options:** `Pinnacle::Messages::Blast::RequestOptions`
5531
6630
 
5532
6631
  </dd>
5533
6632
  </dl>
@@ -5539,7 +6638,7 @@ Media file URLs to send.<br>
5539
6638
  </dl>
5540
6639
  </details>
5541
6640
 
5542
- <details><summary><code>client.messages.mms.<a href="/lib/pinnacle/messages/mms/client.rb">validate</a>(request) -> Pinnacle::Types::MmsValidationResult</code></summary>
6641
+ <details><summary><code>client.messages.blast.<a href="/lib/pinnacle/messages/blast/client.rb">mms</a>(request) -> Pinnacle::Messages::Blast::Types::BlastMmsResponse</code></summary>
5543
6642
  <dl>
5544
6643
  <dd>
5545
6644
 
@@ -5551,7 +6650,11 @@ Media file URLs to send.<br>
5551
6650
  <dl>
5552
6651
  <dd>
5553
6652
 
5554
- Validate MMS message content without sending it.
6653
+ Send an MMS message to all contacts in an audience. <br>
6654
+
6655
+ Messages are distributed evenly across the provided sender phone numbers. <br>
6656
+
6657
+ Use the optional `schedule` parameter in `options` to schedule the blast for future delivery. When scheduled, the response will contain a `scheduleId` instead of blast details.
5555
6658
  </dd>
5556
6659
  </dl>
5557
6660
  </dd>
@@ -5566,9 +6669,16 @@ Validate MMS message content without sending it.
5566
6669
  <dd>
5567
6670
 
5568
6671
  ```ruby
5569
- client.messages.mms.validate(
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!"
6672
+ client.messages.blast.mms(
6673
+ audience_id: "aud_abc123",
6674
+ senders: %w[+14155164736 +14155164737],
6675
+ message: {
6676
+ media_urls: ["https://fastly.picsum.photos/id/941/300/300.jpg"],
6677
+ text: "Check out this image!"
6678
+ },
6679
+ options: {
6680
+ validate: true
6681
+ }
5572
6682
  )
5573
6683
  ```
5574
6684
  </dd>
@@ -5584,76 +6694,43 @@ client.messages.mms.validate(
5584
6694
  <dl>
5585
6695
  <dd>
5586
6696
 
5587
- **request:** `Pinnacle::Types::MmsContent`
5588
-
5589
- </dd>
5590
- </dl>
6697
+ **audience_id:** `String`
5591
6698
 
5592
- <dl>
5593
- <dd>
6699
+ The audience ID to send the blast to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. <br>
5594
6700
 
5595
- **request_options:** `Pinnacle::Messages::Mms::RequestOptions`
6701
+ You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard/audiences) or [API](/api-reference/audiences/create).
5596
6702
 
5597
6703
  </dd>
5598
6704
  </dl>
5599
- </dd>
5600
- </dl>
5601
-
5602
-
5603
- </dd>
5604
- </dl>
5605
- </details>
5606
6705
 
5607
- ## Messages Rcs
5608
- <details><summary><code>client.messages.rcs.<a href="/lib/pinnacle/messages/rcs/client.rb">send_</a>(request) -> Pinnacle::Messages::Rcs::Types::SendRichMessageResponse</code></summary>
5609
6706
  <dl>
5610
6707
  <dd>
5611
6708
 
5612
- #### 📝 Description
6709
+ **senders:** `Internal::Types::Array[String]`
5613
6710
 
5614
- <dl>
5615
- <dd>
6711
+ Array of phone numbers to send from in E.164 format. <br>
5616
6712
 
5617
- <dl>
5618
- <dd>
6713
+ Messages will be distributed evenly across these senders.
5619
6714
 
5620
- Send a RCS message immediately or schedule it for future delivery. <br>
6715
+ > **Note:** Sandbox numbers cannot be used for blasts.
5621
6716
 
5622
- Requires an active RCS agent and recipient devices that support RCS Business Messaging.
5623
- </dd>
5624
- </dl>
6717
+ **Limit:** 1 min
6718
+
5625
6719
  </dd>
5626
6720
  </dl>
5627
6721
 
5628
- #### 🔌 Usage
5629
-
5630
- <dl>
5631
- <dd>
5632
-
5633
6722
  <dl>
5634
6723
  <dd>
5635
6724
 
5636
- ```ruby
5637
- client.messages.rcs.send_(
5638
- from: "from",
5639
- to: "to",
5640
- text: "text"
5641
- )
5642
- ```
5643
- </dd>
5644
- </dl>
6725
+ **message:** `Pinnacle::Types::MmsContent`
6726
+
5645
6727
  </dd>
5646
6728
  </dl>
5647
6729
 
5648
- #### ⚙️ Parameters
5649
-
5650
- <dl>
5651
- <dd>
5652
-
5653
6730
  <dl>
5654
6731
  <dd>
5655
6732
 
5656
- **request:** `Pinnacle::Types::RichMessage`
6733
+ **options:** `Pinnacle::Messages::Blast::Types::BlastMmsOptions` — Additional settings to customize MMS blast delivery.
5657
6734
 
5658
6735
  </dd>
5659
6736
  </dl>
@@ -5661,7 +6738,7 @@ client.messages.rcs.send_(
5661
6738
  <dl>
5662
6739
  <dd>
5663
6740
 
5664
- **request_options:** `Pinnacle::Messages::Rcs::RequestOptions`
6741
+ **request_options:** `Pinnacle::Messages::Blast::RequestOptions`
5665
6742
 
5666
6743
  </dd>
5667
6744
  </dl>
@@ -5673,7 +6750,7 @@ client.messages.rcs.send_(
5673
6750
  </dl>
5674
6751
  </details>
5675
6752
 
5676
- <details><summary><code>client.messages.rcs.<a href="/lib/pinnacle/messages/rcs/client.rb">send_typing</a>(request) -> Pinnacle::Types::SendTypingIndicatorResponse</code></summary>
6753
+ <details><summary><code>client.messages.blast.<a href="/lib/pinnacle/messages/blast/client.rb">rcs</a>(request) -> Pinnacle::Messages::Blast::Types::BlastRcsResponse</code></summary>
5677
6754
  <dl>
5678
6755
  <dd>
5679
6756
 
@@ -5685,17 +6762,11 @@ client.messages.rcs.send_(
5685
6762
  <dl>
5686
6763
  <dd>
5687
6764
 
5688
- Send a typing indicator from an RCS agent to a recipient.
5689
-
5690
- This endpoint allows RCS agents to display a typing indicator to recipients. The indicator is a message bubble with animated typing dots like this: <img src="https://server.trypinnacle.app/storage/v1/object/public/pinnacle-public-assets/ios-typing-indicator.png" alt="Typing Indicator" style="display: inline; height: 1.5em; vertical-align: middle; margin: 0 4px;" />
5691
-
5692
- **Use Case:** Typing indicators are especially useful for providing feedback to users while the agent is thinking or generating a response that may take some time, creating a more engaging conversational experience.
5693
-
5694
- **Expiration:** Typing indicators automatically expire after around 20 seconds or when the agent sends a message, whichever comes first.
6765
+ Send an RCS message to all contacts in an audience. <br>
5695
6766
 
5696
- **Frequency:** You can send typing indicators as many times as needed, though only one will be displayed at a time. Sending multiple typing indicators will extend the duration of the current indicator.
6767
+ Messages are distributed evenly across the provided RCS agents for load balancing. Requires active RCS agents and recipient devices that support RCS Business Messaging. <br>
5697
6768
 
5698
- > **Note:** Typing indicators are best-effort hints, not delivery-guaranteed state. The platform is allowed to coalesce or drop them, and the client UI decides when to show/hide.
6769
+ Use the optional `schedule` parameter in `options` to schedule the blast for future delivery. When scheduled, the response will contain a `scheduleId` instead of blast details.
5699
6770
  </dd>
5700
6771
  </dl>
5701
6772
  </dd>
@@ -5710,9 +6781,21 @@ This endpoint allows RCS agents to display a typing indicator to recipients. The
5710
6781
  <dd>
5711
6782
 
5712
6783
  ```ruby
5713
- client.messages.rcs.send_typing(
5714
- agent_id: "agent_pinnacle",
5715
- to: "+14154746461"
6784
+ client.messages.blast.rcs(
6785
+ audience_id: "aud_abc123",
6786
+ senders: %w[agent_pinnacle agent_pinnacle2],
6787
+ message: {
6788
+ quick_replies: [],
6789
+ text: "Hello from Pinnacle RCS!"
6790
+ },
6791
+ fallback: {
6792
+ from: "+14155164736",
6793
+ text: "Hello from Pinnacle! Reply LEARN to learn more."
6794
+ },
6795
+ options: {
6796
+ transcode: true,
6797
+ validate: true
6798
+ }
5716
6799
  )
5717
6800
  ```
5718
6801
  </dd>
@@ -5728,11 +6811,11 @@ client.messages.rcs.send_typing(
5728
6811
  <dl>
5729
6812
  <dd>
5730
6813
 
5731
- **agent_id:** `String`
6814
+ **audience_id:** `String`
5732
6815
 
5733
- The unique identifier of the RCS agent sending the typing indicator. <br>
6816
+ The audience ID to send the blast to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. <br>
5734
6817
 
5735
- Format: `agent_` followed by alphanumeric characters (e.g., `agent_pinnacle`).
6818
+ You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard/audiences) or [API](/api-reference/audiences/create).
5736
6819
 
5737
6820
  </dd>
5738
6821
  </dl>
@@ -5740,11 +6823,13 @@ Format: `agent_` followed by alphanumeric characters (e.g., `agent_pinnacle`).
5740
6823
  <dl>
5741
6824
  <dd>
5742
6825
 
5743
- **to:** `String`
6826
+ **senders:** `Internal::Types::Array[String]`
5744
6827
 
5745
- The recipient's phone number in E.164 format. <br>
6828
+ Array of RCS agent IDs to send from. Each must be prefixed with `agent_`. <br>
5746
6829
 
5747
- Must include country code with a leading plus sign (e.g., `+14155551234`).
6830
+ Messages will be evenly distributed across these agents.
6831
+
6832
+ **Limit:** 1 min
5748
6833
 
5749
6834
  </dd>
5750
6835
  </dl>
@@ -5752,7 +6837,31 @@ Must include country code with a leading plus sign (e.g., `+14155551234`).
5752
6837
  <dl>
5753
6838
  <dd>
5754
6839
 
5755
- **request_options:** `Pinnacle::Messages::Rcs::RequestOptions`
6840
+ **message:** `Pinnacle::Types::RcsValidateContent`
6841
+
6842
+ </dd>
6843
+ </dl>
6844
+
6845
+ <dl>
6846
+ <dd>
6847
+
6848
+ **fallback:** `Pinnacle::Types::FallbackMessage`
6849
+
6850
+ </dd>
6851
+ </dl>
6852
+
6853
+ <dl>
6854
+ <dd>
6855
+
6856
+ **options:** `Pinnacle::Messages::Blast::Types::BlastRcsOptions` — Configure how your RCS blast is sent and tracked.
6857
+
6858
+ </dd>
6859
+ </dl>
6860
+
6861
+ <dl>
6862
+ <dd>
6863
+
6864
+ **request_options:** `Pinnacle::Messages::Blast::RequestOptions`
5756
6865
 
5757
6866
  </dd>
5758
6867
  </dl>
@@ -5764,7 +6873,8 @@ Must include country code with a leading plus sign (e.g., `+14155551234`).
5764
6873
  </dl>
5765
6874
  </details>
5766
6875
 
5767
- <details><summary><code>client.messages.rcs.<a href="/lib/pinnacle/messages/rcs/client.rb">validate</a>(request) -> Pinnacle::Types::RcsValidationResult</code></summary>
6876
+ ## Messages Schedule
6877
+ <details><summary><code>client.messages.schedule.<a href="/lib/pinnacle/messages/schedule/client.rb">cancel</a>(id) -> Pinnacle::Types::ScheduleCancelResult</code></summary>
5768
6878
  <dl>
5769
6879
  <dd>
5770
6880
 
@@ -5776,7 +6886,9 @@ Must include country code with a leading plus sign (e.g., `+14155551234`).
5776
6886
  <dl>
5777
6887
  <dd>
5778
6888
 
5779
- Validate RCS message content without sending it.
6889
+ Cancel a scheduled message or blast. <br>
6890
+
6891
+ Works for both individual scheduled messages and scheduled blasts. Use the `scheduleId` returned when the message or blast was scheduled.
5780
6892
  </dd>
5781
6893
  </dl>
5782
6894
  </dd>
@@ -5791,7 +6903,7 @@ Validate RCS message content without sending it.
5791
6903
  <dd>
5792
6904
 
5793
6905
  ```ruby
5794
- client.messages.rcs.validate(text: "text")
6906
+ client.messages.schedule.cancel(id: "id")
5795
6907
  ```
5796
6908
  </dd>
5797
6909
  </dl>
@@ -5806,7 +6918,7 @@ client.messages.rcs.validate(text: "text")
5806
6918
  <dl>
5807
6919
  <dd>
5808
6920
 
5809
- **request:** `Pinnacle::Types::RcsValidateContent`
6921
+ **id:** `String` — Unique identifier of the scheduled message. This identifier is a string that always begins with the prefix `msg_sched_`, for example: `msg_sched_1234567890`.
5810
6922
 
5811
6923
  </dd>
5812
6924
  </dl>
@@ -5814,7 +6926,7 @@ client.messages.rcs.validate(text: "text")
5814
6926
  <dl>
5815
6927
  <dd>
5816
6928
 
5817
- **request_options:** `Pinnacle::Messages::Rcs::RequestOptions`
6929
+ **request_options:** `Pinnacle::Messages::Schedule::RequestOptions`
5818
6930
 
5819
6931
  </dd>
5820
6932
  </dl>
@@ -5826,8 +6938,8 @@ client.messages.rcs.validate(text: "text")
5826
6938
  </dl>
5827
6939
  </details>
5828
6940
 
5829
- ## Messages Blast
5830
- <details><summary><code>client.messages.blast.<a href="/lib/pinnacle/messages/blast/client.rb">sms</a>(request) -> Pinnacle::Messages::Blast::Types::BlastSmsResponse</code></summary>
6941
+ ## Messages Schedules
6942
+ <details><summary><code>client.messages.schedules.<a href="/lib/pinnacle/messages/schedules/client.rb">list</a>(request) -> Pinnacle::Types::ListScheduledMessagesResponse</code></summary>
5831
6943
  <dl>
5832
6944
  <dd>
5833
6945
 
@@ -5839,11 +6951,7 @@ client.messages.rcs.validate(text: "text")
5839
6951
  <dl>
5840
6952
  <dd>
5841
6953
 
5842
- Send an SMS message to all contacts in an audience. <br>
5843
-
5844
- Messages are distributed evenly across the provided sender phone numbers. <br>
5845
-
5846
- Use the optional `schedule` parameter in `options` to schedule the blast for future delivery. When scheduled, the response will contain a `scheduleId` instead of blast details.
6954
+ List all scheduled messages with optional filtering and pagination. Results are sorted by creation date, newest first.
5847
6955
  </dd>
5848
6956
  </dl>
5849
6957
  </dd>
@@ -5858,13 +6966,7 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5858
6966
  <dd>
5859
6967
 
5860
6968
  ```ruby
5861
- client.messages.blast.sms(
5862
- audience_id: "aud_abc123",
5863
- senders: %w[+14155164736 +14155164737],
5864
- message: {
5865
- text: "Hello from Pinnacle!"
5866
- }
5867
- )
6969
+ client.messages.schedules.list
5868
6970
  ```
5869
6971
  </dd>
5870
6972
  </dl>
@@ -5879,11 +6981,7 @@ client.messages.blast.sms(
5879
6981
  <dl>
5880
6982
  <dd>
5881
6983
 
5882
- **audience_id:** `String`
5883
-
5884
- The audience ID to send the blast to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. <br>
5885
-
5886
- You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard/audiences) or [API](/api-reference/audiences/create).
6984
+ **page_index:** `Integer`
5887
6985
 
5888
6986
  </dd>
5889
6987
  </dl>
@@ -5891,15 +6989,15 @@ You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard
5891
6989
  <dl>
5892
6990
  <dd>
5893
6991
 
5894
- **senders:** `Internal::Types::Array[String]`
5895
-
5896
- Array of phone numbers to send from in E.164 format. <br>
5897
-
5898
- Messages will be distributed evenly across these senders.
6992
+ **page_size:** `Integer`
6993
+
6994
+ </dd>
6995
+ </dl>
5899
6996
 
5900
- > **Note:** Sandbox numbers cannot be used for blasts.
6997
+ <dl>
6998
+ <dd>
5901
6999
 
5902
- **Limit:** 1 min
7000
+ **status:** `Pinnacle::Messages::Schedules::Types::ListScheduledMessagesRequestStatus`
5903
7001
 
5904
7002
  </dd>
5905
7003
  </dl>
@@ -5907,7 +7005,7 @@ Messages will be distributed evenly across these senders.
5907
7005
  <dl>
5908
7006
  <dd>
5909
7007
 
5910
- **message:** `Pinnacle::Types::SmsContent`
7008
+ **schedule_type:** `Pinnacle::Messages::Schedules::Types::ListScheduledMessagesRequestScheduleType` — Filter by schedule type — "MESSAGE" for individual messages, "BLAST" for bulk sends.
5911
7009
 
5912
7010
  </dd>
5913
7011
  </dl>
@@ -5915,7 +7013,7 @@ Messages will be distributed evenly across these senders.
5915
7013
  <dl>
5916
7014
  <dd>
5917
7015
 
5918
- **options:** `Pinnacle::Messages::Blast::Types::BlastSmsOptions` — Additional settings to customize SMS blast delivery.
7016
+ **content:** `String` — Search scheduled message content (partial match, case-insensitive).
5919
7017
 
5920
7018
  </dd>
5921
7019
  </dl>
@@ -5923,7 +7021,7 @@ Messages will be distributed evenly across these senders.
5923
7021
  <dl>
5924
7022
  <dd>
5925
7023
 
5926
- **request_options:** `Pinnacle::Messages::Blast::RequestOptions`
7024
+ **request_options:** `Pinnacle::Messages::Schedules::RequestOptions`
5927
7025
 
5928
7026
  </dd>
5929
7027
  </dl>
@@ -5935,7 +7033,8 @@ Messages will be distributed evenly across these senders.
5935
7033
  </dl>
5936
7034
  </details>
5937
7035
 
5938
- <details><summary><code>client.messages.blast.<a href="/lib/pinnacle/messages/blast/client.rb">mms</a>(request) -> Pinnacle::Messages::Blast::Types::BlastMmsResponse</code></summary>
7036
+ ## Messages Blasts
7037
+ <details><summary><code>client.messages.blasts.<a href="/lib/pinnacle/messages/blasts/client.rb">list</a>(request) -> Pinnacle::Types::ListBlastsResponse</code></summary>
5939
7038
  <dl>
5940
7039
  <dd>
5941
7040
 
@@ -5947,11 +7046,7 @@ Messages will be distributed evenly across these senders.
5947
7046
  <dl>
5948
7047
  <dd>
5949
7048
 
5950
- Send an MMS message to all contacts in an audience. <br>
5951
-
5952
- Messages are distributed evenly across the provided sender phone numbers. <br>
5953
-
5954
- Use the optional `schedule` parameter in `options` to schedule the blast for future delivery. When scheduled, the response will contain a `scheduleId` instead of blast details.
7049
+ List all blasts with optional filtering and pagination. Results are sorted by creation date, newest first.
5955
7050
  </dd>
5956
7051
  </dl>
5957
7052
  </dd>
@@ -5966,17 +7061,7 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
5966
7061
  <dd>
5967
7062
 
5968
7063
  ```ruby
5969
- client.messages.blast.mms(
5970
- audience_id: "aud_abc123",
5971
- senders: %w[+14155164736 +14155164737],
5972
- message: {
5973
- media_urls: ["https://fastly.picsum.photos/id/941/300/300.jpg"],
5974
- text: "Check out this image!"
5975
- },
5976
- options: {
5977
- validate: true
5978
- }
5979
- )
7064
+ client.messages.blasts.list
5980
7065
  ```
5981
7066
  </dd>
5982
7067
  </dl>
@@ -5991,11 +7076,7 @@ client.messages.blast.mms(
5991
7076
  <dl>
5992
7077
  <dd>
5993
7078
 
5994
- **audience_id:** `String`
5995
-
5996
- The audience ID to send the blast to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. <br>
5997
-
5998
- You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard/audiences) or [API](/api-reference/audiences/create).
7079
+ **page_index:** `Integer`
5999
7080
 
6000
7081
  </dd>
6001
7082
  </dl>
@@ -6003,15 +7084,15 @@ You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard
6003
7084
  <dl>
6004
7085
  <dd>
6005
7086
 
6006
- **senders:** `Internal::Types::Array[String]`
6007
-
6008
- Array of phone numbers to send from in E.164 format. <br>
6009
-
6010
- Messages will be distributed evenly across these senders.
7087
+ **page_size:** `Integer`
7088
+
7089
+ </dd>
7090
+ </dl>
6011
7091
 
6012
- > **Note:** Sandbox numbers cannot be used for blasts.
7092
+ <dl>
7093
+ <dd>
6013
7094
 
6014
- **Limit:** 1 min
7095
+ **audience_id:** `String` — Filter blasts by audience ID.
6015
7096
 
6016
7097
  </dd>
6017
7098
  </dl>
@@ -6019,7 +7100,7 @@ Messages will be distributed evenly across these senders.
6019
7100
  <dl>
6020
7101
  <dd>
6021
7102
 
6022
- **message:** `Pinnacle::Types::MmsContent`
7103
+ **sender:** `String` — Filter blasts that include this sender (phone number or agent ID).
6023
7104
 
6024
7105
  </dd>
6025
7106
  </dl>
@@ -6027,7 +7108,7 @@ Messages will be distributed evenly across these senders.
6027
7108
  <dl>
6028
7109
  <dd>
6029
7110
 
6030
- **options:** `Pinnacle::Messages::Blast::Types::BlastMmsOptions` — Additional settings to customize MMS blast delivery.
7111
+ **content:** `String` — Search blast content (partial match, case-insensitive).
6031
7112
 
6032
7113
  </dd>
6033
7114
  </dl>
@@ -6035,7 +7116,7 @@ Messages will be distributed evenly across these senders.
6035
7116
  <dl>
6036
7117
  <dd>
6037
7118
 
6038
- **request_options:** `Pinnacle::Messages::Blast::RequestOptions`
7119
+ **request_options:** `Pinnacle::Messages::Blasts::RequestOptions`
6039
7120
 
6040
7121
  </dd>
6041
7122
  </dl>
@@ -6047,7 +7128,8 @@ Messages will be distributed evenly across these senders.
6047
7128
  </dl>
6048
7129
  </details>
6049
7130
 
6050
- <details><summary><code>client.messages.blast.<a href="/lib/pinnacle/messages/blast/client.rb">rcs</a>(request) -> Pinnacle::Messages::Blast::Types::BlastRcsResponse</code></summary>
7131
+ ## Messages Simulate
7132
+ <details><summary><code>client.messages.simulate.<a href="/lib/pinnacle/messages/simulate/client.rb">user</a>(request) -> Pinnacle::Types::SimulateUserResponse</code></summary>
6051
7133
  <dl>
6052
7134
  <dd>
6053
7135
 
@@ -6059,11 +7141,7 @@ Messages will be distributed evenly across these senders.
6059
7141
  <dl>
6060
7142
  <dd>
6061
7143
 
6062
- Send an RCS message to all contacts in an audience. <br>
6063
-
6064
- Messages are distributed evenly across the provided RCS agents for load balancing. Requires active RCS agents and recipient devices that support RCS Business Messaging. <br>
6065
-
6066
- Use the optional `schedule` parameter in `options` to schedule the blast for future delivery. When scheduled, the response will contain a `scheduleId` instead of blast details.
7144
+ Simulate inbound messages and button presses from a user.
6067
7145
  </dd>
6068
7146
  </dl>
6069
7147
  </dd>
@@ -6078,20 +7156,11 @@ Use the optional `schedule` parameter in `options` to schedule the blast for fut
6078
7156
  <dd>
6079
7157
 
6080
7158
  ```ruby
6081
- client.messages.blast.rcs(
6082
- audience_id: "aud_abc123",
6083
- senders: %w[agent_pinnacle agent_pinnacle2],
7159
+ client.messages.simulate.user(
7160
+ from: "+14155551234",
7161
+ to: "+14155555678",
6084
7162
  message: {
6085
- quick_replies: [],
6086
- text: "Hello from Pinnacle RCS!"
6087
- },
6088
- fallback: {
6089
- from: "+14155164736",
6090
- text: "Hello from Pinnacle! Reply LEARN to learn more."
6091
- },
6092
- options: {
6093
- transcode: true,
6094
- validate: true
7163
+ text: "Hello from the test user!"
6095
7164
  }
6096
7165
  )
6097
7166
  ```
@@ -6108,41 +7177,77 @@ client.messages.blast.rcs(
6108
7177
  <dl>
6109
7178
  <dd>
6110
7179
 
6111
- **audience_id:** `String`
7180
+ **request:** `Pinnacle::Types::SimulateUserParams`
7181
+
7182
+ </dd>
7183
+ </dl>
6112
7184
 
6113
- The audience ID to send the blast to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. <br>
7185
+ <dl>
7186
+ <dd>
6114
7187
 
6115
- You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard/audiences) or [API](/api-reference/audiences/create).
7188
+ **request_options:** `Pinnacle::Messages::Simulate::RequestOptions`
6116
7189
 
6117
7190
  </dd>
6118
7191
  </dl>
7192
+ </dd>
7193
+ </dl>
7194
+
7195
+
7196
+ </dd>
7197
+ </dl>
7198
+ </details>
6119
7199
 
7200
+ ## Network SimSwap
7201
+ <details><summary><code>client.network.sim_swap.<a href="/lib/pinnacle/network/sim_swap/client.rb">check</a>(request) -> Pinnacle::Types::SimSwapResponse</code></summary>
6120
7202
  <dl>
6121
7203
  <dd>
6122
7204
 
6123
- **senders:** `Internal::Types::Array[String]`
7205
+ #### 📝 Description
6124
7206
 
6125
- Array of RCS agent IDs to send from. Each must be prefixed with `agent_`. <br>
7207
+ <dl>
7208
+ <dd>
6126
7209
 
6127
- Messages will be evenly distributed across these agents.
7210
+ <dl>
7211
+ <dd>
6128
7212
 
6129
- **Limit:** 1 min
6130
-
7213
+ Check whether a phone number's SIM was changed during a recent lookback window. Use this to flag account takeover risk before sign-in, password reset, payment, or other sensitive actions.
7214
+
7215
+ <Note>
7216
+ Limited availability. Contact [founders@pinnacle.sh](mailto:founders@pinnacle.sh) to request access.
7217
+ </Note>
7218
+ </dd>
7219
+ </dl>
6131
7220
  </dd>
6132
7221
  </dl>
6133
7222
 
7223
+ #### 🔌 Usage
7224
+
6134
7225
  <dl>
6135
7226
  <dd>
6136
7227
 
6137
- **message:** `Pinnacle::Types::RcsValidateContent`
6138
-
7228
+ <dl>
7229
+ <dd>
7230
+
7231
+ ```ruby
7232
+ client.network.sim_swap.check(
7233
+ phone_number: "+14155550123",
7234
+ period_hours: 240
7235
+ )
7236
+ ```
7237
+ </dd>
7238
+ </dl>
6139
7239
  </dd>
6140
7240
  </dl>
6141
7241
 
7242
+ #### ⚙️ Parameters
7243
+
6142
7244
  <dl>
6143
7245
  <dd>
6144
7246
 
6145
- **fallback:** `Pinnacle::Types::FallbackMessage`
7247
+ <dl>
7248
+ <dd>
7249
+
7250
+ **phone_number:** `String`
6146
7251
 
6147
7252
  </dd>
6148
7253
  </dl>
@@ -6150,7 +7255,7 @@ Messages will be evenly distributed across these agents.
6150
7255
  <dl>
6151
7256
  <dd>
6152
7257
 
6153
- **options:** `Pinnacle::Messages::Blast::Types::BlastRcsOptions` — Configure how your RCS blast is sent and tracked.
7258
+ **period_hours:** `Integer` — Lookback window, in hours, for detecting a recent SIM change. Must be from 1 to 2400. Defaults to 240.
6154
7259
 
6155
7260
  </dd>
6156
7261
  </dl>
@@ -6158,7 +7263,7 @@ Messages will be evenly distributed across these agents.
6158
7263
  <dl>
6159
7264
  <dd>
6160
7265
 
6161
- **request_options:** `Pinnacle::Messages::Blast::RequestOptions`
7266
+ **request_options:** `Pinnacle::Network::SimSwap::RequestOptions`
6162
7267
 
6163
7268
  </dd>
6164
7269
  </dl>
@@ -6170,8 +7275,8 @@ Messages will be evenly distributed across these agents.
6170
7275
  </dl>
6171
7276
  </details>
6172
7277
 
6173
- ## Messages Schedule
6174
- <details><summary><code>client.messages.schedule.<a href="/lib/pinnacle/messages/schedule/client.rb">cancel</a>(id) -> Pinnacle::Types::ScheduleCancelResult</code></summary>
7278
+ ## Network SubscriberMatch
7279
+ <details><summary><code>client.network.subscriber_match.<a href="/lib/pinnacle/network/subscriber_match/client.rb">check</a>(request) -> Pinnacle::Types::SubscriberMatchResponse</code></summary>
6175
7280
  <dl>
6176
7281
  <dd>
6177
7282
 
@@ -6183,9 +7288,11 @@ Messages will be evenly distributed across these agents.
6183
7288
  <dl>
6184
7289
  <dd>
6185
7290
 
6186
- Cancel a scheduled message or blast. <br>
7291
+ Compare user-provided identity details against the carrier's subscriber record. Results return match strength per attribute, so you can use partial signals without receiving carrier PII.
6187
7292
 
6188
- Works for both individual scheduled messages and scheduled blasts. Use the `scheduleId` returned when the message or blast was scheduled.
7293
+ <Note>
7294
+ Limited availability. Contact [founders@pinnacle.sh](mailto:founders@pinnacle.sh) to request access.
7295
+ </Note>
6189
7296
  </dd>
6190
7297
  </dl>
6191
7298
  </dd>
@@ -6200,7 +7307,20 @@ Works for both individual scheduled messages and scheduled blasts. Use the `sche
6200
7307
  <dd>
6201
7308
 
6202
7309
  ```ruby
6203
- client.messages.schedule.cancel(id: "id")
7310
+ client.network.subscriber_match.check(
7311
+ phone_number: "+14155550123",
7312
+ attributes: {
7313
+ given_name: "Jane",
7314
+ family_name: "Doe",
7315
+ street_name: "Market Street",
7316
+ street_number: "123",
7317
+ postal_code: "94105",
7318
+ locality: "San Francisco",
7319
+ region: "CA",
7320
+ country: "US",
7321
+ birthdate: "1990-01-31"
7322
+ }
7323
+ )
6204
7324
  ```
6205
7325
  </dd>
6206
7326
  </dl>
@@ -6215,7 +7335,7 @@ client.messages.schedule.cancel(id: "id")
6215
7335
  <dl>
6216
7336
  <dd>
6217
7337
 
6218
- **id:** `String` — Unique identifier of the scheduled message. This identifier is a string that always begins with the prefix `msg_sched_`, for example: `msg_sched_1234567890`.
7338
+ **phone_number:** `String`
6219
7339
 
6220
7340
  </dd>
6221
7341
  </dl>
@@ -6223,7 +7343,15 @@ client.messages.schedule.cancel(id: "id")
6223
7343
  <dl>
6224
7344
  <dd>
6225
7345
 
6226
- **request_options:** `Pinnacle::Messages::Schedule::RequestOptions`
7346
+ **attributes:** `Pinnacle::Types::SubscriberMatchAttributes`
7347
+
7348
+ </dd>
7349
+ </dl>
7350
+
7351
+ <dl>
7352
+ <dd>
7353
+
7354
+ **request_options:** `Pinnacle::Network::SubscriberMatch::RequestOptions`
6227
7355
 
6228
7356
  </dd>
6229
7357
  </dl>
@@ -6235,8 +7363,8 @@ client.messages.schedule.cancel(id: "id")
6235
7363
  </dl>
6236
7364
  </details>
6237
7365
 
6238
- ## Messages Schedules
6239
- <details><summary><code>client.messages.schedules.<a href="/lib/pinnacle/messages/schedules/client.rb">list</a>(request) -> Pinnacle::Types::ListScheduledMessagesResponse</code></summary>
7366
+ ## Network SilentAuth
7367
+ <details><summary><code>client.network.silent_auth.<a href="/lib/pinnacle/network/silent_auth/client.rb">start</a>(request) -> Pinnacle::Types::SilentAuthResponse</code></summary>
6240
7368
  <dl>
6241
7369
  <dd>
6242
7370
 
@@ -6248,7 +7376,13 @@ client.messages.schedule.cancel(id: "id")
6248
7376
  <dl>
6249
7377
  <dd>
6250
7378
 
6251
- List all scheduled messages with optional filtering and pagination. Results are sorted by creation date, newest first.
7379
+ Start a Silent Authentication session to verify that the user controls the device attached to a phone number. Omit `format` to receive a `browserUrl` for the hosted browser/WebView flow, or set `format: "json"` to receive a `jsonUrl` for a native mobile app or custom client-side flow. The device check must run from the user's cellular device, not your server.
7380
+
7381
+ The returned URL expires 60 seconds after creation. Open or fetch it immediately and use `expiresAt` to detect when a new Silent Auth session is required.
7382
+
7383
+ <Note>
7384
+ Limited availability. Contact [founders@pinnacle.sh](mailto:founders@pinnacle.sh) to request access.
7385
+ </Note>
6252
7386
  </dd>
6253
7387
  </dl>
6254
7388
  </dd>
@@ -6263,7 +7397,10 @@ List all scheduled messages with optional filtering and pagination. Results are
6263
7397
  <dd>
6264
7398
 
6265
7399
  ```ruby
6266
- client.messages.schedules.list
7400
+ client.network.silent_auth.start(
7401
+ phone_number: "+14155550123",
7402
+ client_ref: "user_123"
7403
+ )
6267
7404
  ```
6268
7405
  </dd>
6269
7406
  </dl>
@@ -6278,7 +7415,7 @@ client.messages.schedules.list
6278
7415
  <dl>
6279
7416
  <dd>
6280
7417
 
6281
- **page_index:** `Integer`
7418
+ **phone_number:** `String`
6282
7419
 
6283
7420
  </dd>
6284
7421
  </dl>
@@ -6286,7 +7423,7 @@ client.messages.schedules.list
6286
7423
  <dl>
6287
7424
  <dd>
6288
7425
 
6289
- **page_size:** `Integer`
7426
+ **client_ref:** `String` — Your correlation ID, such as a user ID, session ID, or case ID.
6290
7427
 
6291
7428
  </dd>
6292
7429
  </dl>
@@ -6294,7 +7431,7 @@ client.messages.schedules.list
6294
7431
  <dl>
6295
7432
  <dd>
6296
7433
 
6297
- **status:** `Pinnacle::Messages::Schedules::Types::ListScheduledMessagesRequestStatus`
7434
+ **format:** `String` — Set to `json` when you want to fetch `jsonUrl` directly from your app and receive a JSON response. Omit this field for the hosted browser/WebView flow.
6298
7435
 
6299
7436
  </dd>
6300
7437
  </dl>
@@ -6302,15 +7439,70 @@ client.messages.schedules.list
6302
7439
  <dl>
6303
7440
  <dd>
6304
7441
 
6305
- **schedule_type:** `Pinnacle::Messages::Schedules::Types::ListScheduledMessagesRequestScheduleType` — Filter by schedule type — "MESSAGE" for individual messages, "BLAST" for bulk sends.
7442
+ **request_options:** `Pinnacle::Network::SilentAuth::RequestOptions`
6306
7443
 
6307
7444
  </dd>
6308
7445
  </dl>
7446
+ </dd>
7447
+ </dl>
7448
+
7449
+
7450
+ </dd>
7451
+ </dl>
7452
+ </details>
6309
7453
 
7454
+ <details><summary><code>client.network.silent_auth.<a href="/lib/pinnacle/network/silent_auth/client.rb">check</a>(request_id, request) -> Pinnacle::Types::SilentAuthCheckResponse</code></summary>
6310
7455
  <dl>
6311
7456
  <dd>
6312
7457
 
6313
- **content:** `String` — Search scheduled message content (partial match, case-insensitive).
7458
+ #### 📝 Description
7459
+
7460
+ <dl>
7461
+ <dd>
7462
+
7463
+ <dl>
7464
+ <dd>
7465
+
7466
+ Complete a Silent Authentication request by exchanging the code returned from the JSON flow. Call this from your server after the user's mobile app fetches `jsonUrl`.
7467
+
7468
+ This endpoint returns a terminal verification result. To inspect pending lifecycle states such as `started` or `challenge-issued`, use [Get Network Request](/api-reference/network/get-network-request).
7469
+
7470
+ <Note>
7471
+ Limited availability. Contact [founders@pinnacle.sh](mailto:founders@pinnacle.sh) to request access.
7472
+ </Note>
7473
+ </dd>
7474
+ </dl>
7475
+ </dd>
7476
+ </dl>
7477
+
7478
+ #### 🔌 Usage
7479
+
7480
+ <dl>
7481
+ <dd>
7482
+
7483
+ <dl>
7484
+ <dd>
7485
+
7486
+ ```ruby
7487
+ client.network.silent_auth.check(
7488
+ request_id: "nar_1234567890ABCDEF",
7489
+ code: "abc123"
7490
+ )
7491
+ ```
7492
+ </dd>
7493
+ </dl>
7494
+ </dd>
7495
+ </dl>
7496
+
7497
+ #### ⚙️ Parameters
7498
+
7499
+ <dl>
7500
+ <dd>
7501
+
7502
+ <dl>
7503
+ <dd>
7504
+
7505
+ **request_id:** `String` — Silent Authentication request ID returned by `POST /network/silent-auth`.
6314
7506
 
6315
7507
  </dd>
6316
7508
  </dl>
@@ -6318,7 +7510,15 @@ client.messages.schedules.list
6318
7510
  <dl>
6319
7511
  <dd>
6320
7512
 
6321
- **request_options:** `Pinnacle::Messages::Schedules::RequestOptions`
7513
+ **code:** `String` — Code returned by the JSON Silent Auth device flow.
7514
+
7515
+ </dd>
7516
+ </dl>
7517
+
7518
+ <dl>
7519
+ <dd>
7520
+
7521
+ **request_options:** `Pinnacle::Network::SilentAuth::RequestOptions`
6322
7522
 
6323
7523
  </dd>
6324
7524
  </dl>
@@ -6330,8 +7530,8 @@ client.messages.schedules.list
6330
7530
  </dl>
6331
7531
  </details>
6332
7532
 
6333
- ## Messages Blasts
6334
- <details><summary><code>client.messages.blasts.<a href="/lib/pinnacle/messages/blasts/client.rb">list</a>(request) -> Pinnacle::Types::ListBlastsResponse</code></summary>
7533
+ ## Network Requests
7534
+ <details><summary><code>client.network.requests.<a href="/lib/pinnacle/network/requests/client.rb">list</a>(request) -> Pinnacle::Types::ListNetworkRequestsResponse</code></summary>
6335
7535
  <dl>
6336
7536
  <dd>
6337
7537
 
@@ -6343,7 +7543,11 @@ client.messages.schedules.list
6343
7543
  <dl>
6344
7544
  <dd>
6345
7545
 
6346
- List all blasts with optional filtering and pagination. Results are sorted by creation date, newest first.
7546
+ List Network API request records for your team, sorted newest first. Use filters to audit recent checks by type, status, or your own `clientRef`.
7547
+
7548
+ <Note>
7549
+ Limited availability. Contact [founders@pinnacle.sh](mailto:founders@pinnacle.sh) to request access.
7550
+ </Note>
6347
7551
  </dd>
6348
7552
  </dl>
6349
7553
  </dd>
@@ -6358,7 +7562,13 @@ List all blasts with optional filtering and pagination. Results are sorted by cr
6358
7562
  <dd>
6359
7563
 
6360
7564
  ```ruby
6361
- client.messages.blasts.list
7565
+ client.network.requests.list(
7566
+ page_index: 0,
7567
+ page_size: 20,
7568
+ type: "silent-auth",
7569
+ status: "completed",
7570
+ client_ref: "user_123"
7571
+ )
6362
7572
  ```
6363
7573
  </dd>
6364
7574
  </dl>
@@ -6373,7 +7583,7 @@ client.messages.blasts.list
6373
7583
  <dl>
6374
7584
  <dd>
6375
7585
 
6376
- **page_index:** `Integer`
7586
+ **page_index:** `Integer` — Zero-based page index. Use 0 for the first page.
6377
7587
 
6378
7588
  </dd>
6379
7589
  </dl>
@@ -6381,7 +7591,7 @@ client.messages.blasts.list
6381
7591
  <dl>
6382
7592
  <dd>
6383
7593
 
6384
- **page_size:** `Integer`
7594
+ **page_size:** `Integer` — Number of records to return, from 1 to 100.
6385
7595
 
6386
7596
  </dd>
6387
7597
  </dl>
@@ -6389,7 +7599,7 @@ client.messages.blasts.list
6389
7599
  <dl>
6390
7600
  <dd>
6391
7601
 
6392
- **audience_id:** `String` — Filter blasts by audience ID.
7602
+ **type:** `Pinnacle::Types::NetworkRequestType`
6393
7603
 
6394
7604
  </dd>
6395
7605
  </dl>
@@ -6397,7 +7607,7 @@ client.messages.blasts.list
6397
7607
  <dl>
6398
7608
  <dd>
6399
7609
 
6400
- **sender:** `String` — Filter blasts that include this sender (phone number or agent ID).
7610
+ **status:** `Pinnacle::Types::NetworkRequestStatus`
6401
7611
 
6402
7612
  </dd>
6403
7613
  </dl>
@@ -6405,7 +7615,7 @@ client.messages.blasts.list
6405
7615
  <dl>
6406
7616
  <dd>
6407
7617
 
6408
- **content:** `String` — Search blast content (partial match, case-insensitive).
7618
+ **client_ref:** `String` — Filter by your correlation ID. Must be 1 to 40 characters when provided.
6409
7619
 
6410
7620
  </dd>
6411
7621
  </dl>
@@ -6413,7 +7623,7 @@ client.messages.blasts.list
6413
7623
  <dl>
6414
7624
  <dd>
6415
7625
 
6416
- **request_options:** `Pinnacle::Messages::Blasts::RequestOptions`
7626
+ **request_options:** `Pinnacle::Network::Requests::RequestOptions`
6417
7627
 
6418
7628
  </dd>
6419
7629
  </dl>
@@ -6425,8 +7635,7 @@ client.messages.blasts.list
6425
7635
  </dl>
6426
7636
  </details>
6427
7637
 
6428
- ## Messages Simulate
6429
- <details><summary><code>client.messages.simulate.<a href="/lib/pinnacle/messages/simulate/client.rb">user</a>(request) -> Pinnacle::Types::SimulateUserResponse</code></summary>
7638
+ <details><summary><code>client.network.requests.<a href="/lib/pinnacle/network/requests/client.rb">get</a>(request_id) -> Pinnacle::Types::NetworkRequestSummary</code></summary>
6430
7639
  <dl>
6431
7640
  <dd>
6432
7641
 
@@ -6438,7 +7647,11 @@ client.messages.blasts.list
6438
7647
  <dl>
6439
7648
  <dd>
6440
7649
 
6441
- Simulate inbound messages and button presses from a user.
7650
+ Retrieve one Network API request by ID. The response includes lifecycle timestamps, request status, your `clientRef`, and result fields from the original check.
7651
+
7652
+ <Note>
7653
+ Limited availability. Contact [founders@pinnacle.sh](mailto:founders@pinnacle.sh) to request access.
7654
+ </Note>
6442
7655
  </dd>
6443
7656
  </dl>
6444
7657
  </dd>
@@ -6453,13 +7666,7 @@ Simulate inbound messages and button presses from a user.
6453
7666
  <dd>
6454
7667
 
6455
7668
  ```ruby
6456
- client.messages.simulate.user(
6457
- from: "+14155551234",
6458
- to: "+14155555678",
6459
- message: {
6460
- text: "Hello from the test user!"
6461
- }
6462
- )
7669
+ client.network.requests.get(request_id: "nar_1234567890ABCDEF")
6463
7670
  ```
6464
7671
  </dd>
6465
7672
  </dl>
@@ -6474,7 +7681,7 @@ client.messages.simulate.user(
6474
7681
  <dl>
6475
7682
  <dd>
6476
7683
 
6477
- **request:** `Pinnacle::Types::SimulateUserParams`
7684
+ **request_id:** `String` — Network API request ID returned by a Network API endpoint.
6478
7685
 
6479
7686
  </dd>
6480
7687
  </dl>
@@ -6482,7 +7689,7 @@ client.messages.simulate.user(
6482
7689
  <dl>
6483
7690
  <dd>
6484
7691
 
6485
- **request_options:** `Pinnacle::Messages::Simulate::RequestOptions`
7692
+ **request_options:** `Pinnacle::Network::Requests::RequestOptions`
6486
7693
 
6487
7694
  </dd>
6488
7695
  </dl>