# Quickstart

> **TL;DR** — Sign up, copy your test key, and POST one request with an `Idempotency-Key` and an `end_user_id`. Poll the `status_url` until the run is final.

Run your first style in three steps. Calls go from your server to `https://api.wandura.ai` with an API key.

## 1. Sign up
[Sign up](https://open.wandura.ai/login) with your email. You get a personal account, a **Test** product with a test key, and a **My app** product for live runs.

## 2. Get a key
Your test key (`wdr_test_…`) is shown once when you sign up. Test keys return a sample result for **$0**, so you can build the whole integration before adding money. Live keys (`wdr_live_…`) run for real and draw from the product wallet. Keep keys on your server:

```bash
export WANDURA_API_KEY=wdr_test_...
```

## 3. Send your first request
Every submit needs an `Idempotency-Key` header and an `end_user_id` (the person in your app) in the body.

```bash
curl -X POST https://api.wandura.ai/v2/styles/sty_ghibli_portrait \
  -H "Authorization: Bearer $WANDURA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"lane": "priority", "end_user_id": "user_123", "inputs": {"subject": "a girl smiling at the camera"}}'
```

With the [SDKs](https://docs.wandura.ai/developers/api-v2/sdks):

```ts
import { Wandura } from '@wandura/sdk';

const wandura = new Wandura(); // reads WANDURA_API_KEY
const run = await wandura.runs.createAndWait('sty_ghibli_portrait', {
  lane: 'priority',
  end_user_id: 'user_123',
  inputs: { subject: 'a girl smiling at the camera' },
});
console.log(run.status, run.output?.[0]?.url);
```

```python
from wandura import Wandura

wandura = Wandura()  # reads WANDURA_API_KEY
run = wandura.runs.create_and_wait("sty_ghibli_portrait", {
    "lane": "priority",
    "end_user_id": "user_123",
    "inputs": {"subject": "a girl smiling at the camera"},
})
print(run["status"], run.get("output"))
```

The response is a run with `request_id`, `status_url` and `cancel_url`. Poll `status_url` or get a [signed webhook](https://docs.wandura.ai/developers/api-v2/concepts#webhooks) when it finishes.

## Poll for the result
```bash
curl https://api.wandura.ai/v2/runs/run_Qk2m9XaB7Lc4 -H "Authorization: Bearer $WANDURA_API_KEY"
```

Priority: start at **2 s**, multiply by 1.5, cap at **10 s**, add 0–0.5 s of random jitter. Relax: 10 s up to 60 s. Final statuses: `completed`, `failed`, `nsfw`, `canceled`.

## Next
- [Concepts](https://docs.wandura.ai/developers/api-v2/concepts): runs, lanes, free runs, webhooks, limits, idempotency, end-user ID.
- [Styles reference](https://docs.wandura.ai/developers/api-v2/styles): every style with its inputs and price.
- [SDKs](https://docs.wandura.ai/developers/api-v2/sdks): official JavaScript and Python clients that do all of this for you.
- Building with an AI agent? Give it `https://api.wandura.ai/v2/openapi.json`.
