---
title: "Errors"
description: "What the SDK raises, and what to do about it."
url: "https://docs.goomzo.africa/docs/developers/python-sdk/errors"
docs_index: /llms.txt
lastUpdated: 2026-11-12
section: "Reference"
related:
  - /docs/developers/python-sdk/lists
  - /docs/developers/python-sdk/resources
---

> For an index of all documentation, see [/llms.txt](https://docs.goomzo.africa/llms.txt). Any page is also available as Markdown by adding .md to its URL.

# Errors

> What the SDK raises, and what to do about it.

The SDK raises one of three errors. The API's own codes are listed in [Errors](https://docs.goomzo.africa/docs/developers/errors?utm_source=llms&utm_medium=ai).

| Error                      | When                                                     |
| -------------------------- | -------------------------------------------------------- |
| `GoomzoError`              | The API answered with an error.                          |
| `GoomzoConnectionError`    | No answer came: the network failed, or it took too long. |
| `WebhookVerificationError` | A webhook's signature or timestamp didn't check out.     |

## Handle an error

```python
from goomzo import GoomzoError

try:
    goomzo.messages.send_one({'to': '0712345678', 'channel': 'sms', 'content': {'text': 'Hi'}})
except GoomzoError as error:
    if error.code == 'invalid':
        print(error.fields)  # {'messages[0].to': {'code': 'invalid', 'message': 'Add the country code…'}}
    raise
```

| Attribute    | Description                                                                          |
| ------------ | ------------------------------------------------------------------------------------ |
| `status`     | _int._ The HTTP status, such as `400`.                                               |
| `code`       | _str._ What went wrong, such as `invalid`, `not_found` or `insufficient_sms`.        |
| `message`    | _str._ What the API said, in words.                                                  |
| `fields`     | _dict._ The fields that were wrong, by where they are, such as `customers[1].phone`. |
| `request_id` | _str._ The request's id. Include it when you contact Goomzo.                         |

`GoomzoConnectionError` has `timed_out`, `True` when the request took longer than the `timeout`.

## Retries

Network errors, `429` and `5xx` are tried again before anything is raised, twice by default, waiting as long as
the API asks. Every `POST` carries the same `Idempotency-Key` on each try, so nothing is done twice.

## Next steps

- [Configuration](https://docs.goomzo.africa/docs/developers/python-sdk/configuration?utm_source=llms&utm_medium=ai)
- [Errors in the API](https://docs.goomzo.africa/docs/developers/errors?utm_source=llms&utm_medium=ai)

---

For an index of all available documentation, see [/llms.txt](https://docs.goomzo.africa/llms.txt)
