# SDKs

All five SDKs are generated from the OpenAPI specification with hand-written ergonomics on top. Each ships with typed models, automatic retry with jitter on 429 and 5xx but never on 4xx, built-in idempotency key generation for send(), a webhook signature verification helper, and a test-mode client that requires no network at all.

```bash
npm install @mailhaap/node
pip install mailhaap
go get github.com/mailhaap/mailhaap-go
composer require mailhaap/mailhaap
gem install mailhaap
```

> **Retry on 429 and 5xx, never on 4xx** — A 4xx means the request was wrong and will be wrong again. Retrying it wastes your rate limit and, on a send endpoint, is how a bug becomes an incident. The SDKs enforce this so you do not have to remember it.
