> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useqrkit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Create your first QR code in 5 minutes

## 1. Get your API key

Sign in to QRKit and open [**Dashboard → API Keys**](https://useqrkit.com/dashboard/api-keys). Create a new key with `qr:read` and `qr:write` scopes (API access is included on all paid plans).

<Warning>
  Your full API key is only shown once at creation. Copy it and store it securely.
</Warning>

## 2. Create a QR code

Make your first API call to create a dynamic QR code:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.useqrkit.com/v1/qr-codes \
    -H "Authorization: Bearer qr_live_your_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "My Website",
      "type": "dynamic",
      "target": {
        "type": "url",
        "destination": "https://example.com"
      }
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.useqrkit.com/v1/qr-codes",
      headers={
          "Authorization": "Bearer qr_live_your_key_here",
          "Content-Type": "application/json",
      },
      json={
          "name": "My Website",
          "type": "dynamic",
          "target": {
              "type": "url",
              "destination": "https://example.com",
          },
      },
  )

  qr_code = response.json()
  print(qr_code["id"])
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://api.useqrkit.com/v1/qr-codes", {
    method: "POST",
    headers: {
      Authorization: "Bearer qr_live_your_key_here",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      name: "My Website",
      type: "dynamic",
      target: {
        type: "url",
        destination: "https://example.com",
      },
    }),
  });

  const qrCode = await response.json();
  console.log(qrCode.id);
  ```
</CodeGroup>

## 3. View the response

A successful request returns the created QR code object:

```json theme={null}
{
  "id": "qr_123",
  "object": "qr_code",
  "kind": "dynamic",
  "name": "My Website",
  "type": "url",
  "short_code": "AB3D5",
  "short_url": "https://scan.useqrkit.com/AB3D5",
  "target": {
    "type": "url",
    "destination": "https://example.com"
  },
  "design": {
    "colors": { "foreground": "#000000", "background": "#ffffff" },
    "gradient": null,
    "shapes": { "body": "square", "eye_frame": "square", "eye_ball": "square" },
    "eye_colors": null,
    "has_logo": false,
    "transparent_background": false
  },
  "folder_id": null,
  "tags": [],
  "image_url": "https://img.useqrkit.com/qr-AB3D5-1717000000000.svg",
  "download_url": "/v1/qr-codes/qr_123/download",
  "is_active": true,
  "scan_count": 0,
  "utm": null,
  "created_at": "2026-01-15T10:30:00Z",
  "updated_at": "2026-01-15T10:30:00Z"
}
```

<Tip>
  The QR image itself encodes `short_url` — print it once and change the
  destination any time with [Update QR Code](/api-reference/qr-codes/update).
  WiFi, email, SMS, text and event codes are **static** instead: the payload
  is encoded directly into the image (no `short_url`, no scan tracking) and
  their ids start with `sqr_`.
</Tip>

## 4. Download the image

Download the QR code image in SVG or PNG format:

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.useqrkit.com/v1/qr-codes/qr_123/download?format=png&size=500 \
    -H "Authorization: Bearer qr_live_your_key_here" \
    --output qrcode.png
  ```

  ```python Python theme={null}
  response = requests.get(
      "https://api.useqrkit.com/v1/qr-codes/qr_123/download",
      headers={"Authorization": "Bearer qr_live_your_key_here"},
      params={"format": "png", "size": 500},
  )

  with open("qrcode.png", "wb") as f:
      f.write(response.content)
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    "https://api.useqrkit.com/v1/qr-codes/qr_123/download?format=png&size=500",
    {
      headers: { Authorization: "Bearer qr_live_your_key_here" },
    }
  );

  const buffer = await response.arrayBuffer();
  ```
</CodeGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/authentication">
    Learn about API key scopes and environments.
  </Card>

  <Card title="Custom Designs" icon="palette" href="/api-reference/qr-codes/create">
    Customize colors, shapes, and logos.
  </Card>

  <Card title="Error Handling" icon="triangle-exclamation" href="/errors">
    Handle errors gracefully in your integration.
  </Card>

  <Card title="Rate Limits" icon="gauge" href="/rate-limiting">
    Understand rate limits for your plan.
  </Card>
</CardGroup>
