sendly 4.5.0__tar.gz → 4.5.1__tar.gz

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 (72) hide show
  1. {sendly-4.5.0 → sendly-4.5.1}/PKG-INFO +13 -10
  2. {sendly-4.5.0 → sendly-4.5.1}/README.md +12 -9
  3. {sendly-4.5.0 → sendly-4.5.1}/pyproject.toml +1 -1
  4. {sendly-4.5.0 → sendly-4.5.1}/sendly/__init__.py +1 -1
  5. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/whatsapp.py +23 -17
  6. {sendly-4.5.0 → sendly-4.5.1}/sendly/utils/http.py +1 -1
  7. {sendly-4.5.0 → sendly-4.5.1}/tests/test_whatsapp_extras.py +4 -2
  8. {sendly-4.5.0 → sendly-4.5.1}/.github/header.svg +0 -0
  9. {sendly-4.5.0 → sendly-4.5.1}/.gitignore +0 -0
  10. {sendly-4.5.0 → sendly-4.5.1}/CHANGELOG.md +0 -0
  11. {sendly-4.5.0 → sendly-4.5.1}/examples/async_example.py +0 -0
  12. {sendly-4.5.0 → sendly-4.5.1}/examples/error_handling.py +0 -0
  13. {sendly-4.5.0 → sendly-4.5.1}/examples/send_sms.py +0 -0
  14. {sendly-4.5.0 → sendly-4.5.1}/sendly/client.py +0 -0
  15. {sendly-4.5.0 → sendly-4.5.1}/sendly/errors.py +0 -0
  16. {sendly-4.5.0 → sendly-4.5.1}/sendly/py.typed +0 -0
  17. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/__init__.py +0 -0
  18. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/account.py +0 -0
  19. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/business_upgrade.py +0 -0
  20. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/calls.py +0 -0
  21. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/campaigns.py +0 -0
  22. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/contacts.py +0 -0
  23. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/conversations.py +0 -0
  24. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/drafts.py +0 -0
  25. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/enterprise.py +0 -0
  26. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/labels.py +0 -0
  27. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/links.py +0 -0
  28. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/media.py +0 -0
  29. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/messages.py +0 -0
  30. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/numbers.py +0 -0
  31. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/rcs.py +0 -0
  32. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/rules.py +0 -0
  33. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/templates.py +0 -0
  34. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/tendlc.py +0 -0
  35. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/verify.py +0 -0
  36. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/voice.py +0 -0
  37. {sendly-4.5.0 → sendly-4.5.1}/sendly/resources/webhooks.py +0 -0
  38. {sendly-4.5.0 → sendly-4.5.1}/sendly/types.py +0 -0
  39. {sendly-4.5.0 → sendly-4.5.1}/sendly/utils/__init__.py +0 -0
  40. {sendly-4.5.0 → sendly-4.5.1}/sendly/utils/validation.py +0 -0
  41. {sendly-4.5.0 → sendly-4.5.1}/sendly/webhooks.py +0 -0
  42. {sendly-4.5.0 → sendly-4.5.1}/tests/conftest.py +0 -0
  43. {sendly-4.5.0 → sendly-4.5.1}/tests/test_account.py +0 -0
  44. {sendly-4.5.0 → sendly-4.5.1}/tests/test_async_client.py +0 -0
  45. {sendly-4.5.0 → sendly-4.5.1}/tests/test_calls.py +0 -0
  46. {sendly-4.5.0 → sendly-4.5.1}/tests/test_campaigns.py +0 -0
  47. {sendly-4.5.0 → sendly-4.5.1}/tests/test_client.py +0 -0
  48. {sendly-4.5.0 → sendly-4.5.1}/tests/test_contacts.py +0 -0
  49. {sendly-4.5.0 → sendly-4.5.1}/tests/test_conversations.py +0 -0
  50. {sendly-4.5.0 → sendly-4.5.1}/tests/test_enterprise.py +0 -0
  51. {sendly-4.5.0 → sendly-4.5.1}/tests/test_errors.py +0 -0
  52. {sendly-4.5.0 → sendly-4.5.1}/tests/test_http_body_kwarg.py +0 -0
  53. {sendly-4.5.0 → sendly-4.5.1}/tests/test_http_retry.py +0 -0
  54. {sendly-4.5.0 → sendly-4.5.1}/tests/test_idempotency.py +0 -0
  55. {sendly-4.5.0 → sendly-4.5.1}/tests/test_media.py +0 -0
  56. {sendly-4.5.0 → sendly-4.5.1}/tests/test_messages.py +0 -0
  57. {sendly-4.5.0 → sendly-4.5.1}/tests/test_messages.py.bak +0 -0
  58. {sendly-4.5.0 → sendly-4.5.1}/tests/test_messages_batch.py +0 -0
  59. {sendly-4.5.0 → sendly-4.5.1}/tests/test_messages_schedule.py +0 -0
  60. {sendly-4.5.0 → sendly-4.5.1}/tests/test_messages_wire.py +0 -0
  61. {sendly-4.5.0 → sendly-4.5.1}/tests/test_numbers.py +0 -0
  62. {sendly-4.5.0 → sendly-4.5.1}/tests/test_path_ids.py +0 -0
  63. {sendly-4.5.0 → sendly-4.5.1}/tests/test_rcs.py +0 -0
  64. {sendly-4.5.0 → sendly-4.5.1}/tests/test_rcs_registration.py +0 -0
  65. {sendly-4.5.0 → sendly-4.5.1}/tests/test_rules.py +0 -0
  66. {sendly-4.5.0 → sendly-4.5.1}/tests/test_templates.py +0 -0
  67. {sendly-4.5.0 → sendly-4.5.1}/tests/test_tendlc.py +0 -0
  68. {sendly-4.5.0 → sendly-4.5.1}/tests/test_validation.py +0 -0
  69. {sendly-4.5.0 → sendly-4.5.1}/tests/test_voice.py +0 -0
  70. {sendly-4.5.0 → sendly-4.5.1}/tests/test_webhooks.py +0 -0
  71. {sendly-4.5.0 → sendly-4.5.1}/tests/test_webhooks_resource.py +0 -0
  72. {sendly-4.5.0 → sendly-4.5.1}/tests/test_whatsapp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sendly
