<!-- https://cutedyno.com/docs/sdks -->

# SDKs

Official clients, and what to do when there is not one for your language.

## Node.js

```bash
npm install @cutedyno/node
```

```typescript
import { CuteDyno } from '@cutedyno/node';

const cutedyno = new CuteDyno(); // reads CUTEDYNO_API_KEY
```

Built in:

- Retries on `429` and `5xx` (honours `Retry-After`)
- Idempotency keys on writes
- `onRateLimit` callback
- `media.upload` (presign + PUT) and `media.createUploadSession` (browser upload for agents)
- `analytics.get` and `analytics.history`
- Webhook signature verify
- Async iterators for pagination

```typescript
const cutedyno = new CuteDyno({
  apiKey: process.env.CUTEDYNO_API_KEY,
  profileId: 'prof_customer_42',
  onRateLimit: ({ remaining }) => {
    metrics.gauge('cutedyno.rate_limit.remaining', remaining);
  },
});
```

Errors are `CuteDynoError` with a stable `code`. See [Errors](/docs/errors).

## Other languages

Generate from OpenAPI:

```bash
# Python example
pip install openapi-python-client
openapi-python-client generate --url https://cutedyno.com/docs/api/openapi.json
```

Always:

1. Send `Idempotency-Key` on writes
2. Retry only `429` and `5xx`
3. Branch on `error.code`, not `error.message`
4. Log `requestId` from failures

## Agents

Prefer [MCP](/docs/mcp) or the [CLI](/docs/cli) instead of hand-rolling HTTP in an agent loop.