3
- Version: 4.5.0
3
+ Version: 4.5.1
4
4
  Summary: Official Sendly Python SDK for SMS messaging
5
5
  Project-URL: Homepage, https://sendly.live
6
6
  Project-URL: Documentation, https://sendly.live/docs
@@ -448,7 +448,7 @@ File uploads (`media.upload()`, `business_upgrade.start()` and `resubmit()`,
448
448
  make is the `too_many_concurrent_verifications` wait. `whatsapp.signup.verify()`
449
449
  and `whatsapp.signup.create()` with a `business_account_id` also raise a
450
450
  timeout, a network error or a `5xx` at once, because repeating them can use up
451
- a verification attempt or start a new signup; they still wait out a
451
+ a verification attempt or start a new charged signup; they still wait out a
452
452
  `429` the API never ran.
453
453
 
454
454
  After the last attempt the SDK raises the error it last saw (`TimeoutError`,
@@ -1355,7 +1355,7 @@ client.links.update(link.code, True)
1355
1355
 
1356
1356
  ## WhatsApp
1357
1357
 
1358
- Connect a number you own to WhatsApp (free to connect, no monthly fee), create
1358
+ Connect a number you own to WhatsApp ($9.99 one-time, no monthly fee), create
1359
1359
  Meta-reviewed message templates, and send on the `whatsapp` channel. Connecting
1360
1360
  the first number always ends with a human step: hand the `connect_url` to your
1361
1361
  user - they open it in a browser and log in with Facebook to link their
@@ -1387,8 +1387,11 @@ print(f'Open {signup.connect_url} and log in with Facebook')
1387
1387
  # After the Facebook step it stays 'registering' while WhatsApp activates the
1388
1388
  # number. Activation usually takes a few minutes but can take hours. If it
1389
1389
  # hasn't finished about 6 hours after the session began, the session fails
1390
- # with registration_timeout ('failed', with signup.failure_reasons explaining
1391
- # why).
1390
+ # with registration_timeout and the fee is refunded ('failed', with
1391
+ # signup.failure_reasons explaining why). The one-time $9.99 connection fee is
1392
+ # charged to your card when you start connecting the number and refunded
1393
+ # automatically if the connection fails; it is not refundable once the number
1394
+ # is connected.
1392
1395
 
1393
1396
  # 2. Create a template (Meta reviews it, usually 24-48h). category is required
1394
1397
  # (UTILITY, AUTHENTICATION or MARKETING) with no default, and an update can't
@@ -1472,7 +1475,7 @@ components = client.whatsapp.senders.get_conversational_components('+15555550123
1472
1475
  client.whatsapp.senders.set_calling('+15555550123', enabled=True)
1473
1476
 
1474
1477
  # Add another number to an account you already connected: no Facebook step.
1475
- # Free, like a Facebook connection. WhatsApp sends the number a 6-digit code
1478
+ # Same $9.99 fee, refunded if it fails. WhatsApp sends the number a 6-digit code
1476
1479
  senders = client.whatsapp.senders.list().senders
1477
1480
  account_id = next(
1478
1481
  s.business_account_id for s in senders if s.status == 'active' and s.business_account_id
@@ -1496,7 +1499,7 @@ Senders also carry `business_account_id` (None while `pending`),
1496
1499
  name on file), `calling_enabled`, and `outbound_calling_allowed`, which is
1497
1500
  False for +1, +20, +84 and +234 numbers. A signup that is `verifying` carries
1498
1501
  `verification_method` and `verification_attempts_remaining`; after 5 wrong
1499
- codes it fails with `verification_failed`. Calls carry
1502
+ codes it fails with `verification_failed` and the fee is refunded. Calls carry
1500
1503
  `channel` (`phone`, `whatsapp` or `browser`; see `CallChannel`).
1501
1504
 
1502
1505
  `verification_code` comes only from `signup.get()`. Until a code has been
@@ -1529,7 +1532,7 @@ Errors specific to WhatsApp:
1529
1532
  body carries `retryAfter: 3600` and the response a `Retry-After: 3600`
1530
1533
  header. The SDK retries it like any `5xx` before raising;
1531
1534
  `e.response.retry_after` says how many seconds to wait before trying again.
1532
- - `whatsapp_signup_limit_reached` (HTTP 429) after 5 failed signups in
1535
+ - `whatsapp_signup_limit_reached` (HTTP 429) after 5 failed, charged signups in
1533
1536
  24 hours. It is final and not retried; try again the next day.
1534
1537
  - `whatsapp_send_failed` on a send: HTTP 422 when WhatsApp refused the message,
1535
1538
  which is final (cached under the idempotency key and replayed for 24 hours),
@@ -1565,8 +1568,8 @@ Errors specific to WhatsApp:
1565
1568
  - Adding a number by code: `whatsapp_business_account_not_found` (HTTP 404),
1566
1569
  `display_name_required` (HTTP 400), `whatsapp_signup_in_progress` and
1567
1570
  `whatsapp_already_enabled` (HTTP 409), and
1568
- `whatsapp_verification_start_failed` (HTTP 422 refused, 503 unreachable). A
1569
- Facebook `signup.create()` for a number being
1571
+ `whatsapp_verification_start_failed` (HTTP 422 refused, 503 unreachable; the
1572
+ fee is refunded either way). A Facebook `signup.create()` for a number being
1570
1573
  added by code gets `whatsapp_verification_in_progress` (HTTP 409).
1571
1574
  `verify()`: `invalid_verification_code` (HTTP 400, not 6 digits),
1572
1575
  `whatsapp_verification_code_invalid` (HTTP 422, with
@@ -413,7 +413,7 @@ File uploads (`media.upload()`, `business_upgrade.start()` and `resubmit()`,
413
413
  make is the `too_many_concurrent_verifications` wait. `whatsapp.signup.verify()`
414
414
  and `whatsapp.signup.create()` with a `business_account_id` also raise a
415
415
  timeout, a network error or a `5xx` at once, because repeating them can use up
416
- a verification attempt or start a new signup; they still wait out a
416
+ a verification attempt or start a new charged signup; they still wait out a
417
417
  `429` the API never ran.
418
418
 
419
419
  After the last attempt the SDK raises the error it last saw (`TimeoutError`,
@@ -1320,7 +1320,7 @@ client.links.update(link.code, True)
1320
1320
 
1321
1321
  ## WhatsApp
1322
1322
 
1323
- Connect a number you own to WhatsApp (free to connect, no monthly fee), create
1323
+ Connect a number you own to WhatsApp ($9.99 one-time, no monthly fee), create
1324
1324
  Meta-reviewed message templates, and send on the `whatsapp` channel. Connecting
1325
1325
  the first number always ends with a human step: hand the `connect_url` to your
1326
1326
  user - they open it in a browser and log in with Facebook to link their
@@ -1352,8 +1352,11 @@ print(f'Open {signup.connect_url} and log in with Facebook')
1352
1352
  # After the Facebook step it stays 'registering' while WhatsApp activates the
1353
1353
  # number. Activation usually takes a few minutes but can take hours. If it
1354
1354
  # hasn't finished about 6 hours after the session began, the session fails
1355
- # with registration_timeout ('failed', with signup.failure_reasons explaining
1356
- # why).
1355
+ # with registration_timeout and the fee is refunded ('failed', with
1356
+ # signup.failure_reasons explaining why). The one-time $9.99 connection fee is
1357
+ # charged to your card when you start connecting the number and refunded
1358
+ # automatically if the connection fails; it is not refundable once the number
1359
+ # is connected.
1357
1360
 
1358
1361
  # 2. Create a template (Meta reviews it, usually 24-48h). category is required
1359
1362
  # (UTILITY, AUTHENTICATION or MARKETING) with no default, and an update can't
@@ -1437,7 +1440,7 @@ components = client.whatsapp.senders.get_conversational_components('+15555550123
1437
1440
  client.whatsapp.senders.set_calling('+15555550123', enabled=True)
1438
1441
 
1439
1442
  # Add another number to an account you already connected: no Facebook step.
1440
- # Free, like a Facebook connection. WhatsApp sends the number a 6-digit code
1443
+ # Same $9.99 fee, refunded if it fails. WhatsApp sends the number a 6-digit code
1441
1444
  senders = client.whatsapp.senders.list().senders
1442
1445
  account_id = next(
1443
1446
  s.business_account_id for s in senders if s.status == 'active' and s.business_account_id
@@ -1461,7 +1464,7 @@ Senders also carry `business_account_id` (None while `pending`),
1461
1464
  name on file), `calling_enabled`, and `outbound_calling_allowed`, which is
1462
1465
  False for +1, +20, +84 and +234 numbers. A signup that is `verifying` carries
1463
1466
  `verification_method` and `verification_attempts_remaining`; after 5 wrong
1464
- codes it fails with `verification_failed`. Calls carry
1467
+ codes it fails with `verification_failed` and the fee is refunded. Calls carry
1465
1468
  `channel` (`phone`, `whatsapp` or `browser`; see `CallChannel`).
1466
1469
 
1467
1470
  `verification_code` comes only from `signup.get()`. Until a code has been
@@ -1494,7 +1497,7 @@ Errors specific to WhatsApp:
1494
1497
  body carries `retryAfter: 3600` and the response a `Retry-After: 3600`
1495
1498
  header. The SDK retries it like any `5xx` before raising;
1496
1499
  `e.response.retry_after` says how many seconds to wait before trying again.
1497
- - `whatsapp_signup_limit_reached` (HTTP 429) after 5 failed signups in
1500
+ - `whatsapp_signup_limit_reached` (HTTP 429) after 5 failed, charged signups in
1498
1501
  24 hours. It is final and not retried; try again the next day.
1499
1502
  - `whatsapp_send_failed` on a send: HTTP 422 when WhatsApp refused the message,
1500
1503
  which is final (cached under the idempotency key and replayed for 24 hours),
@@ -1530,8 +1533,8 @@ Errors specific to WhatsApp:
1530
1533
  - Adding a number by code: `whatsapp_business_account_not_found` (HTTP 404),
1531
1534
  `display_name_required` (HTTP 400), `whatsapp_signup_in_progress` and
1532
1535
  `whatsapp_already_enabled` (HTTP 409), and
1533
- `whatsapp_verification_start_failed` (HTTP 422 refused, 503 unreachable). A
1534
- Facebook `signup.create()` for a number being
1536
+ `whatsapp_verification_start_failed` (HTTP 422 refused, 503 unreachable; the
1537
+ fee is refunded either way). A Facebook `signup.create()` for a number being
1535
1538
  added by code gets `whatsapp_verification_in_progress` (HTTP 409).
1536
1539
  `verify()`: `invalid_verification_code` (HTTP 400, not 6 digits),
1537
1540
  `whatsapp_verification_code_invalid` (HTTP 422, with
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sendly"
7
- version = "4.5.0"
7
+ version = "4.5.1"
8
8
  description = "Official Sendly Python SDK for SMS messaging"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -29,7 +29,7 @@ Async Example:
29
29
  >>> asyncio.run(main())
30
30
  """
31
31
 
32
- __version__ = "4.5.0"
32
+ __version__ = "4.5.1"
33
33
 
34
34
  # Main clients
35
35
  from .client import AsyncSendly, Sendly
@@ -5,7 +5,7 @@ WhatsApp is a first-class Sendly channel: connect a number you own, create
5
5
  Meta-reviewed message templates, and send via
6
6
  ``client.messages.send(channel='whatsapp', ...)``.
7
7
 
8
- Connecting a number is free (no setup or monthly fee) and always ends
8
+ Connecting a number costs a one-time $9.99 fee (no monthly fee) and always ends
9
9
  with a human step: ``signup.create()`` returns a ``connect_url`` that a person
10
10
  must open in a browser and log in with Facebook to link their WhatsApp
11
11
  Business Account. Hand the URL to your user - that connection cannot be
@@ -99,35 +99,41 @@ class WhatsAppSignupResource:
99
99
  ) -> Union[WhatsAppSignupSession, WhatsAppSignup]:
100
100
  """Start connecting a number to WhatsApp.
101
101
 
102
- Connecting a number is free (no setup or monthly fee). Returns a
102
+ Charges a one-time $9.99 connection fee per number (no monthly fee) to
103
+ your card when the connection starts, and returns a
103
104
  ``connect_url``. Completing the connection requires a human: hand the
104
105
  URL to your user - they open it in a browser and log in with Facebook
105
106
  to link their WhatsApp Business Account. Then poll :meth:`get` until
106
107
  the status is ``active``.
107
108
 
108
109
  Calling again for a number with an in-flight signup returns the
109
- existing signup (same ``connect_url``).
110
+ existing signup (same ``connect_url``) without charging again.
110
111
  Requires a live API key with the ``whatsapp:write`` scope and, in a
111
112
  team workspace, an owner or admin (``settings:write``). After the
112
113
  Facebook step the signup stays ``registering`` while WhatsApp
113
114
  activates the number. Activation usually takes a few minutes but can
114
115
  take hours. If it hasn't finished about 6 hours after the session
115
- began, the session fails with ``registration_timeout``.
116
+ began, the session fails with ``registration_timeout`` and the fee is
117
+ refunded. If the connection fails, the $9.99 fee is refunded
118
+ automatically; once the number has connected it is not refundable, and
119
+ a later disconnect gets nothing back.
116
120
 
117
121
  Pass ``business_account_id`` to add the number to a WhatsApp
118
122
  Business Account this workspace has already connected, without the
119
- Facebook step. It is free too: WhatsApp sends the number a 6-digit
120
- code by text or voice call. This returns a :class:`WhatsAppSignup` with status
123
+ Facebook step. The same $9.99 fee applies (refunded automatically if the
124
+ connection fails), then WhatsApp sends the number a 6-digit code by
125
+ text or voice call. This returns a :class:`WhatsAppSignup` with status
121
126
  ``verifying`` and no ``connect_url``: submit the code with
122
127
  :meth:`verify`, or read it from :meth:`get` as ``verification_code``
123
128
  once the text reaches the number. Calling again for a number that is
124
- already verifying returns that signup without a second code, with
125
- two exceptions: if the first call stopped before
129
+ already verifying returns that signup without a second charge or a
130
+ second code, with two exceptions: if the first call stopped before
126
131
  the code was requested, the repeat requests it (201); and a verifying
127
- signup more than 3 hours old is failed and a new one is started. With ``business_account_id`` a 5xx, a timeout or a
132
+ signup more than 3 hours old is failed and refunded, and a new charged
133
+ one is started. With ``business_account_id`` a 5xx, a timeout or a
128
134
  network error is raised at once, never retried: each attempt can
129
- start a new signup and ask WhatsApp for another code. Only a 429 the
130
- API never ran is retried.
135
+ start a new signup that is charged and, when it fails, refunded. Only
136
+ a 429 the API never ran is retried.
131
137
 
132
138
  Args:
133
139
  phone_number: The number to connect, in E.164 format. Must be an
@@ -164,12 +170,12 @@ class WhatsAppSignupResource:
164
170
  lacks ``whatsapp:write`` or the role isn't owner or admin.
165
171
  SendlyError: ``whatsapp_requires_live_key`` (403) with a test key.
166
172
  SendlyError: ``whatsapp_unavailable`` (503) while WhatsApp
167
- connections are unavailable. Only signup
173
+ connections are unavailable. Nothing is charged. Only signup
168
174
  returns it, with ``retryAfter: 3600`` in the body and a
169
175
  ``Retry-After: 3600`` header. The SDK retries it like any 5xx
170
176
  before raising.
171
177
  SendlyError: ``whatsapp_signup_limit_reached`` (429) after 5
172
- failed signups (or 20 cancelled) in 24 hours. Not retried;
178
+ failed, charged signups (or 20 cancelled) in 24 hours. Not retried;
173
179
  try again the next day.
174
180
  SendlyError: ``whatsapp_verification_in_progress`` (409) without
175
181
  ``business_account_id`` for a number being added by code;
@@ -184,8 +190,8 @@ class WhatsAppSignupResource:
184
190
  ``whatsapp_already_enabled`` (409) when it is connected.
185
191
  SendlyError: ``whatsapp_verification_start_failed``: 422 when
186
192
  WhatsApp refused to send a code (final), 503 when it couldn't
187
- be reached. Either way the signup failed; start again. Not
188
- retried automatically.
193
+ be reached. Either way the signup failed and the fee is
194
+ refunded; start again. Not retried automatically.
189
195
  """
190
196
  validate_phone_number(phone_number)
191
197
  body = _signup_body(phone_number, business_account_id, verification_method, display_name)
@@ -228,7 +234,7 @@ class WhatsAppSignupResource:
228
234
  wrong code; ``e.response.attempts_remaining`` says how many
229
235
  tries are left.
230
236
  SendlyError: ``whatsapp_verification_failed`` (409) after 5 wrong
231
- codes: the signup failed.
237
+ codes: the signup failed and the fee is refunded.
232
238
  SendlyError: ``whatsapp_verification_busy`` (409) while another
233
239
  code for the number is being checked; try again in a moment.
234
240
  SendlyError: ``signup_not_active`` (409) when the signup isn't
@@ -766,7 +772,7 @@ class WhatsAppResource:
766
772
  """WhatsApp API resource (sync)
767
773
 
768
774
  Example:
769
- >>> # 1. Connect a number (free, no monthly fee). The connect
775
+ >>> # 1. Connect a number ($9.99 one-time, no monthly fee). The connect
770
776
  >>> # URL must be opened by a human - they log in with Facebook in
771
777
  >>> # a browser to link their WhatsApp Business Account.
772
778
  >>> signup = client.whatsapp.signup.create('+15559876543')
@@ -28,7 +28,7 @@ T = TypeVar("T")
28
28
  DEFAULT_BASE_URL = "https://sendly.live/api/v1"
29
29
  DEFAULT_TIMEOUT = 30.0
30
30
  DEFAULT_MAX_RETRIES = 3
31
- SDK_VERSION = "4.5.0"
31
+ SDK_VERSION = "4.5.1"
32
32
 
33
33
 
34
34
  _WAIT_AND_RETRY_CODES = (
@@ -892,7 +892,8 @@ def no_async_sleep(monkeypatch):
892
892
  START_FAILED = {
893
893
  "error": "whatsapp_verification_start_failed",
894
894
  "message": (
895
- "WhatsApp couldn't start verifying this number. Please try again shortly."
895
+ "WhatsApp couldn't start verifying this number. Any setup fee is refunded "
896
+ "automatically. Please try again shortly."
896
897
  ),
897
898
  }
898
899
 
@@ -943,7 +944,8 @@ class TestServerErrorsOnCallsThatMustNotRepeat:
943
944
  json={
944
945
  "error": "internal_error",
945
946
  "message": (
946
- "Something went wrong asking WhatsApp for the code. Please try again."
947
+ "Something went wrong asking WhatsApp for the code. Any setup fee is "
948
+ "refunded automatically. Please try again."
947
949
  ),
948
950
  },
949
951
  is_reusable=True,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes